Melacak Perubahan dalam Dokumen
Fungsionalitas lacak perubahan, juga dikenal sebagai meninjau, memungkinkan Anda melacak perubahan pada konten dan pemformatan yang dibuat oleh Anda atau pengguna lain. Fitur perubahan trek ini dengan Aspose.Words mendukung perubahan trek dalam Microsoft Word. Dengan fungsi ini, Anda dapat mengakses revisi individual dalam dokumen Anda dan menerapkan properti yang berbeda padanya.
Saat Anda mengaktifkan fitur lacak perubahan, semua elemen dokumen yang disisipkan, dihapus, dan dimodifikasi akan disorot secara visual dengan informasi tentang oleh siapa, kapan, dan apa yang diubah. Objek yang membawa informasi tentang apa yang diubah disebut “melacak perubahan”. Misalnya, asumsikan bahwa Anda ingin meninjau dokumen dan membuat perubahan penting-ini mungkin berarti Anda perlu membuat revisi. Selain itu, Anda mungkin perlu menyisipkan komentar untuk membahas beberapa perubahan. Di situlah pelacakan perubahan dokumen masuk.
Artikel ini menjelaskan cara mengelola dan melacak perubahan yang dibuat oleh banyak pengulas pada dokumen yang sama, serta properti untuk melacak perubahan.
Apa itu Revisi
Sebelum menyelami revisi, mari kita jelaskan arti dari revisi. A revision adalah perubahan yang terjadi di satu simpul dokumen sedangkan grup revisi, yang diwakili oleh kelas RevisionGroup, adalah grup revisi berurutan yang terjadi di banyak simpul dokumen. Revisi adalah alat untuk melacak perubahan.
Revisi digunakan dalam fitur pelacakan perubahan dan dalam fitur bandingkan dokumen, di mana revisi muncul sebagai hasil perbandingan. Jadi, revisi dalam fitur perubahan pelacakan menunjukkan oleh siapa dan apa yang diubah.
Aspose.Words mendukung berbagai jenis revisi, serta dalam Microsoft Word, seperti Penyisipan, Penghapusan, FormatChange, StyleDefinitionChange, dan Pemindahan. Semua jenis revisi diwakili dengan pencacahan RevisionType.
Memulai dan Menghentikan Perubahan Pelacakan
Mengedit dokumen biasanya tidak dihitung sebagai revisi hingga Anda mulai melacaknya. Aspose.Words memungkinkan Anda melacak semua perubahan dalam dokumen Anda secara otomatis dengan langkah-langkah sederhana. Anda dapat dengan mudah memulai proses pelacakan perubahan dengan menggunakan metode StartTrackRevisions. Jika Anda perlu menghentikan proses pelacakan perubahan sehingga pengeditan di masa mendatang tidak dianggap sebagai revisi, Anda harus menggunakan metode StopTrackRevisions.
StartTrackingRevisions
tidak mengubah status properti TrackRevisions dan tidak menggunakan nilainya untuk tujuan pelacakan revisi. Selain itu, jika sebuah simpul dipindahkan dari satu lokasi ke lokasi lain di dalam dokumen yang dilacak, maka revisi pemindahan akan dibuat, termasuk pemindahan dari dan pemindahan ke jangkauan.
Di akhir proses pelacakan perubahan dalam dokumen Anda, Anda bahkan dapat menerima semua revisi atau menolaknya untuk mengembalikan dokumen ke bentuk aslinya. Ini dapat dicapai dengan menggunakan metode AcceptAllRevisions atau RejectAll. Selain itu, Anda dapat menerima atau menolak setiap revisi secara terpisah dengan menggunakan metode Accept atau Reject.
Semua perubahan akan dilacak untuk satu iterasi dari saat Anda memulai proses hingga saat Anda menghentikannya. Hubungan antara iterasi yang berbeda direpresentasikan sebagai skenario berikut: Anda menyelesaikan proses pelacakan, lalu membuat beberapa perubahan, dan mulai melacak perubahan lagi. Dengan skenario ini, semua perubahan yang tidak Anda terima atau tolak akan ditampilkan lagi.
AcceptAllRevisions
mirip dengan “Terima Semua Perubahan” di Microsoft Word.
Contoh kode berikut menunjukkan cara bekerja dengan perubahan pelacakan:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
Body body = doc.getFirstSection().getBody(); | |
Paragraph para = body.getFirstParagraph(); | |
// Add text to the first paragraph, then add two more paragraphs. | |
para.appendChild(new Run(doc, "Paragraph 1. ")); | |
body.appendParagraph("Paragraph 2. "); | |
body.appendParagraph("Paragraph 3. "); | |
// We have three paragraphs, none of which registered as any type of revision | |
// If we add/remove any content in the document while tracking revisions, | |
// they will be displayed as such in the document and can be accepted/rejected. | |
doc.startTrackRevisions("John Doe", new Date()); | |
// This paragraph is a revision and will have the according "IsInsertRevision" flag set. | |
para = body.appendParagraph("Paragraph 4. "); | |
if(para.isInsertRevision()) | |
System.out.println("isInsertRevision:" + para.isInsertRevision()); | |
// Get the document's paragraph collection and remove a paragraph. | |
ParagraphCollection paragraphs = body.getParagraphs(); | |
if(4 == paragraphs.getCount()) | |
System.out.println("count:" + paragraphs.getCount()); | |
para = paragraphs.get(2); | |
para.remove(); | |
// Since we are tracking revisions, the paragraph still exists in the document, will have the "IsDeleteRevision" set | |
// and will be displayed as a revision in Microsoft Word, until we accept or reject all revisions. | |
if(4 == paragraphs.getCount()) | |
System.out.println("count:" + paragraphs.getCount()); | |
if(para.isDeleteRevision()) | |
System.out.println("isDeleteRevision:" + para.isDeleteRevision()); | |
// The delete revision paragraph is removed once we accept changes. | |
doc.acceptAllRevisions(); | |
if(3 == paragraphs.getCount()) | |
System.out.println("count:" + paragraphs.getCount()); | |
// Stopping the tracking of revisions makes this text appear as normal text. | |
// Revisions are not counted when the document is changed. | |
doc.stopTrackRevisions(); | |
// Save the document. | |
doc.save(dataDir + "Document.Revisions.docx"); |
Contoh kode berikut menunjukkan bagaimana revisi dibuat saat sebuah simpul dipindahkan dalam dokumen yang dilacak:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
// Generate document contents. | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.writeln("Paragraph 1"); | |
builder.writeln("Paragraph 2"); | |
builder.writeln("Paragraph 3"); | |
builder.writeln("Paragraph 4"); | |
builder.writeln("Paragraph 5"); | |
builder.writeln("Paragraph 6"); | |
Body body = doc.getFirstSection().getBody(); | |
System.out.println("Paragraph count:" + body.getParagraphs().getCount()); | |
// Start tracking revisions. | |
doc.startTrackRevisions("Author", new Date()); | |
// Generate revisions when moving a node from one location to another. | |
Node node = body.getParagraphs().get(3); | |
Node endNode = body.getParagraphs().get(5).getNextSibling(); | |
Node referenceNode = body.getParagraphs().get(0); | |
while (node != endNode) | |
{ | |
Node nextNode = node.getNextSibling(); | |
body.insertBefore(node, referenceNode); | |
node = nextNode; | |
} | |
// Stop the process of tracking revisions. | |
doc.stopTrackRevisions(); | |
// There are 3 additional paragraphs in the move-from range. | |
System.out.println("Paragraph count: " + body.getParagraphs().getCount()); | |
doc.save(dataDir + "out.docx"); |
Kelola dan Simpan Perubahan sebagai Revisi
Dengan fitur perubahan pelacakan sebelumnya, Anda dapat memahami perubahan mana yang dibuat di dokumen Anda dan siapa yang membuat perubahan tersebut. Sementara dengan fitur TrackRevisions, Anda memaksa setiap perubahan dalam dokumen Anda untuk disimpan sebagai revisi.
Aspose.Words memungkinkan Anda memeriksa apakah dokumen memiliki revisi atau tidak dengan menggunakan properti HasRevision. Jika Anda tidak perlu melacak perubahan dalam dokumen Anda secara otomatis melalui metode StartTrackRevisions dan StopTrackRevisions, maka Anda dapat menggunakan properti TrackRevisions
untuk memeriksa apakah perubahan dilacak saat mengedit dokumen di Microsoft Word dan disimpan sebagai revisi.
Fitur TrackRevisions
membuat revisi, bukan perubahan DOM yang sebenarnya. Tetapi revisi itu sendiri terpisah. Misalnya, Jika Anda menghapus paragraf apa pun, Aspose.Words menjadikannya sebagai revisi, menandainya sebagai penghapusan, alih-alih menghapusnya.
Selain itu, Aspose.Words memungkinkan Anda memeriksa apakah suatu objek telah disisipkan, dihapus, atau diubah formatnya menggunakan IsDeleteRevision, IsFormatRevision, IsInsertRevision, IsMoveFromRevision, dan properti IsMoveToRevision.
TrackRevisions
. Selain itu, Anda dapat menerima/menolak revisi terlepas dari fitur perubahan pelacakan.
Contoh kode berikut menunjukkan cara menerapkan properti yang berbeda dengan revisi:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
// Open a blank document. | |
Document doc = new Document(); | |
// Insert an inline shape without tracking revisions. | |
Shape shape = new Shape(doc, ShapeType.CUBE); | |
shape.setWrapType(WrapType.INLINE); | |
shape.setWidth(100.0); | |
shape.setHeight(100.0); | |
doc.getFirstSection().getBody().getFirstParagraph().appendChild(shape); | |
// Start tracking revisions and then insert another shape. | |
doc.startTrackRevisions("John Doe"); | |
shape = new Shape(doc, ShapeType.SUN); | |
shape.setWrapType(WrapType.INLINE); | |
shape.setWidth(100.0); | |
shape.setHeight(100.0); | |
doc.getFirstSection().getBody().getFirstParagraph().appendChild(shape); | |
// Get the document's shape collection which includes just the two shapes we added. | |
Node[] shapes = doc.getChildNodes(NodeType.SHAPE, true).toArray(); | |
if(2 == shapes.length) | |
System.out.println("Shapes Count:" + shapes.length); | |
// Remove the first shape. | |
shapes[0].remove(); | |
Shape sh = (Shape) shapes[0]; | |
// Because we removed that shape while changes were being tracked, the shape counts as a delete revision. | |
if(ShapeType.CUBE == sh.getShapeType()) | |
System.out.println("Shape is CUBE"); | |
if(sh.isDeleteRevision()) | |
System.out.println("isDeleteRevision:" + sh.isDeleteRevision()); | |
// And we inserted another shape while tracking changes, so that shape will count as an insert revision. | |
sh = (Shape) shapes[1]; | |
if(ShapeType.SUN == sh.getShapeType()) | |
System.out.println("Shape is SUN"); | |
if(sh.isInsertRevision()) | |
System.out.println("IsInsertRevision:" + sh.isInsertRevision()); | |
// The document has one shape that was moved, but shape move revisions will have two instances of that shape. | |
// One will be the shape at its arrival destination and the other will be the shape at its original location. | |
doc = new Document(dataDir + "Revision shape.docx"); | |
Node[] nc = doc.getChildNodes(NodeType.SHAPE, true).toArray(); | |
if(4 == nc.length) | |
System.out.println("Shapes Count:" + nc.length); | |
Shape mvr = (Shape) nc[0]; | |
// This is the move to revision, also the shape at its arrival destination. | |
if(mvr.isMoveFromRevision()) | |
System.out.println("isMoveFromRevision:" + mvr.isMoveFromRevision()); | |
if(mvr.isMoveToRevision()) | |
System.out.println("isMoveToRevision:" + mvr.isMoveToRevision()); | |
mvr = (Shape) nc[1]; | |
// This is the move from revision, which is the shape at its original location. | |
if(mvr.isMoveFromRevision()) | |
System.out.println("isMoveFromRevision:" + mvr.isMoveFromRevision()); | |
if(mvr.isMoveToRevision()) | |
System.out.println("isMoveToRevision:" + mvr.isMoveToRevision()); |