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

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

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

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

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

Sklivvz 28.09.2008 15:05

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

Horcrux7 28.09.2008 15:30

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

Sklivvz 28.09.2008 15:35

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

Sklivvz 28.09.2008 15:36

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

Chris Charabaruk 28.09.2008 15:52

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

cubex 28.09.2008 15:35

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

Chanakya 29.09.2008 21:57

Какое умное, \\ * #? `% & Решение закрыть этот вопрос как 'неконструктивный'! (Надо любить, когда модераторы, закрывающие вопросы, уничтожают контент сообщества, который содержит теги, в которых эти же самые моды не имеют никакой личной репутации!)

Kurt Pfeifle 19.09.2012 01:22

Еще один случай бесполезного закрытия вопроса, касающегося очень актуального варианта использования в реальном мире. Мне жаль, что я не знал, как предложить здравые рассуждения о Мете, чтобы в конце концов это прекратилось. Просто чувствует так неправильно каждый раз, когда это происходит.

sjas 22.01.2014 18:02

связанные: superuser.com/q/46123/35237

Tobias Kienzler 02.12.2014 13:06

Существует БЕСПЛАТНАЯ библиотека для сравнения пикселей в формате PDF. Проверьте этот блог. testautomationguru.com/…

vins 17.06.2015 02:37

Вы можете использовать бесплатный инструмент Copyleaks Сравните два PDF. Вы можете загрузить до 12 файлов для сравнения. Кроме того, сравнение является текстовым, а не семантическим (стиль GIT).

No1Lives4Ever 26.07.2020 07:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
84
12
93 565
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

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

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

Чтобы сравнить сгенерированные файлы TIFF, я обнаружил, что GNU tiffcmp (для Windows часть 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 16.02.2010 11:37

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

danio 16.02.2010 12:07

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

  • конвертирует все страницы двух 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

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

Janus Troelsen 20.05.2011 00:25

Вот что я использовал для композитинга: 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

Janus Troelsen 20.05.2011 01:40

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

Brecht Machiels 31.03.2016 16:47

Мы также использовали 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  
Ответ принят как подходящий

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

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

gamma 14.10.2010 09:22

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

Janus Troelsen 11.06.2011 01:09

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

ygoe 11.10.2012 12:10

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

gamma 11.10.2012 15:16

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

vins 14.06.2015 03:11

Это отличный инструмент. К сожалению, его сильно отвлекают номера строк (я сравниваю созданный автором PDF-файл с доказательствами страницы издателя, у которых есть номера строк). Можно ли заставить инструмент игнорировать (строчные) числа?

bers 22.06.2017 10:49

Программа bluebeam pdf сделает это за вас

Вы можете пакетировать файлы сравнить pdf с помощью Tarkware Pdf Comparer. Но это не бесплатно и требует Adobe Acrobat.

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

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

Horcrux7 05.08.2010 13:07

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

Kurt Pfeifle 19.09.2012 01:49

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

CBRF23 18.08.2015 20:28

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

Kurt Pfeifle 18.08.2015 20:38

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

Kurt Pfeifle 18.08.2015 20:41

@KurtPfeifle - хорошие примеры использования ImageMagik - но я бы не стал сравнивать это с человеческим восприятием, люди просто не созданы для сравнения пикселей за пикселем. Я подтверждаю свою точку зрения: используя ваш пример мастера с четырьмя изображениями, выберите любые два из них и попытайтесь идентифицировать все разные пиксели без использования каких-либо инструментов - только ваши глаза. Я гарантирую, что ты не сможешь этого сделать. Вы можете заметить некоторые кластеры пикселей, которые отличаются, но без использования инструментов (например, программного обеспечения или письменных принадлежностей) вы не сможете этого сделать. Вы не можете определить, сколько здесь пикселей, не говоря уже о том, что все они разные.

CBRF23 18.08.2015 20:46

@KurtPfeifle - я не утверждаю, что этот ответ полезен - просто опровергая ваше утверждение о том, что сравнение пикселей за пикселями аналогично тому, как люди воспринимают различия в изображениях;)

CBRF23 18.08.2015 20:48

@ CBRF23: Вы упускаете суть. OP (от 2008 г.!) Попросил инструмент сравнить «большое количество файлов PDF» - просто потому, что он не хотел, чтобы это делали сами люди. Ответы (хорошие и плохие) здесь отражают то, что предлагали люди в то время. (Я сам наткнулся на эту ветку только в 2012 году!). --- Конечно Я не могу идентифицировать без инструментов все пиксели, которые отличаются! С чего вы взяли, что я так сказал? - Если вы используете попросить инструмент, вы должны основывать его на сравнении пикселей. И даже человеческое восприятие, в конце концов, основано на "попиксельном" просмотре ...

Kurt Pfeifle 18.08.2015 20:53

Позвольте нам продолжить обсуждение в чате.

CBRF23 18.08.2015 20:56

@ CBRF23: Извините, я просто ухожу + офлайн ....

Kurt Pfeifle 18.08.2015 20:57

@KurtPfeifle - не беспокойтесь, это обсуждение не по теме в посте семилетней давности - у нас обоих есть дела поважнее;)

CBRF23 18.08.2015 21:03

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

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

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

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

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

Tobias Kienzler 01.12.2014 12:25

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

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

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

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

Ваше здоровье!

Другие вопросы по теме