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


94

Як я можу перевірити файли PDF, переважно за допомогою інструменту?

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

PDF Inspector, здається, непоганий, але я шукаю щось для Windows.


Інспектор PDF заснований на Java, тому мультиплатформенний.
david.perez

2
Здається, не працює в Windows. Баночка нічого не робить при натисканні. Коли мене викликають у командному рядку, я отримуюno main manifest attribute, in PDF Document Inspector.jar
Тома

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. * Включає які специфічні для платформи. :(
andrej

Зараз я успішно використовую 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 26.03.15

... і Acrobat ( раніше Acrobat Exchange ) недоступний для Linux: - /
Адам Спирс

7
Діалогове вікно попередньої перевірки насправді вимагає Adobe Acrobat Pro. Він недоступний у Adobe Acrobat Standard.
Футал

1
І це насправді кошмар інтерфейсу користувача.
Джон

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


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
Amedee Van Gasse

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.03.18

3
Відповідь @ mark-stephens - лише посилання на допис у блозі, який може зникнути в майбутньому (і не рекомендується на SO). Вадімо насправді дає відповідь.
Морська зірка



1

Якщо ви хочете працювати програмно з Python, pdfminer - хороший варіант. Це дозволяє працювати зі структурою PDF в пам'яті як ієрархією об'єктів або серіалізувати її як XML.


-6

Моїм припущенням є Foxit PDF Reader, що дуже корисно виконати важливу роботу з редагування тексту у файлі PDF.


6
Я не міг знайти жодного способу в Foxit Reader переглянути внутрішню структуру PDF-файлу, подібну до PDF Inspector (з посиланням на запитання)
bmaupin
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.