我有一个包含表单字段的pdf
文件,需要将数据导出到xml
文件 AUTOMATICALLY 。这是我为测试创建的示例表单的屏幕:
注意:通过单击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 header
,First name:
和Last name:
):但是如何导出表单字段数据(在我的例子中是表单字段first_name
和last_name
的内容)??
编辑:随意下载sample.pdf文件here。
答案 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);
这里肯定有一些改进空间,但这可能是一个很好的起点。