gpt4 book ai didi

PDFBox 无法识别 pdf 不可打印

转载 作者:行者123 更新时间:2023-12-04 04:34:59 25 4
gpt4 key购买 nike

我正在使用 PDFBox 来验证 pdf 文档,其中一项验证说明 pdf 文档是否可打印。

我使用以下代码来执行此操作:

PDDocument document = PDDocument.load("<path_to_pdf_file>");
System.out.println(document.getCurrentAccessPermission().canPrint());

但这让我恢复了真实,尽管当打开 pdf 时,它显示打印图标已禁用。

最佳答案

访问权限通过加密方式集成到文档中。

即使在 Acrobat Reader 中打开时不需要密码的 PDF 文档也可能被加密,它们本质上是使用默认密码加密的。您的 PDF 就是这种情况。

PDFBox 仅在解密时确定加密 PDF 的权限,在加载 PDDocument 时尚未确定。 .因此,如果文档已加密,您必须在检查其属性之前尝试解密该文档。

在你的情况下:

PDDocument document = PDDocument.load("<path_to_pdf_file>");
if (document.isEncrypted())
{
document.decrypt("");
}
System.out.println(document.getCurrentAccessPermission().canPrint());

空字符串 ""代表默认密码。如果文件是使用不同的密码加密的,您将在此处得到一个异常(exception)。因此,相应地捕获。

PS:如果您不知道所有有问题的密码,您仍然可以使用 PDFBox 来检查权限,但您必须进行更底层的工作:
PDDocument document = PDDocument.load("<path_to_pdf_file>");
if (document.isEncrypted())
{
final int PRINT_BIT = 3;
PDEncryptionDictionary encryptionDictionary = document.getEncryptionDictionary();
int perms = encryptionDictionary.getPermissions();
boolean printAllowed = (perms & (1 << (PRINT_BIT-1))) != 0;
System.out.println("Document encrypted; printing allowed?" + printAllowed);
}
else
{
System.out.println("Document not encrypted; printing allowed? true");
}

关于PDFBox 无法识别 pdf 不可打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19882581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com