java - 如何使用 iText 在 PDF 文档中设置文本 @ 绝对位置

标签 java pdf itext

我正在尝试使用@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 文档”

  1. 创建一个Document实例
  2. 创建一个 PdfWriter 实例
  3. 打开文档
  4. 添加内容
  5. 关闭文档

在您的问题中,您不会创建 PdfWriter 实例(除非它是全局变量)。在您的评论中,您没有打开文档(您已经跳过了步骤 3,并且此步骤在文档创建过程中至关重要)。

从评论中获取代码,并在适当的位置添加以下行:

document.open();

适当的位置是创建 PdfWriter 实例的之后以及开始使用writer之前> 实例。

更新

在您的评论中,您现在共享一些包含逻辑错误的代码。

您的主要方法pdfGeneration()(可能)包含创建过程中的五个步骤:

  1. 您创建一个 Document 实例
  2. 您创建一个 PdfWriter 实例,用于将字节写入文件My First PDF Doc.pdf
  3. 您打开文档
  4. 您调用一个应该添加内容的方法setPara()
  5. 您关闭文档(在代码中不可见)

逻辑错误可以在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/

相关文章:

python - 如何使用 pyPDF2 从 PDF 格式的多页简历中提取文本数据?

java - 是否可以使用 iText 查找文本位置

java - 以编程方式为 Tomcat 连接器设置 TrustManager

Java 记录器更好的格式化

linux - Linux命令行上的PDF比较

ios - 将 UIWebView 转换为 PDF/Image 仅提供一英寸宽的输出

java - 为什么 String.equals() 比它自己快?

java zoneddatetime : keep timezone ID when doing calculations

c# - 编辑 pdf itextsharp 并发送到浏览器

c# - ItextSharp 在尝试打印时需要一个 Dict 对象