Могу ли я использовать iText для объединения PDF-файлов с разрешениями
Я хочу объединить несколько документов PDF в один. Исходные документы могут состоять из PDF-файлов, созданных мной и другими, созданными другими организациями. Я не контролирую права доступа к документам, которые я не создал. Некоторые из этих документов (не созданные мной) могут иметь установленные разрешения. Если документ требует пароль, чтобы открыть его, я не пытаюсь объединить его.
Я использую iText 5.5.1 (я думаю, что это самый последний вариант) для создания объекта PDFCopy, который будет содержать итоговый документ и ридер для каждого исходного PDF в цикле (я передаю список документов, которые должны быть объединены). Я проверяю количество страниц в каждом документе, а затем с помощью объекта PDFCopy импортирую каждую страницу, а затем добавляю его в объект PDFCopy (причина, по которой эти два шага являются отдельными, объясняется сложностью языка, который я использую для работы с Java. объекты, RPG на IBM iSeries). Проблема в том, что я могу прикрепить считыватель к PDF с разрешениями и получить количество страниц, но как только я пытаюсь импортировать страницу в объект копирования, программа жалуется и завершает работу сообщением "PdfReader не открыт с паролем владельца". Я не могу заставить человека (-ов), предоставляющего документы из других организаций, не защищать документы (есть очень и очень веские причины, по которым исходный документ защищен от изменений), но мне нужно объединить эти документы в один.
У меня вопрос, могу ли я скопировать PDF-файлы с разрешениями в новый документ, используя iText, и могу ли я сделать это, не зная пароля владельца? В дополнение к этому я думаю, что другой вопрос будет, это законно?
Спасибо GarryM
1 ответ
Введение: PDF-файл может быть зашифрован с использованием публичного сертификата. Если у вас есть такой PDF, вам нужен соответствующий личный сертификат для его расшифровки. Файл PDF может быть зашифрован с использованием двух паролей: пароля пользователя и пароля владельца. Если PDF-файл зашифрован с использованием пароля пользователя, для его расшифровки необходим хотя бы один из двух паролей.
Предположение: я предполагаю, что файлы PDF зашифрованы только с помощью пароля владельца. Вы можете открыть эти документы в средстве просмотра PDF без необходимости ввода пароля пользователя, что означает, что к контенту можно получить доступ, но существуют некоторые ограничения в зависимости от установленных разрешений.
Ситуация: iText - это библиотека, которая позволяет получать доступ к PDF-файлам на очень низком уровне без графического интерфейса. Он может легко получить доступ к PDF, зашифрованному только с помощью пароля владельца, но не может проверить, соблюдаете ли вы права, определенные для PDF. Чтобы убедиться, что вы знаете о своих обязанностях, выдается исключение о том, что PdfReader не открывается с паролем владельца. Это часто слишком строго: иногда у вас есть разрешение на сборку PDF-файла, но с iText это все или ничего. Либо вы можете открыть файл, либо нет. iText не проверяет, что вы делаете потом.
Решение: есть статический логический параметр, называемый unethicalreading
это установлено в false
по умолчанию. Вы можете изменить это так:
PdfReader.unethicalreading = true;
Отныне все будет так, как будто PDF-файлы не зашифрованы.
Это законно? Это не так ясно, и я не юрист, но:
Раньше это было незаконно, когда Adobe все еще владел авторским правом на спецификацию PDF. Adobe предоставила право использовать это авторское право любому разработчику на определенных условиях. Одним из таких условий было то, что вы не "взломали" PDF. Удаление пароля из PDF нарушило ваш "контракт" с Adobe на использование спецификации PDF, и вы рискуете получить иск.
Это изменилось, когда Adobe передала сообществу спецификацию PDF, чтобы сделать ее стандартом ISO. Теперь каждый может использовать этот международный стандарт, и вышеизложенное (риск получения иска от Adobe за нарушение авторских прав) больше не существует.
Поскольку стандарт ISO документирует механизм шифрования с помощью пароля владельца, и очень легко использовать стандарт ISO для дешифрования документа без этого пароля, концепция введения пароля владельца для обеспечения прав доступа несовершенна с технической точки зрения., Это просто психологический способ запретить людям делать с вашим документом то, что вы, как автор, не хотите.
Это как знак остановки на пустынной дороге. Он говорит: вы должны остановиться здесь, но никто / ничто не остановит вас, если рядом никого нет.
Предлагаемый подход: мой подход заключается в расшифровке PDF с использованием unethicalreading
параметр, и посмотреть на разрешения, которые установлены. Если разрешения не позволяют сборку, я отказываюсь от документа. Я также устанавливаю разрешения для полученного PDF, где я пытаюсь найти комбинацию разрешений, которые соответствуют разрешениям, установленным в исходных документах.
В некоторых случаях это не так сложно: люди не знают, что PDF-файлы часто являются владельцами документов, которые забывают пароли, которые использовались для их шифрования. В этом случае простого разрешения владельцев документов достаточно для их расшифровки.
Последнее замечание: я являюсь первоначальным разработчиком iText и отвечаю за unethicalreading
параметр. Я выбрал имя unethicalreading
только чтобы убедиться, что люди знают о том, что они делают. Это не значит, что использование этого параметра всегда неэтично или незаконно.