如何读取加密PDF文件的权限



我正在使用iText v7读取PDF文件,我正在检测加密文件,如下所示:

try (final PdfReader pdfReader = new PdfReader(file.getAbsolutePath())) {
PdfDocument document = new PdfDocument(pdfReader);
System.out.println("encrypted = " + pdfReader.isEncrypted());
}

我想知道PDF文件允许哪些个人权限(打印、复制文本、修改内容、修改注释(。

我知道getPermissions方法应该返回从文件中读取的权限,但我还没有检查相关的标志,即以下代码没有发出正确的结果:

final long perm = - pdfReader.getPermissions();
if ((perm & EncryptionConstants.ALLOW_PRINTING) == EncryptionConstants.ALLOW_PRINTING) {
System.out.println("Allow printing");
}

我发现的文档在这个主题上有点简洁,主要详细介绍了如何创建具有特定权限的加密文件。

受这个问题的答案启发,回答我自己的问题。

使用PdfEncryptor类对PdfReader.getPermissions方法返回的long中封装的权限标志进行解码:

final int perm = (int) pdfReader.getPermissions();
if (PdfEncryptor.isDegradedPrintingAllowed(perm)) {
System.out.println("Allow degraded printing";
}

在API中发现的唯一异常是getPermissions返回long,而PdfEncryptor方法将int作为参数。

最新更新