2009-12-28 98 views
2

有没有人有使用PDF格式的XFDF的经验?使用这种方法有没有陷阱?使用PDF格式的XFDF

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

第2步 - 创建自定义的类,从我们的数据库中的数据生成XFDF XML字符串。第3步 - 当用户请求pdf时,我们只需从数据库中检索数据,构造XFDF字符串并将字符串刷新到浏览器。

这个架构决定的主要好处是不需要将pdf存储在数据库或硬盘上。此外,我看到许多使用本地生成的批处理过程的pdf生成实现,这些批处理过程很麻烦,只能在应用程序中创建另一个“移动部分”。

回答

0

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

您可能想要考虑FDF而不是XFDF。 FDF可以做XFDF不能做的事......你可以添加脚本(在“之前”和“之后”入口点),并改变字段外观。 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支持的所有功能。

0

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