我们目前有一个包含清单的订单项的数据库,然后我们将其输出为xml格式.我们可以制作一些不错的HTML 5清单,但我们现在正在转向PDF表单.
我已经完成了一些搜索,但是没有什么可以确定从XML创建PDF.我们希望能够定义哪些字段是必需的,下拉列表,文本框等.
如何在给定XML文档的情况下创建PDF可填写表单?
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的自定义实现相结合),但请注意,这将需要一些额外的编程.