Извлечь страницы из сертифицированного pdf [duplicate]

В моем случае возникла ошибка, потому что я дал имя исходного файла вместо имени класса.

Нам нужно предоставить имя класса, содержащее основной метод, интерпретатору.

12
задан Artemis 16 July 2013 в 07:34
поделиться

2 ответа

Для определенных операций с зашифрованными документами iText (Sharp) требует, чтобы документ не просто был открыт с паролем пользователя, а вместо него с паролем владельца. Это соответствует определению этих паролей в спецификации PDF:

Должны ли дополнительные операции разрешаться в расшифрованном документе, зависит от того, какой пароль (если есть) был предоставлен при открытии и любые ограничения доступа, которые были указаны при создании документа:

  • Открытие документа правильным паролем владельца должно позволить полному (владельцу) доступу к документу. Этот неограниченный доступ включает в себя возможность изменения паролей документа и прав доступа.
  • Открытие документа правильным паролем пользователя пользователя (или открытие документа с использованием пароля по умолчанию) должно позволить дополнительный операции, которые должны выполняться в соответствии с правами доступа пользователя, указанными в словаре шифрования документа.

(раздел 7.6.3.1 в ISO 32000-1 )

iText (Sharp) в настоящее время не проверяет подробно права доступа пользователя, указанные в словаре шифрования документа , но вместо этого всегда требуется пароль владельца для операций требующие определенных разрешений, и копирование целых страниц из документа окончательно является одним из них.

Было сказано, что разработчики iText (Sharp) очень хорошо знают (из-за многих таких вопросов)

  • , что пользователи iText (Sharp) могут иметь право выполнять такие операции, даже без пароля владельца на счету ранее упомянутые права доступа пользователей, указанные в словаре шифрования документа
  • , содержат множество файлов PDF, к которым их соответствующие владельцы применяли пароль владельца (чтобы предотвратить неправильное использование другими), а затем забыли (или с помощью случайно сгенерированного никогда не знали, с чего начать), и
  • , что iText (Sharp) (являющийся открытым исходным кодом) может быть легко исправлен кем угодно, чтобы не уважать различия между пользователем и пароль владельца.

Чтобы позволить пользователям делать то, на что они имеют право, и предотвращать распространение исправленных копий библиотеки, iText (Sharp) содержит переопределение для этого теста в файле PdfReader class:

/**
 * The iText developers are not responsible if you decide to change the
 * value of this static parameter.
 * @since 5.0.2
 */
public static bool unethicalreading = false;

Таким образом, установив

PdfReader.unethicalreading = true;

, вы глобально переопределите этот механизм проверки разрешений.

Пожалуйста, соблюдайте права авторов PDF и используйте это переопределение, если вы действительно имеете право выполнить рассматриваемые операции.

18
ответ дан mkl 24 August 2018 в 06:33
поделиться

Я применил это обходное решение, и оно работает:

private void fixIssue(PdfReader pdfReader) throws Exception {
        Field f = pdfReader.getClass().getDeclaredField("ownerPasswordUsed");
        f.setAccessible(true);
        f.setBoolean(pdfReader, true);

}
0
ответ дан Enrico Giurin 24 August 2018 в 06:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: