Java 如何使用iText在PDF文档中设置text@absolute position
我尝试使用示例,将文本放置在PDF文档中所需的(绝对)位置。请告诉我一些方向,谢谢 例如:Java 如何使用iText在PDF文档中设置text@absolute position,java,pdf,itext,Java,Pdf,Itext,我尝试使用示例,将文本放置在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_
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文档”
文档
实例PdfWriter
实例PdfWriter
实例(除非它是全局变量)。在您的注释中,您不会打开文档(您跳过了步骤3,此步骤在文档创建过程中是必不可少的)
从注释中提取代码,并在适当的位置添加以下行:
document.open();
适当的位置在创建PdfWriter
实例的那一行之后,以及开始使用writer
实例之前
更新
在您的注释中,您现在正在共享一些包含逻辑错误的代码
您的主要方法pdfGeneration()
(可能)包含创建过程中的五个步骤:
文档
实例PdfWriter
实例,将字节写入文件My First PDF Doc.PDFsetPara()
,该方法应该添加内容setPara()
方法中找到。在该方法中,重复这五个步骤。创建一个新的文档
实例(无需执行此操作)然后创建一个newPdfWriter
实例,创建一个new文件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);
您应该从主方法调用此方法,如下所示:
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()
方法的简化版本,因此您可能希望直接使用该方法。例如:在主方法中使用该方法,而不是引入setPara()
方法:
Phrase phrase = new Phrase("Some text", new Font());
PdfContentByte canvas = writer.getDirectContent();
ColumnText.showTextAligned(canvas, Element.ALIGN_LEFT, phrase, 20, 20, 0);
好的,是的-您希望
writer
变量来自哪里?我想答案是希望已经有一个合适的writer可用…再次感谢@Bruno Lowagie,当我遵循您的步骤时,这次没有错误,但文件是。您能共享PDF而不是屏幕截图吗?您显示的错误消息非常复杂pical如果你忘记关闭文档。你关闭文档了吗?谢谢@Bruno Lowagie,PDF,我调用的实际代码中有一个严重的逻辑错误:你正在破坏你正在创建的文件!我将更新我的答案。你不需要编写自己的方法来完成此操作,showTextAligned()列text
类中的方法可以满足您的需求(如我更新的答案所示)。