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

时间:2012-07-28 14:11:18

标签: java forms pdf itext

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

不知道关于PDF文件内部的任何,我可以预见到两种途径:

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

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

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

3 个答案:

答案 0 :(得分:20)

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

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

Apache PDFBox也可以用来做到这一点。

答案 1 :(得分:5)

请参阅免费电子书The Best iText Questions on StackOverflow中有关互动表格的章节。它将问题的答案捆绑在一起,例如:

或者您可以逐步查看this video how to use forms for reporting

参见例如:

SELECT * FROM person WHERE person_id = 1234567 FOR UPDATE WAIT 3;
UPDATE person SET email_address = 'new.email@company.com' WHERE person_id='1234567';

答案 2 :(得分:1)

public void fillPDF()
{

     try {
            PDDocument pDDocument = PDDocument.load(new File("D:/pdf/pdfform.pdf")); // pdfform.pdf is input file
            PDAcroForm pDAcroForm = pDDocument.getDocumentCatalog().getAcroForm();


         PDField field = pDAcroForm.getField("Given Name Text Box"); 

          field.setValue("Kalyan"); 
          field = pDAcroForm.getField("Family Name Text Box");
          field.setValue("Gutta");
          field = pDAcroForm.getField("Country Combo Box");
          field.setValue("India");
          System.out.println("country combo" );
          field = pDAcroForm.getField(" Driving License Check Box");

          field = pDAcroForm.getField("Favourite Colour List Box");
        System.out.println("country combo"+ field.isRequired());
          pDDocument.save("D:/pdf/pdf-java-output.pdf");
             pDDocument.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
}