12

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

在此处输入图像描述

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

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

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

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

编辑:请随时在此处下载 sample.pdf 文件。

4

5 回答 5

9

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

编辑:查看PrintFields 示例

于 2014-01-23T21:00:02.593 回答
2

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

less ~/Downloads/sample.pdf | cat

我得到如下所示的输出:

Static form header

First name:   John

Last name:    Doe

然后你可以很明显地使用 Java/Python/awk/whatever 解析它。

当然,或者,如果您不想依赖这些特定版本的行为(不确定它们是否总是这样做),您可以查看less 的源代码以了解它是如何做到的。

于 2014-01-22T20:02:46.683 回答
1

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

我希望它对你有帮助。

于 2014-01-22T19:31:39.087 回答
1

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

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

然后使用 xpath 解析它并加入字符串,以便从您的代码中使用它在此处跟踪代码

除此之外,街区里有一个叫tabula的新孩子,用红宝石写的,我还没有机会使用,但应该很棒

我理解您不愿意使用付费服务,但仍然值得一提的是,Adobe 有一项转换服务,在撰写本文时每月收费 2 美元,请查看,只是说...

于 2014-01-22T20:08:03.987 回答
0

对于 Java 解决方案,您可以使用iText读取字段,然后使用类似jackson-dataformat-xml的东西将结果写入 XML。A,有点基本的例子是:

// 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);

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

于 2014-01-23T10:22:26.833 回答