我们正在考虑许多应用要求,我们正在研究许多解决方案。考虑到我们可能不是唯一能够满足这些要求的开发人员,我们想知道其他人可能选择的解决方案和技术......
以下是一个特定应用程序功能的要求:
- 平台:ASP.NET
- 收集用户输入(通过标准网络表单)
- 使用收集的用户输入填充PDF表单并且不要平移PDF表单
- 立即显示PDF表单(在浏览器中),并允许用户编辑字段内容(PDF表单将显示在iFrame中)。
- 允许用户将更改后的PDF“提交”到Web服务器(最终将其展平并存储到后端数据库中)
最后一点,正如你可以想象的那样,让我们摸不着头脑......如何在用户更改的情况下“保存”PDF文件 - 回到网络服务器的文件系统......它最终将被展平并存储在数据库中。
有任何实际建议吗?有什么建议?不涉及PDF表格的替代解决方案?
请记住,鉴于目标受众,涉及Adobe LiveCycle许可证的解决方案肯定不在图片中......
由于
乔治
答案 0 :(得分:2)
鉴于现有的PDF,iTextSharp可以填写字段值(AcroForm或XFA / LiveCycle表单)。
但是,虽然iTextSharp(和iText)可以处理任何旧的AcroForm,但它只能FLATTEN 静态 liveCycle表单。
此外,PDF表单可以通过多种方式提交自己:
iText的PdfStamper(附加模式!)可以填写字段值,而不会破坏PDF的Reader-Enabled-ness。
您的工作流程变为:
您可以使用字段值和对PDF模板的引用(同样,提交完整的PDF IIRC需要来自Acrobat的Reader Enabling)来提供FDF,而不是填写PDF。这明显比解析PDF并每次提供它都更有效。
FDF看起来像这样:
%FDF-1.2 %âãÏÓ 1 0 obj <</F(http://www.mySite.com/myPDF.pdf) /Fields[ <</T(Check1)/V/Off>> <</T(Some Field)/V(A value)>> <</T(AnotherFld)/V(1.0)>> <</T(You get)/V(the idea)>> ] >>/Type/Catalog>> endobj trailer <</Root 1 0 R>> %%EOF
&LT;&LT;和&gt;&gt;包装“词典”(名称对)
(和)包裹字符串
[和]包裹数组
/引导“名字”。名称用于字典键,偶尔用于其他东西。
你必须在名称和字符串中转义一些字符:
字符串转义以'\'开头。 \ r,\ n,\ t,\ b,\ f,(,)和\。你也可以转义任何旧的字符值IN OCTAL:\ ooo,其中'o'是八进制值。
名称完全不同(grr)。
名称转义以'#'开头,后跟两位十六进制数字。这次是HEX,而不是八进制。 Grr grr。任何不在a-z A-Z 0-9的东西。 _; * @应该被转义。你可以逃避一切,它只是非常低效。
您可能需要担心字符串转义(特别是字段值,可能还有PDF路径/ URL),但几乎可以肯定不会担心名称转义。
有各种各样的库可以为你编写FDF,但我发现用简单的字符串连接来删除FDF更容易。
请注意,FDF支持的内容远不止这些,但是很多FDF库都不支持,因此如果您走出常规路径,必须自己构建它们。
答案 1 :(得分:1)
我从未使用它,但我听说人们在iTextSharp取得了一些成功。有一篇关于如何使用it here保存PDF文件的代码项目文章。您需要检查iTextSharp的许可证,以确保它与您正在进行的操作兼容。
答案 2 :(得分:0)
您可以使用PDF文件中的提交按钮提交名称/值对,方式与html表单(see this SO question for details)类似。然后在服务器端,您可以使用PDF处理工具(Amyuni PDF Creator .Net,iText等)重新插入PDF表单上的值,并将生成的文件保存在数据库中。
答案 3 :(得分:-1)
如何创建PDF或网络表单: