有没有办法绝对定位一个段落,这种方式在列表添加到段落时也有效?
谷歌搜索显示我应该使用ColumnText,但如果段落中有列表,我就无法使用它。它只是在同一个linie上显示彼此相邻的列表项。这是我的测试程序:
PdfWriter writer=PdfWriter.getInstance(document,new FileOutputStream("/tmp/output.pdf"));
document.open();
ColumnText ct = new ColumnText(writer.getDirectContent());
ct.setSimpleColumn(0,0,300,300);
Paragraph p=new Paragraph();
List list=new List();
list.add(new ListItem("First item"));
list.add(new ListItem("second item"));
list.add(new ListItem("third item"));
p.add(list);
ct.addElement(p);
ct.go();
document.close();
writer.close();
答案 0 :(得分:1)
我查看了iText的更改日志,我发现这是在2012年3月31日发布的iText 5.2.1中修复的。那是一年多前了。请升级到最新版本,问题就会消失。
请注意,所有5.2.x版本都已从SourceForge中删除,因为它们包含偶尔会生成不符合ISO-32000-1的PDF的错误。根据您的问题描述,我知道您使用的是甚至比5.2.x系列更旧的iText版本,因此您肯定需要升级。
答案 1 :(得分:1)
在PDF文件中组织内容的另一种方法是您可以使用PdfPTable。首先使用循环指令将列表内容写入表中,然后在输出pdf文件中定义该PdfPTable的位置。
答案 2 :(得分:0)
您可以使用此功能:
private void PlaceChunck(String text, int x, int y) {
PdfContentByte cb = writer.DirectContent;
BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
cb.SaveState();
cb.BeginText();
cb.MoveText(x, y);
cb.SetFontAndSize(bf, 12);
cb.ShowText(text);
cb.EndText();
cb.RestoreState();
}