Как я могу найти различия в визуально идентичных файлах PDF?

699
ShadSterling

У меня есть два PDF-файла, которые выглядят одинаково при просмотре или распечатке, и diffэто бинарные и разные. Как я могу узнать, в чем различия?

Я предпочитаю ответ, который будет работать на Mac OS X или OpenSUSE.

1
Поскольку вы упоминаете `diff`, я предполагаю, что вы используете какой-то Unix? terdon 10 лет назад 0
Mac OS X, с MacPorts. Я нашел часть exiftool в моем ответе, когда писал этот вопрос, подумал, что могу добавить эту деталь в свой ответ, а затем получил сообщение, что не могу ответить на свой вопрос в течение 8 часов. ShadSterling 10 лет назад 0
Я могу использовать любой ответ, который будет работать в Mac OS X или в OpenSUSE, но в духе создания ответов, полезных для всех, я хотел бы получить ответы, которые работают только в других системах. ShadSterling 10 лет назад 0
Этот вопрос, как представляется, касается видимых различий, а не невидимых различий, и требует решения для конкретной платформы. ShadSterling 10 лет назад 0

2 ответа на вопрос

0
Stefan Ludwig

For starters, I would try strings on those files and pipe it through grep "rdf" to see what comes up.

strings x.pdf | grep "rdf" 
Пожалуйста, объясните, почему вы это сделали. Ответ, который вы дали, отчасти только для инсайдеров. Проверьте [ответ]. user 99572 is fine 10 лет назад 0
Я не уверен, что следую. @Polyergic попросил способы найти различия. Если это что-то вроде даты создания или изменения, встроенной в PDF (метаданные rdf), приведенные выше команды найдут это. Без большего контекста о том, что нам нужно выяснить, трудно дать более конкретный ответ. И я предполагаю, что об использовании Acrobat не может быть и речи. Stefan Ludwig 10 лет назад 0
`strings` не находит различий, он извлекает строки. Я бы поддержал это, потому что это полезно, но, очевидно, моя репутация слишком низкая, чтобы признать полезные, но неполные ответы на мой собственный вопрос. ShadSterling 10 лет назад 0
Было бы неплохо знать, что это можно сделать с помощью Acrobat, но я не смог бы использовать этот ответ. ShadSterling 10 лет назад 0
0
ShadSterling

В оболочках, которые поддерживают Process Substutition (видно на Q317819 ), diffможет быть дан вывод какой - либо команды, который генерирует текстовое представление - например, exiftool:

diff -u <(exiftool -a -v one.pdf) <(exiftool -a -v two.pdf) 

Предложение Стефанаstrings также генерирует текстовое представление и может использоваться таким же образом:

diff -u <(strings one.pdf) <(strings two.pdf) 

Вывод из exiftoolили stringsявляется относительно читабельным, но не представляет весь файл. exiftoolпоказывает только метаданные и stringsпоказывает только выдержки, которые составляют 4 или более байтов действительного текста ASCII; различия, которые не распознаются как метаданные или как строки ASCII, не будут найдены. Нечитаемое, но полное текстовое представление может быть сделано с помощью od:

diff -u <(od -vcw one.pdf) <(od -vcw two.pdf) 

(Если odнедоступно, можно сделать еще менее читабельное, но все еще полное текстовое представление с помощью hexdumpили hexcat; в MacPorts реализация GNU odможет быть установлена ​​как god. Не все реализации поддерживают одинаковые параметры.)

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

Я считаю, что каждая современная настольная ОС, кроме Windows, имеет оболочку, которая поддерживает процесс подстановки, установленный по умолчанию; для Windows доступно несколько таких оболочек, но вам придется перепрыгнуть через некоторые обручи, чтобы заставить их работать.

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