0

现在我有一个表单模板,其中包含使用 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,这让我认为一切都已解决。但没有其他人可以。

4

2 回答 2

1

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

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

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

new PdfStamper(pdfReader, New FileStream(outputPath, FileMode.Create), '\0', true);
于 2013-04-11T08:41:11.773 回答
1

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

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

这会成功的。

于 2013-05-24T09:59:00.807 回答