首页 文章

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

提问于
浏览
5

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

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

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

4 回答

  • 0

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

    PdfReader.unethicalreading = true;
    
  • 0

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

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

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

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

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

  • 5

    除非别人插话,否则我会认为答案是“不”

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

  • 3

    两件重要的事情

    • PdfReader.unethicalreading = true 设为 prevent BadPasswordException.

    • 在PdfStamper的构造函数中设置 append mode ,否则Adobe Reader Extensions签名将被破坏,Adobe Reader将显示以下消息:"This document contained certain rights to enable special features in Adobe Reader. The document has been changed since it was created and these rights are no longer valid. Please contact the author for the original version of this document."

    所以你需要做的就是:

    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?

相关问题