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

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

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

1 Ответ

20 голосов
/ 14 августа 2010

[Обновлено 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 , предлагают еще один инструмент в рамках лицензии на бесплатное и открытое программное обеспечение: 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 для большинства практических случаев.

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

...