【问题标题】:How can I prefill a PDF form with iTextSharp while still having it be editable and saveable in Adobe Reader by other users?如何使用 iTextSharp 预填充 PDF 表单,同时其他用户仍可在 Adob​​e Reader 中编辑和保存它?
【发布时间】:2013-03-31 02:49:51
【问题描述】:

现在我有一个表单模板,其中包含一些使用 iTextSharp 库从数据库中预填充的字段。然后,用户将填写其余字段并保存填写的表格。然后我将提取数据并将其放入数据库中。

目前我能够创建 PDF,并且它们可以很好地进行预填充。我什至可以在我的计算机上的 Adob​​e Reader 中编辑和保存它们。但是我发现当其他人打开这些​​相同的文件时,他们不允许保存表单。

我需要做什么才能让所有使用 Adob​​e Reader 的用户保存表单?这是我必须创建 PDF 的代码:

Dim pdfReader As PdfReader = New PdfReader(formPath)
pdfReader.RemoveUsageRights()
Dim pdfStamper As PdfStamper = New PdfStamper(pdfReader, New FileStream(outputPath, FileMode.Create))
Dim pdfFormFields As AcroFields = pdfStamper.AcroFields
Dim xfdfReader As XfdfReader = New XfdfReader(xfdfPath)

pdfFormFields.SetFields(xfdfReader)
pdfStamper.Close()

我曾经遇到过无法在Reader中保存表格的问题,这就是我添加这一行的原因:

pdfReader.RemoveUsageRights()

这使得 可以编辑它创建的 PDF,这让我认为一切都已解决。但没有其他人可以。

【问题讨论】:

  • 您确定只有 Adob​​e Reader 而没有 Adob​​e Acrobat 吗?它是哪个版本的?
  • 是的。我使用 Acrobat 创建 PDF 表单,但我肯定会在 Reader 中打开文件。我使用 Reader XI(显然 Adob​​e 认为罗马数字很酷)。我曾尝试使用 Reader 9 在另一台计算机上打开文件,所以它可能像版本问题一样简单,我需要我的用户安装 Reader XI。
  • 事实上,Adobe 更改了默认情况下允许其 Reader 用户使用的内容。不过,如果您在附加模式下使用 PdfStamper,您甚至可以为旧 Adob​​e Reader 版本的用户提供服务。

标签: security pdf itextsharp adobe-reader pdf-form


【解决方案1】:

您只需在代码中使用它。创建PdfStamper 时需要添加额外的参数,如下所示:

PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(
    newPath, FileMode.CreateNew, FileAccess.Write), '\0', true);

这样就可以了。

【讨论】:

    【解决方案2】:

    请参考示例ReaderEnabledForm.cs。它描述了填写 Reader Enabled 表单的不同方法:

    1. 打破阅读器支持
    2. 删除阅读器启用
    3. 保留阅读器启用

    您已经尝试过 1 和 2,而您要求 3,涉及在创建 PdfStamper 实例时添加额外参数:

    new PdfStamper(pdfReader, New FileStream(outputPath, FileMode.Create), '\0', true);
    

    【讨论】:

      猜你喜欢
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-27
      相关资源
      最近更新 更多