Revisions
Revisions
本指南展示了如何使用 Aspose.Words FOSS for .NET 检查、接受、拒绝并记录 Word 文档中的跟踪更改。Aspose.Words FOSS for .NET 可以通过 Document.Revisions 检查、接受和拒绝 Word 文档中的跟踪更改(revisions),并且可以在编辑时通过 Document.StartTrackRevisions()/StopTrackRevisions() 记录新的跟踪更改。
读取跟踪更改
Document.Revisions 返回文档中每个 Revision 的 RevisionCollection;Range.Revisions 将相同的范围限制在特定区间。每个 Revision 会报告更改的作者和时间(Author,DateTime),更改的类型(RevisionType:Insertion、Deletion、FormatChange、StyleDefinitionChange 或 Moving),以及适用的位置(ParentNode,ParentStyle)。Document.HasRevisions 会提前告知加载的文档是否包含任何跟踪更改。
接受和拒绝修订
调用 Revision.Accept() 或 Revision.Reject() 可解决单个跟踪更改,或使用 RevisionCollection.AcceptAll() / RejectAll() 一次性处理整个集合。Document.AcceptAllRevisions() 是文档级的便利函数,可一次性接受所有修订。若要有选择地接受或拒绝子集,请实现 IRevisionCriteria.IsMatch(revision) 并将其传递给 RevisionCollection.Accept(criteria) 或 Reject(criteria)。
修订组
来自同一作者且类型相同的连续修订会一起显示为一个 RevisionGroup——可通过 Revision.Group 访问单个修订,或通过 RevisionCollection.Groups(一个 RevisionGroupCollection)访问文档中的每个组。每个组报告其合并的 Text、Author 和 RevisionType。
记录新的已跟踪更改
在进行编辑之前调用 Document.StartTrackRevisions(author) 或其重载版本 StartTrackRevisions(author, dateTime),这样后续的更改会记录为修订而不是直接应用;调用 StopTrackRevisions() 以结束跟踪。Document.TrackRevisions 属性反映跟踪当前是否处于激活状态。
查看原始内容与最终内容
Document.RevisionsView 控制在存在修订时文档是以其 Original 还是 Final 状态(一个 RevisionsView 值)呈现,而不改变底层的修订数据。
技巧与最佳实践
- 在遍历
Document.Revisions之前检查Document.HasRevisions,以跳过对没有已跟踪更改的文档进行不必要的处理。 - 相比手动过滤并逐个调用
Revision.Accept(),更倾向于使用带自定义IRevisionCriteria的RevisionCollection.Accept(criteria)/Reject(criteria)。 RevisionGroup对于呈现可读的更改摘要非常有用——将连续的同作者、同类型修订进行分组,可以避免把每个插入的字符都视为单独的条目。- 始终将
StartTrackRevisions()与后续的StopTrackRevisions()调用配对,以免无关的编辑被记录为修订痕迹。
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
Document.Revisions 在编辑后为空 | StartTrackRevisions() 在编辑前从未被调用 | 在进行想要跟踪的编辑之前调用 StartTrackRevisions(author) |
RevisionCollection.Accept(criteria) 不接受任何内容 | IRevisionCriteria.IsMatch() 与任何修订都不匹配 | 首先将标准逻辑与实际的 Revision.Author/RevisionType/ParentNode 值进行核对 |
文档在 AcceptAllRevisions() 之后仍显示已跟踪的更改标记 | 查看状态,而非修订数据 | 如果需要已解析的内容视图,请将 Document.RevisionsView 设置为 Final |
FAQ
如何检查文档是否包含任何修订痕迹?
阅读 Document.HasRevisions ——如果 Document.Revisions 至少包含一个 Revision,则它是 true。
Revision.Accept() 与 RevisionCollection.AcceptAll() 有何区别?
Revision.Accept() 解析单个特定修订;RevisionCollection.AcceptAll()(或 Document.AcceptAllRevisions())一次性解析集合中的所有修订。
我如何仅接受特定作者所做的修订?
实现 IRevisionCriteria.IsMatch(revision) 来检查 revision.Author,然后使用该实现调用 RevisionCollection.Accept(criteria)。
我如何将自己的编辑记录为追踪更改?
在进行编辑之前调用 Document.StartTrackRevisions(author),完成后调用 Document.StopTrackRevisions()。
存在哪些修订类型?
RevisionType 定义了 Insertion、Deletion、FormatChange、StyleDefinitionChange 和 Moving。
API Reference 摘要
| 类 / 方法 | 描述 |
|---|---|
Document.Revisions | 文档中所有已跟踪更改的 RevisionCollection |
Revision | 一个已跟踪的更改:Author, DateTime, RevisionType, Accept(), Reject() |
RevisionCollection | AcceptAll(), RejectAll(), Accept(criteria), Reject(criteria), Groups |
RevisionGroup / RevisionGroupCollection | 连续的同作者、同类型修订被归为一组 |
IRevisionCriteria | 自定义谓词(IsMatch(revision))用于选择性接受/拒绝 |
Document.StartTrackRevisions() / StopTrackRevisions() | 将新编辑记录为修订更改 |
Document.RevisionsView | Original 或 Final 的修订内容呈现 |