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

时间:2013-11-21 14:49:43

标签: 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(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,其中页面提取(页面提取)和文档安排(文档编译)允许?!

我的问题是:

  1. 这是iText的不当行为,或者,一般可以用iText更改此设置吗?如果是这样,如何(代码示例)?
  2. 是否可以设置这些权利而无需任何密码?到目前为止,我们只看到设置权限的功能总是与用户和所有者密码一起使用。
  3. 提前感谢您的帮助!

    英戈

1 个答案:

答案 0 :(得分:2)

观察

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

screen shot showing the OP's PDF viewer's permission tab for dest.pdf

使用Adobe Acrobat检查OP's result file的权限,但结果有所不同:

screen shot showing Adobe Acrobat's permission tab for dest.pdf

仅仅展平OP's source file(根本不加密!),获得this file,Adobe Acrobat甚至会显示这些权限:

screen shot showing Adobe Acrobat's permission tab for a merely flattened file

解释

这是Adobe Reader 的行为,OP最有可能使用的PDF查看器:OP看到的权限选项卡不仅代表加密过程中有或没有被禁止的内容,而且PDF查看器本身的限制。

OP似乎存在一种误解,即与未加密的文件相比,使用加密和设置权限位可以添加到功能。实际上它是另一种方式:加密允许您删除权限与未加密文档允许的相比。通过使用某些ALLOW_ *权限位,您撤销权限。只需不加密文档即可获得最大权限数。

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

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

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

因此,

答案

  

因此,我们得到一个PDF,其中不允许页面提取(页面提取)和文档安排(文档编译)

没有。如上所示,您的dest.pdf仅禁止页面提取,并且一旦您停止加密,即使是允许的也是如此。

  

1这是iText的不当行为,或者,一般可以用iText更改此设置吗?如果是这样,如何(代码示例)?

没有 iText的错误行为,它是Adobe Reader的行为。 Adobe Reader一般限制其功能,仅解除具有使用权限的文档的限制。此类使用权限只能由Adobe软件应用。

  

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

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

资源

有关parallel post on the itext-questions mailing list的问题的其他信息:

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

screen shot showing the OP's PDF viewer's permission tab for dest.pdf