Itext:在绝对位置显示段落

时间:2013-04-13 13:28:06

标签: java itext

有没有办法绝对定位一个段落,这种方式在列表添加到段落时也有效?

谷歌搜索显示我应该使用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();

3 个答案:

答案 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();
}

另见:itext positioning text absolutely;