我可以用iTextSharp填写加密的PDF吗?

时间:2009-01-16 16:39:53

标签: c# itext

我有一个可填写,可保存的PDF文件,其中包含所有者密码(我无权访问)。我可以在Adobe Reader中填写它,导出FDF文件,修改FDF文件,然后导入它。

然后我尝试用iText for .NET来做。我无法从我的PdfReader创建PdfStamper,因为我没有向读者提供所有者密码。有没有办法以编程方式执行此操作或必须重新创建文档?

即使使用FdfReader也需要PdfStamper。我错过了什么吗?任何合法的东西 - 我很确定我可以破解文件,但我不能。具有讽刺意味的是,重新创建它可能会没问题。

4 个答案:

答案 0 :(得分:5)

此行将绕过iTextSharp中的编辑密码检查:

PdfReader.unethicalreading = true;

答案 1 :(得分:3)

[我在发布这个问题几个月后发现了这个问题,我现在正在为在搜索中遇到此问题的任何人发布此解决方案。]

我处于完全相同的情况:我的客户有一个带有可填写字段的PDF,我需要以编程方式访问。不幸的是,PDF受密码保护,他们没有密码,所以我发现无法使用他们的文件。

我发现iTextSharp版本4.0.4(及更高版本)强制实施密码限制,而早期版本则没有。

所以我下载了4.0.3版,确定它有效。在我的情况下,我甚至不必更改我的代码以使用这个旧版本。

你可以download 4.0.3 (and all other versions) at SourceForge

答案 2 :(得分:0)

除非有其他人插话,否则我会认为答案是“否”

我以未加密的形式重新制作PDF。

答案 3 :(得分:0)

两件重要的事情

  1. PdfReader.unethicalreading = true设置为阻止BadPasswordException。
  2. 在PdfStamper的构造函数中设置追加模式,否则 Adob​​e Reader Extensions 签名将被破坏,Adobe Reader将显示以下消息:&#34 ;本文档包含在Adobe Reader中启用特殊功能的某些权限。该文档自创建以来已更改,并且这些权限不再有效。请联系作者以获取本文档的原始版本。"
  3. 所以你需要做的就是:

    PdfReader.unethicalreading = true;
    using (var pdfReader = new PdfReader("form.pdf"))
    {
        using (var outputStream = new FileStream("filled.pdf", FileMode.Create, FileAccess.Write))
        {
            using (var stamper = new iTextSharp.text.pdf.PdfStamper(pdfReader, outputStream, '\0', true))
            {
                stamper.AcroFields.Xfa.FillXfaForm("data.xml");
            }
        }
    }
    

    请参阅How to fill XFA form using iText?