Свойства документа iTextsharp PDF
Мне нужно проверить, если PDF имеет следующие свойства, прежде чем загружать PDF процесс,
1) PDF не должен быть защищен паролем. 2) У PDF не должно быть свойств документа. Извлечение страницы, копирование контента и копирование контента для доступности НЕ ДОПУСКАЕТСЯ.
Я могу проверить, защищен ли PDF паролем или нет, используя свойство PdfReader IsEncrypted. Но когда в PDF не установлен метод безопасности, как я могу проверить вышеупомянутые свойства документа. Разрешения полезны только тогда, когда документ зашифрован. (используя iTextsharp dll)
1 ответ
PDF-файл может быть зашифрован различными способами. Наиболее распространенным способом является добавление одного или двух паролей:
- Пароль владельца: каждый может открыть PDF, но там могут быть разрешения.
- Пароль пользователя: открыть документ могут только люди, которые знают пароль пользователя или пароль владельца.
Если есть пароль пользователя, iText не сможет открыть документ, и BadPasswordException
будут брошены
public static boolean isPasswordProtected(string file) {
try {
PdfReader pdfReader = new PdfReader(file);
return false;
} catch (BadPasswordException bpe) {
return true;
}
}
Если имеется только пароль владельца, вы можете проигнорировать этот пароль, установив специальный параметр. См. Могу ли я использовать iText для объединения PDF-файлов с разрешениями
PdfReader.unethicalreading = true;
Обратите внимание, что PdfReader
также имеет isEncrypted()
метод, см. пример PageInformation в главе 6 "iText в действии - второе издание".
Это отвечает на первую часть вашего вопроса: как я могу проверить, зашифрован ли PDF или нет?
Что касается разрешений: как только вы открыли защищенный паролем PDF, вы можете использовать getPermissions()
способ узнать, какие разрешения имеются:
PdfReader pdfReader = new PdfReader(file);
int permissions = pdfReader.getPermissions();
это int
на самом деле битсет. PdfEncryptor
у класса есть метод getPermissionsVerbose()
это объясняет, что означает каждый бит:
public static String More ...getPermissionsVerbose(int permissions) {
StringBuffer buf = new StringBuffer("Allowed:");
if ((PdfWriter.ALLOW_PRINTING & permissions) == PdfWriter.ALLOW_PRINTING) buf.append(" Printing");
if ((PdfWriter.ALLOW_MODIFY_CONTENTS & permissions) == PdfWriter.ALLOW_MODIFY_CONTENTS) buf.append(" Modify contents");
if ((PdfWriter.ALLOW_COPY & permissions) == PdfWriter.ALLOW_COPY) buf.append(" Copy");
if ((PdfWriter.ALLOW_MODIFY_ANNOTATIONS & permissions) == PdfWriter.ALLOW_MODIFY_ANNOTATIONS) buf.append(" Modify annotations");
if ((PdfWriter.ALLOW_FILL_IN & permissions) == PdfWriter.ALLOW_FILL_IN) buf.append(" Fill in");
if ((PdfWriter.ALLOW_SCREENREADERS & permissions) == PdfWriter.ALLOW_SCREENREADERS) buf.append(" Screen readers");
if ((PdfWriter.ALLOW_ASSEMBLY & permissions) == PdfWriter.ALLOW_ASSEMBLY) buf.append(" Assembly");
if ((PdfWriter.ALLOW_DEGRADED_PRINTING & permissions) == PdfWriter.ALLOW_DEGRADED_PRINTING) buf.append(" Degraded printing");
return buf.toString();
}
Например, если вы хотите узнать, разрешена ли сборка, вам нужно проверить значение PdfWriter.ALLOW_ASSEMBLY & permissions
,