如何自动将pdf表单字段导出到xml

时间:2014-01-09 00:40:40

标签: java xml python-2.7 acrobat pdf-extraction

我有一个包含表单字段的pdf文件,需要将数据导出到xml文件 AUTOMATICALLY 。这是我为测试创建的示例表单的屏幕:

enter image description here

注意:通过单击Tools > Form > Export Form Data,最后选择xml扩展名进行文件输出,使用Acrobat Professional轻松导出 MANUALLY 。这是我手动导出时得到的结果:

<?xml version="1.0" encoding="UTF-8"?>
<fields>
    <first_name>John</first_name>
    <last_name>Doe</last_name>
</fields>

然而,我需要自动化它,例如使用 python脚本 Java实现或某些命令行工具。我可以使用哪些库或工具将表单字段数据导出到xml?该工具或库应该是开源,我可以将其集成到我的工作流程中。

我已经尝试过python pdfminer库,它帮助我导出pdf文件的静态部分(如Static form headerFirst name:Last name:):但是如何导出表单字段数据(在我的例子中是表单字段first_namelast_name的内容)??

编辑:随意下载sample.pdf文件here

5 个答案:

答案 0 :(得分:8)

Apache PDFBox怎么样?它是开源的,可以满足您的需求,因为该网站说“从PDF表单中提取表单数据或预填充PDF表单。”

编辑:查看PrintFields example

答案 1 :(得分:2)

在bash中,你可以这样做(至少使用我的这些工具版本,减去444和cat 8.13):

less ~/Downloads/sample.pdf | cat

我得到的输出如下:

Static form header

First name:   John

Last name:    Doe

然后你可以使用Java / Python / awk / what来解析它。

当然,或者,如果您不想依赖这些特定版本的行为(不确定它们是否总是这样做),您可以查找less's source code以查看它是如何做的它

答案 2 :(得分:1)

在Java中,有一些库可以使用PDF,但通常很难从PDF获取格式化信息。我从来没有实现过那个东西,但Qoppa看起来不错,似乎很先进,但它并不是免费的。它包含jPDFFields,它可用于从表单字段中提取值。 还有一个similar thread,其中有一些关于命令行工具的信息。

我希望它会对你有所帮助。

答案 3 :(得分:1)

我使用pdfminer取得了很大成功:

pdf2txt.py -o out.xml -t xml sample.pdf

然后使用xpath和连接字符串对其进行解析,以便在代码中使用它跟踪代码here

除了那个名为tabula的块上有一个新的孩子,用红宝石写的,我没有机会使用但是应该很棒

我理解您不愿意使用付费服务,但仍然值得一提的是,Adobe提供转换服务,在撰写本文时,每月费用为2美元check it out,只是说......

答案 4 :(得分:0)

对于Java解决方案,您可以使用iText来读取字段,然后使用jackson-dataformat-xml之类的内容将结果写为XML。一个基本的例子是:

// read fields
final PdfReader reader = new PdfReader("/path/to/my.pdf");

final AcroFields fields = reader.getAcroFields();
final Map<String, Object> values = new HashMap<>();
for (String fieldName : (Set<String>) fields.getFields().keySet()) {
    values.put(fieldName, fields.getField(fieldName));
}

// write
final XmlMapper mapper = new XmlMapper();
final String result = mapper.writeValueAsString(values);

System.out.println(result);

这里肯定有一些改进空间,但这可能是一个很好的起点。