Práce s komentáři
Zkuste online
Tuto funkci můžete zkusit s naší Ždarma online odstranit anotace.
Aspose.Words umožňuje uživatelům pracovat s komentáři v dokumentu Aspose.Words jsou zastoupeny Comment třída. Také použijte CommentRangeStart a CommentRangeEnd tříd pro upřesnění oblasti textu, která by měla být spojena s poznámkou.
Přidat komentář
Aspose.Words umožňuje přidat komentáře několika způsoby:
- Použití Comment třída
- Použití CommentRangeStart a CommentRangeEnd třídy
Následující příklad kódu ukazuje, jak přidat komentář k odstavci pomocí Comment třída:
// 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"); |
Následující příklad kódu ukazuje, jak přidat komentář k odstavci pomocí oblasti textu a CommentRangeStart a CommentRangeEnd třídy:
// 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"); |
Extrahovat nebo odstranit komentáře
Použití komentářů v dokumentu Word (kromě změn stopy) je běžná praxe při přezkumu dokumentů, zejména pokud existuje více recenzentů. Mohou nastat situace, kdy jediné, co potřebujete z dokumentu, jsou komentáře. Řekněte, že chcete vytvořit seznam zjištění přezkumu, nebo jste možná shromáždili všechny užitečné informace z dokumentu a chcete jednoduše odstranit zbytečné komentáře. Můžete chtít zobrazit nebo odstranit připomínky konkrétního recenzenta.
V tomto vzorku se podíváme na některé jednoduché metody shromažďování informací z připomínek v dokumentu a na odstranění připomínek z dokumentu. Konkrétně se postaráme o to, jak:
- Vyjádřit všechny připomínky z dokumentu nebo pouze ty, které učinil konkrétní autor.
- Odstraňte všechny připomínky z dokumentu nebo pouze od konkrétního autora.
Jak extrahovat nebo odstranit komentáře
Kód v tomto vzorku je poměrně jednoduchý a všechny metody jsou založeny na stejném přístupu. Komentář v dokumentu Word představuje Comment
objekt v Aspose.Words model objektu dokumentu. Pro sběr všech připomínek v dokumentu použijte getChildNodes metoda s prvním parametrem nastaveným na NodeType.Comment
. Ujistěte se, že druhý parametr GetChildnodes metoda je nastavena na true: to nutí GetChildnodes vybrat ze všech dětských uzlů rekurzivně, spíše než pouze sbírat okamžité děti.
Abychom ukázali, jak získat a odstranit připomínky z dokumentu, projdeme těmito kroky:
- Otevřít dokument Word pomocí Document třída
- Získat všechny připomínky z dokumentu do sbírky
- Chcete-li získat připomínky:
- Projděte sbírku pomocí operátora
- Výpis a výpis autora jméno, datum a čas a text všech komentářů
- Výpis a seznam autora, datum a čas a text komentářů napsaných konkrétním autorem, v tomto případě autora
- Pro odstranění připomínek:
- Přejít zpět přes sbírku pomocí pro operátora
- Odstranit připomínky
- Uložit změny.
Pro toto cvičení použijeme následující dokument Word:
Jak můžete vidět, obsahuje několik komentářů od dvou autorů s iniciály pm a aks.
Jak extrahovat všechny komentáře
The getChildNodes metoda je velmi užitečná a můžete ji použít pokaždé, když potřebujete získat seznam uzlů dokumentu jakéhokoli typu. Výsledná sbírka nevytváří bezprostřední nadmořská výška, protože uzly jsou vybrány do této sbírky pouze tehdy, když v ní vyjmenováváte nebo získáte přístupové položky.
Následující příklad kódu ukazuje, jak extrahovat jméno autora, datum a čas a text všech komentářů v dokumentu:
// 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; |
Jak získat připomínky určitého autora
Poté, co jste vybrali Comment uzly do sbírky, vše, co musíte udělat, je extrahovat informace, které potřebujete. V tomto vzorku jsou iniciály autora, datum, čas a prostý text komentáře kombinovány do jednoho řetězce; místo toho si můžete vybrat, zda jej uložíte jiným způsobem.
Přetížená metoda, která vyjímá Komentáře od konkrétního autora, je téměř stejná, jen kontroluje jméno autora před přidáním informací do pole.
Následující příklad kódu ukazuje, jak extrahovat jméno autora, datum a čas a text připomínek zadaného autora:
Jak odstranit komentáře
Pokud odstraňujete všechny komentáře, není třeba se přes sbírku mazat komentáře jeden po druhém; můžete je odstranit voláním clear ke sbírce připomínek.
Následující příklad kódu ukazuje, jak odstranit všechny připomínky v dokumentu:
// 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(); |
Když potřebujete selektivní odstranění komentářů, proces se stává více podobný kódu, který jsme použili pro získávání komentářů.
Následující příklad kódu ukazuje, jak odstranit komentáře zadaného autora:
Hlavním bodem k zdůraznění zde je použití pro operátora. Na rozdíl od jednoduché extrakce, zde chcete smazat komentář. Vhodným trikem je iterovat kolekci pozpátku od posledního Komentáře k prvnímu. Důvodem je to, když začnete od konce a posunete se dozadu, index předchozích položek zůstává nezměněn a můžete se vrátit k první položce ve sbírce.
Následující příklad kódu uvádí metody pro výpis a odstranění připomínek:
// 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"); |
Při spuštění zobrazí vzorek následující výsledky. Nejprve uvádí všechny komentáře všech autorů, pak uvádí komentáře pouze vybraného autora. Nakonec kód odstraní všechny komentáře.
Výstup Word dokument má nyní připomínky odstraněny z něj:
Jak odstranit text mezi CommentRangeStart a CommentRangeEnd
Použití Aspose.Words můžete také odstranit komentáře mezi CommentRangeStart a CommentRangeEnd uzly.
Následující příklad kódu ukazuje, jak odstranit text mezi CommentRangeStart a 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"); |
Přidat nebo odstranit odpověď komentáře
The addReply metoda přidává odpověď na tuto poznámku. Upozorňujeme, že vzhledem ke stávajícím omezením MS Office je v dokumentu povolena pouze jedna (1) úroveň odpovědí. Výjimku typu NeplatnáOperaceVýjimka bude zvýšena, pokud je tato metoda vyvolána na existující komentář Odpověď.
Můžete použít removeReply způsob odstranění zadané odpovědi na tento komentář.
Následující příklad kódu ukazuje, jak přidat odpověď na komentář a odstranit odpověď na komentář:
// 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); |
Přečtěte si komentář
Aspose.Words podporu čtení odpovědi komentáře. The Replies majetek vrací soubor Comment předměty, které jsou okamžitými dětmi uvedeného komentáře.
Následující příklad kódu ukazuje, jak iterovat prostřednictvím odpovědí na komentář a vyřešil je:
// 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); | |
} | |
} |