Неизвестная кодировка, используемая в строках PDF - PullRequest
1 голос
/ 24 апреля 2019

Я пишу код для извлечения URL-адресов из PDF-файлов. В большинстве файлов URL отображаются как простые ascii. Однако в некоторых файлах PDF, таких как сама спецификация PDF (https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf), URL-адреса отображаются в шестнадцатеричной форме без видимой структуры.

Например, в приведенном выше файле в основных метаданных автор выглядит так:

/Author <F240D629CD72348F>

Это декодируется Атрилом и другими программами просмотра PDF как «Джим Кинг». Шестнадцатеричные строки в два раза длиннее литерального значения, как и ожидалось, но зашифрованы до неузнаваемости. Предполагая отображение байтового значения 1: 1 в символы, «i» кодируется как 0x40 и 0x72.

Фактическое значение URL: <EB345AA632781A90E90781A4A0BF42680D1F1AD67910B293798B0AFFED8407CE12684F21B7F471D96DCE4864CAB970A98E7F911C207A12C6E6900D789BC13AE87E76A9D6B8EDDADE7A53EAA521E6421295EA31305C>

Должен декодировать в: http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=51502

Я также посмотрел исходный код PyPDF2, который умеет декодировать эти строки, но я не нашел ответа.

Как найти кодировку, используемую для аннотаций в документе PDF?

1 Ответ

0 голосов
/ 24 апреля 2019

Пример pdf зашифрован, как вы можете определить, посмотрев его трейлер, который содержит запись Encrypt :

/Encrypt 126988 0 R

Таким образом, все строки и потоки в этом файле PDF (за очень немногими исключениями) зашифрованы.

(Если вам интересно, почему вам не нужно вводить пароль при открытии файла: стандарт pdf определяет пароль по умолчанию, который пытается использовать процессор pdf, прежде чем попросить пользователя ввести пароль. Этот пароль по умолчанию используется здесь. )

Таким образом, перед анализом строк вы должны их расшифровать. Если вы не хотите реализовывать расшифровку самостоятельно, вы можете использовать такой инструмент, как qpdf, чтобы сделать это при подготовке вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...