如何在 Java 中自动填写 PDF 表单

新手上路,请多包涵

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

对 PDF 文件的内部结构 _一无所知_,我可以预见这里有两种途径:

  • 更难的方法:可以扫描纸质文档,将其转换为 PDF,然后使用软件“填写”PDF,只需说“将除 blah 之外的文本添加到以下 (x,y) 坐标…” ;或者
  • 更简单的方法:PDF 规范已经允许构建可以填写的“字段”;通过这种方式,我只需编写“将文本摘录 等等 添加到名为 *address_value*… 的字段”的代码,等等。

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

其次,我显然需要一个开源(和 Java)库来执行此操作。 iText 似乎是一个好的开始,但我听说它可能很难使用。任何人都可以在这里提供一些想法或一般建议吗?提前致谢!

原文由 IAmYourFaja 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 990
2 个回答

请查看免费电子书 The Best iText Questions on StackOverflow 中有关交互式表单的章节。它捆绑了以下问题的答案:

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

参见例如:

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

原文由 Bruno Lowagie 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题