【问题标题】:iText: PDF Generation. One Template. More Inputs. One OutputiText:PDF 生成。一个模板。更多输入。一个输出
【发布时间】:2013-11-29 10:48:17
【问题描述】:

我尝试使用 itext 生成 pdf。首先,我阅读现有模板并在方法stampFormular(Formular formular, PdfStamper stamper) 中标记公式。邮票方法有效。但我有一个问题,要在输出文件中添加更多公式。

我想为每个公式的 PDF 模板标记“黄色”。所以我尝试了document.add(),但这不起作用。所以我试着用pdf writer来做到这一点。但这行不通。知道如何用一个公式数据标记 pdf 模板,制作一个新页面并用下一个公式数据标记相同的 pdf 模板。

public static File createForm(List<Fomular> formulars) {
        Document document = new Document();
        File pdf = null;

        document.open();

        try {
            PdfReader pdfTemplate = new PdfReader('YELLOW');
            PdfStamper stamper = new PdfStamper(pdfTemplate,
                    new FileOutputStream("output.pdf"));
            PdfWriter writer;
            for (Formular f : formulars) {
                stamper = stampFormular(f, stamper);
                writer = stamper.getWriter();
                writer.newPage();
            }

            stamper.close();
            pdfTemplate.close();
            pdf = new File("output.pdf");
            Desktop.getDesktop().open(pdf);
        } catch (DocumentException | IOException e) {
            e.printStackTrace();
        }
        return pdf;
    }

【问题讨论】:

    标签: java pdf itext


    【解决方案1】:

    几个观察:

    您不能从PdfStamper 中获取PdfWriter 对象,请使用newPage() 并期望它能够工作。这相当于打开汽车的引擎盖并开始重新布线适合的管子,而无需对电机维护艺术一无所知。当您想向stamper 添加新页面时,您应该使用insertPage() 方法,如documentation 中所述。

    第二个观察结果:您并没有告诉我们您是否正在扁平化表单的内容。如果你这样做了,那很简单,只需使用example mentioned in the documentation 就可以了。换句话说:将PdfStamperPdfSmartCopy 结合起来。尤其是如果您一遍又一遍地使用相同的模板,PdfSmartCopy 将给您带来比PdfCopy 更好的结果,原因在chapter 6 中进行了解释。

    假设您的模板需要保持交互性,那么您可能会遇到问题,原因也在该章中解释:具有特定名称的字段的不同可视化必须始终具有相同的值。例如:如果您的模板有一个名为 name 的字段,那么文档中该字段的每次出现都必须具有相同的值。如果你不想这样,你需要重命名name,比如改成name1name2等等……

    需要保持交互的模板的连接过去是使用PdfCopyFields 完成的(请参阅文档)。在这里,文档有些过时了。在最新版本的 iText 中,我们现在在 PdfCopyPdfSmartCopy 中有一个方法 addDocument()。此方法允许您一次添加完整文档,同时保留交互性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-12
      • 2021-05-20
      • 2019-06-29
      • 1970-01-01
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多