Ответ 1
Для определенных операций с зашифрованными документами iText (Sharp) требует, чтобы документ не просто был открыт с помощью пароля пользователя, а вместо него с паролем владельца. Это соответствует определению этих паролей в спецификации PDF:
Допускаются ли дополнительные операции в расшифрованном документе, зависит от того, какой пароль (если есть) был предоставлен при открытии документа и при любых ограничениях доступа, которые были указаны при создании документа:
- Открытие документа с правильным паролем владельца должно позволить полному (владельцу) доступу к документу. Этот неограниченный доступ включает в себя возможность изменения паролей документов и прав доступа.
- Открытие документа с правильным паролем пользователя (или открытие документа с паролем по умолчанию) должно позволить выполнять дополнительные операции в соответствии с правами доступа пользователя, указанными в словаре шифрования документов.
(раздел 7.6.3.1 в ISO 32000-1)
iText (Sharp) в настоящее время не проверяет подробные разрешения доступа пользователей, указанные в словаре шифрования документов, но вместо этого всегда требует пароль владельца для операций, требующих определенных разрешений, и одним из них является копирование целых страниц из документа.
Было сказано, что разработчики iText (Sharp) очень хорошо знают (из-за многих таких вопросов)
- что пользователи iText (Sharp) могут иметь право выполнять такие операции, даже без пароля владельца, из-за указанных выше прав доступа пользователей, указанных в словаре шифрования документов,
- что есть много файлов PDF, к которым их соответствующие владельцы применяли пароль владельца (чтобы предотвратить неправильное использование другими), а затем забыли его (или используя случайно сгенерированный, который никогда не знал его для начала) и
- что iText (Sharp) (будучи открытым исходным кодом) может быть легко исправлен любым, кто не соблюдает различия между паролем пользователя и владельца.
Чтобы пользователи могли делать то, на что они имеют право, и чтобы предотвратить распространение исправленных копий библиотеки, iText (Sharp) содержит переопределение для этого теста в классе PdfReader
:
/**
* 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 и используйте только это переопределение, если вы действительно имеете право выполнять рассматриваемые операции.