java - Itext - 如何使用 acrofields 克隆页面?

标签 java itext

我正在用 Java 编写一个程序,用于打印宾果卡的 PDF 文件。每页是一张卡片。为了方便我,我创建了一个带有 acrofields 的模板 PDF 文件,这样程序只需要创建该模板的副本,用数字填充 acrofields,然后将其展平。截至目前,我可以创建 1 张宾果卡。我想在一个 PDF 文件中包含多页(因此,多张卡片)。但我不知道该怎么做。我读到的是 PDFStamper 与一个且只有一个 PDFReader 对象相关联。有没有一种方法可以做到这一点,而无需创建多个 PDF 文件并将它们合并为一个文件(我上次这样做,但发现速度很慢)提前致谢!

最佳答案

我花了一段时间才弄明白这一点。这不是最有效的编码方式,但本质上是它的作用:

  • 创建文档
  • 对于每个带有 acrofield 的页面:
  • 复制你的模板
  • 填写表格
  • 扁平化表格
  • 添加页面

这是我的实现,您可以尝试修改它以满足您的需求:

private void createPdf() throws Exception {
    Document doc = new Document();
    PdfSmartCopy copy = new PdfSmartCopy(doc, new FileOutputStream("result.pdf"));
    doc.open();

    PdfReader reader;
    PdfStamper stamper;
    AcroFields form;
    ByteArrayOutputStream baos;

    for(int i = 0; i < getTotalPages(); i++) {
        copyPdf(i);

        reader = new PdfReader(String.format("%d%s", i, "template.pdf"));
        baos = new ByteArrayOutputStream();
        stamper = new PdfStamper(reader, baos);
        form = stamper.getAcroFields();

        //methods to fill forms

        stamper.setFormFlattening(true);
        stamper.close();

        reader = new PdfReader(baos.toByteArray());
        copy.addPage(copy.getImportedPage(reader, 1));
    }

    doc.close();
}

private void copyPdf(int currentPage) throws Exception {
    PdfReader reader = new PdfReader("timesheet.pdf");
    Document doc = new Document();
    File file = new File(String.format("%d%s", currentPage, "template.pdf"));
    file.deleteOnExit();
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(file));
    stamper.close();
}

copyPdf() 方法创建临时文件,用于在不影响整个文档的情况下填写表单。如果您找到更有效的方法来执行此操作,请告诉我。

此外,我发现在基于 Intel 的 Mac 与 Windows 计算机上,Mac 完成此操作的速度要快得多。

如果您不反对购买 iText 引用书,我会推荐 Bruno Lowagie 的“iText in Action,第二版”。这是一本很棒的书,非常有帮助。

关于java - Itext - 如何使用 acrofields 克隆页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5817945/

相关文章:

c# - iTextSharp 添加图像

java - 填充动态 XFA pdf 表单 itext

Java 类路径问题

java - 如何解决 ClassNotFoundException?

java - iText PDF 中第一页和最后一页的页边距不同

java - iText Java 禁用打印 pdf

java - 使用 iText pdfHTML 的 PDF 页面大小和格式

java - 使用 spring boot 设置 Redis sentinel

java - 覆盖下限参数

java相当于atof C++