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


84

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

  • шматування тексту може бути різним
  • порядок запису може бути різним
  • положення може відрізнятися в деяких пікселях

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


3
Частковою відповіддю було б використання pdftotext та порівняння вміщеного тексту.
Скліввз

Але це буде ігнорувати всю нетекстову інформацію, як-от рядки, рамки, малюнки, діаграми тощо. Я також думаю, що вона не відображає оптичні положення тексту в іншому структурному положенні.
Horcrux7,

Я згоден, це недостатній критерій. З іншого боку, це необхідний критерій, тому він адекватний як одиничний тест.
Скліввз

Раніше я ніколи не був у вашій ситуації, але я спробував ExamDiff Pro для порівняння PDF-файлів, і це мені вдалося .
cubex,

Ви завжди можете додати кращий модульний тест пізніше!
Sklivvz

Відповіді:


39

Оскільки такого інструменту, який ми написали, немає. Ви можете завантажити порівняльник вмісту i-net PDF та використати його. Я сподіваюся, що це допоможе іншим із цією ж проблемою. Якщо у вас є проблеми з цим або ви маєте для нас відгук, ви можете зв’язатися з нашою службою підтримки.

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


Перевага цього інструменту полягає в тому, що він не є ні порівняльником чистого тексту, ні порівнянням зображень. Він порівнює за структурою, перевіряє, чи містять елементи "однакові" - отже, ваші порівнювані PDF-файли не повинні збігатися на 100%, але мати певну схожість. І це безкоштовно.
гамма

Я б рекомендував і це! Він зірвався на документі, тому я надіслав його їм. Вони це виправили! : DI почуваюся чудово. Він може генерувати зображення з різницею або надавати текстовий звіт у консолі.
Янус Трольсен

4
@gamma Де цей додаток безкоштовний? Це коштує щонайменше 200 доларів США на рік (!). Це безкоштовно лише один раз протягом 30 днів. Це занадто дорого для того, що б я з цим зробив.
ygoe

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

Мені теж потрібно порівнювати PDF-файли - я придумав банку за допомогою apache pdfbox. Перевірте цей testautomationguru.com/... для прикладу та завантажте.
виграє

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
Янус Трольсен

Ось сценарій, який не записує тимчасові файли на диск і використовує файл poppler pdftoppm, який швидший за 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 або рішення, запропоноване в найкращому варіанті для перетворення 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

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


Я думаю, що порівняння 2 зображень є більш складним, ніж порівняння файлів PDF самостійно.
Horcrux7,

Порівняння зображень можна виконати за допомогою GnuWin32 tiffcmp. Я оновлю свою відповідь, щоб детальніше розглянути це.
danio

1

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


Цей інструмент порівнює піксель за пікселем. Це дуже просто. Питання полягало в порівнянні, як це робить людський народ.
Horcrux7,

1
@ Horcrux7: Але як інакше, ніж порівняння «піксель за пікселем», людські очі порівнюють різні сторінки, схожі на вигляд?!?
Курт Пфайфле,

@KurtPfeifle - Я усвідомлюю, що це старий коментар ... але люди не порівнюють зображення на основі пікселів; те, як люди порівнюють відмінності в зображеннях, є досить складним, але в значній мірі покладається на розпізнавання зразків та евристику.
CBRF23,

@ CBRF23: Правда, і я це знаю, - але вся ця евристика врешті-решт все ще випливає з порівняння "піксель за пікселем". Щодо деяких інших евристик вищого рівня, виконаних із ImageMagick, див. Деякі інші мої відповіді: один - два - три .
Курт Пфайфле,

@ CBRF23: ... і оригінальний плакат, (at) Hocrux7 навіть згадував "пікселі" у своєму питанні, і явно не хотів "внутрішньої структури" файлів, що порівнюються (хоча його коментар тут знову суперечить цьому).
Курт Пфайфле,

1

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



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.