문서 비교

문서 비교는 두 문서 간의 변경 사항을 식별하고 해당 변경 사항을 개정판으로 포함하는 프로세스입니다. 이 프로세스는 특정 문서의 버전을 포함하여 두 문서를 비교한 다음 두 문서 간의 변경 사항이 첫 번째 문서의 개정판으로 표시됩니다.

비교 방법은 문자 수준 또는 단어 수준에서 단어를 비교하여 수행됩니다. 단어에 하나 이상의 문자 변경이 포함된 경우 결과에서는 차이가 문자가 아닌 전체 단어 변경으로 표시됩니다. 이러한 비교 과정은 법률 및 금융 산업에서 일반적인 작업입니다.

문서 간 또는 문서 버전 간의 차이점을 수동으로 검색하는 대신 Aspose.Words를 사용하여 문서를 비교하고 서식, 머리글/바닥글, 표 등의 콘텐츠 변경 사항을 가져올 수 있습니다.

이 문서에서는 문서를 비교하는 방법과 고급 비교 속성을 지정하는 방법을 설명합니다.

제한 사항 및 지원되는 파일 형식

문서를 비교하는 것은 매우 복잡한 기능입니다. 모든 차이점을 인식하기 위해 분석해야 하는 콘텐츠 조합의 다양한 부분이 있습니다. 이렇게 복잡한 이유는 Aspose.Words가 Microsoft Word 비교 알고리즘과 동일한 비교 결과를 얻는 것을 목표로 하기 때문입니다.

비교되는 두 문서에 대한 일반적인 제한 사항은 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())

고급 비교 속성 {#specify-advanced-comparing-properties} 지정

문서를 비교할 때 적용할 수 있는 CompareOptions 클래스의 다양한 속성이 있습니다.

예를 들어 Aspose.Words를 사용하면 원본 문서 내의 특정 유형의 개체에 대한 비교 작업 중에 변경된 내용을 무시할 수 있습니다. ignore_headers_and_footers, ignore_formatting, ignore_comments 등 객체 유형에 적합한 속성을 True으로 설정하여 선택할 수 있습니다.

또한 Aspose.Words는 변경 사항을 문자별로 추적할지 또는 단어별로 추적할지 여부를 지정할 수 있는 granularity 속성을 제공합니다.

또 다른 공통 속성은 비교 변경 사항을 표시할 문서를 선택하는 것입니다. 예를 들어 Microsoft Word의 “문서 비교 대화 상자"에는 “변경 사항 표시” 옵션이 있으며 이는 비교 결과에도 영향을 미칩니다. Aspose.Words는 이러한 목적에 맞는 target 속성을 제공합니다.

다음 코드 예제에서는 고급 비교 속성을 설정하는 방법을 보여줍니다