Права доступа интегрированы в документ с помощью шифрования.
Даже PDF-документы, которые не запрашивают пароль при открытии в Acrobat Reader, могут быть зашифрованы, они по существу зашифровываются с использованием пароля по умолчанию. Это относится к вашему PDF-файлу.
PDFBox определяет разрешения зашифрованного PDF только при его расшифровке, а не при загрузке PDDocument
. Таким образом, вы должны попробовать и расшифровать документ, прежде чем проверять его свойства, если он зашифрован.
В вашем случае:
PDDocument document = PDDocument.load("<path_to_pdf_file>");
if (document.isEncrypted())
{
document.decrypt("");
}
System.out.println(document.getCurrentAccessPermission().canPrint());
пустая строка ""
представляет пароль по умолчанию. Если файл зашифрован с использованием другого пароля, вы получите здесь исключение. Таким образом, поймайте соответственно.
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");
}
Просьба ФПВ в вопрос. В противном случае это было бы чистой догадкой. – mkl
Я посмотрю файл в понедельник в офисе. – mkl