Bekerja dengan Komentar

Aspose.Words memungkinkan pengguna untuk bekerja dengan komentar-komentar dalam dokumen di Aspose.Words diwakili oleh kelas Comment. Gunakan juga kelas CommentRangeStart dan CommentRangeEnd untuk menentukan wilayah teks yang harus dikaitkan dengan komentar.

Tambahkan Komentar

Aspose.Words memungkinkan Anda menambahkan komentar dengan beberapa cara:

  1. Menggunakan kelas Comment
  2. Menggunakan kelas CommentRangeStart dan CommentRangeEnd

Contoh kode berikut menunjukkan cara menambahkan komentar ke paragraf menggunakan kelas Comment:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
String dataDir = Utils.getDataDir(AddComments.class);
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.write("Some text is added.");
Comment comment = new Comment(doc, "Awais Hafeez", "AH", new Date());
builder.getCurrentParagraph().appendChild(comment);
comment.getParagraphs().add(new Paragraph(doc));
comment.getFirstParagraph().getRuns().add(new Run(doc, "Comment text."));
doc.save(dataDir + "output.doc");

Contoh kode berikut menunjukkan cara menambahkan komentar ke paragraf menggunakan wilayah teks dan kelas CommentRangeStart dan CommentRangeEnd:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
String dataDir = Utils.getDataDir(AnchorComment.class);
Document doc = new Document();
Paragraph para1 = new Paragraph(doc);
Run run1 = new Run(doc, "Some ");
Run run2 = new Run(doc, "text ");
para1.appendChild(run1);
para1.appendChild(run2);
doc.getFirstSection().getBody().appendChild(para1);
Paragraph para2 = new Paragraph(doc);
Run run3 = new Run(doc, "is ");
Run run4 = new Run(doc, "added ");
para2.appendChild(run3);
para2.appendChild(run4);
doc.getFirstSection().getBody().appendChild(para2);
Comment comment = new Comment(doc, "Awais Hafeez", "AH", new Date());
comment.getParagraphs().add(new Paragraph(doc));
comment.getFirstParagraph().getRuns().add(new Run(doc, "Comment text."));
CommentRangeStart commentRangeStart = new CommentRangeStart(doc, comment.getId());
CommentRangeEnd commentRangeEnd = new CommentRangeEnd(doc, comment.getId());
run1.getParentNode().insertAfter(commentRangeStart, run1);
run3.getParentNode().insertAfter(commentRangeEnd, run3);
commentRangeEnd.getParentNode().insertAfter(comment, commentRangeEnd);
doc.save(dataDir + "output.doc");

Ekstrak atau Hapus Komentar

Menggunakan Komentar dalam dokumen Word (selain untuk Melacak Perubahan) adalah praktik umum saat meninjau dokumen, terutama jika ada banyak pengulas. Mungkin ada situasi di mana satu-satunya hal yang Anda butuhkan dari sebuah dokumen adalah komentarnya. Katakanlah Anda ingin membuat daftar temuan tinjauan, atau mungkin Anda telah mengumpulkan semua informasi berguna dari dokumen dan Anda hanya ingin menghapus komentar yang tidak perlu. Anda mungkin ingin melihat atau menghapus komentar dari pengulas tertentu.

Dalam contoh ini, kita akan melihat beberapa metode sederhana untuk mengumpulkan informasi dari komentar di dalam dokumen dan untuk menghapus komentar dari dokumen. Secara khusus, kami akan membahas cara melakukannya:

  • Ekstrak semua komentar dari dokumen atau hanya komentar yang dibuat oleh penulis tertentu.
  • Hapus semua komentar dari dokumen atau hanya dari penulis tertentu.

Cara Mengekstrak atau Menghapus Komentar

Kode dalam sampel ini cukup sederhana dan semua metode didasarkan pada pendekatan yang sama. Komentar dalam dokumen Word diwakili oleh objek Comment dalam model objek dokumen Aspose.Words. Untuk mengumpulkan semua komentar dalam dokumen, gunakan metode getChildNodes dengan parameter pertama disetel ke NodeType.Comment. Pastikan parameter kedua dari metode getChildNodes disetel ke true: ini memaksa getChildNodes untuk memilih dari semua node turunan secara rekursif, bukan hanya mengumpulkan turunan terdekat.

Untuk mengilustrasikan cara mengekstrak dan menghapus komentar dari dokumen, kita akan melalui langkah-langkah berikut:

  1. Buka dokumen Word menggunakan kelas Document
  2. Dapatkan semua komentar dari dokumen ke dalam koleksi
  3. Untuk mengekstrak komentar:
    1. Pergi melalui koleksi menggunakan untuk operator
    2. Ekstrak dan cantumkan nama penulis, tanggal & waktu, dan teks semua komentar
    3. Ekstrak dan cantumkan nama penulis, tanggal & waktu, dan teks komentar yang ditulis oleh penulis tertentu, dalam hal ini penulis ‘ks’
  4. Untuk menghapus komentar:
    1. Mundur melalui koleksi menggunakan untuk operator
    2. Hapus komentar
  5. Simpan perubahannya.

Kita akan menggunakan dokumen Word berikut untuk latihan ini:

extract-remove-comments-aspose-words-java-1

Seperti yang Anda lihat, ini berisi beberapa Komentar dari dua penulis dengan inisial " pm “dan"ks”.

Cara Mengekstrak Semua Komentar

Metode getChildNodes sangat berguna dan Anda dapat menggunakannya setiap kali Anda perlu mendapatkan daftar simpul dokumen jenis apa pun. Koleksi yang dihasilkan tidak membuat overhead langsung karena node dipilih ke dalam koleksi ini hanya saat Anda menghitung atau mengakses item di dalamnya.

Contoh kode berikut menunjukkan cara mengekstrak nama penulis, tanggal&waktu, dan teks dari semua komentar dalam dokumen:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
ArrayList collectedComments = new ArrayList();
// Collect all comments in the document
NodeCollection comments = doc.getChildNodes(NodeType.COMMENT, true);
// Look through all comments and gather information about them.
for (Comment comment : (Iterable<Comment>) comments) {
collectedComments.add(comment.getAuthor() + " " + comment.getDateTime() + " " + comment.toString(SaveFormat.TEXT));
}
return collectedComments;

Cara Mengekstrak Komentar dari Penulis Tertentu

Setelah Anda memilih simpul Komentar ke dalam kumpulan, yang harus Anda lakukan hanyalah mengekstrak informasi yang Anda butuhkan. Dalam contoh ini, inisial penulis, tanggal, waktu, dan teks biasa dari komentar digabungkan menjadi satu string; Anda dapat memilih untuk menyimpannya dengan beberapa cara lain.

Metode kelebihan beban yang mengekstrak Komentar dari penulis tertentu hampir sama, hanya memeriksa nama penulis sebelum menambahkan info ke dalam array.

Contoh kode berikut menunjukkan cara mengekstrak nama penulis, tanggal&waktu, dan teks komentar oleh penulis yang ditentukan:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
ArrayList collectedComments = new ArrayList();
// Collect all comments in the document
NodeCollection comments = doc.getChildNodes(NodeType.COMMENT, true);
// Look through all comments and gather information about those written by the authorName author.
for (Comment comment : (Iterable<Comment>) comments) {
if (comment.getAuthor().equals(authorName))
collectedComments.add(comment.getAuthor() + " " + comment.getDateTime() + " " + comment.toString(SaveFormat.TEXT));
}
return collectedComments;

Cara Menghapus Komentar

Jika Anda menghapus semua komentar, tidak perlu menelusuri koleksi menghapus komentar satu per satu; Anda dapat menghapusnya dengan memanggil clear pada koleksi komentar.

Contoh kode berikut menunjukkan cara menghapus semua komentar dalam dokumen:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Collect all comments in the document
NodeCollection comments = doc.getChildNodes(NodeType.COMMENT, true);
// Remove all comments.
comments.clear();

Saat Anda perlu menghapus komentar secara selektif, prosesnya menjadi lebih mirip dengan kode yang kami gunakan untuk ekstraksi komentar.

Contoh kode berikut menunjukkan cara menghapus komentar oleh penulis yang ditentukan:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Collect all comments in the document
NodeCollection comments = doc.getChildNodes(NodeType.COMMENT, true);
// Look through all comments and remove those written by the authorName author.
for (int i = comments.getCount() - 1; i >= 0; i--) {
Comment comment = (Comment) comments.get(i);
if (comment.getAuthor().equals(authorName))
comment.remove();
}
}

Poin utama yang perlu disoroti di sini adalah penggunaan operator for. Berbeda dengan ekstraksi sederhana, di sini Anda ingin menghapus komentar. Trik yang cocok adalah mengulangi koleksi mundur dari Komentar terakhir ke komentar pertama. Alasan untuk ini jika Anda memulai dari akhir dan bergerak mundur, indeks item sebelumnya tetap tidak berubah, dan Anda dapat kembali ke item pertama dalam koleksi.

Contoh kode berikut menunjukkan metode untuk ekstraksi dan penghapusan komentar:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(ProcessComments.class);
// Open the document.
Document doc = new Document(dataDir + "TestFile.doc");
for (String comment : (Iterable<String>) extractComments(doc))
System.out.print(comment);
// Remove comments by the "pm" author.
removeComments(doc, "pm");
System.out.println("Comments from \"pm\" are removed!");
// Extract the information about the comments of the "ks" author.
for (String comment : (Iterable<String>) extractComments(doc, "ks"))
System.out.print(comment);
//Read the comment's reply and resolve them.
System.out.println("Read the comment's reply and resolve them.");
CommentResolvedandReplies(doc);
// Remove all comments.
removeComments(doc);
System.out.println("All comments are removed!");
// Save the document.
doc.save(dataDir + "output.doc");

Saat diluncurkan, sampel menampilkan hasil berikut. Pertama, daftar semua komentar oleh semua penulis, lalu daftar komentar hanya oleh penulis yang dipilih. Akhirnya, kode menghapus semua komentar.

extract-remove-comments-aspose-words-java-2

Dokumen keluaran Word sekarang telah menghapus komentar darinya:

extract-remove-comments-aspose-words-java-3

Cara Menghapus Teks antara CommentRangeStart dan CommentRangeEnd

Dengan menggunakan Aspose.Words Anda juga dapat menghapus komentar di antara simpul CommentRangeStart dan CommentRangeEnd.

Contoh kode berikut menunjukkan cara menghapus teks antara CommentRangeStart dan CommentRangeEnd:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(RemoveCommentRegionText.class);
// Open the document.
Document doc = new Document(dataDir + "TestFile.doc");
CommentRangeStart commentStart = (CommentRangeStart) doc.getChild(NodeType.COMMENT_RANGE_START, 0, true);
CommentRangeEnd commentEnd = (CommentRangeEnd) doc.getChild(NodeType.COMMENT_RANGE_END, 0, true);
Node currentNode = commentStart;
Boolean isRemoving = true;
while (currentNode != null && isRemoving) {
if (currentNode.getNodeType() == NodeType.COMMENT_RANGE_END)
isRemoving = false;
Node nextNode = currentNode.nextPreOrder(doc);
currentNode.remove();
currentNode = nextNode;
}
doc.save(dataDir + "output.doc");

Menambah atau Menghapus Balasan Komentar

Metode addReply menambahkan balasan ke komentar ini. Harap perhatikan bahwa karena batasan Office MS yang ada, hanya satu (1) tingkat balasan yang diperbolehkan dalam dokumen. Pengecualian tipe InvalidOperationException akan dimunculkan jika metode ini dipanggil pada komentar Balasan yang ada.

Anda dapat menggunakan metode removeReply untuk menghapus balasan yang ditentukan untuk komentar ini.

Contoh kode berikut menunjukkan cara menambahkan balasan ke komentar dan menghapus balasan komentar:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document(dataDir + "TestFile.doc");
Comment comment = (Comment) doc.getChild(NodeType.COMMENT, 0, true);
//Remove the reply
comment.removeReply(comment.getReplies().get(0));
//Add a reply to comment
comment.addReply("John Doe", "JD", new Date(), "New reply");
dataDir = dataDir + "TestFile_Out.doc";
// Save the document to disk.
doc.save(dataDir);

Baca Balasan Komentar

Aspose.Words dukungan untuk membaca balasan Komentar. Properti Replies mengembalikan kumpulan objek Comment yang merupakan turunan langsung dari komentar yang ditentukan.

Contoh kode berikut menunjukkan cara beralih melalui balasan komentar dan menyelesaikannya:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
static void CommentResolvedandReplies(Document doc) {
NodeCollection<Comment> comments = doc.getChildNodes(NodeType.COMMENT, true);
Comment parentComment = (Comment) comments.get(0);
for (Comment childComment : parentComment.getReplies()) {
// Get comment parent and status.
System.out.println(childComment.getAncestor().getId());
System.out.println(childComment.getDone());
// And update comment Done mark.
childComment.setDone(true);
}
}