Itext PdfWriter.ALLOW_ASSEMBLY不会更改PDF文档中“Document ASSEMBLY”的值

Itext PdfWriter.ALLOW_ASSEMBLY不会更改PDF文档中“Document ASSEMBLY”的值,itext,Itext,我正在使用以下代码: PdfReader reader = new PdfReader("Input.pdf"); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("Output.pdf")); stamper.setEncryption("password".getBytes(), "password1".getBytes, PdfWriter.ALLOW_ASSEMBLY, PdfWriter.STANDAR

我正在使用以下代码:

PdfReader reader = new PdfReader("Input.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("Output.pdf"));

stamper.setEncryption("password".getBytes(), "password1".getBytes, PdfWriter.ALLOW_ASSEMBLY, PdfWriter.STANDARD_ENCRYPTION_128);
属性PdfWriter.ALLOW_ASSEMBLY不会更改文档程序集的值,并且在创建输出pdf后仍显示为“不允许”。

什么是加密权限 首先,请注意,在加密上下文中授予的权限决不会导致用户对未加密文档所做的事情超过他对未加密文档所能做的事情,这些权限仅决定了普通文档用户(即使用用户密码打开PDF的用户)与文档所有者(即使用所有者密码打开PDF的用户)相比所允许执行的操作要少得多。打开未加密的文档时,始终假定具有完全所有者权限

因此,在甚至对文档所有者都不允许某些操作的PDF查看器中,在加密期间设置匹配的allow_*标志不会突然使查看器允许某些用户执行这些操作

在本例中,Adobe Reader不允许在未加密的文档或使用所有者密码打开的文档上组装文档。因此,Adobe Reader也不允许在使用allow_assembly加密的文档中进行文档组装

文档限制摘要显示的内容 Adobe Reader和Adobe Acrobat中“文档属性”的“安全”选项卡上的“文档限制”摘要不仅反映了加密期间文档权限集的状态。相反,它们实际上是基于大量输入的摘要,并非所有输入都取决于文件本身:

程序变量默认允许的操作; 通过文件中的使用权签名允许的其他操作;和 加密期间未授予的权限引入的限制。 例如,在Adobe Reader中,您的文档显示了对所有者和用户的这些限制:

在Adobe Acrobat中,您的文档显示了对所有者和用户的以下限制:

因此,默认情况下,Adobe Reader不允许文档组装或页面提取。因此,它也不允许将它们用于以用户身份打开的文档,尽管有allow_ASSEMBLY

另一方面,默认情况下Adobe Acrobat允许所有操作。因此,由于allow_程序集,它确实允许以用户身份打开文档

支持读卡器的PDF 如上所述,通过使用权限签名,可以允许某些操作超出所讨论的程序变量默认允许的操作。Adobe Reader显然只接受由Adobe为此授权的特殊私钥创建的使用权签名


例如,如果您有足够的Adobe Acrobat版本,您可以使用Adobe Reader中的“扩展功能”菜单项使用它来创建这样的使用权限签名,其他Adobe程序可以用来设置其他使用权限。

是否检查使用Adobe Reader或Adobe Acrobat?我有Adobe Reader。我认为这可能是问题所在,但其他属性,如ALLOW_PRINTING、ALLOW_FILL_IN等,除了文档组装和页面提取外,都工作正常。另外,我找不到任何与页面提取匹配的属性。非常感谢您提供的详细答案!有关概述,请参阅。