Как преобразовать двоичные части PDF в ASCII / ANSI, чтобы я мог посмотреть их в текстовом редакторе?

Большинство PDF-файлов содержат много двоичных элементов между ASCII. Но я также помню, что видел PDF-файлы, в которых такие двоичные части в общем и целом отсутствовали, и их можно было открыть в текстовом редакторе, чтобы изучить их структуру.

Есть ли хитрость, инструмент, или команда, которая будет преобразовывать двоичные части PDF в ASCII / ANSI? (Предпочтительно «бесплатно как в пиве» или даже «бесплатно как в свободе»)

11
задан jww 7 June 2018 в 19:50
поделиться

1 ответ

[Обновлено 2014-10-15]

Использование Ghostscript

В репозитории исходного кода Ghostscript есть небольшая утилита, написанная на PostScript. Она называется pdfinflt.ps. Если вам повезет, она может уже лежать в подкаталоге 'toolbin' в месте установки Ghostscript. В противном случае, возьмите его здесь:

Теперь запустите его вместе с вашим целевым входным PDF через интерпретатор Ghostscript:

gswin32c.exe -- c:/path/to/pdfinflt.ps your-input.pdf deflated-output.pdf

pdfinflt.ps будет (пытаться) расширить все "потоки", содержащиеся в PDF, которые используют следующие фильтры/методы сжатия: /FlateDecode, /LZWDecode, /ASCII85Decode, /ASCIIHexDecode.

Он не будет пытаться удалить /RunLengthDecode, /CCITTFaxDecode, /DCTDecode, /JBIG2Decode и /JPXDecode. (Сжатые/бинарные шрифты также без изменений попадут в выходной PDF.)

Если вы в авантюрном настроении, вы можете откомментировать те строки утилиты, которые отключают /RunLengthDecode, /DCTDecode и CCITTFaxDecode, и посмотреть, работает ли она по-прежнему...


Использование qpdf

Еще одним полезным инструментом для преобразования PDF во внутренний формат, который позволяет получить доступ к текстовому редактору, является qpdf. Это "программа командной строки, которая выполняет структурные, сохраняющие содержимое преобразования PDF-файлов".

Пример использования:

 qpdf                                  \
   --qdf                               \
   --object-streams=disable            \
     input-with-compressed-objects.pdf \
     output-with-expanded-objects.pdf
  1. Вывод QDF-режима, усиленного переключателем --qdf, упорядочивает и перестраивает объекты. Он добавляет комментарии для отслеживания исходных идентификаторов объектов и потоков содержимого страницы. Все словари объектов записываются в "нормализованный" стандартный формат для облегчения разбора.

  2. Параметр --object-streams=disable вызывает извлечение (иначе не распознаваемых) отдельных объектов, которые сжаты в данные потока другого объекта.


Использование mutool

Artifex, создатели Ghostscript, предлагают еще один инструмент, доступный по лицензии Free and Open Source Software: MuPDF.

MuPDF поставляется с инструментом командной строки, mutool, который также может расширять сжатые потоки объектов PDF:

 mutool        \
    clean      \
   -d          \
   -a          \
    input.pdf  \
    output.pdf \
    4,7,8,9
  1. clean: перезаписывает PDF;
  2. -d: де-сжимает все потоки;
  3. -a: ASCIIhex кодирует все двоичные потоки;
  4. 4,7,8,9: выбирает страницы 4, 7, 8 и 9 для включения в output.pdf.

Использование pdftk

Наконец, вот как использовать инструмент pdtk для распаковки потоков объекта PDF:

pdftk your-input.pdf cat output uncompressed-output.pdf uncompress

Обратите внимание на последнее слово uncompress в командной строке.


Выберите свой любимый

Все вышеперечисленные инструменты доступны для Linux, Mac OSX, Unix и Windows.

Мой собственный фаворит - QPDF для большинства практических случаев.

Тем не менее, вам следует провести собственные эксперименты и сравнить (различные) результаты работы каждого из предложенных инструментов. Затем сделайте свой собственный выбор.

20
ответ дан 3 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

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