[Перевод] Как сравнить два PDF-документа
Существует несколько фундаментальных задач, которые встречаются при работе с большинством, а то и со всеми документами. Одна из них — сравнить две версии одного и того же документа. Это могут быть юридические соглашения или исправления в отчёте, которые, скорее всего, в наши дни будут представлены в формате PDF. В этой статье рассказывается, как можно сравнить содержимое двух файлов PDF или почему у вас не получится этого сделать нельзя.
Сравнение PDF-файлов не является функцией, которую вы, вероятно, найдёте в приложениях, имеющих широкую поддержку формата обычного документа. Скорее всего, они предложат некоторую форму редактирования, но не смогут провести какое-либо сравнение между двумя файлами. Попробуйте Adobe Acrobat Reader, в нём этот инструмент обязательно будет, но единственный способ его получить — обновиться до полной версии Adobe Acrobat DC по ежемесячной подписке. Это предложение, от которого большинство вполне разумно откажется.
Сравнить текст
Бесплатное решение — экспортировать каждый из документов в виде текста и использовать мощный текстовый редактор, такой как BBEdit, для сравнения этих текстовых документов. Если у вас установлен бесплатный Xcode SDK от Apple, вы можете использовать его приложение FileMerge, которое скрыто внутри пакета приложений и доступно с помощью команды Open Developer Tool
в меню Xcode, я же предпочитаю команду Find Differences
в меню поиска BBEdit.
Затем вы узнаете, насколько разнообразным может быть текст, экспортированный из файлов PDF. Один из экспериментов, который стоит попробовать, — это сделать копию документа PDF со сложно форматированным текстом, открыть и сохранить его несколько раз с помощью разных приложений, но без изменения его содержимого. Это может перемещать фрагменты текста, даже если при просмотре PDF-файла будет казаться, что он вообще не изменился. Таким образом, хотя вы сможете найти весь контент. У вас, вероятно, будет много ложных срабатываний, в тех случаях, когда есть различия между экспортированным текстом, но не в том, что вы видите в самих документах.
Заплатить за Acrobat
Насколько я понимаю, единственная «серьезная» функция, с помощью которой можно сравнивать файлы PDF — это функция в платной версии Adobe Acrobat DC. Получив свою копию, я испытал её и обнаружил, что она также имеет ограниченное применение для таких задач. Помимо стандартного интерфейса The Martian, который, к счастью, свойственен Acrobat, небольшие различия между PDF-файлами часто вызывают сотни различий, о которых сообщает Acrobat. Если у вас есть целый день, чтобы проработать каждую страницу, это может быть простой работой, но если вам нужен чистый и простой список различий, вам, скорее всего, не повезёт.
Чтобы проверить это, я взял текстовый документ с пронумерованными строками, как это часто бывает во многих юридических документах, и распечатал его в формате PDF. Затем я внёс в него несколько небольших изменений, превратил его в PDF-файл и сравнил два результата.
Поскольку Acrobat не понимает никакой базовой структуры, в которой незначительные изменения в тексте вызвали перенумерацию строк, Acrobat пометил каждую строку как отличающуюся. Он также уловил все изменения в макете страницы, которые не повлекли за собой никаких изменений в содержании: удаление единственной строки на первой странице документа, фактически сделало остальную часть документа длинной и утомительной серией изменений.
Однако одним из преимуществ является то, что Acrobat точно сообщает, когда документы не изменились, даже если текст, экспортированный из них, изменился в своей структуре. Кроме этого, я не получил от Acrobat особой помощи, поскольку он был просто переполнен несущественными различиями.
Есть куда расти?
Учитывая популярность PDF-документов, можно предположить, что существует большой спрос на лучшие инструменты для сравнения. Однако любое решение обречено на провал, если оно не может преодолеть фундаментальное ограничение дизайна формата PDF: оно не хранит контент в какой-либо форме семантической структуры, только то, что необходимо для того, чтобы каждая страница выглядела корректно. Вы можете изменить это, вручную объединяя каждый блок текста вместе. А такая процедура, необходима для некоторых типов PDF, которые, например, должны быть совместимы с программами чтения текста. Но вряд ли кто-то потрудится сделать это. И будет большим исключением, если вы обнаружите документы, которые были так структурированы.
Внутри файла PDF находятся десятки тысяч объектов, каждый из которых содержит код для создания части страницы. Если вы зададите одно слово в абзаце и зададите для него другой шрифт и толщину, механизм PDF может решить разделить его как другой объект для размещения на этой странице. Но между этими объектами нет семантической связи, и отдельные авторы PDF могут даже размещать каждое слово на странице независимо, как отдельный объект. Тогда выяснение того, как эти слова объединяются в текст, было бы очень сложной задачей даже для AI.
Из-за того, что формат файла такой старый, но и не только из-за этого, он позволяет редакторам прикреплять объекты в конце файла, чтобы избавиться от необходимости снова записывать весь файл. Иногда механизм PDF «сглаживает» все эти добавленные изменения, что может полностью реструктурировать объекты.
Печальная правда заключается в том, что формат PDF никогда не был предназначен для обеспечения доступа к его содержимому, кроме как, для правильного отображения его на экране или в изображении страницы для печати. Несмотря на это, весь мир ежедневно хранит миллионы своих самых важных документов в формате PDF. Вам не кажется это немного странным?…
Какими инструментами для сравнения пользуетесь вы?