Zmiany ścieżki w dokumencie
Funkcjonalność zmian toru, znany również jako przegląd, pozwala śledzić zmiany treści i formatowania dokonane przez użytkownika lub innych użytkowników. Ta funkcja zmiany toru Aspose.Words obsługuje zmiany toru w Microsoft Word. Dzięki tej funkcjonalności można uzyskać dostęp do indywidualnych zmian w dokumencie i zastosować do nich różne właściwości.
Kiedy włączysz funkcję zmiany toru, wszystkie dodane, usunięte i zmodyfikowane elementy dokumentu zostaną uwidocznione z informacjami o tym, kto, kiedy i co zostało zmienione. Obiekty zawierające informacje o tym, co zostało zmienione, nazywane są “zmianami śledzenia”. Na przykład, zakładaj, że chcesz przejrzeć dokument i dokonać ważnych zmian - może to oznaczać, że musisz dokonać zmian. W celu omówienia niektórych zmian należy również dodać komentarze. W tym miejscu pojawiają się zmiany w dokumentach.
Ten artykuł wyjaśnia, jak zarządzać i śledzić zmiany stworzone przez wielu recenzentów na tym samym dokumencie, jak również właściwości do śledzenia zmian.
Czym jest rewizja?
Przed nurkowaniem w poprawkach wyjaśnijmy znaczenie poprawek. A revision jest zmianą, która występuje w jednym węźle dokumentu, podczas gdy grupa zmian, reprezentowana przez RevisionGroup klasa, jest grupą korekt sekwencyjnych, które występują w wielu węzłach dokumentu. Przegląd jest narzędziem do śledzenia zmian.
Rewizje są używane w funkcji śledzenia zmian i w funkcji porównywania dokumentów, gdzie korekty pojawiają się w wyniku porównania. Tak więc, zmiany w funkcji śledzenia zmian pokazuje przez kogo i co zostało zmienione.
Aspose.Words obsługuje różne typy przeglądów, jak również w Microsoft Word, takie jak wstawianie, Usuwanie, Format Zmiana, StyleDefinition Zmiana i Przeprowadzka. Wszystkie typy weryfikacji są reprezentowane z RevisionType wyliczenie.
Rozpocznij i przestań śledzić zmiany
Edycja dokumentu zwykle nie liczy się jako zmiana, dopóki nie zaczniesz jej śledzić. Aspose.Words pozwala automatycznie śledzić wszystkie zmiany w dokumencie za pomocą prostych kroków. Można łatwo rozpocząć proces śledzenia zmian za pomocą StartTrackRevisions Metoda. Jeśli musisz zatrzymać proces śledzenia zmian tak, aby jakiekolwiek przyszłe edycje nie są uważane za poprawki, trzeba będzie użyć StopTrackRevisions Metoda.
StartTrackingRevisions
metoda nie zmienia statusu TrackRevisions właściwość i nie wykorzystuje jej wartości w celu śledzenia zmian. Ponadto, jeśli węzeł został przeniesiony z jednej lokalizacji do drugiej wewnątrz dokumentu śledzonego, zostaną utworzone zmiany ruchu, w tym przesunięcie z i przesunięcie do zakresu.
Po zakończeniu procesu śledzenia zmian w dokumencie, będziesz miał możliwość nawet zaakceptować wszystkie poprawki lub odrzucić je, aby przywrócić dokument do pierwotnej formy. Można to osiągnąć za pomocą AcceptAllRevisions lub RejectAll Metoda. Ponadto, można zaakceptować lub odrzucić każdą zmianę oddzielnie za pomocą Accept lub Reject Metoda.
Wszystkie zmiany będą śledzone dla jednej iteracji od momentu rozpoczęcia procesu do momentu jego zatrzymania. Połączenie pomiędzy różnymi iteracjami jest reprezentowane jako następujący scenariusz: ukończysz proces śledzenia, a następnie wprowadzisz pewne zmiany i zaczniesz śledzić zmiany ponownie. W tym scenariuszu wszystkie zmiany, których nie zaakceptowałeś lub nie odrzuciłeś, zostaną ponownie wyświetlone.
AcceptAllRevisions
metoda jest podobna do “Akceptuj wszystkie zmiany” w Microsoft Word.
Poniższy przykład kodu pokazuje jak pracować ze zmianami śledzenia:
// 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"); |
Poniższy przykład kodu pokazuje, w jaki sposób generowane są korekty, gdy węzeł jest przenoszony w dokumencie śledzonym:
// 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"); |
Zarządzanie zmianami i przechowywanie jako zmiany
Z poprzedniej funkcji śledzenia zmian, można zrozumieć, które zmiany zostały dokonane w dokumencie i kto dokonał tych zmian. Podczas gdy z TrackRevisions funkcja, wymuszasz wszelkie zmiany w dokumencie, które zostaną zapisane jako poprawki.
Aspose.Words pozwala na sprawdzenie, czy dokument posiada korektę, czy nie HasRevision nieruchomości. Jeśli nie trzeba automatycznie śledzić zmian w dokumencie za pomocą metod StartTrackRevisions i StopTrackRevisions, to można użyć TrackRevisions
właściwość do sprawdzenia, czy zmiany są śledzone podczas edycji dokumentu w Microsoft Word i przechowywane jako poprawki.
W TrackRevisions
funkcja wprowadza korekty zamiast realnych DOM zmiany. Ale same poprawki są oddzielne. Na przykład: Jeśli usuniesz jakiś paragraf, Aspose.Words zrobić z tego korektę, oznaczając ją jako usunięcie, zamiast ją usunąć.
Ponadto, Aspose.Words pozwala sprawdzić, czy obiekt został wstawiony, usunięty lub zmieniony formatowanie za pomocą IsDeleteRevision, IsFormatRevision, IsInsertRevision, IsMoveFromRevision, oraz IsMoveToRevision nieruchomości.
TrackRevisions
nieruchomości. Dodatkowo można zaakceptować / odrzucić poprawki niezależnie od funkcji śledzenia zmian.
Poniższy przykład kodu pokazuje, jak stosować różne właściwości z korektami:
// 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()); |