Большинство PDF-файлов содержат много двоичных элементов между ASCII. Но я также помню, что видел PDF-файлы, в которых такие двоичные части в общем и целом отсутствовали, и их можно было открыть в текстовом редакторе, чтобы изучить их структуру.
Есть ли хитрость, инструмент, или команда, которая будет преобразовывать двоичные части PDF в ASCII / ANSI? (Предпочтительно «бесплатно как в пиве» или даже «бесплатно как в свободе»)
[Обновлено 2014-10-15]
В репозитории исходного кода 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
Вывод QDF
-режима, усиленного переключателем --qdf
, упорядочивает и перестраивает объекты. Он добавляет комментарии для отслеживания исходных идентификаторов объектов и потоков содержимого страницы. Все словари объектов записываются в "нормализованный" стандартный формат для облегчения разбора.
Параметр --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
clean
: перезаписывает PDF; -d
: де-сжимает все потоки; -a
: ASCIIhex кодирует все двоичные потоки;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
для большинства практических случаев.
Тем не менее, вам следует провести собственные эксперименты и сравнить (различные) результаты работы каждого из предложенных инструментов. Затем сделайте свой собственный выбор.