Travailler avec des commentaires
Essayez en ligne
Vous pouvez essayer cette fonctionnalité avec notre Gratuit en ligne supprimer les annotations.
Aspose.Words permet aux utilisateurs de travailler avec des commentaires – les commentaires d’un document dans Aspose.Words sont représentés par la classe Comment. Utilisez également les classes CommentRangeStart et CommentRangeEnd pour spécifier la région de texte qui doit être associée à un commentaire.
Ajouter un Commentaire
Aspose.Words vous permet d’ajouter des commentaires de plusieurs manières:
- Utilisation de la classe Comment
- Utilisation des classes CommentRangeStart et CommentRangeEnd
L’exemple de code suivant montre comment ajouter un commentaire à un paragraphe à l’aide de la classe 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"); |
L’exemple de code suivant montre comment ajouter un commentaire à un paragraphe en utilisant une région de texte et les classes CommentRangeStart et 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"); |
Extraire ou Supprimer des Commentaires
L’utilisation de commentaires dans un document Word (en plus du suivi des modifications) est une pratique courante lors de la révision de documents, en particulier lorsqu’il y a plusieurs réviseurs. Il peut y avoir des situations où la seule chose dont vous avez besoin d’un document est les commentaires. Supposons que vous souhaitiez générer une liste des résultats de l’examen, ou peut-être que vous avez rassemblé toutes les informations utiles du document et que vous souhaitez simplement supprimer les commentaires inutiles. Vous souhaiterez peut-être afficher ou supprimer les commentaires d’un réviseur particulier.
Dans cet exemple, nous allons examiner quelques méthodes simples pour collecter des informations à partir des commentaires d’un document et pour supprimer des commentaires d’un document. Plus précisément, nous expliquerons comment:
- Extraire tous les commentaires d’un document ou seulement ceux d’un auteur particulier.
- Supprimez tous les commentaires d’un document ou uniquement d’un auteur particulier.
Comment extraire ou Supprimer des Commentaires
Le code de cet exemple est assez simple et toutes les méthodes sont basées sur la même approche. Un commentaire dans un document Word est représenté par un objet Comment
dans le modèle d’objet de document Aspose.Words. Pour collecter tous les commentaires dans un document, utilisez la méthode getChildNodes avec le premier paramètre défini sur NodeType.Comment
. Assurez-vous que le deuxième paramètre de la méthode getChildNodes est défini sur true: cela force getChildNodes à sélectionner récursivement parmi tous les nœuds enfants, plutôt que de ne collecter que les enfants immédiats.
Pour illustrer comment extraire et supprimer des commentaires d’un document, nous allons suivre les étapes suivantes:
- Ouvrez un document Word à l’aide de la classe Document
- Obtenir tous les commentaires du document dans une collection
- Pour extraire des commentaires:
- Parcourez la collection en utilisant le pour l’opérateur
- Extraire et répertorier le nom de l’auteur, la date et l’heure et le texte de tous les commentaires
- Extraire et répertorier le nom de l’auteur, la date et l’heure et le texte des commentaires écrits par un auteur spécifique, dans ce cas, l’auteur " ks’
- Pour supprimer des commentaires:
- Revenez en arrière dans la collection en utilisant l’opérateur pour l’opérateur
- Supprimer des commentaires
- Enregistrez les modifications.
Nous allons utiliser le document Word suivant pour cet exercice:
Comme vous pouvez le voir, il contient plusieurs commentaires de deux auteurs avec les initiales " pm " et “ks”.
Comment extraire Tous les Commentaires
La méthode getChildNodes est très utile et vous pouvez l’utiliser chaque fois que vous avez besoin d’obtenir une liste de nœuds de document de tout type. La collection résultante ne crée pas de surcharge immédiate car les nœuds sont sélectionnés dans cette collection uniquement lorsque vous énumérez ou accédez à des éléments qu’elle contient.
L’exemple de code suivant montre comment extraire le nom de l’auteur, la date et l’heure et le texte de tous les commentaires du document:
// 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; |
Comment extraire les Commentaires d’un Auteur spécifié
Une fois que vous avez sélectionné des nœuds de commentaires dans une collection, tout ce que vous avez à faire est d’extraire les informations dont vous avez besoin. Dans cet exemple, les initiales de l’auteur, la date, l’heure et le texte brut du commentaire sont combinés en une seule chaîne; vous pouvez choisir de le stocker d’une autre manière à la place.
La méthode surchargée qui extrait les commentaires d’un auteur particulier est presque la même, elle vérifie simplement le nom de l’auteur avant d’ajouter les informations dans le tableau.
L’exemple de code suivant montre comment extraire le nom de l’auteur, la date et l’heure et le texte des commentaires de l’auteur spécifié:
Comment supprimer des Commentaires
Si vous supprimez tous les commentaires, il n’est pas nécessaire de parcourir la collection en supprimant les commentaires un par un; vous pouvez les supprimer en appelant clear sur la collection de commentaires.
L’exemple de code suivant montre comment supprimer tous les commentaires dans le document:
// 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(); |
Lorsque vous devez supprimer sélectivement des commentaires, le processus devient plus similaire au code que nous avons utilisé pour l’extraction des commentaires.
L’exemple de code suivant montre comment supprimer les commentaires de l’auteur spécifié:
Le point principal à souligner ici est l’utilisation de l’opérateur for. Contrairement à la simple extraction, ici vous souhaitez supprimer un commentaire. Une astuce appropriée consiste à itérer la collection en arrière du dernier commentaire au premier. La raison en est que si vous commencez par la fin et revenez en arrière, l’index des éléments précédents reste inchangé et vous pouvez revenir au premier élément de la collection.
L’exemple de code suivant montre les méthodes d’extraction et de suppression des commentaires:
// 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"); |
Lorsqu’il est lancé, l’échantillon affiche les résultats suivants. Tout d’abord, il répertorie tous les commentaires de tous les auteurs, puis il répertorie uniquement les commentaires de l’auteur sélectionné. Enfin, le code supprime tous les commentaires.
Le document Word de sortie a maintenant des commentaires supprimés:
Comment supprimer du texte entre CommentRangeStart et CommentRangeEnd
En utilisant Aspose.Words, vous pouvez également supprimer les commentaires entre les nœuds CommentRangeStart et CommentRangeEnd.
L’exemple de code suivant montre comment supprimer du texte entre CommentRangeStart et 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"); |
Ajouter ou Supprimer la réponse du Commentaire
La méthode addReply ajoute une réponse à ce commentaire. Veuillez noter qu’en raison des MS limitations de bureau existantes, un (1) seul niveau de réponses est autorisé dans le document. Une exception de type InvalidOperationException sera levée si cette méthode est appelée sur le commentaire de réponse existant.
Vous pouvez utiliser la méthode removeReply pour supprimer la réponse spécifiée à ce commentaire.
L’exemple de code suivant montre comment ajouter une réponse à un commentaire et supprimer la réponse d’un commentaire:
// 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); |
Lire la Réponse du Commentaire
Aspose.Words support pour lire la réponse d’un Commentaire. La propriété Replies renvoie une collection des objets Comment qui sont des enfants immédiats du commentaire spécifié.
L’exemple de code suivant montre comment parcourir les réponses d’un commentaire et les résoudre:
// 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); | |
} | |
} |