【发布时间】:2012-11-05 16:04:38
【问题描述】:
我们有一个 PDF 表单库,其中包含可填写的字段,可以在 Adobe Reader 中打开并由我们的最终用户填写。请注意,我们不生成 PDF,而只是使用现有的 PDF。所有这些表单都受到保护,无法通过密码在 Acrobat 中编辑不可填写的字段。
问题在于,当我们在代码中打开 PDF 以预填充某些字段时,密码保护将丢失,并且提供的表单在 Acrobat 中是可编辑的。
所以:
- 有没有办法在不解锁 PDF 和生成的输出流的情况下使用 iTextSharp 预填充可填充字段?
- 有没有办法重新锁定表单,同时仍然允许最终用户 在 Reader 中打开、填写可填写字段、打印等,无需 需要密码?
这是我们当前使用的代码的简化示例。我们已尝试锁定输出流(代码当前不可用),但文件无法锁定,然后阅读器提示用户输入密码。
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
Byte[] password = encoding.GetBytes("secretPassword");
PdfReader reader = null;
MemoryStream outputStream = null;
PdfStamper stamper = null;
pdfStream.Seek(0, SeekOrigin.Begin);
reader = new PdfReader(pdfStream, password);
outputStream = new MemoryStream();
stamper = new PdfStamper(reader, outputStream);
AcroFields fields = stamper.AcroFields;
fields.SetField("prefillField1", "Some text");
stamper.Close();
outputStream.Close();
reader.Close();
// outputStream sent to user/browser. PDF opens in Reader, but the form can be opened in
// Acrobat without a password and edited.
【问题讨论】:
标签: itextsharp