如何使用iText在PDF文档中设置text @ absolute position

时间:2014-12-16 09:38:58

标签: 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();
  }
}

1 个答案:

答案 0 :(得分:2)

如果您使用iText,则可以分5步创建PDF文档"

  1. 创建Document实例
  2. 创建PdfWriter实例
  3. 打开文档
  4. 添加内容
  5. 关闭文档
  6. 在您的问题中,您不创建PdfWriter实例(除非它是全局变量)。在您的评论中,您不会打开文档(您已跳过第3步,此步骤在文档创建过程中至关重要。)

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

    document.open();
    

    在您开始使用PdfWriter实例之前创建writer实例和的行之后

    <强>更新

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

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

    1. 您创建了一个Document实例
    2. 您创建一个{\ n} {}}实例,将字节写入文件我的第一个PDF文档.pdf
    3. 您打开文档
    4. 您调用应该添加内容的方法PdfWriter
    5. 您关闭文档(在代码中不可见)
    6. 可以在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()