【问题标题】:How to set text @ absolute position in the PDF Document using iText如何使用 iText 在 PDF 文档中设置文本@绝对位置
【发布时间】:2014-12-16 09:38:57
【问题描述】:

我正在尝试使用 @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();
  }
}

【问题讨论】:

  • 嗯,是的——你期待writer变量来自哪里?我认为答案是期望已经有合适的作家可用...

标签: java pdf itext


【解决方案1】:

如果您使用 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()方法中找到。在此方法中,您重复这五个步骤。您创建一个 new Document 实例(没有必要这样做),然后您创建一个 new PdfWriter 实例来创建一个 new文件我的第一个 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);
}

你应该像这样从你的 main 方法调用这个方法:

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);

【讨论】:

  • 再次感谢@Bruno Lowagie,当我按照您的步骤操作时,这次没有错误,但文件是corrupt
  • 你能分享PDF而不是屏幕截图吗?如果您忘记关闭文档,您显示的错误消息非常典型。您是否关闭了文档?
  • 感谢@Bruno Lowagie,PDF screen shot,我调用function的实际代码
  • 您的代码中有一个严重的逻辑错误:您正在破坏您正在创建的文件!我会更新我的答案。
  • 您不需要编写自己的方法来执行此操作,ColumnText 类中的 showTextAligned() 方法可以满足您的要求(如我更新的答案所示)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2019-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多