ASP.NET - 从PDF表单字段中收集用户输入

时间:2011-05-09 19:30:14

标签: asp.net forms pdf field

我们正在考虑许多应用要求,我们正在研究许多解决方案。考虑到我们可能不是唯一能够满足这些要求的开发人员,我们想知道其他人可能选择的解决方案和技术......

以下是一个特定应用程序功能的要求:

- 平台:ASP.NET

- 收集用户输入(通过标准网络表单)

- 使用收集的用户输入填充PDF表单并且不要平移PDF表单

- 立即显示PDF表单(在浏览器中),并允许用户编辑字段内容(PDF表单将显示在iFrame中)。

- 允许用户将更改后的PDF“提交”到Web服务器(最终将其展平并存储到后端数据库中)

最后一点,正如你可以想象的那样,让我们​​摸不着头脑......如何在用户更改的情况下“保存”PDF文件 - 回到网络服务器的文件系统......它最终将被展平并存储在数据库中。

有任何实际建议吗?有什么建议?不涉及PDF表格的替代解决方案?

请记住,鉴于目标受众,涉及Adobe LiveCycle许可证的解决方案肯定不在图片中......

由于

乔治

4 个答案:

答案 0 :(得分:2)

鉴于现有的PDF,iTextSharp可以填写字段值(AcroForm或XFA / LiveCycle表单)。

但是,虽然iTextSharp(和iText)可以处理任何旧的AcroForm,但它只能FLATTEN 静态 liveCycle表单。

此外,PDF表单可以通过多种方式提交自己:

  • FDF:PDF的方言。主要是名称/值对,周围有一些额外的东西。
  • HTML风格
  • PDF:PDF可以将自己(带有表单数据)提交到URL。你可以打开&变平,无需担心第二次填写表格。我认为这仅限于Reader中的“Reader Enabled”表单。

iText的PdfStamper(附加模式!)可以填写字段值,而不会破坏PDF的Reader-Enabled-ness。

您的工作流程变为:

  1. 在附加模式下使用iText的PdfStamper填写启用阅读器的表单,并将该PDF文件提供给用户。
  2. 从用户
  3. 接收填写的PDF
  4. 使用另一个PdfStamper压缩PDF。只需“open,setFormFlattening(true),close()”。
  5. 您可以使用字段值和对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 .NetiText等)重新插入PDF表单上的值,并将生成的文件保存在数据库中。

答案 3 :(得分:-1)

如何创建PDF或网络表单:

  • 在Acrobat XI中,选择“工具”窗格&gt;表格&gt;创建
  • 单击“从头开始”或“模板”以启动FormsCentral桌面应用程序。
  • 单击“创建新的空白表单”或“以模板开始”。
  • 使用直观工具自定义表单