Зміни відстеження в документі

Функціональність зміни треків, також відомий як перегляд, дозволяє відстежувати зміни контенту та форматування, внесені вами або іншими користувачами. Ця функція зміни доріжки з Aspose.Words підтримує зміни треків Microsoft Wordй З цією функціональністю ви можете отримати доступ до індивідуальних джерел у вашому документі та застосувати різні властивості до них.

Коли ви ввімкнете функцію зміни треку, всі вставлені, видалені та модифіковані елементи документа будуть візуально висвітлені з інформацією про кого, коли, і що було змінено. Об’єкти, які здійснюють інформацію про те, що було змінено, називаються “відстеження змін”. Наприклад, припустимо, що ви хочете переглянути документ і зробити важливі зміни – це може означати, що вам потрібно зробити версії. Також можна вставити коментарі для обговорення деяких змін. Що таке зміна документів.

Ця стаття пояснює, як керувати та відстежувати зміни, створені багатьма рецензентами на одному документі, а також властивості для зміни відстеження.

Що таке версія

Перед тим як дайвінг в ревізії, пояснимо значення ревізій. Р Revision є зміною, яка виникає в одному вершині документа, в той час як група ревізій, представлена групою RevisionGroup клас є групою послідовних версій, які відбуваються в багатьох вузлах документа. В основному версія є інструментом відстеження змін.

Ревізії використовуються в функціях зміни відстеження і в межах функції порівняння документів, де з’являються ревізії в результаті порівняння. Таким чином, ревізії в межах функції відстеження показують, хто і що було змінено.

Aspose.Words підтримує різні типи версій, а також у Microsoft Word, такі як введення, видалення, формат Зміна, StyleDefinition Зміна та переміщення. Всі типи редакцій представлені з RevisionType заохочення.

Почати і Зупинити відстежити зміни

Редагування документа, як правило, не рахується як ревізія, доки ви починаєте його відстеження. Aspose.Words дозволяє автоматично відстежувати всі зміни вашого документа простими кроками. Ви можете легко почати процес зміни відстеження за допомогою start_track_revisions метод. Якщо необхідно зупинити процес зміни відстеження, щоб будь-які майбутні редагування не розглядалися доопрацюваннями, вам потрібно буде використовувати stop_track_revisions метод.

В кінці процесу зміни відстеження у вашому документі ви зможете навіть прийняти всі версії або відхилити їх, щоб перевернути документ до початкової форми. Це може бути досягнуто шляхом використання accept_all_revisions або reject_all метод. Крім того, ви можете прийняти або відхилити кожну версію окремо, використовуючи accept або reject метод.

Всі зміни будуть відслідковуватися для однієї ітерації з моменту, коли ви починаєте процес до моменту його зупинки. З’єднання між різними ітераціями представлена наступним сценарієм: ви завершите процес відстеження, після чого зробіть деякі зміни, і знову запустіть зміни відстеження. З цим сценарієм всі зміни, які ви не прийняли або відхилятимуться знову.

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

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
body = doc.first_section.body
para = body.first_paragraph
# Add text to the first paragraph, then add two more paragraphs.
para.append_child(aw.Run(doc, "Paragraph 1. "))
body.append_paragraph("Paragraph 2. ")
body.append_paragraph("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.start_track_revisions("John Doe", datetime.today())
# This paragraph is a revision and will have the according "IsInsertRevision" flag set.
para = body.append_paragraph("Paragraph 4. ")
self.assertTrue(para.is_insert_revision)
# Get the document's paragraph collection and remove a paragraph.
paragraphs = body.paragraphs
self.assertEqual(4, paragraphs.count)
para = paragraphs[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.
self.assertEqual(4, paragraphs.count)
self.assertTrue(para.is_delete_revision)
# The delete revision paragraph is removed once we accept changes.
doc.accept_all_revisions()
self.assertEqual(3, paragraphs.count)
# Stopping the tracking of revisions makes this text appear as normal text.
# Revisions are not counted when the document is changed.
doc.stop_track_revisions()
# Save the document.
doc.save(docs_base.artifacts_dir + "WorkingWithRevisions.accept_revisions.docx")

Приклад наступного коду показує, як генеруються версії, коли вузол переміщається в межах відстежуваного документа:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.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 = doc.first_section.body
print(f"Paragraph count: {body.paragraphs.count}")
# Start tracking revisions.
doc.start_track_revisions("Author", datetime(2020, 12, 23, 14, 0, 0))
# Generate revisions when moving a node from one location to another.
node = body.paragraphs[3]
endNode = body.paragraphs[5].next_sibling
referenceNode = body.paragraphs[0]
while (node != endNode) :
nextNode = node.next_sibling
body.insert_before(node, referenceNode)
node = nextNode
# Stop the process of tracking revisions.
doc.stop_track_revisions()
# There are 3 additional paragraphs in the move-from range.
print("Paragraph count: 0", body.paragraphs.count)
doc.save(docs_base.artifacts_dir + "WorkingWithRevisions.move_node_in_tracked_document.docx")

Управління та зміна магазинів як версії

З попередньою функцією відстеження можна зрозуміти, які зміни були внесені в документ, і які зробили ці зміни. Під час track_revisions Функція, ви змусите будь-які зміни у вашому документі, щоб зберігатися як версії.

Aspose.Words дозволяє перевірити, чи має документ дооопрацювати або не використовуючи has_revision майно. Якщо вам не потрібно автоматично відстежити зміни у вашому документі за допомогою методів запуску_track_revisions та stop_track_revisions, то ви можете використовувати track_revisions Можливість перевірити, чи слідуються зміни під час редагування документа Microsoft Word і зберігаються в якості ревізій.

Про нас track_revisions функція робить ревізії замість реальних DOM зміни. Але самі ревізії окремі. Наприклад, Якщо видалити будь-який пункт, Aspose.Words зробити його як ревізію, розмітивши її як видалення, замість його видалення.

Додатково Aspose.Words дозволяє перевірити, чи вводиться об’єкт, видалений або змінений форматування за допомогою is_delete_revision, is_format_revision, is_insert_revision, is_move_from_revision, і is_move_to_revision властивості.

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

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
# Insert an inline shape without tracking revisions.
self.assertFalse(doc.track_revisions)
shape = aw.drawing.Shape(doc, aw.drawing.ShapeType.CUBE)
shape.wrap_type = aw.drawing.WrapType.INLINE
shape.width = 100
shape.height = 100
doc.first_section.body.first_paragraph.append_child(shape)
# Start tracking revisions and then insert another shape.
doc.start_track_revisions("John Doe")
shape = aw.drawing.Shape(doc, aw.drawing.ShapeType.SUN)
shape.wrap_type = aw.drawing.WrapType.INLINE
shape.width = 100.0
shape.height = 100.0
doc.first_section.body.first_paragraph.append_child(shape)
# Get the document's shape collection which includes just the two shapes we added.
shapes = doc.get_child_nodes(aw.NodeType.SHAPE, True)
self.assertEqual(2, shapes.count)
# Remove the first shape.
shape0 = shapes[0].as_shape()
shape0.remove()
# Because we removed that shape while changes were being tracked, the shape counts as a delete revision.
self.assertEqual(aw.drawing.ShapeType.CUBE, shape0.shape_type)
self.assertTrue(shape0.is_delete_revision)
# And we inserted another shape while tracking changes, so that shape will count as an insert revision.
shape1 = shapes[1].as_shape()
self.assertEqual(aw.drawing.ShapeType.SUN, shape1.shape_type)
self.assertTrue(shape1.is_insert_revision)
# 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 = aw.Document(docs_base.my_dir + "Revision shape.docx")
shapes = doc.get_child_nodes(aw.NodeType.SHAPE, True)
self.assertEqual(2, shapes.count)
# This is the move to revision, also the shape at its arrival destination.
shape0 = shapes[0].as_shape()
self.assertFalse(shape0.is_move_from_revision)
self.assertTrue(shape0.is_move_to_revision)
# This is the move from revision, which is the shape at its original location.
shape1 = shapes[1].as_shape()
self.assertTrue(shape1.is_move_from_revision)
self.assertFalse(shape1.is_move_to_revision)