Změna stopy v dokumentu

Funkce změn dráhy, známý také jako přezkum, umožňuje sledovat změny obsahu a formátování provedené vámi nebo jinými uživateli. Tato funkce změn trati s Aspose.Words podporuje změny dráhy v Microsoft Word. S touto funkcí můžete ve svém dokumentu přistupovat k jednotlivým revizím a aplikovat na ně různé vlastnosti.

Když povolíte funkci změn trati, budou všechny vloženy, vymazány a upraveny prvky dokumentu vizuálně zvýrazněny informacemi o tom, kdo, kdy a co se změnilo. Objekty, které obsahují informace o tom, co bylo změněno, se nazývají změny ve sledování. Předpokládejme například, že chcete dokument přezkoumat a provést důležité změny. Také budete muset vložit připomínky k projednání některých změn. To je místo, kde dochází ke stopování změn v dokumentech.

Tento článek vysvětluje, jak spravovat a sledovat změny vytvořené mnoha recenzenty na stejném dokumentu, stejně jako vlastnosti pro sledování změn.

Co je revize

Než se ponoří do revizí, nechť vysvětlí význam revizí. A revision je změna, k níž dochází v jednom uzlu dokumentu, zatímco skupina revizí zastoupená RevisionGroup třída, je skupina sekvenčních revizí, které se vyskytují v mnoha uzlech dokumentu. Revize je nástroj pro sledování změn.

Revize se používají ve funkci změn sledování a v rámci porovnání dokumentů, kde se revize objevují v důsledku srovnání. Takže revize v rámci změn sledování ukazují kdo a co bylo změněno.

Aspose.Words podporuje různé typy revizí, stejně jako v Microsoft Word, jako je vložení, delece, formát Změna, stylDefinice Změna a stěhování. Všechny typy revizí jsou zastoupeny RevisionType výčtu.

Začít a přestat sledovat změny

Editace dokumentu se obvykle nepočítá jako revize, dokud ho nezačnete sledovat. Aspose.Words umožňuje automaticky sledovat všechny změny ve vašem dokumentu jednoduchými kroky. Můžete snadno spustit proces sledování změn pomocí StartTrackRevisions metoda. Pokud potřebujete zastavit proces sledování změn tak, aby žádné budoucí úpravy nebyly považovány za revize, budete muset použít StopTrackRevisions metoda.

Na konci procesu sledování změn ve vašem dokumentu budete mít možnost dokonce přijmout všechny revize nebo je odmítnout vrátit dokument do původní podoby. Toho lze dosáhnout buď použitím AcceptAllRevisions nebo RejectAll metoda. Kromě toho můžete přijmout nebo odmítnout každou revizi samostatně pomocí Accept nebo Reject metoda.

Všechny změny budou vysledovány pro jednu iteraci od okamžiku, kdy začnete proces do okamžiku, kdy ho zastavíte. Spojení mezi různými iteracemi je reprezentováno jako následující scénář: dokončíte proces sledování, pak provedete nějaké změny a začnete znovu sledovat změny. S tímto scénářem se všechny změny, které jste nepřijali nebo neodmítli, znovu zobrazí.

Následující příklad kódu ukazuje, jak pracovat se změnami sledování:

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

Následující příklad kódu ukazuje, jak jsou revize generovány, když je uzel přesunut v rámci sledovaného dokumentu:

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

Spravovat a ukládat změny jako revize

S předchozím sledování změn funkce, můžete pochopit, které změny byly provedeny ve vašem dokumentu a kdo udělal tyto změny. Zatímco s TrackRevisions funkce, budete nutit jakékoliv změny ve vašem dokumentu, aby byly uloženy jako revize.

Aspose.Words umožňuje zkontrolovat, zda dokument má nebo nemá revizi pomocí HasRevision majetek. Pokud nemusíte automaticky sledovat změny ve vašem dokumentu pomocí metod StartTrackRevisions a StopTrackRevisions, pak můžete použít TrackRevisions vlastnost zkontrolovat, zda jsou změny sledovány při editaci dokumentu v Microsoft Word a uloženy jako revize.

The TrackRevisions funkce dělá revize místo skutečné DOM změny. Ale samotné revize jsou oddělené. Například, Pokud smažete jakýkoli odstavec, Aspose.Words místo aby ji smazala.

Kromě toho Aspose.Words umožňuje zkontrolovat, zda byl objekt vložen, smazán nebo změněn formátování pomocí IsDeleteRevision, IsFormatRevision, IsInsertRevision, IsMoveFromRevision, a IsMoveToRevision vlastnosti.

Následující příklad kódu ukazuje, jak použít různé vlastnosti s revizemi:

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