在pdf中设置权限(SetEncryption)时出现问题

在pdf中设置权限(SetEncryption)时出现问题,encryption,pdf-generation,itext,rights,Encryption,Pdf Generation,Itext,Rights,我们在使用该产品时遇到了问题。iText 5.4.3中的某些功能是否工作不正常?请问,有人能给我们一个提示如何解决这个问题吗 我们将src.pdf修改为dest.pdf,如下所示: Function CreateFlattedPdf(ByRef originalPdf As Byte()) As Byte() Dim retValue As Byte() = Nothing Dim originalPdfReader As PdfReader = New PdfReader(or

我们在使用该产品时遇到了问题。iText 5.4.3中的某些功能是否工作不正常?请问,有人能给我们一个提示如何解决这个问题吗

我们将src.pdf修改为dest.pdf,如下所示:

Function CreateFlattedPdf(ByRef originalPdf As Byte()) As Byte()
    Dim retValue As Byte() = Nothing
    Dim originalPdfReader As PdfReader = New PdfReader(originalPdf)
    Dim pdfKopie As MemoryStream = New MemoryStream()
    Dim pdfKopieStamper As PdfStamper = New PdfStamper(originalPdfReader, pdfKopie)

    pdfKopieStamper.SetEncryption(False, userPassword, ownerPassword, _
                                  PdfWriter.ALLOW_ASSEMBLY _
                                   Or PdfWriter.ALLOW_COPY _
                                   Or PdfWriter.ALLOW_DEGRADED_PRINTING _
                                   Or PdfWriter.ALLOW_FILL_IN _
                                   Or PdfWriter.ALLOW_MODIFY_ANNOTATIONS _
                                   Or PdfWriter.ALLOW_MODIFY_CONTENTS _
                                   Or PdfWriter.ALLOW_PRINTING _
                                   Or PdfWriter.ALLOW_SCREENREADERS _
                                )

    ' Entferne die Signaturinformationen aus dem original Pdf-Dokument
    pdfKopieStamper.FormFlattening = True
    pdfKopieStamper.Close()

    ' Schreibe den Inhalt der geflatteten Kopie in die Antwort
    retValue = pdfKopie.ToArray()

    ' Schließe die Bearbeitung des Dokumentes ab
    pdfKopie.Close()
    originalPdfReader.Close()

    Return retValue
End Function
此外,我们把所有可能的文字权利。因此,我们得到了一个PDF,其中页面提取(页面提取)和文档排列(文档编译)是不允许的

我的问题是:

  • 这是iText的错误行为吗?或者,通常可以使用iText更改此设置吗?如果是,如何进行(代码示例)
  • 没有密码也可以设置这些权限吗?到目前为止,我们只看到设置权限的功能总是与用户和所有者密码结合在一起
  • 提前谢谢你的帮助

    Ingo

    观察结果 OP看到的权限选项卡确实显示了一些缺少的权限:

    但是,使用Adobe Acrobat检查的权限会产生不同的结果:

    只需展平(根本不加密!)Adobe Acrobat甚至会显示以下权限:

    解释 这是Adobe Reader的一种行为,最有可能被OP使用的PDF查看器:OP看到的权限选项卡不仅表示加密期间禁止或未禁止的内容,还表示PDF查看器本身的限制

    OP似乎有一种误解,即与未加密的文件相比,使用加密和设置权限位可以增加功能。实际上情况正好相反:与未加密的文档相比,加密允许您删除权限。通过不使用某些ALLOW_*权限位,您可以撤消权限。只需不加密文档即可获得最大权限数

    除了未加密文档的权限外,特定PDF查看程序可能还需要特定于查看器的其他使用权限。此类PDF查看器(最重要的Acrobat Reader)通常相当便宜或免费,但除非相关文档具有适当的使用权限,否则它们不会提供完整的功能

    使用权可以通过使用权签名的方式添加。要应用此类使用权签名,您通常需要相关PDF查看器制造商提供的软件或服务

    要添加Adobe Reader的使用权限,例如,您可以使用Adobe Acrobat或某些Adobe Lifecycle服务

    因此,

    答案 因此,我们得到了一个PDF,其中页面提取(页面提取)和文档排列(文档编译)是不允许的

    不可以。正如上面所看到的,您唯一的做法是不允许页面提取,并且一旦您停止加密,即使是这样也是允许的

    1这是iText的错误行为吗?或者,通常可以使用iText更改此设置吗?如果是,如何进行(代码示例)

    这不是iText的不当行为,而是Adobe Reader的行为。Adobe Reader通常会限制其功能,只会取消对具有使用权限的文档的限制。此类使用权只能由Adobe软件应用

    2一个人可以在没有密码的情况下设置这些权限吗?到目前为止,我们只看到设置权限的功能总是与用户和所有者密码结合在一起

    使用加密实际上会适得其反,因为它只能用于删除权限,而不能用于添加权限

    资源 有关该问题的其他信息摘自:

    • 说明该问题的示例源文件
    • OP代码生成的相应结果文件
    • 显示OP的PDF查看器dest.PDF权限选项卡的屏幕截图:

    您是如何检查权限的?您是否仅仅通过查看AdobeReader看到的文档属性?在这种情况下,请注意有些操作在Adobe Reader中是不允许或不可能的。您可以使用Adobe Acrobat查看实际权限。有关概述,请参阅。