我想通过xml文档创建一个可填写的PDF表单?
我们目前有一个包含清单的行项目的数据库,然后我们将其输出为xml格式。我们可以制作一些不错的HTML 5清单,但我们现在正在转向PDF表单。
我已经完成了一些搜索,但是没有什么可以确定从XML创建PDF。我们希望能够定义所需的字段,下拉列表,文本框等。
如何在给定XML文档的情况下创建PDF可填写表单?
答案 0 :(得分:7)
附录(见评论):我是iText Software Group的首席执行官,iText(一个开源PDF库)的原始开发者,以及两个'iText in Action'的作者曼宁出版的书籍。我是NBN的成员,NBN是比利时标准办公室(包括ISO-32000和相关的PDF标准)。我不隶属于Adobe,Open Office等......
PDF中有两种形式的“风味”:基于AcroForm和XFA形式。
在基于AcroForm的表单中,表单使用PDF语法描述,每个字段都有固定的坐标。把它想象成数码纸。如果您有一个表示发票的表单,那么这样的表单可以提供20个发票行。假设您需要更少的行,您将拥有许多未使用的字段,这些字段仍然可见。假设您需要更多行,您将无法将它们全部放入表单中。我已经描述了如何在chapter 6 of my book中使用Open Office创建这样的表单(参见第6.3.5节)。与XML的唯一链接是您可以以XFDF格式导入/导出此类表单,这是ISO-32000-1中引用的规范。它是Forms数据格式(FDF)的XML版本。如果您希望以XML格式在服务器上存储人们的响应,这可能是理想的选择。您可以测试此here。填写表格并选择XFDF按钮。接收您请求的servlet将返回由Adobe Reader发送到服务器的流。
查看XML Forms Architecture(XFA)可能也很有趣。在这种情况下,PDF充当XML流的容器。嵌入式XML由模板和数据集最重要的不同部分组成。在模板中,使用特定语法来定义表单应该是什么样的(如何由Adobe Reader呈现)。数据集部分包含类似于XSD的dataDescription和数据。 XFA的主要优点之一是数据由使用您想要的任何模式的XML组成。 XFA表单通常使用Adobe LiveCycle Designer创建,您可以在其中导入自己的XSD作为数据源,然后您可以开始设计表单。结果将是一个空模板。填写表单就像将XML注入数据标记一样简单。
哪种形式最适合您?
AcroForms总是静态的。如果您的表单需要与纸上现有表单完全匹配,那么这是您的最佳匹配。如果你需要可以动态增长的表单(就像HTML一样),你很快就会对AcroForms感到沮丧,尽管有一些似乎完美的解决方法。
XML Forms可以非常动态。例如,请参阅form for movies。它只包含一页。现在让我们注入一个XML file with 120 movies。结果是form with 23 pages。如您所见,一部电影的字段重复120次。如有必要,还可以重复导演和制作电影的国家/地区。一个主要的缺点是像这样的表单只能在Adobe Reader中呈现;它们没有出现在Apple的Preview和许多其他非Adobe PDF查看器中。
我不确定这个答案是否会帮助你。如果没有,请澄清,因为您似乎专注于复选框等详细信息。
<强>附录:强>
啊,啊哈,第二次读你的问题,我现在看到我误解了这个问题。填写表单后,您不希望创建XML输出。您想基于XML输入创建表单(关于您的问题中输入/输出的观点令人困惑)。所以:您没有使用Open Office,Adobe Acrobat或Adobe LiveCycle Designer来创建表单。您希望将自己的自定义XML转换为交互式PDF。我不知道任何允许您创建基于XML的XFA表单的软件,除了Adobe LiveCycle ES。如果AcroForms是可接受的,那么您需要为自定义XML编写解析器并使用PDF库来创建表单。这样的PDF库可以是iText(可能与XML Worker的自定义实现相结合),但请注意,这将需要一些额外的编程。
没有“开箱即用”的解决方案可自动将自定义XML转换为交互式PDF表单。