Сравнение документов

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

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

Вместо ручного поиска различий между документами или их различными версиями вы можете использовать Aspose.Words для сравнения документов и получения изменений в форматировании, верхнем и нижнем колонтитулах, таблицах и многом другом.

В этой статье объясняется, как сравнивать документы и как задать расширенные свойства для сравнения.

Ограничения и поддерживаемые форматы файлов

Сравнение документов - очень сложная функция. Существуют различные комбинации элементов контента, которые необходимо проанализировать, чтобы выявить все различия. Причина этой сложности заключается в том, что алгоритм Aspose.Words стремится получить те же результаты сравнения, что и алгоритм Microsoft Word.

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

Сравнение двух документов

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

Aspose.Words позволяет идентифицировать различия в документах с помощью метода compare – это аналогично функции сравнения документов Microsoft Word. Позволяет проверять документы или их версии на предмет различий и изменений, включая изменения в форматировании, такие как изменение шрифта, изменение интервалов, добавление слов и абзацев.

В результате сравнения документы могут быть определены как равные или неравнозначные. Термин “равные” документы означает, что метод сравнения не позволяет представить изменения в виде ревизий. Это означает, что текст документа и его форматирование одинаковы. Но между документами могут быть и другие различия. Например, Microsoft Word поддерживает только изменения формата для стилей, и вы не можете отображать вставку/удаление стилей. Таким образом, в документах может быть другой набор стилей, а метод compare по-прежнему не производит изменений.

В следующем примере кода показано, как проверить, равны ли два документа или нет:

В следующем примере кода показано, как просто применить метод Compare к двум документам:

# The source document doc1.
doc1 = aw.Document()
builder = aw.DocumentBuilder(doc1)
builder.writeln("This is the original document.")

# The target document doc2.
doc2 = aw.Document()
builder = aw.DocumentBuilder(doc2)
builder.writeln("This is the edited document.")

# If either document has a revision, an exception will be thrown.
if (doc1.revisions.count == 0 and doc2.revisions.count == 0) :
    doc1.compare(doc2, "authorName", datetime.today())

# If doc1 and doc2 are different, doc1 now has some revisions after the comparison, which can now be viewed and processed.
self.assertEqual(2, doc1.revisions.count)

for r in doc1.revisions :
    print(f"Revision type: {r.revision_type}, on a node of type \"{r.parent_node.node_type}\"")
    print(f"\tChanged text: \"{r.parent_node.get_text()}\"")

# All the revisions in doc1 are differences between doc1 and doc2, so accepting them on doc1 transforms doc1 into doc2.
doc1.revisions.accept_all()

# doc1, when saved, now resembles doc2.
doc1.save(docs_base.artifacts_dir + "Document.Compare.docx")
doc1 = aw.Document(docs_base.artifacts_dir + "Document.Compare.docx")
self.assertEqual(0, doc1.revisions.count)
self.assertEqual(doc2.get_text().strip(), doc1.get_text().strip())

Укажите расширенные свойства сравнения

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

Например, Aspose.Words позволяет игнорировать изменения, внесенные во время операции сравнения для определенных типов объектов в исходном документе. Вы можете выбрать подходящее свойство для типа объекта, например ignore_headers_and_footers, ignore_formatting, ignore_comments, и другие, установив для них значение True.

Кроме того, Aspose.Words предоставляет свойство granularity, с помощью которого вы можете указать, следует ли отслеживать изменения по символу или по слову.

Другим распространенным свойством является выбор того, в каком документе показывать изменения для сравнения. Например, в диалоговом окне “Сравнить документы” в Microsoft Word есть опция “Показывать изменения в” – это также влияет на результаты сравнения. Aspose.Words предоставляет свойство target, которое служит для этой цели.

В следующем примере кода показано, как задать расширенные свойства сравнения: