如果段落在 PdfPCell 中换行,如何保持缩进?

Posted

技术标签:

【中文标题】如果段落在 PdfPCell 中换行,如何保持缩进?【英文标题】:How to maintain indentation if a paragraph takes new line in PdfPCell? 【发布时间】:2015-03-20 07:47:57 【问题描述】:

我的一些段落对象包含的文本长度可能大于单元格的宽度。这些段落也是缩进的,但问题是如果一个段落由于文本长度需要换行,在换行上不保持缩进,导致大部分文本被缩进,那么剩下的文本包含新行没有缩进。

有没有办法确定一个段落是否会因为超出 PdfPCell 宽度而换行,如果是这样,是否可以缩进文本的其余部分?

Paragraph p1 = new Paragraph("some text that exceeds cell width", mCustomFont);

PdfPCell c1 = new PdfPCell(p1);
c1.setIndent(20);

PdfPTable t1 = new PdfPTable();
// various styling on t1
t1.addCell(c1);

编辑:我也尝试使用 p1.setIndentationLeft(20); 缩进段落对象。但这并没有解决问题

【问题讨论】:

你能发布你的代码吗? 您使用的是文本模式而不是复合模式。这意味着您的Paragraph 被缩减为Phrase。看到人们因不阅读文档而感到沮丧,真是令人沮丧…… 【参考方案1】:

请查看SimpleTable4 示例。在此示例中,我以错误的方式(您的方式)将缩进段落添加到单元格,并以正确的方式(如文档中所述)将段落添加到单元格:

PdfPTable table = new PdfPTable(1);
Paragraph wrong = new Paragraph("This is wrong, because an object that was originally a paragraph is reduced to a phrase due to the fact that it's put into a cell that uses text mode.");
wrong.setIndentationLeft(20);
PdfPCell wrongCell = new PdfPCell(wrong);
table.addCell(wrongCell);
Paragraph right = new Paragraph("This is right, because we create a paragraph with an indentation to the left and as we are adding the paragraph in composite mode, all the properties of the paragraph are preserved.");
right.setIndentationLeft(20);
PdfPCell rightCell = new PdfPCell();
rightCell.addElement(right);
table.addCell(rightCell);
document.add(table);

这是结果:

在第一行中,我们不再有Paragraph,而是使用PdfPCell 的对齐和前导的Phrase

在第二行中,Paragraph 被保留。如果在PdfPCell 级别定义了对齐或前导,则忽略它以支持Paragraph 的对齐和前导。在Paragraph 级别定义的所有其他属性(以及Phrase 对象不存在的属性)都将保留。

【讨论】:

完成此操作后,单元格中现在有更大的间隙,就像您的图形中显示的那样。有没有办法弥补这些? 空白是什么意思?你说的是领头羊吗?如果是这样,请更改您的Paragraph 的前导。 与图形的复合模式部分中的行之间的垂直间距一样 那个“行间距”有一个名字:它叫做leading。改变前导,“间距”就会改变。 啊,我明白了,领先的名字让我相信这完全是另外一回事,谢谢

以上是关于如果段落在 PdfPCell 中换行,如何保持缩进?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 pre 标签中换行?

如何在 UILabel 中换行

高分!重赏!如何在word文档中悬挂2字符!

如何在 Ionic 2+ 中换行离子输入?

如何在输出中换行

word--如何解决word中首行失效的问题?