【问题标题】:Can I fill in an encrypted PDF with iTextSharp?我可以用 iTextSharp 填写加密的 PDF 吗?
【发布时间】:2010-10-01 20:27:45
【问题描述】:

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

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

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

【问题讨论】:

  • iText 的安全标志支持不存在。我们只是检查您是否有所有者密码,如果没有,则抛出。最近有很多这样的投诉,我们可能最终会在未来添加一些标志级别的安全支持。

标签: c# itext


【解决方案1】:

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

PdfReader.unethicalreading = true;

【讨论】:

    【解决方案2】:

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

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

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

    所以我下载了 4.0.3 版本,果然成功了。就我而言,我什至不必更改代码即可使用此旧版本。

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

    【讨论】:

    • 您不能再下载低于 5.0.0 的版本,因为它们存在技术和法律问题。无论如何,iTextSharp 从 SourceForge 迁移到 Github:github.com/itext/itextsharp
    【解决方案3】:

    两件重要的事情

    1. PdfReader.unethicalreading = true 设置为防止 BadPasswordException。
    2. 在 PdfStamper 的构造函数中设置 附加模式,否则 Adobe Reader Extensions 签名会损坏,Adobe Reader 将显示以下消息:“此文档包含某些权限在 Adob​​e Reader 中启用特殊功能。文档自创建以来已更改,这些权利不再有效。请联系作者获取此文档的原始版本。"

    所以你需要做的就是:

    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?

    【讨论】:

      【解决方案4】:

      除非有人插话,否则我会假设答案是“不”

      我最终以未加密的形式重新生成了 PDF。

      【讨论】:

      • 我使用我的 iPhone 从客户网站发布了问题,我太着急(或太懒)无法通过 OpenID 进行身份验证,所以我只是匿名发布然后忘记将其设置为社区维基。
      猜你喜欢
      • 2012-03-10
      • 2013-01-08
      • 2012-03-07
      • 2012-08-11
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多