使用XFDF进行pdf

时间:2009-12-28 20:38:15

标签: java pdf-generation

有没有人有使用XFDF作为pdf的经验?使用这种方法有任何陷阱吗?

Step1 - 我需要创建一个pdf(adobe pro),其中只读字段绑定到XML中的元素。这将成为过度数据的模板。

Step2 - 创建自定义类,从数据库中的数据生成XFDF XML字符串。

步骤3 - 当用户请求pdf时,我们只需从数据库中检索数据,构造XFDF字符串并将字符串刷新到浏览器。

这个架构决策的主要好处是不需要在数据库或硬盘驱动器上存储pdf。此外,我已经看到许多pdf生成实现使用本地批处理流程,这些流程有缺陷并且只在应用程序中创建另一个“移动部件”。

2 个答案:

答案 0 :(得分:0)

我写了一些XFDF,是的。你的方法听起来不错。

您可能需要考虑FDF而不是XFDF。 FDF可以执行XFDF无法执行的操作...您可以添加脚本(在“之前”F和“之后”入口点),并更改字段外观。 IIRC还有一些其他的花里胡哨,但那些是我使用的。

我们构建的PDF表单有很多脚本,我们的初始化很多都在“After”中进行(在“Before”中有几位)。我们的一个非常标准的字段类型也需要能够改变字段的外观。

这种方法的潜在问题是Signature Fields。您必须保存PDF以保留签名有效性。但是你可以使用它...只需保存这些PDF,当有人请求特定实例时,你将[X] FDF指向签名表单而不是未签名模板。

FDF并不比XML更难写。它使用PDF的语法减去了对外部参照表和不同根对象/布局的需要。

%FDF-1.2
1 0 obj 
  <</FDF 
    <</Fields [
      <</T(name1)/V(value1)>>
      << /T (name2) /V (value2) >>
      <</T(list1) /Opt [ [(display1)(value1)] [(display2)(value2)] ] /v(value2) >>
      ... 
      ]
      /F (pathOrURLtoForm.pdf)
      /JavaScript <<
        /Before (var foo = "blah";)
        /After(someFunc/(/);)
      >>
    >>
  >>
endobj
trailer
<</Root 1 0 R>>
%%EOF

在不同的地方有一些逃避行为,但总的来说它很简单。 iText有一个FDFWriter类,它可以为你完成大部分工作,但我不相信它支持FDF支持的所有功能。

答案 1 :(得分:0)

我一直在将XFDF用于我的项目,并且该技术被证明是可靠和可持续的。首先,因为它是XML,我可以压缩XML并以低占用率持久存储它们。正如Mark Storer上面所解释的那样,XFDF无法做到的限制就是支持脚本。如果您需要一个执行XFDF / FDF字段合并的库,您可以试试[nguyen][https://github.com/joneslee85/nguyen] gem。