我正在尝试使用@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();
}
}
最佳答案
如果您使用 iText,只需 5 个步骤即可创建 PDF 文档”
- 创建一个
Document
实例 - 创建一个
PdfWriter
实例 - 打开文档
- 添加内容
- 关闭文档
在您的问题中,您不会创建 PdfWriter
实例(除非它是全局变量)。在您的评论中,您没有打开文档(您已经跳过了步骤 3,并且此步骤在文档创建过程中至关重要)。
从评论中获取代码,并在适当的位置添加以下行:
document.open();
适当的位置是创建 PdfWriter
实例的之后以及开始使用writer
之前> 实例。
更新
在您的评论中,您现在共享一些包含逻辑错误的代码。
您的主要方法pdfGeneration()
(可能)包含创建过程中的五个步骤:
- 您创建一个
Document
实例 - 您创建一个
PdfWriter
实例,用于将字节写入文件My First PDF Doc.pdf - 您打开文档
- 您调用一个应该添加内容的方法
setPara()
- 您关闭文档(在代码中不可见)
逻辑错误可以在setPara()
方法中找到。在此方法中,您重复这五个步骤。您创建一个新 Document
实例(无需执行此操作),并创建一个新 PdfWriter
实例创建一个新文件My First PDF Doc.pdf。这会引发异常,因为该文件已在使用中!
您应该像这样更改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);
当然:由于 setPara()
方法只不过是 iText 中已存在的 showTextAligned()
方法的简化版本,因此您可能需要使用直接用那个方法。例如:在您的 main 方法中使用它,而不是引入 setPara()
方法:
Phrase phrase = new Phrase("Some text", new Font());
PdfContentByte canvas = writer.getDirectContent();
ColumnText.showTextAligned(canvas, Element.ALIGN_LEFT, phrase, 20, 20, 0);
关于java - 如何使用 iText 在 PDF 文档中设置文本 @ 绝对位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27501522/