Робота з коментарями

Aspose.Words дозволяє користувачам працювати з коментарями – коментарі в документі в документі Aspose.Words представлені Comment клас. Також використовуйте CommentRangeStart і CommentRangeEnd класи вказати область тексту, який повинен бути пов’язаний з коментарем.

Додати коментар

Aspose.Words дозволяє додати коментарі в кілька способів:

1,1 км Використання Comment клас 2,2 км Використання CommentRangeStart і CommentRangeEnd Заняття

Приклад наступного коду показує, як додати коментар до абзацу за допомогою абзацу 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");

Приклад наступного коду показує, як додати коментар до абзацу за допомогою регіону тексту та CommentRangeStart і 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");

Вилучення або видалення коментарів

Використання коментарів в документі Word (на додаток до зміни відстеження) є спільною практикою при перегляді документів, зокрема, коли є кілька рецензентів. Ви можете бути ситуації, де потрібно тільки від документа. Скажіть, що ви хочете створити список результатів рецензування, або, можливо, ви зібрали всю корисну інформацію з документа і ви просто хочете видалити непотрібні коментарі. Ви можете переглянути або видалити коментарі конкретного рецензента.

У цьому прикладі ми розглянемо деякі прості методи збору інформації з коментарів в документі та для видалення коментарів з документа. Зокрема, ми покриємо як:

  • Витяг всіх коментарів з документа або тільки тих, хто зробив конкретним автором.
  • Видаліть всі коментарі з документа або тільки з певного автора.

Як видалити або видалити Коментарі

Цей приклад досить простий і всі методи базуються на тому ж підході. Коментар у документі Word представлений Comment об’єкт у Aspose.Words модель об’єкта документа. Для збору всіх коментарів в документі використовуйте getChildNodes метод з параметром першого параметра NodeType.Commentй Переконайтеся, що другий параметр getChildНоди метод встановлюється до true: це змушує getChildНоди вибрати з усіх дочірньих вузлів, що відступають, а не тільки зібрати безпосередніх дітей.

Щоб ілюструвати, як витягти і видалити коментарі з документа, ми пройдемо наступні кроки:

1,1 км Відкрийте документ Word за допомогою Document клас 1,1 км Отримати всі коментарі з документа в збірку 1,1 км Для отримання коментарів:

  1. Зайдіть через збір за допомогою оператора
  2. Витяг та список імені автора, дати та часу та тексту всіх коментарів
  3. Витяг та список імені автора, дати та часу та тексту коментарів, написаних конкретним автором, в цьому випадку автор “ks” 1,1 км Для видалення коментарів:
  4. Повернутися через збір за допомогою оператора
  5. Видалити коментарі 1,1 км Збережіть зміни.

Ми будемо використовувати наступний документ Word для цієї вправи:

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

Як ви можете побачити, в ній є кілька коментарів з двох авторів з ініціалями “pm” і “ks”.

Як витягти всі коментарі

Про нас getChildNodes метод дуже корисний і ви можете використовувати його кожен раз, коли вам потрібно отримати список вузлів документів будь-якого типу. Отримана збірка не створює безпосередній наклад, тому що вершини вибираються в цю колекцію тільки тоді, коли ви обробляєте або доступ до предметів в ній.

Наприклад, наступний код показує, як витягти ім’я автора, дату та текст всіх коментарів у документі:

// 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;

Як витягти Коментарі до Вказаного автора

Після того, як ви вибрали вузол коментарів в збірку, все, що ви повинні зробити, це екстракт інформації, яку вам потрібно. У цьому прикладі ви можете вибрати для зберігання його в деяких інших варіантах.

Перевантажений метод, який видобуває Коментарі з певного автора, майже той же, він просто перевіряє назву автора перед додаванням інформації в масив.

Приклад коду показує, як витягти ім’я автора, дату та час і текст коментарів за вказаним автором:

// 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;

Як видалити коментарі

Якщо ви знімаєте всі коментарі, не потрібно переходити через збірку, ви можете видалити їх, викликаючи clear на збірках коментарів.

Приклад коду показує, як видалити всі коментарі в документі:

// 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();

Коли потрібно вибрати для видалення коментарів, процес стає більш схожим на код, який ми використовували для видобутку коментарів.

Приклад коду показує, як видалити коментарі за вказаним автором:

// 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();
}
}

Головний момент виділити тут – використання оператора. На відміну від простого видобутку, тут ви хочете видалити коментар. Підійде прийом до ітерації колекції назад від останнього коментаря до першого. Причина цього, якщо ви починаєте з кінця і переходите назад, індекс передових елементів залишається незмінним, і ви можете працювати назад до першого елемента в збірнику.

Приклад коду показує методи вилучення та видалення коментарів:

// 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");

При старті зразок відображає наступні результати. По-перше, він перераховує всі коментарі всіх авторів, а потім перераховує коментарі обраного автора тільки. Нарешті, код видалення всіх коментарів.

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

Виданий документ Word тепер коментарів вилучено з нього:

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

Як видалити текст між CommentRangeStart і коментарRangeEnd

Використання Aspose.Words Ви також можете видалити коментарі між CommentRangeStart і коментарRangeEnd nodes.

Приклад коду показує, як видалити текст між CommentRangeStart і коментарRangeEnd:

// 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");

Додати або видалити коментар відповідь

Про нас addReply метод додає відповідь на цей коментар. Будь ласка, зауважте, що через наявні обмеження MS Office лише один (1) рівень відповідей дозволено в документі. Виняток типу InvalidOperationException буде піднятися, якщо цей метод називається на існуючий коментар відповідь.

Ви можете використовувати removeReply спосіб видалити зазначену відповідь на цей коментар.

Приклад коду показує, як додати відповідь на коментар і видалити відповідь коментаря:

// 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);

Читайте коментар відповідь

Aspose.Words підтримка читати відповідь на коментар. Про нас Replies майно повертає збірку Comment об’єкти, які є безпосередніми дітьми зазначеного коментаря.

Наприклад, наступний код показує, як ітерувати відповіді коментаря та вирішувати їх:

// 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);
}
}