我正在使用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
作为参数。