ドキュメントの比較

ドキュメントの比較は、2 つのドキュメント間の変更を特定し、その変更をリビジョンとして含めるプロセスです。このプロセスでは、特定の 1 つのドキュメントのバージョンを含む 2 つのドキュメントを比較し、両方のドキュメント間の変更が最初のドキュメントのリビジョンとして表示されます。

比較方法は、単語を文字レベルまたは単語レベルで比較することによって実現されます。単語に少なくとも 1 文字の変更が含まれている場合、結果では、その違いは文字ではなく単語全体の変更として表示されます。この比較プロセスは、法律業界や金融業界では通常の作業です。

ドキュメント間またはドキュメントの異なるバージョン間の相違点を手動で検索する代わりに、Aspose.Words を使用してドキュメントを比較し、書式設定、ヘッダー/フッター、表などの内容の変更を取得できます。

この記事では、ドキュメントを比較する方法と、高度な比較プロパティを指定する方法について説明します。

制限事項とサポートされるファイル形式

ドキュメントの比較は非常に複雑な機能です。コンテンツの組み合わせには、すべての違いを認識するために分析する必要があるさまざまな部分があります。この複雑さの理由は、Aspose.Words が Microsoft Word 比較アルゴリズムと同じ比較結果を取得することを目指しているためです。

比較される 2 つのドキュメントの一般的な制限は、compare メソッドを呼び出す前にドキュメントにリビジョンが存在してはいけないということです。この制限は Microsoft Word に存在します。

2 つのドキュメントの比較

文書を比較すると、後者の文書と前者の差異が、前者の改訂として現れます。ドキュメントを変更すると、比較メソッドの実行後に各編集に独自のリビジョンが適用されます。

Aspose.Words では、compare メソッドを使用してドキュメントの相違点を識別できます。これは Microsoft Word ドキュメントの比較機能に似ています。これにより、ドキュメントまたはドキュメントのバージョンをチェックして、フォントの変更、間隔の変更、単語や段落の追加などの書式変更を含む相違点や変更点を見つけることができます。

比較の結果、ドキュメントが等しいか等しくないかを判断できます。 「等しい」ドキュメントという用語は、比較方法が変更をリビジョンとして表すことができないことを意味します。これは、ドキュメントのテキストとテキストの書式設定が同じであることを意味します。ただし、ドキュメント間には他にも違いがある可能性があります。たとえば、Microsoft Word はスタイルの形式リビジョンのみをサポートし、スタイルの挿入/削除を表すことはできません。したがって、ドキュメントには異なるスタイルのセットを含めることができますが、compare メソッドでは依然としてリビジョンが生成されません。

次のコード例は、2 つのドキュメントが等しいかどうかを確認する方法を示しています。

次のコード例は、Compare メソッドを 2 つのドキュメントに単純に適用する方法を示しています。

# 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_footersignore_formattingignore_comments などのオブジェクト タイプを True に設定することで、適切なプロパティを選択できます。

さらに、Aspose.Words には、変更を文字ごとに追跡するか単語ごとに追跡するかを指定できる granularity プロパティが用意されています。

もう 1 つの共通のプロパティは、比較の変更をどのドキュメントで表示するかを選択することです。たとえば、Microsoft Word の [ドキュメントの比較] ダイアログ ボックスには、[変更内容を表示する] オプションがあります。これは比較にも影響します。 Aspose.Words は、この目的範囲 target プロパティを提供します。

次のコード例は、詳細な比較プロパティを設定する方法を示しています。