Лучший инструмент для проверки файлов PDF? [закрыто]

94

Как я могу просматривать PDF-файлы, желательно с помощью инструмента?

Пример использования: я пытаюсь программно сгенерировать файлы PDF (с помощью iText). У меня проблемы с получением определенных макетов, но у меня есть файлы PDF с текстом, выложенным так, как я хочу (сгенерированный из Word). Я хотел бы реконструировать, как они это делают.

PDF Inspector вроде бы хорош, но я ищу что-нибудь для Windows.

bmm6o
источник
PDF Inspector основан на Java, поэтому является мультиплатформенным.
david.perez
2
Хотя, похоже, не работает в Windows. При нажатии на банку ничего не происходит. При вызове из командной строки я получаюno main manifest attribute, in PDF Document Inspector.jar
Tom
1
@ david.perez он основан на java, но завернут в яблоко, так что это своего рода дистрибутив только для яблок. Есть jar "PDF Document Inspector.app/Contents/Resources/Java/PDF Document Inspector.jar", но он не запускается как java -jar "PDF Document Inspector.jar". Также есть много com.apple.cocoa. * Включает которые зависят от платформы. :(
андрей
Сейчас я успешно использую iText Rups, мультиплатформенный и основанный на Java.
david.perez

Ответы:

18

Adobe Acrobat имеет очень крутой, но довольно хорошо скрытый режим, позволяющий просматривать файлы PDF. Я написал статью в блоге, объясняющую это, на https://blog.idrsolutions.com/2009/04/viewing-pdf-objects/

Марк Стивенс
источник
Кажется, для этого нужен плагин; по крайней мере, он недоступен в Acrobat Reader 9.5.5 для Linux.
Адам Спирс
3
@AdamSpiers, диалоговое окно предварительной проверки является функцией Adobe Acrobat, а не Adobe Reader
IPSUS,
... и Acrobat ( ранее Acrobat Exchange ) недоступен для Linux: - /
Адам Спирс
7
Для диалогового окна предварительной проверки действительно требуется Adobe Acrobat Pro. Он недоступен в Adobe Acrobat Standard.
Futal
1
А использовать это UI - кошмар.
Джон
87

Помимо инструментов на основе графического интерфейса, упомянутых в других ответах, существует несколько инструментов командной строки, которые могут преобразовать исходный исходный код PDF в другое представление, которое позволяет вам проверять (теперь измененный файл) с помощью текстового редактора. Все перечисленные ниже инструменты работают в Linux, Mac OS X, других системах Unix или Windows.

qpdf (мой любимый)

Используйте qpdf для распаковки (большинства) потоков объектов, а также для разделения ObjStmобъектов на отдельные косвенные объекты:

qpdf --qdf --object-streams=disable orig.pdf uncompressed-qpdf.pdf

qpdfописывает себя как инструмент, который выполняет «структурные преобразования с сохранением содержимого в файлах PDF» .

Затем просто откройте + проверьте uncompressed-qpdf.pdfфайл в своем любимом текстовом редакторе. Большая часть ранее сжатых (и, следовательно, двоичных) байтов теперь будет обычным текстом.

mutool

Существует также mutoolинструмент командной строки, который поставляется в комплекте со средством просмотра PDF-файлов MuPDF (который является дочерним продуктом Ghostscript, созданным той же компанией Artifex ). Следующая команда также распаковывает потоки и упрощает их просмотр в текстовом редакторе:

mutool clean -d orig.pdf uncompressed-mutool.pdf

podofouncompress

PoDoFo - это библиотека FreeSoftware / OpenSource для работы с форматом PDF, которая включает в себя несколько инструментов командной строки, в том числеpodofouncompress. Используйте это так, чтобы распаковать потоки PDF:

podofouncompress orig.pdf uncompressed-podofo.pdf

peepdf.py

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

Его можно использовать в интерактивном режиме для «просмотра» объектов и потоков, содержащихся в PDF.

Я не буду приводить здесь пример использования, а только ссылку на его документацию:

pdfid.py а также pdf-parser.py

pdfid.pyи pdf-parser.pyдва инструмента PDF от Дидье Стивенса, написанные на Python.

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

Вот пример того, как я извлекаю несжатый поток объекта PDF № 5 в файл * .dump:

pdf-parser.py -o 5 -f -d obj5.dump my.pdf

Заключительные примечания

  1. Обратите внимание, что некоторые двоичные части внутри PDF-файла не обязательно являются несжимаемыми (или декодируемыми в читаемый человеком код ASCII), потому что они встроены и используются в своем собственном формате внутри PDF-файлов. Такие части PDF представляют собой изображения JPEG, шрифты или цветовые профили ICC.

  2. Если вы сравните вышеуказанные инструменты и приведенные примеры командной строки, вы обнаружите, что НЕ все они производят одинаковые результаты. Попытка сравнить их на предмет их различий сама по себе может помочь вам лучше понять природу синтаксиса PDF и формата файла.

Курт Пфайфле
источник
42

Я использую iText RUPS (чтение и обновление синтаксиса PDF) в Linux. Поскольку он написан на Java, он работает и в Windows. Вы можете просматривать все объекты в PDF-файле в древовидной структуре. Он также может декодировать закодированные потоки Flate на лету, чтобы упростить проверку.

Вот скриншот:

Скриншот iText RUPS

gkcn
источник
9
java -jar itext-rups-5.5.6.jar-> Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/itextpdf/text/Version- Как ты должен управлять этой штукой? Изменить: понял это. Вам не следует загружать файл по умолчанию, предлагаемый SourceForge, вам необходимо загрузить .jar, который включает зависимости.
Zero3
2
@ Zero3 наткнулся на то же самое. Спасибо за ваш комментарий.
Сэм,
1
@KurtPfeifle Полностью согласен. К сожалению, многие программы (например, это!) Доступны только через SourceForge, потому что сопровождающий еще не переместил проект в другое место и, возможно, никогда этого не сделает. В наши дни вы действительно должны быть очень осторожны при загрузке чего-либо с SourceForge ...
Zero3
7
Да - как скомпилированный jar-файл и даже как exe-файл для пользователей Windows. См. Github.com/itext/rups/releases/latest
Амеди Ван Гассе,
1
@AmedeeVanGasse на снимке экрана в этом ответе показан вид страницы (между деревом документа и вкладкой xref). Как я могу отобразить это представление в версии 5.5.9 в Windows?
iPDFdev
5

Я успешно использовал PDFBox . Вот пример того, как выглядит код (из версии 0.7.2), вероятно, взятый из одного из предоставленных примеров:

// load the document
System.out.println("Reading document: " + filename);
PDDocument doc = null;                                                                                                                                                                                                          
doc = PDDocument.load(filename);

// look at all the document information
PDDocumentInformation info = doc.getDocumentInformation();
COSDictionary dict = info.getDictionary();
List l = dict.keyList();
for (Object o : l) {
    //System.out.println(o.toString() + " " + dict.getString(o));
    System.out.println(o.toString());
}

// look at the document catalog
PDDocumentCatalog cat = doc.getDocumentCatalog();
System.out.println("Catalog:" + cat);

List<PDPage> lp = cat.getAllPages();
System.out.println("# Pages: " + lp.size());
PDPage page = lp.get(4);
System.out.println("Page: " + page);
System.out.println("\tCropBox: " + page.getCropBox());
System.out.println("\tMediaBox: " + page.getMediaBox());
System.out.println("\tResources: " + page.getResources());
System.out.println("\tRotation: " + page.getRotation());
System.out.println("\tArtBox: " + page.getArtBox());
System.out.println("\tBleedBox: " + page.getBleedBox());
System.out.println("\tContents: " + page.getContents());
System.out.println("\tTrimBox: " + page.getTrimBox());
List<PDAnnotation> la = page.getAnnotations();
System.out.println("\t# Annotations: " + la.size());
Калеб Педерсон
источник
4

Есть и другой вариант. Adobe Acrobat Pro также может отображать внутреннюю древовидную структуру PDF-файла.

  1. Открыть предпечатную проверку
  2. Перейдите в Параметры (правый верхний угол)
  3. Внутренняя структура PDF

Сверху Adobe Acrobat Pro также может отображать внутреннюю структуру шрифтов документа в PDF, в большинстве других «просмотрщиков древовидной структуры PDF» этого нет.

введите описание изображения здесь

Вадимо
источник
2
Это то, что @ mark-stephens описывает в принятом ответе.
koppor 06
3
Ответ @ mark-stephens - это просто ссылка на сообщение в блоге, которое может исчезнуть в будущем (и не приветствуется на SO). vadimo's действительно дает ответ.
Starfish
3

Программа просмотра объектов в Acrobat хороша, но программа Windjack Solution PDF Canopener позволяет лучше проверять с помощью пипетки для выбора объектов на странице. Также позволяет вносить изменения в PDF.

http://www.windjack.com/products/pdfcanopener.html

Дуайт Келли
источник
1

Если вы хотите работать программно из Python, pdfminer - хороший вариант. Это позволяет вам работать со структурой PDF в памяти как иерархией объектов или сериализовать ее как XML.

УП Макнил
источник
-6

Я предлагаю Foxit PDF Reader, который очень полезен при редактировании текста в PDF-файле.

nifCody
источник
6
Я не смог найти в Foxit Reader никакого способа просмотреть внутреннюю структуру PDF-файла, похожего на PDF Inspector (упоминается в вопросе)
bmaupin