PdfByteContent没有添加iText pdf

时间:2014-12-31 08:35:53

标签: java pdf itextsharp itext

我正在尝试将文字放在pdf中的指定位置并使用代码

public static PdfContentByte setContentSize(com.itextpdf.text.Document itextDocument) {
        itextDocument.open();
        PdfContentByte contentByte = getPdfWriter(itextDocument).getDirectContent();
        contentByte.saveState();

        Font font = new Font(FontFamily.TIMES_ROMAN, 12);
        BaseFont baseFont = font.getCalculatedBaseFont(false);

        contentByte.beginText();
        contentByte.setFontAndSize(baseFont, 12);
        contentByte.setTextMatrix(50, 800);

        return contentByte;
    }

       ColumnText ct = new ColumnText(contentByte);
                  ct.setSimpleColumn(new Phrase(new Chunk(text, FontFactory.getFont(FontFactory.HELVETICA, 18, Font.NORMAL))),
                                     46, 190, 530, 36, 25, com.itextpdf.text.Element.ALIGN_LEFT);
                  ct.go(); 

        //contentByte.showTextAligned(PdfContentByte.ALIGN_LEFT, text, 150, 240, 0);
        //Phrase phrase = new Phrase(text, new Font());
      //ColumnText.showTextAligned(contentByte, com.itextpdf.text.Element.ALIGN_LEFT, phrase, 200, 572, 0);

我也尝试了注释代码,但文本不是以pdf格式打印的。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

请在编写代码前阅读文档。您将受益于阅读"文本的绝对位置"在免费电子书"The Best iText Questions on StackOverflow"中。

至于你的代码:

首先您尝试以艰难的方式添加文字,但我看到saveState()没有restoreState(),我看到beginText()没有endText }。我没有看到任何showText(),所以没有显示任何文字。

然后您尝试以更简单的方式添加文字,更具体地说,这种方式不需要beginText()setFontAndSize()setTextMatrix(),等等...而是使用ColumnText

如果将beginText()ColumnText合并,则会在PDF中引入语法错误。使用ColumnText时,iText会在您的位置调用beginText(),从而生成嵌套文本块。这是ISO-32000-1禁止的。见PDFs generated using itextsharp giving error at the time of first print command

您说您要添加的文字不会显示在页面上,但我们无法检查这是否属实,因为您没有提供SSCCE。也许您要在页面的可见区域之外添加文本。也许你引入了很多语法错误(例如嵌套的文本块),观众不知道你想做什么。

另一方面,我们有许多可行的例子。这些问题的答案都解释了这些问题:

免费电子书中有更多示例捆绑The Best iText Questions on StackOverflow