Свойства документа iTextsharp PDF

Мне нужно проверить, если PDF имеет следующие свойства, прежде чем загружать PDF процесс,

1) PDF не должен быть защищен паролем. 2) У PDF не должно быть свойств документа. Извлечение страницы, копирование контента и копирование контента для доступности НЕ ДОПУСКАЕТСЯ.

Я могу проверить, защищен ли PDF паролем или нет, используя свойство PdfReader IsEncrypted. Но когда в PDF не установлен метод безопасности, как я могу проверить вышеупомянутые свойства документа. Разрешения полезны только тогда, когда документ зашифрован. (используя iTextsharp dll)

1 ответ

Решение

PDF-файл может быть зашифрован различными способами. Наиболее распространенным способом является добавление одного или двух паролей:

  1. Пароль владельца: каждый может открыть PDF, но там могут быть разрешения.
  2. Пароль пользователя: открыть документ могут только люди, которые знают пароль пользователя или пароль владельца.

Если есть пароль пользователя, 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,

Другие вопросы по тегам