Запис на промените в документ
Функционалността на промените в релсите, известни също като преглед, ви позволява да следите промените в съдържанието и форматирането, направени от вас или други потребители. Функция за промяна на песента с Aspose.Words поддържа промените в следите Microsoft Word. С тази функционалност можете да получите достъп до индивидуални ревизии във вашия документ и да приложите различни свойства към тях.
Когато активирате функцията за промяна на песента, всички въведени, изтрити и променени елементи на документа ще бъдат визуално подчертани с информация за това от кого, кога и какво е променено. Обекти, които носят информация за това, което е било променено, се наричат “проследяване на промените.” Например, да предположим, че искате да прегледате документ и да направите важни промени, това може да означава, че трябва да направите ревизии. Също така може да се наложи да вмъкнете коментари, за да обсъдите някои от промените. Тук идват промените в документите.
Тази статия обяснява как да се управляват и проследяват промените, създадени от много рецензенти на същия документ, както и свойствата за проследяване на промените.
Какво представлява преразглеждането
Преди да се потопиш в ревизиите, нека да обясним значението на ревизиите. A 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 собственост. Ако не е необходимо автоматично да следите промените във вашия документ чрез start_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) |