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


84

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

  • фрагменты текста могут быть разными
  • порядок записи может быть другим
  • положение может отличаться на несколько пикселей

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


3
Частичный ответ - использовать pdftotext и сравнить содержащийся текст.
Sklivvz

Но при этом будет игнорироваться вся нетекстовая информация, такая как линии, прямоугольники, изображения, диаграммы и т. Д. Я также думаю, что он не показывает оптические позиции текста, кроме структурной позиции.
Horcrux7,

Согласен, это недостаточный критерий. С другой стороны, это необходимый критерий, поэтому он подходит в качестве модульного теста.
Sklivvz

Никогда раньше не попадал в вашу ситуацию, но я попробовал ExamDiff Pro для сравнения PDF-файлов, и у меня это сработало.
cubex

Позже вы всегда сможете добавить лучший модульный тест!
Sklivvz

Ответы:


39

Потому что нет такого инструмента, который мы написали. Вы можете загрузить средство сравнения содержимого PDF- файлов i-net и использовать его. Я надеюсь, что это поможет другим с той же проблемой. Если у вас возникли проблемы или у вас есть отзыв для нас, вы можете обратиться в нашу службу поддержки.

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


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

Я тоже рекомендую это! Он разбился о документе, поэтому я отправил его им. Они это исправили! : D Чувствую себя прекрасно. Он может генерировать изображения с различиями или может предоставить вам текстовый отчет в консоли.
Janus Troelsen

4
@gamma Где это бесплатное приложение? Стоит минимум 200 долларов в год (!). Это бесплатно только один раз в течение 30 дней. Это слишком дорого для того, что я бы с этим делал.
ygoe

@LonelyPixel Ага, ты прав. Версия 1.0 была бесплатной (по состоянию на 14.10.2010). Мы немного изменили его, и теперь это платный инструмент (2012-10). Однако вы можете попробовать его в течение 30 дней без каких-либо ограничений. Он действительно приобрел много новых функций, стабильность и надежность. Надеюсь, вы еще посмотрите на него;)
гамма

Мне тоже нужно сравнить файлы pdf - я придумал банку, используя apache pdfbox. Посетите этот testautomationguru.com/… для примера и загрузки.
vins

21

На самом деле есть инструмент diffpdf.

http://www.qtrac.eu/diffpdf.html

Его слабость в том, что он плохо реагирует, когда при добавлении новый текст частично смещается на новую страницу. Например, если старую страницу 4 нужно сравнить с концом страницы 5 и началом страницы 6, вам потребуется сместить параметры, чтобы сравнить два фрагмента по отдельности.


1
Оригинальная версия с открытым исходным кодом все еще доступна по адресу qtrac.eu/diffpdf-foss.html
Тобиас Кинцлер,

13

Я использовал самодельный сценарий, который

  • конвертирует все страницы двух PDF-файлов в растровые изображения
  • раскрашивает страницы PDF 1 в красный по белому
  • меняет белый цвет на прозрачный на страницах PDF 2
  • накладывает каждую страницу из PDF 2 поверх соответствующей страницы из PDF 1
  • выполняет преобразование / раскрашивание и наложение параллельно на нескольких ядрах

Используемое программное обеспечение:

  • GhostScript для преобразования PDF в растровое изображение
  • ImageMagick для раскрашивания, прозрачности и наложения
  • inotify для синхронизации параллельных процессов
  • любое средство просмотра изображений с поддержкой PNG для просмотра результата

Плюсы:

  • простая реализация
  • все используемые инструменты имеют открытый исходный код
  • отлично подходит для поиска небольших различий в макете

Минусы:

  • преобразование медленное
  • основные различия между PDF-файлами (например, разбиение на страницы) приводят к беспорядку
  • растровые изображения не масштабируются
  • работает только с черно-белым текстом и диаграммами
  • нет простого в использовании графического интерфейса

Я искал инструмент, который делал бы то же самое на уровне PDF / PostScript.

Вот как наш скрипт вызывает утилиты (обратите внимание, что ImageMagick за кулисами использует GhostScript для преобразования PDF-> PNG):

$ convert -density 150x150 -fill red -opaque black +antialias 1.pdf back%02d.png
$ convert -density 150x150 -transparent white +antialias 2.pdf front%02d.png
$ composite front01.png back01.png result01.png # do this for all pairs of images

1
Почему бы не поделиться полным сценарием?
Янус Трельсен

1
Вот что я использовал для композитинга:for i in $(seq -w 0 05); do /cygdrive/c/Progra~1/ImageMagick-6.6.9-Q8/composite.exe 1-$i.png 2-$i.png result-$i.png; done
Янус Трельсен

Вот сценарий, который не записывает временные файлы на диск и использует pdftoppm Poppler, который быстрее, чем Ghostscript: gist.github.com/brechtm/891de9f72516c1b2cbc1 . Он выводит один JPG для каждой страницы PDF-файлов в pdfdiffкаталоге и дополнительно печатает номера страниц, которые различаются в двух PDF-файлах.
Brecht Machiels

12

Кажется, я не вижу этого здесь, поэтому вот оно: через суперпользователя: Как сравнить различия между двумя файлами PDF? (ответ №229891, автор @slestak) , есть

https://github.com/vslavik/diff-pdf

(шаги сборки для Ubuntu Natty можно найти в get-diff-pdf.sh )

Насколько я понимаю, он в основном накладывает текст / графику каждой страницы в pdf (-ах), позволяя вам легко увидеть, были ли какие-либо изменения ...

Ура!


9

Мы также использовали pdftotext (см. Ответ Sklivvz) для создания версий PDF-файлов в формате ASCII и wdiff для их сравнения.

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

Чтобы получить красивый цветной вывод из wdiff, используйте этот сценарий оболочки:

#!/bin/sh
RED=$'\e'"[1;31m"
GREEN=$'\e'"[1;32m"
RESET=$'\e'"[0m"
wdiff -w$RED -x$RESET -y$GREEN -z$RESET -n $1 $2

4

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

Для создания изображений из PDF вы можете использовать Adobe PDF Library или решение, предложенное в Best way для преобразования файлов PDF в файлы TIFF .

Чтобы сравнить сгенерированные файлы TIFF, я нашел GNU tiffcmp (для окон - часть GnuWin32 tiff ), и tiffinfo хорошо поработал. Используйте tiffcmp -l и подсчитайте количество строк вывода, чтобы найти различия. Если вас устраивает небольшое изменение содержимого (например, различия сглаживания), используйте tiffinfo для подсчета общего количества пикселей, и затем вы можете сгенерировать значение процентной разницы.

Кстати, для тех, кто выполняет простое сравнение PDF-файлов, структура которых не изменилась, можно использовать diff из командной строки и игнорировать определенные шаблоны, например, с GNU diff 2.7:

diff --brief -I xap: -I xapMM: -I / CreationDate -I / BaseFont -I / ID --binary --text

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


Я думаю, что сравнение двух изображений сложнее, чем сравнение самих файлов PDF.
Horcrux7

Сравнение изображений можно выполнить с помощью GnuWin32 tiffcmp. Я обновлю свой ответ, чтобы подробнее остановиться на этом.
Данио

1

Наш продукт, PDF Comparator - http://www.premediasystems.com/pdfc.html "- сделает это довольно элегантно и эффективно. Он также платный и предназначен только для Mac OS X.


Этот инструмент сравнивает пиксель за пикселем. Это очень просто. Вопрос был в сравнении, как это делают люди.
Horcrux7 05

1
@ Horcrux7: Но как еще, кроме сравнения «пиксель за пикселем», человеческие глаза сравнивают разные страницы, которые выглядят одинаково?!?
Курт Пфайфл

@KurtPfeifle - Я понимаю, что это старый комментарий ... но люди не сравнивают изображения по пикселям; Способ, которым люди сравнивают различия в изображениях, довольно сложен, но в значительной степени зависит от распознавания образов и эвристики.
CBRF23,

@ CBRF23: Верно, и я в курсе, но вся эта эвристика, в конце концов, все еще коренится в "попиксельных" сравнениях. Для некоторых других эвристик более высокого уровня, выполняемых с ImageMagick, см. Некоторые из моих других ответов: один - два - три .
Курт Пфайфл

@ CBRF23: ... и исходный постер, (at) Hocrux7 даже упомянул «пиксели» в своем вопросе и явно не хотел, чтобы сравнивалась «внутренняя структура» файлов (хотя его комментарий здесь снова противоречит этому).
Курт Пфайфл,

1

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



Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.