如果段落在 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 中换行,如何保持缩进?的主要内容,如果未能解决你的问题,请参考以下文章