如何在Java中自动化PDF表单填充

IAm*_*aja 23 java forms pdf itext

我正在为我住的地方附近的食品储藏室做一些"无偿"的开发.他们被表格和文书工作所淹没,我想开发一个简单地从他们的MySQL服务器(我在之前的项目中为他们设置)中读取数据的系统,并将数据提供给他们所需的所有表格的PDF版本.填写.这将极大地帮助他们并为他们节省大量时间,并消除填写这些表格时产生的许多人为错误.

不知道任何有关PDF文件的内部,我可以预见这里有两个途径:

  • 更难的方法:可以扫描纸质文档,将其转换为PDF,然后使用"填写"PDF的软件,只需说" 向下面的(x,y)坐标添加除了blah之外的文本......" ; 要么
  • 更简单的方法:PDF规范已经允许构建可以填写的"字段"; 这样我就可以编写代码"将文本摘录等等添加到名为*address_value*...的字段"等.

所以我的第一个问题是:我面临的两条途径中的哪一条?PDF是否具有"字段"的概念,还是需要通过告诉PDF库放置数据的位置的像素坐标来"填写"这些文档?

其次,我显然需要一个开源(和Java)库来完成这项工作.iText似乎是一个良好的开端,但我听说它可能很难合作.任何人都可以在这里提出一些想法或一般建议吗?提前致谢!

Rea*_*wTo 20

您可以使用FDF(表单数据格式)技术轻松地将数据合并到PDF的字段中.

Adobe提供了一个库来执行此操作: Acrobat Forms Data Format(FDF)Toolkit

另外的Apache PDFBox的可以用来做.

  • 感谢@RealHowTo 的建议,但 FDF 似乎只*处理*从表单提交的数据。我希望简单地将数据放入表格中,以便随后可以打印并通过邮政邮件发送出去! (2认同)
  • 不,FDF指定要合并到PDF文档中的数据的XML格式,然后在合并数据的情况下创建新的PDF,请参阅以下PDFBox示例:http://kickjava.com/src/org/pdfbox/ImportFDF .java.htm和http://grepcode.com/file_/repo1.maven.org/maven2/org.apache.pdfbox/pdfbox/1.6.0/org/apache/pdfbox/examples/fdf/SetField.java/? v =源 (2认同)

Bru*_*gie 5

请查看免费电子书《 StackOverflow上的最佳iText问题》中有关交互式表单的章节。它捆绑了以下问题的答案:

或者,您可以观看此视频,在这里我逐步解释如何使用表格进行报告

例如参见:

public void manipulatePdf(String src, String dest) throws DocumentException, IOException {
    PdfReader reader = new PdfReader(src);
    PdfStamper stamper = new PdfStamper(reader,
            new FileOutputStream(dest));
    AcroFields fields = stamper.getAcroFields();
    fields.setField("name", "CALIFORNIA");
    fields.setField("abbr", "CA");
    fields.setField("capital", "Sacramento");
    fields.setField("city", "Los Angeles");
    fields.setField("population", "36,961,664");
    fields.setField("surface", "163,707");
    fields.setField("timezone1", "PT (UTC-8)");
    fields.setField("timezone2", "-");
    fields.setField("dst", "YES");
    stamper.setFormFlattening(true);
    stamper.close();
    reader.close();
}
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,除非您在iText中使用的应用程序是开源的,否则iText需要商业许可证 (5认同)