Bandingkan Dokumen
Membandingkan dokumen adalah proses yang mengidentifikasi perubahan antara dua dokumen dan berisi perubahan sebagai revisi. Proses ini membandingkan dua dokumen, termasuk versi dari satu dokumen tertentu, kemudian perubahan di antara kedua dokumen tersebut akan ditampilkan sebagai revisi di dokumen pertama.
Metode perbandingan dicapai dengan membandingkan kata-kata pada tingkat karakter atau pada tingkat kata. Jika sebuah kata berisi perubahan setidaknya satu karakter, hasilnya, perbedaan tersebut akan ditampilkan sebagai perubahan seluruh kata, bukan karakter. Proses perbandingan ini merupakan tugas biasa dalam industri hukum dan keuangan.
Alih-alih mencari perbedaan antar dokumen secara manual atau di antara versi yang berbeda, Anda dapat menggunakan Aspose.Words untuk membandingkan dokumen dan mendapatkan perubahan konten dalam pemformatan, header/footer, tabel, dan lainnya.
Artikel ini menjelaskan cara membandingkan dokumen dan cara menentukan properti pembanding lanjutan.
Coba online
Anda dapat membandingkan dua dokumen secara online dengan menggunakan Pendaftaran dokumen secara online alat.
Perhatikan bahwa metode perbandingan, yang dijelaskan di bawah, digunakan dalam alat ini untuk memastikan mendapatkan hasil yang sama. Jadi Anda akan mendapatkan hasil yang sama bahkan dengan menggunakan alat perbandingan online atau dengan menggunakan metode perbandingan dalam Aspose.Words.
Batasan dan Format File yang Didukung
Membandingkan dokumen adalah fitur yang sangat kompleks. Ada berbagai bagian kombinasi konten yang perlu dianalisis untuk mengenali semua perbedaan. Alasan kompleksitas ini adalah karena Aspose.Words bertujuan untuk mendapatkan hasil perbandingan yang sama dengan algoritma perbandingan Microsoft Word.
Batasan umum untuk dua dokumen yang dibandingkan adalah dokumen tersebut tidak boleh memiliki revisi sebelum memanggil metode compare karena batasan ini ada di Microsoft Word.
Bandingkan Dua Dokumen
Saat Anda membandingkan dokumen, perbedaan dokumen terakhir dari dokumen sebelumnya muncul sebagai revisi dari dokumen sebelumnya. Saat Anda memodifikasi dokumen, setiap pengeditan akan memiliki revisinya sendiri setelah menjalankan metode compare.
Aspose.Words memungkinkan Anda mengidentifikasi perbedaan dokumen menggunakan metode Compare - ini mirip dengan fitur perbandingan dokumen Microsoft Word. Ini memungkinkan Anda untuk memeriksa dokumen atau versi dokumen untuk menemukan perbedaan dan perubahan, termasuk modifikasi pemformatan seperti perubahan font, perubahan spasi, penambahan kata dan paragraf.
Sebagai hasil dari perbandingan, dokumen dapat ditentukan sama atau tidak sama. Istilah dokumen “setara” berarti bahwa metode perbandingan tidak dapat merepresentasikan perubahan sebagai revisi. Ini berarti bahwa teks dokumen dan pemformatan teks adalah sama. Tetapi mungkin ada perbedaan lain di antara dokumen. Misalnya, Microsoft Word hanya mendukung revisi format untuk gaya, dan Anda tidak dapat mewakili penyisipan/penghapusan gaya. Jadi dokumen dapat memiliki kumpulan gaya yang berbeda, dan metode Compare tetap tidak menghasilkan revisi.
Contoh kode berikut menunjukkan cara memeriksa apakah dua dokumen sama atau tidak:
// 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"); |
Contoh kode berikut menunjukkan cara menerapkan metode Compare
ke dua dokumen:
// 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"); |
Tentukan Opsi Perbandingan Lanjutan
Ada banyak properti berbeda dari kelas CompareOptions yang dapat Anda terapkan saat ingin membandingkan dokumen.
Misalnya, Aspose.Words memungkinkan Anda mengabaikan perubahan yang dibuat selama operasi perbandingan untuk jenis objek tertentu dalam dokumen asli. Anda dapat memilih properti yang sesuai untuk jenis objek, seperti IgnoreHeadersAndFooters, IgnoreFormatting, IgnoreComments, dan lainnya dengan menyetelnya ke “true”.
Selain itu, Aspose.Words menyediakan properti Granularity yang dapat digunakan untuk menentukan apakah akan melacak perubahan berdasarkan karakter atau kata.
Properti umum lainnya adalah pilihan dokumen mana yang akan menampilkan perubahan perbandingan. Misalnya, kotak dialog “Bandingkan dokumen” di Microsoft Word memiliki opsi “Tampilkan perubahan” – ini juga memengaruhi hasil perbandingan. Aspose.Words menyediakan properti Target yang melayani tujuan ini.
Contoh kode berikut menunjukkan cara mengatur properti pembanding lanjutan:
// 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"); |