我们有一个包含可填写字段的PDF表单库,可以在Adobe Reader中打开并由最终用户填写 . 请注意,我们不是生成PDF而只是使用现有的PDF . 所有这些表单都受到保护,不会通过密码编辑Acrobat中的不可填写字段 .
问题是,当我们在代码中打开PDF以预填充某些字段时,密码保护将丢失,并且在Acrobat中可以编辑提供的表单 .
所以:
-
有没有办法在不解锁PDF和结果输出流的情况下使用iTextSharp预填充可填写字段?
-
有没有办法重新锁定表单,同时仍允许最终用户在Reader中打开,填写可填写字段,打印等,而无需密码?
这是我们当前使用的代码的简化示例 . 我们已经尝试锁定输出流(代码当前不可用),但文件无法,然后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.
1 回答
如果受密码保护,则无法编辑PDF . 你希望你必须用密码打开它来编辑它 . 有了它,您似乎正在创建该文档的副本并呈现给用户 . 您可以使用编辑密码加密PDF . 这是我发现我使用itextsharp的方法的副本 . 如果在保留
openPassword
null的同时设置editPassword
,那么您的用户应该能够查看pdf并与之交互,但无法根据您设置的权限对其进行编辑 . 希望这可以帮助 .