Belgeleri Karşılaştır

Belgeleri karşılaştırma işlemi iki belgedeki değişiklikleri belirler ve değişiklikleri revizyonlar olarak içeri aktarır. Bu süreç, her türlü belgeyi karşılaştırır, hatta belirli bir belgelerin farklı sürümlerini de karşılaştırır ve ardından her iki belge arasındaki değişiklikler ilk belge içerisinde revizyonlar olarak gösterilir.

Karşılaştırma yöntemi, karakter seviyesinde veya kelime seviyesinde kelimeleri karşılaştırarak elde edilir. Bir kelimenin içinde en az bir karakter değişikliği varsa, sonuçta, fark bir karakter değişikliği yerine tüm kelime olarak görüntülenir. Bu karşılaştırma süreci yasal ve finansal sektörlerde normal bir görevdir.

Farklı belgeler arasında veya farklı sürümleri arasında el ile aramalar yapmak yerine, Aspose.Words’u belgeleri karşılaştırmak ve biçimlendirme, başlık/ayaklar, tablolar ve daha fazlası için içerik değişikliklerini almak için kullanabilirsiniz.

Bu makale belgeleri nasıl karşılaştıracağınızı ve gelişmiş karşılaştırma özelliklerini nasıl belirteceğinizi açıklar.

Sınırlamalar ve Desteklenen Dosya Biçimleri {#limitations-and-supported-file-formats}''

Belgeleri karşılaştırma, çok karmaşık bir özelliktir. Tüm farklılıkları tanımak için içeriğin birleştirilmiş parçalarının analiz edilmesi gerekmektedir. Bu karmaşıklığın nedeni Aspose.Wordsnin Microsoft Word karşılaştırma algoritması ile elde etmek istediği karşılaştırma sonuçlarına ulaşmasıdır.

Karşılaştırılacak iki belge için genel kısıtlama, karşılaştırma yöntemini çağırmadan önce revizyonların olmaması gerektiği ve bu sınırlamanın Microsoft Word’da mevcut olduğu yönündedir.

İki Belgeyi Karşılaştır"

Belgeleri karşılaştırırken, daha sonraki belgedeki değişiklikler önceki belgeye karşı revizyonlar olarak görünür. Bir belgeyi değiştirdiğinizde, her düzenleme karşılaştırma yöntemini çalıştırdıktan sonra kendi revizyona sahip olacaktır.

Aspose.Words size belgeleri yöntem Compare ile karşılaştırmanızı sağlar – bu, Microsoft Word belgeleri karşılaştırma özelliğine benzer. Sizi, belgeler veya belge sürümlerini aralarındaki farklar ve değişiklikler bulmak için kontrol etmenize olanak tanır, yazı tipi değişikliği gibi biçimlendirme değişiklikleri, boşluk değişiklikleri, sözcüklerin ve paragrafların eklenmesi de dahil.

Karşılaştırmanın bir sonucu olarak belgeler eşit veya eşit olmayan olarak belirlenebilir. “eşit” belgeler terimi karşılaştırma yönteminin değişiklikleri revizyonlar olarak temsil edemeyeceğini ifade eder. Bu, belge metni ve metin biçimlendirmesi aynı demektir. Ancak belgeler arasında diğer farklılıklar olabilir. Örneğin, Microsoft Word sadece stiller için biçim revizyonlarını destekler ve stil ekleme/silme temsil edilemez. Bu nedenle belgelerin farklı bir stil kümesi olabilir ve Compare yöntemi hala hiçbir revizyon üretir.

Aşağıdaki kod örneği iki belgenin eşit olup olmadığını nasıl kontrol edeceğini göstermektedir:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document docA = new Document(dataDir + "DocumentA.doc");
Document docB = new Document(dataDir + "DocumentB.doc");
docA.compare(docB, "user", new Date());
if (docA.getRevisions().getCount() == 0)
System.out.println("Documents are equal");
else
System.out.println("Documents are not equal");

Aşağıdaki kod örneğinde iki belgeye basitçe Compare yöntemini nasıl uygulayacağınız gösterilmiştir:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// The source document doc1
Document doc1 = new Document();
DocumentBuilder builder = new DocumentBuilder(doc1);
builder.writeln("This is the original document.");
// The target document doc2
Document doc2 = new Document();
builder = new DocumentBuilder(doc2);
builder.writeln("This is the edited document.");
// If either document has a revision, an exception will be thrown
if (doc1.getRevisions().getCount() == 0 && doc2.getRevisions().getCount() == 0)
doc1.compare(doc2, "authorName", new Date());
// If doc1 and doc2 are different, doc1 now has some revisions after the comparison, which can now be viewed and processed
if (doc1.getRevisions().getCount() == 2)
System.out.println("Documents are equal");
for (Revision r : doc1.getRevisions())
{
System.out.println("Revision type: " + r.getRevisionType() + ", on a node of type " + r.getParentNode().getNodeType() + "");
System.out.println("\tChanged text: " + r.getParentNode().getText() + "");
}
// All the revisions in doc1 are differences between doc1 and doc2, so accepting them on doc1 transforms doc1 into doc2
doc1.getRevisions().acceptAll();
// doc1, when saved, now resembles doc2
doc1.save(dataDir + "Document.Compare.docx");
doc1 = new Document(dataDir + "Document.Compare.docx");
if (doc1.getRevisions().getCount() == 0)
System.out.println("Documents are equal");
if (doc2.getText().trim() == doc1.getText().trim())
System.out.println("Documents are equal");

Gelişmiş Karşılaştırma Seçeneklerini Belirtin

Dokümanları karşılaştırmak istediğinizde uygulayabileceğiniz birçok farklı CompareOptions sınıfı özelliği vardır.

Örneğin, Aspose.Words orijinal belge içindeki belirli türde nesnelere yapılan karşılaştırma işlemi sırasında yapılan değişiklikleri görmezden gelmenizi sağlar. Nesne türü için uygun özelliği seçebilirsiniz, örneğin IgnoreHeadersAndFooters, IgnoreFormatting, IgnoreComments ve diğerleri onları true’e ayarlayarak.

Ayrıca, Aspose.Words ‘de karakter veya kelime bazında değişiklikleri takip edip etmeyeceğini belirtebileceğiniz Granularity özelliğini sağlar.

Başka ortak bir özellik de karşılaştırma değişikliklerini hangi belgeye göstereceğine dair bir seçimdir. Örneğin, Microsoft Word ‘deki “belgeler arasındaki karşılaştırma iletişim kutusu” seçeneğinde “Değişiklikleri Göster” seçeneği vardır; bu da karşılaştırma sonuçlarını etkiler. Aspose.Words bu amacı hizmet eden Target özelliğini sunar.

Aşağıdaki kod örneği, nasıl gelişmiş karşılaştırma özelliklerini ayarlayacağını göstermektedir:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Create the original document
Document docOriginal = new Document();
DocumentBuilder builder = new DocumentBuilder(docOriginal);
// Insert paragraph text with an endnote
builder.writeln("Hello world! This is the first paragraph.");
builder.insertFootnote(FootnoteType.ENDNOTE, "Original endnote text.");
// Insert a table
builder.startTable();
builder.insertCell();
builder.write("Original cell 1 text");
builder.insertCell();
builder.write("Original cell 2 text");
builder.endTable();
// Insert a textbox
Shape textBox = builder.insertShape(ShapeType.TEXT_BOX, 150, 20);
builder.moveTo(textBox.getFirstParagraph());
builder.write("Original textbox contents");
// Insert a DATE field
builder.moveTo(docOriginal.getFirstSection().getBody().appendParagraph(""));
builder.insertField(" DATE ");
// Insert a comment
Comment newComment = new Comment(docOriginal, "John Doe", "J.D.", new Date());
newComment.setText("Original comment.");
builder.getCurrentParagraph().appendChild(newComment);
// Insert a header
builder.moveToHeaderFooter(HeaderFooterType.HEADER_PRIMARY);
builder.writeln("Original header contents.");
// Create a clone of our document, which we will edit and later compare to the original
Document docEdited = (Document)docOriginal.deepClone(true);
Paragraph firstParagraph = docEdited.getFirstSection().getBody().getFirstParagraph();
// Change the formatting of the first paragraph, change casing of original characters and add text
firstParagraph.getRuns().get(0).setText("hello world! this is the first paragraph, after editing.");
firstParagraph.getParagraphFormat().setStyle(docEdited.getStyles().get(StyleIdentifier.HEADING_1));
// Edit the footnote
Footnote footnote = (Footnote)docEdited.getChild(NodeType.FOOTNOTE, 0, true);
footnote.getFirstParagraph().getRuns().get(1).setText("Edited endnote text.");
// Edit the table
Table table = (Table)docEdited.getChild(NodeType.TABLE, 0, true);
table.getFirstRow().getCells().get(1).getFirstParagraph().getRuns().get(0).setText("Edited Cell 2 contents");
// Edit the textbox
textBox = (Shape)docEdited.getChild(NodeType.SHAPE, 0, true);
textBox.getFirstParagraph().getRuns().get(0).setText("Edited textbox contents");
// Edit the DATE field
FieldDate fieldDate = (FieldDate)docEdited.getRange().getFields().get(0);
fieldDate.setUseLunarCalendar(true);
// Edit the comment
Comment comment = (Comment)docEdited.getChild(NodeType.COMMENT, 0, true);
comment.getFirstParagraph().getRuns().get(0).setText("Edited comment.");
// Edit the header
docEdited.getFirstSection().getHeadersFooters().getByHeaderFooterType(HeaderFooterType.HEADER_PRIMARY).getFirstParagraph().getRuns().get(0).setText("Edited header contents.");
// Apply different comparing options
CompareOptions compareOptions = new CompareOptions();
compareOptions.setIgnoreFormatting(false);
compareOptions.setIgnoreCaseChanges(false);
compareOptions.setIgnoreComments(false);
compareOptions.setIgnoreTables(false);
compareOptions.setIgnoreFields(false);
compareOptions.setIgnoreFootnotes(false);
compareOptions.setIgnoreTextboxes(false);
compareOptions.setIgnoreHeadersAndFooters(false);
compareOptions.setTarget(ComparisonTargetType.NEW);
// compare both documents
docOriginal.compare(docEdited, "John Doe", new Date(), compareOptions);
docOriginal.save(dataDir + "Document.CompareOptions.docx");