我正在尝试将文字放在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格式打印的。任何建议将不胜感激。
答案 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。