我正在尝试使用@aaronbartell示例,将文本放在PDF文档中的必需(绝对)位置。请给我一些指示,谢谢。
示例:
private static void absText(String text, int x, int y) {
try {
PdfContentByte cb = writer.getDirectContent();
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();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:2)
如果您使用iText,则可以分5步创建PDF文档"
Document
实例PdfWriter
实例在您的问题中,您不创建PdfWriter
实例(除非它是全局变量)。在您的评论中,您不会打开文档(您已跳过第3步,此步骤在文档创建过程中至关重要。)
从评论中获取代码,并在适当的位置添加以下行:
document.open();
在您开始使用PdfWriter
实例之前创建writer
实例和的行之后
<强>更新强>
在您的评论中,您现在正在共享一些包含逻辑错误的代码。
您的主要方法pdfGeneration()
(可能)包含创建过程中的五个步骤:
Document
实例PdfWriter
可以在setPara()
方法中找到逻辑错误。在此方法中,您重复这五个步骤。您创建了新 setPara()
实例(无需执行此操作),并创建了一个新 Document
实例,用于创建新文件我的第一个PDF文档.pdf 。抛出异常,因为该文件已被使用!
您应该像这样更改PdfWriter
:
setPara()
您应该从主方法中调用此方法,如下所示:
public void setPara(PdfContentByte canvas, Phrase p, float x, float y) {
ColumnText.showTextAligned(canvas, Element.ALIGN_LEFT, phrase, x, y, 0);
}
当然:由于setPara(writer.getDirectContent(), new Phrase(text), x, y);
方法只是iText中已存在的setPara()
方法的简化版本,因此您可能希望直接使用该方法。例如:在main方法中使用它,而不是引入showTextAligned()
方法:
setPara()