Spire.Doc Version:14.10.9 对比14.9.11旧版本升级变更明细

摘要

本次升级包含多项高风险的公开 API 变更,其中 DocumentObjectType 枚举的整体重编号会在不重新编译的情况下造成静默的行为错误,是最高风险项。

1. 比较对象与文件信息

项目 14.9.11 14.10.9
程序集 Spire.Doc.dll Spire.Doc.dll
路径 E:\packges\netdll\spire.doc_14.9.11\BIN\NET4.6\Spire.Doc.dll E:\packges\netdll\spire.doc_14.10.6\BIN\NET4.6\Spire.Doc.dll
AssemblyVersion 14.9.11.0 14.10.9.0
FileVersion 14.9.11.3046 14.10.9.3046
文件大小 20,976,616 字节 21,020,672 字节(+44,056)
SHA256 9bc4566b89b5cb1abe82a9fcbb726ce20a2edfd0b7b2f6657e1b68b6bf35f1e5 5a9ba3712321fcc3f91b1273927b4714933a726ffce1cbe6e6b4f148ee6cd0a3
公钥标记 663f351905198cb3 663f351905198cb3(同一强名称)
XML 文档 1,215,855 字节 1,266,435 字节(+50,580)

两个版本的引用程序集列表完全一致(HarfBuzzSharp、mscorlib、System、System.Core、System.Data、System.Drawing、System.Web、System.Windows.Forms、System.Xml),未新增或移除程序集依赖。

注意:程序集版本号已变化。.NET Framework 的强名称绑定不会自动接受更高版本;未配置 bindingRedirect 时,旧应用可能在加载阶段就失败。

2. 统计总览

指标 14.9.11 14.10.9 变化
公开类型 508 507 +8 / -9
公开成员(DeclaredOnly) 5460 5527 +178 / -111 / ~97
新增类型 — 8 见附录 A
移除类型 9 — 见附录 B
新增成员 — 178 37 个随新类型引入,141 个加在既有类型上
移除成员 111 — 28 个随类型移除;83 个在幸存类型上
其中:直接声明移除 — 54 新版本中该类型及祖先均不再提供
其中:仍可继承访问 — 29 已上移到基类;其中 2 项签名发生变化
修改成员 — 97 60 个枚举值 + 37 个非枚举修改
有效成员面丢失 — 250 槽 / 67 类型 去重后 90 个唯一签名
有效成员面新增 — 917 槽 / 112 类型 主要来自新基类/新接口
类型元数据变化 — 114 基类、接口、抽象性等
XML docId 匹配率 77.8% 77.7% 用于交叉校验,不影响结论

口径说明:

3. 最高优先级破坏性变更

3.1 DocumentObjectType 枚举整体重编号(最高风险:静默错误)

旧版本 64 个常量,新版本 62 个:删除 4 个 SDT content 常量,新增 2 个 SDT Mark 常量,并且几乎所有常量的数值都变了。

完整映射表(仅列出变化项)

成员 旧值 新值 状态
Document 0 1 数值变更
Section 1 2 数值变更
Body 2 3 数值变更
HeaderFooter 3 4 数值变更
Paragraph 4 5 数值变更
StructureDocumentTag 5 6 数值变更
StructureDocumentTagInline 6 9 数值变更
StructureDocumentTagMarkStart — 7 新增
StructureDocumentTagRow 7 10 数值变更
StructureDocumentTagCell 8 11 数值变更
StructureDocumentTagMarkEnd — 8 新增
SDTBlockContent 9 — 删除
SDTInlineContent 10 — 删除
SDTRowContent 11 — 删除
SDTCellContent 12 — 删除
Table 13 12 数值变更
TableRow 14 13 数值变更
TableCell 15 14 数值变更
TextRange 16 15 数值变更
Picture 17 16 数值变更
FieldStart 18 17 数值变更
Field 19 18 数值变更
FieldMark 20 19 数值变更
FieldSeparator 21 20 数值变更
FieldEnd 22 21 数值变更
MergeField 23 22 数值变更
SeqField 24 23 数值变更
EmbededField 25 24 数值变更
ControlField 26 25 数值变更
TextFormField 27 26 数值变更
DropDownFormField 28 27 数值变更
CheckBox 29 28 数值变更
BookmarkStart 30 29 数值变更
BookmarkEnd 31 30 数值变更
MoveFromRangeStart 32 31 数值变更
MoveFromRangeEnd 33 32 数值变更
MoveToRangeStart 34 33 数值变更
MoveToRangeEnd 35 34 数值变更
PermissionStart 36 35 数值变更
PermissionEnd 37 36 数值变更
Shape 38 37 数值变更
ShapeGroup 39 38 数值变更
ShapeLine 40 39 数值变更
ShapePath 41 40 数值变更
ShapeRect 42 41 数值变更
Comment 43 42 数值变更
Footnote 44 43 数值变更
TextBox 45 44 数值变更
Break 46 45 数值变更
Symbol 47 46 数值变更
TOC 48 47 数值变更
XmlParaItem 49 48 数值变更
Undefined 50 -2 数值变更
CommentMark 51 49 数值变更
OleObject 52 50 数值变更
CustomXml 53 51 数值变更
SmartTag 54 52 数值变更
OfficeMath 55 53 数值变更
System 56 -1 数值变更
Ruby 57 54 数值变更
SubDocument 58 55 数值变更
SpecialChar 59 56 数值变更
GlossaryDocument 60 57 数值变更
BuildingBlock 61 58 数值变更
FormField 62 59 数值变更
Any 63 0 数值变更

旧版本完整数值序列

Document=0, Section=1, Body=2, HeaderFooter=3, Paragraph=4, StructureDocumentTag=5, StructureDocumentTagInline=6, StructureDocumentTagRow=7, StructureDocumentTagCell=8, SDTBlockContent=9, SDTInlineContent=10, SDTRowContent=11, SDTCellContent=12, Table=13, TableRow=14, TableCell=15, TextRange=16, Picture=17, FieldStart=18, Field=19, FieldMark=20, FieldSeparator=21, FieldEnd=22, MergeField=23, SeqField=24, EmbededField=25, ControlField=26, TextFormField=27, DropDownFormField=28, CheckBox=29, BookmarkStart=30, BookmarkEnd=31, MoveFromRangeStart=32, MoveFromRangeEnd=33, MoveToRangeStart=34, MoveToRangeEnd=35, PermissionStart=36, PermissionEnd=37, Shape=38, ShapeGroup=39, ShapeLine=40, ShapePath=41, ShapeRect=42, Comment=43, Footnote=44, TextBox=45, Break=46, Symbol=47, TOC=48, XmlParaItem=49, Undefined=50, CommentMark=51, OleObject=52, CustomXml=53, SmartTag=54, OfficeMath=55, System=56, Ruby=57, SubDocument=58, SpecialChar=59, GlossaryDocument=60, BuildingBlock=61, FormField=62, Any=63

新版本完整数值序列

Undefined=-2, System=-1, Any=0, Document=1, Section=2, Body=3, HeaderFooter=4, Paragraph=5, StructureDocumentTag=6, StructureDocumentTagMarkStart=7, StructureDocumentTagMarkEnd=8, StructureDocumentTagInline=9, StructureDocumentTagRow=10, StructureDocumentTagCell=11, Table=12, TableRow=13, TableCell=14, TextRange=15, Picture=16, FieldStart=17, Field=18, FieldMark=19, FieldSeparator=20, FieldEnd=21, MergeField=22, SeqField=23, EmbededField=24, ControlField=25, TextFormField=26, DropDownFormField=27, CheckBox=28, BookmarkStart=29, BookmarkEnd=30, MoveFromRangeStart=31, MoveFromRangeEnd=32, MoveToRangeStart=33, MoveToRangeEnd=34, PermissionStart=35, PermissionEnd=36, Shape=37, ShapeGroup=38, ShapeLine=39, ShapePath=40, ShapeRect=41, Comment=42, Footnote=43, TextBox=44, Break=45, Symbol=46, TOC=47, XmlParaItem=48, CommentMark=49, OleObject=50, CustomXml=51, SmartTag=52, OfficeMath=53, Ruby=54, SubDocument=55, SpecialChar=56, GlossaryDocument=57, BuildingBlock=58, FormField=59

为什么这是最高风险:C# 编译器会把 const 枚举值内联到调用方程序集中。已有程序集不会在运行时重新读取新 DLL 的枚举值,而是继续使用编译时的旧数字。例如:

旧代码中的常量(旧值) 新版本中同值的含义 后果
Document (0) Any (0) 文档节点被当成任意节点
Body (2) Section (2) 正文被当成节
Paragraph (4) HeaderFooter (4) 段落被当成页眉页脚
StructureDocumentTag (5) Paragraph (5) SDT 被当成段落
Table (13) TableRow (13) 表格被当成行
TableCell (15) TextRange (15) 单元格被当成文本范围
Field (19) FieldMark (19) 域被当成域标记
PermissionStart (36) PermissionEnd (36) 权限起点/终点颠倒
Shape (38) ShapeGroup (38) 形状被当成形状组
Comment (43) Footnote (43) 批注被当成脚注
Break (46) Symbol (46) 换行被当成符号
Undefined (50) OleObject (50) 未定义值被当成 OLE 对象
System (56) SpecialChar (56) 系统节点被当成特殊字符
Any (63) 无定义(新枚举最大 59) 越界/未定义行为

此外,default(DocumentObjectType) 的含义从 Document 变成了 Any。任何依赖默认值、数值比较、序列化/反序列化、数据库存储或缓存的代码都必须迁移。

处置:

  1. 所有消费者必须针对新 DLL 重新编译,不能只替换 DLL。
  2. 清理代码中的数字字面量(如 (DocumentObjectType)4),改用常量名。
  3. 如果曾把枚举数值持久化,按“旧常量名 → 新常量名”建立映射后重新取新值,不能按数值直接沿用。
  4. 检查 switch 是否覆盖了新值;旧值 63(Any)在新版本没有对应成员。

3.2 Permission 标识从 string 改为 int

类型/成员 14.9.11 14.10.9 影响
Permission.Id string int 返回类型变更,二进制/源码均破坏
Permission.EditorGroup get get/set 新增 setter,兼容
Permission 构造函数 Permission(PermissionStart)、Permission(PermissionStart, PermissionEnd) 全部移除 源码/二进制破坏
Permission.Editor — string get/set 新增
Permission.Remove() — void 新增
PermissionStart 构造函数 (IDocument, string id) (IDocument, int id) 参数类型变更
PermissionStart.Id string int 返回类型变更
PermissionStart.Permission — Permission get 新增,替代旧构造函数
PermissionEnd 构造函数 (IDocument, string id) (IDocument, int id) 参数类型变更
PermissionEnd.Id string int 返回类型变更
PermissionEnd.PermissionStart — PermissionStart get 新增
PermissionCollection.FindById FindById(string) FindById(int) 参数类型变更
PermissionCollection 索引器 this[string id] 移除 改用 this[int index] / FindById(int)
PermissionCollection.Remove Remove(Permission) Remove(Permission) + Remove(int id) 新增按 id 删除
PermissionCollection.Count/GetEnumerator — 新增 新增
Paragraph.AppendPermStart/End (string id) (int id) 参数类型变更

迁移示例:

// 旧写法
var start = new PermissionStart(doc, "editor-1");
var permission = new Permission(start);
string id = permission.Id;
var found = doc.Permissions.FindById("editor-1");
var byKey = doc.Permissions["editor-1"];       // 旧版索引器
doc.Permissions.Remove(byKey);                  // 旧版按对象删除

// 新写法
var start = new PermissionStart(doc, 1);
var permission = start.Permission;            // 不再有公开构造函数
int id = permission.Id;
permission.Editor = "editor-1";               // 新增的字符串标识
var found = doc.Permissions.FindById(1);
doc.Permissions.Remove(1);                     // 新增按 id 删除

如果业务层原本用字符串做权限主键,需要决定新的整数 ID 分配规则(例如数据库自增、文档内序号),并保证 PermissionStart、PermissionEnd、Permission 三处使用同一个整数。

3.3 SDT(结构化文档标签)模型重构

移除的类型:Spire.Doc.Documents.SDTContent(基类 Body)、Spire.Doc.Documents.SDTInlineContent(基类 DocumentObject)。

新增的类型:StructureDocumentTagMarkStart、StructureDocumentTagMarkEnd(均直接继承 ParagraphBase,仅公开 DocumentObjectType)。

结构变化:

类型 旧基类 新基类 关键结果
StructureDocumentTag BodyRegion BodyRegion(未变) SDTContent 属性移除,新增 Body(IBody)
StructureDocumentTagInline ParagraphBase CompositeDocumentObject SDTContent 移除;新增 Items/Text/TextNodes/CharacterFormat/修订属性
StructureDocumentTagRow TableRow CompositeDocumentObject 不再是 TableRow;丢失 Cells/RowFormat/Height/HeightType/Hidden/IsHeader/AddCell/GetRowIndex 等
StructureDocumentTagCell TableCell CompositeDocumentObject 不再是 TableCell;丢失 CellFormat/Width/Scaling/GridSpan/Paragraphs/Tables/FormFields/OwnerRow/SplitCell 等 27 项有效成员

Row 的构造方式:StructureDocumentTagRow(Table ownerTable) 移除,新增 StructureDocumentTagRow(Document doc)。 Cell 的构造方式:StructureDocumentTagCell(TableRow ownerRow) 移除,新增 StructureDocumentTagCell(Document doc)。

影响:任何把 SDT 行/单元格当普通表格行/单元格使用的代码(样式、行高、单元格宽度、合并、拆分、XHTML 插入、Table.Rows/Table.Cells 遍历)都会编译失败或在运行时不再把它们识别为表格结构。新版本把它们改成“带子节点的复合对象”,需要通过 CompositeDocumentObject 的 DOM API(ChildObjects、AppendChild、InsertBefore 等)访问内容。这是一次语义级重构,不能仅靠类型转换解决。

迁移示例:

// 旧写法
StructureDocumentTag sdt = new StructureDocumentTag(doc);
SDTContent content = sdt.SDTContent;
content.AddParagraph();

// 新写法
StructureDocumentTag sdt = new StructureDocumentTag(doc);
IBody body = sdt.Body;
body.AddParagraph();

// 旧写法:SDT 单元格作为 TableCell
StructureDocumentTagCell cell = new StructureDocumentTagCell(row);
cell.CellFormat.Width = 100;

// 新写法:不再有 CellFormat;改用 CompositeDocumentObject 子节点/子内容 API
StructureDocumentTagCell cell = new StructureDocumentTagCell(doc);
// 具体单元格格式需通过子节点或重新设计文档结构实现,需回归验证

3.4 集合体系重构

核心变化:

基类变化一览(集合相关):

类型 旧基类/状态 新基类/状态 结果
DocumentObjectCollection DocumentItemCollectionBase(abstract) OwnerHolder(非抽象) 抽象性变化;Add 返回 void
DocumentSubsetCollection OwnerHolder 类型删除 Paragraph/Table 集合的旧基类
CommentsCollection DocumentItemCollectionBase DocumentObjectCollection 获得 Count/Add/Remove/ToArray 等
FieldCollection DocumentItemCollectionBase DocumentObjectCollection 获得集合操作;新增 ToArray
FormFieldCollection DocumentItemCollectionBase DocumentObjectCollection 获得集合操作;新增 ToArray
TextBoxCollection DocumentItemCollectionBase DocumentObjectCollection 索引器返回类型改为 ShapeObject
ParagraphCollection DocumentSubsetCollection DocumentObjectCollection 构造函数参数改为 CompositeDocumentObject;Add 返回 void
TableCollection DocumentSubsetCollection DocumentObjectCollection 构造函数参数改为 CompositeDocumentObject;Add 返回 void
BookmarkCollection DocumentItemCollectionBase OwnerHolder 新增 Count/GetEnumerator/Remove(string)/ResetBookmarkCache
PermissionCollection DocumentItemCollectionBase OwnerHolder FindById(int)/Remove(int)/Count/GetEnumerator
ShapeItemCollection DocumentObjectCollection DocumentItemCollectionBase 丢失 Add/Clear/Contains/IndexOf/Insert/Remove/RemoveAt/FirstItem/Item/LastItem/Owner 共 11 项
HeadersFooters OwnerHolder DocumentObjectCollection 新增 Count/Add/Remove/ToArray 等 19 项

Add 返回 int → void 的成员(二进制破坏):

迁移示例:

// 旧写法:依赖返回的索引
int index = body.ChildObjects.Add(paragraph);
int index2 = body.Paragraphs.Add(paragraph);

// 新写法:Add 返回 void,需要索引时自行 IndexOf
body.ChildObjects.Add(paragraph);
int index = body.ChildObjects.IndexOf(paragraph);
body.Paragraphs.Add(paragraph);
int index2 = body.Paragraphs.IndexOf(paragraph);

// 旧写法:强类型重载
row.Cells.Add(cell);
table.Rows.Insert(0, row);

// 新写法:使用 DocumentObject 重载(返回 void)
row.Cells.Add((DocumentObject)cell);
table.Rows.Insert(0, (DocumentObject)row);

3.5 基类变化(19 个类型)

基类变化会同时影响继承成员、is/as 转换、重写、序列化和二进制成员解析。

类型 旧基类 新基类
Spire.Doc.Collections.BookmarkCollection Spire.Doc.Collections.DocumentItemCollectionBase Spire.Doc.OwnerHolder
Spire.Doc.Collections.CommentsCollection Spire.Doc.Collections.DocumentItemCollectionBase Spire.Doc.Collections.DocumentObjectCollection
Spire.Doc.Collections.DocumentObjectCollection Spire.Doc.Collections.DocumentItemCollectionBase Spire.Doc.OwnerHolder
Spire.Doc.Collections.FieldCollection Spire.Doc.Collections.DocumentItemCollectionBase Spire.Doc.Collections.DocumentObjectCollection
Spire.Doc.Collections.FormFieldCollection Spire.Doc.Collections.DocumentItemCollectionBase Spire.Doc.Collections.DocumentObjectCollection
Spire.Doc.Collections.ParagraphCollection Spire.Doc.Collections.DocumentSubsetCollection Spire.Doc.Collections.DocumentObjectCollection
Spire.Doc.Collections.PermissionCollection Spire.Doc.Collections.DocumentItemCollectionBase Spire.Doc.OwnerHolder
Spire.Doc.Collections.ShapeItemCollection Spire.Doc.Collections.DocumentObjectCollection Spire.Doc.Collections.DocumentItemCollectionBase
Spire.Doc.Collections.TableCollection Spire.Doc.Collections.DocumentSubsetCollection Spire.Doc.Collections.DocumentObjectCollection
Spire.Doc.Collections.TextBoxCollection Spire.Doc.Collections.DocumentItemCollectionBase Spire.Doc.Collections.DocumentObjectCollection
Spire.Doc.Documents.StructureDocumentTagCell Spire.Doc.TableCell Spire.Doc.CompositeDocumentObject
Spire.Doc.Documents.StructureDocumentTagInline Spire.Doc.Fields.ParagraphBase Spire.Doc.CompositeDocumentObject
Spire.Doc.Documents.StructureDocumentTagRow Spire.Doc.TableRow Spire.Doc.CompositeDocumentObject
Spire.Doc.Fields.Comment Spire.Doc.Fields.ParagraphBase Spire.Doc.Fields.InlineBody
Spire.Doc.Fields.Footnote Spire.Doc.Fields.ParagraphBase Spire.Doc.Fields.InlineBody
Spire.Doc.Fields.OMath.OfficeMath Spire.Doc.Fields.ParagraphBase Spire.Doc.CompositeDocumentObject
Spire.Doc.Fields.Shapes.ShapeBase Spire.Doc.Fields.ParagraphBase Spire.Doc.CompositeDocumentObject
Spire.Doc.Fields.TableOfContent Spire.Doc.Fields.ParagraphBase Spire.Doc.Fields.Field
Spire.Doc.HeadersFooters Spire.Doc.OwnerHolder Spire.Doc.Collections.DocumentObjectCollection

重点影响:

3.6 基类成员下移与级联丢失

以下成员从 DocumentObject 下移到 CompositeDocumentObject:

结果是:复合类型(Body、Section、Table、TableRow、TableCell、Document、Paragraph、Comment、Footnote、形状等)仍可通过新基类访问;但 DocumentObject 本身以及 24 个非复合叶子类型(BookmarkStart/End、Break、Field、TextRange、Symbol、PermissionStart/End、水印类型等)不再暴露这些成员。

成员签名 受影响类型数
method|ToString(System.String) 48
method|GetIndex(Spire.Doc.Interface.IDocumentObject) 24
property|ChildObjects() 24
property|FirstChild() 24
property|LastChild() 24
method|ApplyCharacterFormat(Spire.Doc.Formatting.CharacterFormat) 11
method|NameToBuiltIn(System.String) 4
method|EnsureMinimum() 3
ctor|(Spire.Doc.Collections.BodyRegionCollection) 2
ctor|(Spire.Doc.Document) 2

说明:ToString(string) 在 48 个类型上消失,是因为它从 DocumentObject 基类被移除;ApplyCharacterFormat 在 11 个类型上消失,是因为这些类型不再继承 ParagraphBase(ParagraphBase 本身仍保留该方法)。

二进制影响:成员上移到基类通常仍能解析(CLR 会沿基类链查找);成员下移到派生类则不同——旧 IL 中的成员引用通常指向原声明类型 DocumentObject,CLR 不会向派生类查找,替换 DLL 后很可能抛 MissingMethodException。因此“仍可通过新基类访问”只对重新编译后的源码成立,不能据此认为旧二进制安全。

3.7 返回类型变化(21 项)

类型 成员 旧返回类型 新返回类型
Spire.Doc.BodyRegion Spire.Doc.Interface.IBody OwnerTextBody { get; } Spire.Doc.Body Spire.Doc.Interface.IBody
Spire.Doc.Collections.DocumentObjectCollection System.Void Add(Spire.Doc.Interface.IDocumentObject documentObject) System.Int32 System.Void
Spire.Doc.Collections.ParagraphCollection override System.Void Add(Spire.Doc.Interface.IParagraph paragraph) System.Int32 System.Void
Spire.Doc.Collections.ParagraphItemCollection Spire.Doc.Interface.IParagraphBase this[System.Int32 index] { get; } Spire.Doc.Fields.ParagraphBase Spire.Doc.Interface.IParagraphBase
Spire.Doc.Collections.TableCollection override System.Void Add(Spire.Doc.Interface.ITable table) System.Int32 System.Void
Spire.Doc.Collections.TableCollection System.Void Insert(System.Int32 index, Spire.Doc.Interface.ITable table) System.Int32 System.Void
Spire.Doc.Collections.TextBoxCollection Spire.Doc.Fields.ShapeObject this[System.Int32 index] { get; } Spire.Doc.Fields.TextBox Spire.Doc.Fields.ShapeObject
Spire.Doc.Documents.Paragraph Spire.Doc.Interface.IParagraphBase this[System.Int32 index] { get; } Spire.Doc.Fields.ParagraphBase Spire.Doc.Interface.IParagraphBase
Spire.Doc.Documents.TextBodySelection Spire.Doc.Interface.IBody TextBody { get; } Spire.Doc.Body Spire.Doc.Interface.IBody
Spire.Doc.Document Spire.Doc.Interface.IParagraphBase CreateParagraphItem(Spire.Doc.Documents.ParagraphItemType itemType) Spire.Doc.Fields.ParagraphBase Spire.Doc.Interface.IParagraphBase
Spire.Doc.Fields.Comment Spire.Doc.Interface.IBody Body { get; } Spire.Doc.Body Spire.Doc.Interface.IBody
Spire.Doc.Fields.Footnote Spire.Doc.Interface.IBody Body { get; } Spire.Doc.Body Spire.Doc.Interface.IBody
Spire.Doc.Fields.TextBox Spire.Doc.Interface.IBody Body { get; } Spire.Doc.Body Spire.Doc.Interface.IBody
Spire.Doc.Interface.IParagraphCollection System.Void Add(Spire.Doc.Interface.IParagraph paragraph) System.Int32 System.Void
Spire.Doc.Interface.IParagraph Spire.Doc.Interface.IParagraphBase this[System.Int32 index] { get; } Spire.Doc.Fields.ParagraphBase Spire.Doc.Interface.IParagraphBase
Spire.Doc.Interface.ITableCollection System.Void Add(Spire.Doc.Interface.ITable table) System.Int32 System.Void
Spire.Doc.Interface.ITextBox Spire.Doc.Interface.IBody Body { get; } Spire.Doc.Body Spire.Doc.Interface.IBody
Spire.Doc.Pages.FixedLayoutColumn Spire.Doc.Interface.IBody Body { get; } Spire.Doc.Body Spire.Doc.Interface.IBody
Spire.Doc.PermissionEnd System.Int32 Id { get; } System.String System.Int32
Spire.Doc.PermissionStart System.Int32 Id { get; } System.String System.Int32
Spire.Doc.Permission System.Int32 Id { get; } System.String System.Int32

模式总结:

这些变化都会改变 CLR 方法签名(返回类型是签名的一部分),旧二进制会 MissingMethodException;源码层面通常需要显式转换或改用接口。

3.8 类型移除与命名空间迁移

移除的 9 个公开类型:

移除类型 种类 成员数 基类/说明
Spire.Doc.Collections.DocumentObjectCollection+ChangeItems Delegate 4 System.MulticastDelegate
Spire.Doc.Collections.DocumentObjectCollection+ChangeItemsType Enum 3 System.Enum
Spire.Doc.Collections.DocumentSubsetCollection Class 5 Spire.Doc.OwnerHolder
Spire.Doc.Collections.DocumentSubsetCollection+SubSetEnumerator Class 4 System.Object
Spire.Doc.CompoundFile.IDocCloneable Interface 1 —
Spire.Doc.Documents.IWSectionCollection Interface 3 —
Spire.Doc.Documents.SDTContent Class 1 Spire.Doc.Body
Spire.Doc.Documents.SDTInlineContent Class 5 Spire.Doc.DocumentObject
Spire.Doc.Interface.ITextBoxItemCollection Interface 2 —

新增的 8 个公开类型:

新增类型 种类 成员数 基类/说明
Spire.Doc.Collections.CommentRangeCollection Class 8 Spire.Doc.OwnerHolder
Spire.Doc.Collections.TextRangeCollection Class 2 Spire.Doc.Collections.DocumentObjectCollection
Spire.Doc.Documents.ISectionCollection Interface 0 —
Spire.Doc.Documents.StructureDocumentTagMarkEnd Class 1 Spire.Doc.Fields.ParagraphBase
Spire.Doc.Documents.StructureDocumentTagMarkStart Class 1 Spire.Doc.Fields.ParagraphBase
Spire.Doc.Fields.InlineBody Class 16 Spire.Doc.CompositeDocumentObject
Spire.Doc.Formatting.Revisions.IRevisionTracking Interface 8 —
Spire.Doc.Interface.IDocCloneable Interface 1 —

重点:

4. 其他破坏性与行为变化

4.1 构造函数与参数类型变化

类型 旧构造函数 新构造函数
Bookmark Bookmark(BookmarkStart start) 移除(保留两参构造)
PermissionStart (IDocument, string id) (IDocument, int id)
PermissionEnd (IDocument, string id) (IDocument, int id)
StructureDocumentTagRow (Table ownerTable) (Document doc)
StructureDocumentTagCell (TableRow ownerRow) (Document doc)
CellCollection (TableRow owner) (CompositeDocumentObject container)
RowCollection (Table owner) (CompositeDocumentObject container)
ParagraphCollection (BodyRegionCollection bodyItems) (CompositeDocumentObject ownerBody)
TableCollection (BodyRegionCollection bodyItems) (CompositeDocumentObject container)
CommentsCollection (Document doc) 移除
SectionCollection (Document doc) 移除
BodyRegionCollection (Body body) 移除
SDTProperties (DocumentObject owner) 移除
Permission 两个公开构造函数 全部移除
TextBodySelection (ParagraphBase, ParagraphBase) (IParagraphBase, IParagraphBase)

参数名称变化(仅影响命名实参,源码一般兼容):

4.2 直接声明移除的成员(54 项)

这里统计的是旧类型自身声明的成员在新版本中被移除;不包含“旧类型因基类变化而丢失的继承成员”。后者计入有效成员面(67 个类型共 250 个槽),典型如 ChildObjects、ToString(string)、ApplyCharacterFormat 的级联消失。

完整清单见附录 D。其中最需要关注的非级联项:

类型 成员 替代/说明
Style/ListStyle/ParagraphStyle/TableStyle static BuiltinStyle NameToBuiltIn(string) 无直接替代
TextBodyPart Copy(ParagraphBase, bool)、PasteAfter(ParagraphBase) 改用 IParagraphBase 重载
TextBodySelection ctor(ParagraphBase, ParagraphBase) 改用 IParagraphBase 重载
OfficeMath ParentParagraph 改用 OwnerParagraph
Comment Items、EnsureMinimum() Items → CommentedItems;EnsureMinimum 无直接替代
Footnote TextBody、EnsureMinimum() Footnote 自身即 IBody;EnsureMinimum 无直接替代
Paragraph AppendPermStart(string)、AppendPermEnd(string) 改用 int 重载
DocumentObject virtual ToString(string separator) 无直接替代
SDT 类型 SDTContent 属性 / SDT Row 的 Cells、RowFormat 见 3.3
CommentsCollection Counts()、Remove(Comment) Count;Remove(DocumentObject)/Comment.Remove()
SectionCollection Add(ISection)、IndexOf(ISection) DocumentObject 重载
PermissionCollection FindById(string)、this[string] FindById(int)/Remove(int)

另有 2 项:旧声明被基类同名成员取代,但签名发生变化

类型 旧声明 新版本继承自 变化
DocPicture System.Single Rotation { get; set; } ShapeBase float → double;旧成员隐藏了基类同名属性
HeadersFooters override IEnumerator GetEnumerator() DocumentObjectCollection IEnumerator → IEnumerator<DocumentObject>

DocPicture.Rotation 在旧版本中以 float 隐藏了 ShapeBase.Rotation(double);新版本删除该隐藏声明,因此 DocPicture.Rotation 现在解析为 double。依赖 float 的源码需要显式转换,旧二进制会因返回类型不匹配而失败。

此外,CellCollection/RowCollection 的强类型 Add/IndexOf/Insert/Remove 被移除,但基类 DocumentObjectCollection 仍提供 DocumentObject 版本;ShapeItemCollection 的 11 项集合能力则没有基类兜底。

4.3 访问器变化

类型 成员 14.9.11 14.10.9 兼容性
Bookmark Name get get/set 新增 setter,兼容
Field Separator get get/set 新增 setter,兼容
ShapeBase Size get get/set 新增 setter,兼容
Permission EditorGroup get get/set 新增 setter,兼容
Document TextBoxes get/set get setter 移除,破坏

Document.TextBoxes 的 setter 被移除:旧代码若整体替换文本框集合将无法编译,应改为通过 DocumentObjectCollection/TextBoxCollection 的增删方法操作现有集合。

4.4 Obsolete 标记(警告级)

以下 4 个成员新增 [Obsolete](IsError = false,仅警告):

这体现了新版本的 API 方向:集合自身的增删逐步让位于 CompositeDocumentObject 的 DOM 树操作。

4.5 行为语义变化

5. 兼容性影响分析

5.1 二进制兼容性

变化 CLR 层后果 说明
枚举常量重编号 无异常,静默错误 const 被内联;旧数值在新版本含义不同
类型删除 TypeLoadException / MissingMethodException 签名引用该类型时加载失败
基类变化 InvalidCastException / MissingMethodException 继承成员解析与转换目标改变
返回类型变化 MissingMethodException 返回类型属于 CLR 签名
参数类型变化(string→int) MissingMethodException 签名不匹配
Add/Insert 返回 int→void MissingMethodException 签名不匹配
成员上移到基类 通常可解析 CLR 沿基类链查找成员
成员下移到派生类 很可能 MissingMethodException 旧 IL 引用原声明类型,不向派生类查找
新增接口实现 兼容 不改变已有成员签名
新增 setter 兼容 新增方法
移除 setter MissingMethodException(set_*) 旧 IL 调用 setter 时失败
新增 Obsolete 兼容 仅编译警告
程序集版本变化 可能 FileLoadException 强名称绑定需 bindingRedirect

结论:即使配置了 bindingRedirect 让程序集加载成功,上述签名/继承变化仍会在首次调用时抛异常;而枚举问题甚至不会抛异常,危害更大。

5.2 源码兼容性

5.3 行为兼容性

即使源码全部改到可编译,以下行为仍需回归测试:

  1. SDT 行/单元格的表格布局、宽度、合并、拆分、XHTML 插入。
  2. 权限范围(start/end/permission)的匹配与编辑器身份。
  3. 批注/脚注的正文结构、CommentedItems 与旧 Items 的差异。
  4. 目录(TOC)作为 Field 的更新行为。
  5. 形状/文本框/图片作为 IBody 后的子内容与文本提取。
  6. 集合 Add 后索引、顺序、事件/缓存行为。
  7. 页眉页脚集合的枚举与 Count。
  8. 文档遍历中 DocumentObjectType 的判断分支。

5.4 兼容性矩阵

变更 二进制 源码 行为 处置级别
DocumentObjectType 重编号 静默错误 重编译后正常 高 P0
Permission string→int 破坏 破坏 高 P0
SDT Row/Cell 基类变化 破坏 破坏 高 P0
类型删除(9 个) 破坏 破坏 高 P0
DocumentObjectCollection 重构 破坏 破坏 中高 P0
19 个基类变化 破坏 破坏 高 P0
返回类型变化(21 项) 破坏 破坏 中 P1
Add/Insert int→void 破坏 破坏 中 P1
成员下移(ChildObjects 等) 很可能破坏 需转换 中 P1
成员上移(Shape 属性等) 通常兼容 兼容 低 P2
新增 setter/接口/类型 兼容 兼容 低 P2
Obsolete 标记 兼容 警告 低 P2

6. 迁移指南

6.1 迁移顺序(建议)

步骤 动作 重点检查
1 统一重新编译所有引用 Spire.Doc 的项目 禁止直接替换 DLL;更新 bindingRedirect 到 14.10.9.0
2 迁移持久化的 DocumentObjectType 数值 数据库、JSON、缓存、配置文件;按常量名映射
3 Permission 字符串 ID → int 数据模型、权限范围、FindById/索引器/删除
4 集合 API Add 返回值、强类型重载、基类类型、索引器返回类型
5 SDT 代码 SDTContent/Body、Row/Cell 的表格能力、构造函数
6 ChildObjects/GetIndex/ToString(separator) 转换为 CompositeDocumentObject 或改用新 DOM API
7 IBody/IParagraphBase 返回类型 显式转换或改用接口
8 Comment/Footnote CommentedItems、Footnote 自身 IBody、EnsureMinimum
9 形状/公式 ApplyCharacterFormat → CharacterFormat/ApplyStyle;Size setter
10 回归测试 SDT、权限、表格、批注、脚注、TOC、页眉页脚、文本框

6.2 关键代码迁移

(1)枚举判断

// 重新编译后使用常量名,不要使用数字
if (obj.DocumentObjectType == DocumentObjectType.Paragraph) { ... }

// 如果需要把旧持久化数值迁移到新枚举,先按旧常量名映射:
// 旧 4 (Paragraph) -> 新 Paragraph (5)
// 旧 0 (Document)  -> 新 Document (1)
// 旧 63 (Any)      -> 新版本无对应成员

(2)ChildObjects / 子节点

// 旧写法:任意 DocumentObject 都可访问
DocumentObjectCollection children = documentObject.ChildObjects;

// 新写法:仅复合对象有 ChildObjects
if (documentObject is CompositeDocumentObject composite)
{
    DocumentObjectCollection children = composite.ChildObjects;
    DocumentObject first = composite.FirstChild;
    int index = composite.GetIndex(child);
}

(3)集合添加

// Add 不再返回索引
body.ChildObjects.Add(paragraph);
int index = body.ChildObjects.IndexOf(paragraph);

// 强类型集合重载已移除,使用 DocumentObject 重载
row.Cells.Add((DocumentObject)cell);
table.Rows.Insert(0, (DocumentObject)row);

(4)返回接口类型

// 旧写法
ParagraphBase item = doc.CreateParagraphItem(ParagraphItemType.TextRange);
Body body = comment.Body;

// 新写法
IParagraphBase item = doc.CreateParagraphItem(ParagraphItemType.TextRange);
IBody body = comment.Body;

// 需要具体类型时显式转换
var paragraph = (Paragraph)item;

(5)Comment / Footnote

// Comment.Items 已移除
foreach (IParagraphBase item in comment.CommentedItems) { ... }

// Footnote.TextBody 已移除;Footnote 自身就是 IBody
footnote.AddParagraph();
IBody footnoteBody = footnote.Body;

(6)TextBodyPart / TextBodySelection

part.Copy((IParagraphBase)paragraphBase, true);
part.PasteAfter((IParagraphBase)paragraphBase);
var selection = new TextBodySelection((IParagraphBase)start, (IParagraphBase)end);

(7)形状格式

// 旧写法:形状上直接 ApplyCharacterFormat
shape.ApplyCharacterFormat(format);

// 新写法:形状不再继承 ParagraphBase,改用 CharacterFormat 属性/ApplyStyle
shape.ApplyStyle("MyStyle");
// 或逐项复制到 shape.CharacterFormat

(8)IDocCloneable / ISectionCollection

// 命名空间迁移
using Spire.Doc.Interface; // 原 Spire.Doc.CompoundFile
IDocCloneable cloneable = obj;

// IWSectionCollection -> ISectionCollection(空标记接口)
ISectionCollection sections = document.Sections;
Section first = (Section)sections; // 索引器返回 IDocumentObject

(9)TextBoxCollection 索引器

// 旧写法
TextBox textBox = document.TextBoxes;

// 新写法:索引器返回 ShapeObject
TextBox textBox = (TextBox)document.TextBoxes;

6.3 无法自动迁移/需人工设计的事项

  1. 持久化的 DocumentObjectType 数值:必须按语义映射,不能按数值沿用。
  2. SDT Row/Cell 的表格能力:新模型不再提供 CellFormat、RowFormat、Cells、合并/拆分等;需要重新设计或寻找替代 API。
  3. Style.NameToBuiltIn:没有等价替换;需要维护名称映射表(内置样式名与枚举名并不总是一致)。
  4. ApplyCharacterFormat:形状/批注/脚注等类型上无等价方法;逐项复制 CharacterFormat 可能无法完全复现原行为。
  5. ToString(string separator):无直接替代;需自行遍历子项拼接。
  6. ShapeItemCollection:公开类型仍在,但所有集合操作丢失,且没有公开成员返回该类型;若通过反射/内部途径使用,需要改用其他集合。
  7. 权限 ID 分配:字符串→整数是数据模型变更,需要设计唯一性与迁移策略。

7. 非破坏性增强(可加以利用)

7.1 DOM 树操作

DocumentObject 新增 GetText()、Remove()、GetAncestor(...)、GetNextInPreOrder(...)、GetPreviousInPreOrder(...)、HasChildNodes;CompositeDocumentObject 新增 AppendChild、PrependChild、InsertBefore、InsertAfter、RemoveChild、RemoveAllChildren、RemoveChildRange、GetChild、GetChildNodes、整型索引器,以及 ChildObjects/FirstChild/LastChild。这组 API 取代了部分集合增删与手工遍历。

7.2 修订跟踪

新增 IRevisionTracking(8 个成员),35 个类型实现:IsInsertRevision、IsDeleteRevision、IsMoveFromRevision、IsMoveToRevision、InsertRevision、DeleteRevision、MoveFromRevision、MoveToRevision。批注、脚注、段落、域、形状、水印等均可统一处理修订。

7.3 类型化范围集合

7.4 集合与查询增强

7.5 可写属性与便捷成员

8. 完整变更清单与工具产物

产物 路径 说明
本报告 E:\packges\netdll\Spire.Doc_API_Diff_14.9.11_vs_14.10.6.md 中文详细报告
CSV 全量清单 E:\packges\netdll\api-diff-tools\out\api-changes.csv 552 行变更,含 priority / action 迁移优先级列,UTF-8 BOM
旧版 API JSON E:\packges\netdll\api-diff-tools\out\api-14.9.11.json 508 类型 / 5460 成员
新版 API JSON E:\packges\netdll\api-diff-tools\out\api-14.10.9.json 507 类型 / 5527 成员
导出脚本 E:\packges\netdll\api-diff-tools\dump-api.ps1 仅反射导出公开 API
分析脚本 analyze.py、query.py、refine.py、report_data.py、build_report.py 差分/查询/有效面/报告生成

CSV 列:change, priority, type, member_kind, member_name, category, action, old_signature, new_signature, details。 change 取值:type_added、type_removed、type_modified、member_added、member_removed、member_modified。 priority 口径:P0 必须修改(使用该 API 即编译失败、运行失败或静默错误,169 项)、P1 建议修改(可编译,但存在过时警告、命名实参、继承替代或语义风险,64 项)、P2 仅重编译(新增 API 或纯元数据变化,319 项)。action 给出每行的处置建议。

9. 方法论与验证

9.1 导出方法

  1. 使用 Assembly.ReflectionOnlyLoadFrom 仅反射加载目标 DLL,不执行其业务代码。
  2. 在 GetTypes() 前遍历 GetReferencedAssemblies() 预加载依赖;对本地存在的依赖使用 ReflectionOnlyLoadFrom 兜底。
  3. 使用 BindingFlags.Public | DeclaredOnly 只导出类型自身声明的公开成员;构造函数只取公开构造函数。
  4. 对嵌套类型要求整条 DeclaringType 链都公开,避免把内部类型中的 public 嵌套类型误算为导出类型(修正后为 508)。
  5. 生成 ECMA-334 XML 文档 ID(T:/M:/P:/F:/E:),与官方 XML 文档交叉校验。
  6. 计算“有效成员面”:沿程序集内基类链合并成员;构造函数不继承;仅当新版本中该类型自身或祖先仍提供同名同签名成员时,才算“仍可访问”。

9.2 验证

9.3 局限

附录 A:新增类型(8)

新增类型 种类 成员数 基类/说明
Spire.Doc.Collections.CommentRangeCollection Class 8 Spire.Doc.OwnerHolder
Spire.Doc.Collections.TextRangeCollection Class 2 Spire.Doc.Collections.DocumentObjectCollection
Spire.Doc.Documents.ISectionCollection Interface 0 —
Spire.Doc.Documents.StructureDocumentTagMarkEnd Class 1 Spire.Doc.Fields.ParagraphBase
Spire.Doc.Documents.StructureDocumentTagMarkStart Class 1 Spire.Doc.Fields.ParagraphBase
Spire.Doc.Fields.InlineBody Class 16 Spire.Doc.CompositeDocumentObject
Spire.Doc.Formatting.Revisions.IRevisionTracking Interface 8 —
Spire.Doc.Interface.IDocCloneable Interface 1 —

A.1 新增类型的公开成员

新增类型 种类 成员
Spire.Doc.Collections.CommentRangeCollection method System.Boolean Contains(Spire.Doc.DocumentObject documentObject)
Spire.Doc.Collections.CommentRangeCollection method System.Boolean Contains(Spire.Doc.Interface.IDocumentObject documentObject)
Spire.Doc.Collections.CommentRangeCollection method override System.Collections.Generic.IEnumerator<Spire.Doc.Interface.IParagraphBase> GetEnumerator()
Spire.Doc.Collections.CommentRangeCollection method System.Int32 IndexOf(Spire.Doc.DocumentObject documentObject)
Spire.Doc.Collections.CommentRangeCollection method System.Int32 IndexOf(Spire.Doc.Interface.IDocumentObject documentObject)
Spire.Doc.Collections.CommentRangeCollection method Spire.Doc.Interface.IParagraphBase[] ToArray()
Spire.Doc.Collections.CommentRangeCollection property System.Int32 Count { get; }
Spire.Doc.Collections.CommentRangeCollection property Spire.Doc.Interface.IParagraphBase this[System.Int32 index] { get; }
Spire.Doc.Collections.TextRangeCollection method Spire.Doc.Interface.ITextRange[] ToArray()
Spire.Doc.Collections.TextRangeCollection property Spire.Doc.Interface.ITextRange this[System.Int32 index] { get; }
Spire.Doc.Documents.StructureDocumentTagMarkEnd property Spire.Doc.Documents.DocumentObjectType DocumentObjectType { get; }
Spire.Doc.Documents.StructureDocumentTagMarkStart property Spire.Doc.Documents.DocumentObjectType DocumentObjectType { get; }
Spire.Doc.Fields.InlineBody method Spire.Doc.Documents.Paragraph AddParagraph()
Spire.Doc.Fields.InlineBody method Spire.Doc.Table AddTable()
Spire.Doc.Fields.InlineBody method Spire.Doc.Table AddTable(System.Boolean showBorder)
Spire.Doc.Fields.InlineBody method override System.Void ApplyStyle(Spire.Doc.Documents.DefaultCharacterStyle bstyle)
Spire.Doc.Fields.InlineBody method override System.Void ApplyStyle(System.String styleName)
Spire.Doc.Fields.InlineBody property Spire.Doc.Formatting.CharacterFormat CharacterFormat { get; }
Spire.Doc.Fields.InlineBody property Spire.Doc.Formatting.Revisions.EditRevision DeleteRevision { get; set; }
Spire.Doc.Fields.InlineBody property Spire.Doc.Formatting.Revisions.EditRevision InsertRevision { get; set; }
Spire.Doc.Fields.InlineBody property System.Boolean IsDeleteRevision { get; }
Spire.Doc.Fields.InlineBody property System.Boolean IsInsertRevision { get; }
Spire.Doc.Fields.InlineBody property System.Boolean IsMoveFromRevision { get; }
Spire.Doc.Fields.InlineBody property System.Boolean IsMoveToRevision { get; }
Spire.Doc.Fields.InlineBody property Spire.Doc.Formatting.Revisions.MoveRevision MoveFromRevision { get; set; }
Spire.Doc.Fields.InlineBody property Spire.Doc.Formatting.Revisions.MoveRevision MoveToRevision { get; set; }
Spire.Doc.Fields.InlineBody property Spire.Doc.Documents.Paragraph OwnerParagraph { get; }
Spire.Doc.Fields.InlineBody property System.String StyleName { get; }
Spire.Doc.Formatting.Revisions.IRevisionTracking property Spire.Doc.Formatting.Revisions.EditRevision DeleteRevision { get; }
Spire.Doc.Formatting.Revisions.IRevisionTracking property Spire.Doc.Formatting.Revisions.EditRevision InsertRevision { get; }
Spire.Doc.Formatting.Revisions.IRevisionTracking property System.Boolean IsDeleteRevision { get; }
Spire.Doc.Formatting.Revisions.IRevisionTracking property System.Boolean IsInsertRevision { get; }
Spire.Doc.Formatting.Revisions.IRevisionTracking property System.Boolean IsMoveFromRevision { get; }
Spire.Doc.Formatting.Revisions.IRevisionTracking property System.Boolean IsMoveToRevision { get; }
Spire.Doc.Formatting.Revisions.IRevisionTracking property Spire.Doc.Formatting.Revisions.MoveRevision MoveFromRevision { get; }
Spire.Doc.Formatting.Revisions.IRevisionTracking property Spire.Doc.Formatting.Revisions.MoveRevision MoveToRevision { get; }
Spire.Doc.Interface.IDocCloneable method System.Object Clone()

说明:CommentRangeCollection、TextRangeCollection 是新的类型化集合;InlineBody 是 Comment/Footnote 的新基类;IRevisionTracking 是修订跟踪接口;IDocCloneable 从 CompoundFile 命名空间迁移;ISectionCollection 是空标记接口;两个 StructureDocumentTagMark* 是 SDT 边界标记。

附录 B:移除类型(9)

移除类型 种类 成员数 基类/说明
Spire.Doc.Collections.DocumentObjectCollection+ChangeItems Delegate 4 System.MulticastDelegate
Spire.Doc.Collections.DocumentObjectCollection+ChangeItemsType Enum 3 System.Enum
Spire.Doc.Collections.DocumentSubsetCollection Class 5 Spire.Doc.OwnerHolder
Spire.Doc.Collections.DocumentSubsetCollection+SubSetEnumerator Class 4 System.Object
Spire.Doc.CompoundFile.IDocCloneable Interface 1 —
Spire.Doc.Documents.IWSectionCollection Interface 3 —
Spire.Doc.Documents.SDTContent Class 1 Spire.Doc.Body
Spire.Doc.Documents.SDTInlineContent Class 5 Spire.Doc.DocumentObject
Spire.Doc.Interface.ITextBoxItemCollection Interface 2 —

说明:DocumentSubsetCollection 是旧 ParagraphCollection/TableCollection 的基类;SDTContent/SDTInlineContent 是 SDT 内容包装;CompoundFile.IDocCloneable 迁移到 Interface;IWSectionCollection 被 ISectionCollection 替代;ITextBoxItemCollection 无公开实现者;两个嵌套类型是旧集合变更通知的公开产物。

附录 C:新增成员(178)

C.1 新增类型上的成员(37)

这 37 个成员全部位于本版本新增的 8 个类型上,完整清单见附录 A.1,此处不再重复列出。

C.2 既有类型上的新增成员(141)

类型 种类 新增成员 Obsolete
Spire.Doc.Body property Spire.Doc.Collections.BodyRegionCollection Items { get; } —
Spire.Doc.BookmarkStart property Spire.Doc.Bookmark Bookmark { get; } —
Spire.Doc.Bookmark method System.Void Remove() —
Spire.Doc.Bookmark property System.String Text { get; set; } —
Spire.Doc.Break property System.String Text { get; set; } —
Spire.Doc.Collections.BodyRegionCollection property Spire.Doc.BodyRegion this[System.Int32 index] { get; } —
Spire.Doc.Collections.BookmarkCollection method override System.Collections.IEnumerator GetEnumerator() —
Spire.Doc.Collections.BookmarkCollection method System.Void Remove(System.String bookmarkName) —
Spire.Doc.Collections.BookmarkCollection method System.Void ResetBookmarkCache() —
Spire.Doc.Collections.BookmarkCollection property System.Int32 Count { get; } —
Spire.Doc.Collections.CellCollection constructor CellCollection(Spire.Doc.CompositeDocumentObject container) —
Spire.Doc.Collections.CellCollection method Spire.Doc.TableCell[] ToArray() —
Spire.Doc.Collections.DocumentObjectCollection method System.Void Add(Spire.Doc.DocumentObject documentObject) —
Spire.Doc.Collections.DocumentObjectCollection method System.Boolean Contains(Spire.Doc.DocumentObject documentObject) —
Spire.Doc.Collections.DocumentObjectCollection method override System.Collections.Generic.IEnumerator<Spire.Doc.DocumentObject> GetEnumerator() —
Spire.Doc.Collections.DocumentObjectCollection method System.Int32 IndexOf(Spire.Doc.DocumentObject documentObject) —
Spire.Doc.Collections.DocumentObjectCollection method System.Void Insert(System.Int32 index, Spire.Doc.DocumentObject documentObject) This method is obsolete. Use Owner.InsertBefore(documentObject, refChild) or Owner.InsertAfter(documentObject, refChild) instead.
Spire.Doc.Collections.DocumentObjectCollection method System.Void Remove(Spire.Doc.DocumentObject documentObject) —
Spire.Doc.Collections.DocumentObjectCollection method Spire.Doc.DocumentObject[] ToArray() —
Spire.Doc.Collections.DocumentObjectCollection property System.Int32 Count { get; } —
Spire.Doc.Collections.FieldCollection method Spire.Doc.Fields.Field[] ToArray() —
Spire.Doc.Collections.FormFieldCollection method Spire.Doc.Fields.FormField[] ToArray() —
Spire.Doc.Collections.ParagraphCollection constructor ParagraphCollection(Spire.Doc.CompositeDocumentObject ownerBody) —
Spire.Doc.Collections.ParagraphCollection method Spire.Doc.Documents.Paragraph[] ToArray() —
Spire.Doc.Collections.ParagraphItemCollection method Spire.Doc.Interface.IParagraphBase[] ToArray() —
Spire.Doc.Collections.PermissionCollection method Spire.Doc.Permission FindById(System.Int32 id) —
Spire.Doc.Collections.PermissionCollection method override System.Collections.IEnumerator GetEnumerator() —
Spire.Doc.Collections.PermissionCollection method System.Void Remove(System.Int32 id) —
Spire.Doc.Collections.PermissionCollection property System.Int32 Count { get; } —
Spire.Doc.Collections.RowCollection constructor RowCollection(Spire.Doc.CompositeDocumentObject container) —
Spire.Doc.Collections.RowCollection method Spire.Doc.TableRow[] ToArray() —
Spire.Doc.Collections.SectionCollection method Spire.Doc.Section[] ToArray() —
Spire.Doc.Collections.StyleCollection method System.Int32 GetNextAvailableIstd() —
Spire.Doc.Collections.TableCollection constructor TableCollection(Spire.Doc.CompositeDocumentObject container) —
Spire.Doc.Collections.TableCollection method Spire.Doc.Table[] ToArray() —
Spire.Doc.Collections.TextBoxCollection method Spire.Doc.Fields.ShapeObject[] ToArray() —
Spire.Doc.CompositeDocumentObject method Spire.Doc.DocumentObject AppendChild(Spire.Doc.DocumentObject newChild) —
Spire.Doc.CompositeDocumentObject method Spire.Doc.DocumentObject GetChild(Spire.Doc.Documents.DocumentObjectType documentObjectType, System.Int32 index, System.Boolean isDeep) —
Spire.Doc.CompositeDocumentObject method Spire.Doc.Collections.DocumentObjectCollection GetChildNodes(Spire.Doc.Documents.DocumentObjectType documentObjectType, System.Boolean isDeep) —
Spire.Doc.CompositeDocumentObject method Spire.Doc.Collections.DocumentObjectCollection GetChildNodes(Spire.Doc.Documents.DocumentObjectType[] documentObjectTypes, System.Boolean isDeep) —
Spire.Doc.CompositeDocumentObject method override System.Collections.Generic.IEnumerator<Spire.Doc.DocumentObject> GetEnumerator() —
Spire.Doc.CompositeDocumentObject method Spire.Doc.DocumentObject InsertAfter(Spire.Doc.DocumentObject newChild, Spire.Doc.DocumentObject refChild) —
Spire.Doc.CompositeDocumentObject method Spire.Doc.DocumentObject InsertBefore(Spire.Doc.DocumentObject newChild, Spire.Doc.DocumentObject refChild) —
Spire.Doc.CompositeDocumentObject method Spire.Doc.DocumentObject PrependChild(Spire.Doc.DocumentObject newChild) —
Spire.Doc.CompositeDocumentObject method System.Void RemoveAllChildren() —
Spire.Doc.CompositeDocumentObject method Spire.Doc.DocumentObject RemoveChild(Spire.Doc.DocumentObject oldChild) —
Spire.Doc.CompositeDocumentObject method System.Void RemoveChildRange(Spire.Doc.DocumentObject startNode, Spire.Doc.DocumentObject endNode) —
Spire.Doc.CompositeDocumentObject property Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } —
Spire.Doc.CompositeDocumentObject property Spire.Doc.DocumentObject FirstChild { get; } —
Spire.Doc.CompositeDocumentObject property System.Boolean HasChildNodes { get; } —
Spire.Doc.CompositeDocumentObject property Spire.Doc.DocumentObject this[System.Int32 index] { get; } —
Spire.Doc.CompositeDocumentObject property Spire.Doc.DocumentObject LastChild { get; } —
Spire.Doc.DocumentObject method virtual Spire.Doc.CompositeDocumentObject GetAncestor(Spire.Doc.Documents.DocumentObjectType ancestorType) —
Spire.Doc.DocumentObject method virtual Spire.Doc.CompositeDocumentObject GetAncestor(System.Type ancestorType) —
Spire.Doc.DocumentObject method Spire.Doc.DocumentObject GetNextInPreOrder(Spire.Doc.DocumentObject rootObject) —
Spire.Doc.DocumentObject method Spire.Doc.DocumentObject GetPreviousInPreOrder(Spire.Doc.DocumentObject rootObject) —
Spire.Doc.DocumentObject method System.String GetText() —
Spire.Doc.DocumentObject method System.Void Remove() —
Spire.Doc.DocumentObject property System.Boolean HasChildNodes { get; } —
Spire.Doc.Documents.DocumentNavigator method Spire.Doc.Fields.DropDownFormField InsertDropDown(System.String name, System.String[] items, System.Int32 selectedIndex) —
Spire.Doc.Documents.DocumentNavigator method System.Void MoveToBodyEnd() —
Spire.Doc.Documents.DocumentNavigator method System.Void MoveToBodyStart() —
Spire.Doc.Documents.DocumentNavigator method System.Boolean MoveToBookmark(System.String bookmarkName) —
Spire.Doc.Documents.DocumentNavigator method System.Boolean MoveToBookmark(System.String bookmarkName, System.Boolean isStart, System.Boolean isAfter) —
Spire.Doc.Documents.DocumentObjectType field const Spire.Doc.Documents.DocumentObjectType StructureDocumentTagMarkEnd = 8 —
Spire.Doc.Documents.DocumentObjectType field const Spire.Doc.Documents.DocumentObjectType StructureDocumentTagMarkStart = 7 —
Spire.Doc.Documents.Paragraph method Spire.Doc.PermissionEnd AppendPermEnd(System.Int32 id) —
Spire.Doc.Documents.Paragraph method Spire.Doc.PermissionStart AppendPermStart(System.Int32 id) —
Spire.Doc.Documents.Paragraph property Spire.Doc.Collections.TextRangeCollection TextNodes { get; } —
Spire.Doc.Documents.StructureDocumentTagCell constructor StructureDocumentTagCell(Spire.Doc.Document doc) —
Spire.Doc.Documents.StructureDocumentTagInline method override System.Void ApplyStyle(System.String styleName) —
Spire.Doc.Documents.StructureDocumentTagInline property Spire.Doc.Formatting.CharacterFormat CharacterFormat { get; } —
Spire.Doc.Documents.StructureDocumentTagInline property Spire.Doc.Formatting.Revisions.EditRevision DeleteRevision { get; set; } —
Spire.Doc.Documents.StructureDocumentTagInline property Spire.Doc.Formatting.Revisions.EditRevision InsertRevision { get; set; } —
Spire.Doc.Documents.StructureDocumentTagInline property System.Boolean IsDeleteRevision { get; } —
Spire.Doc.Documents.StructureDocumentTagInline property System.Boolean IsInsertRevision { get; } —
Spire.Doc.Documents.StructureDocumentTagInline property System.Boolean IsMoveFromRevision { get; } —
Spire.Doc.Documents.StructureDocumentTagInline property System.Boolean IsMoveToRevision { get; } —
Spire.Doc.Documents.StructureDocumentTagInline property Spire.Doc.Collections.ParagraphItemCollection Items { get; } —
Spire.Doc.Documents.StructureDocumentTagInline property Spire.Doc.Formatting.Revisions.MoveRevision MoveFromRevision { get; set; } —
Spire.Doc.Documents.StructureDocumentTagInline property Spire.Doc.Formatting.Revisions.MoveRevision MoveToRevision { get; set; } —
Spire.Doc.Documents.StructureDocumentTagInline property Spire.Doc.Documents.Paragraph OwnerParagraph { get; } —
Spire.Doc.Documents.StructureDocumentTagInline property System.String StyleName { get; } —
Spire.Doc.Documents.StructureDocumentTagInline property System.String Text { get; } —
Spire.Doc.Documents.StructureDocumentTagInline property Spire.Doc.Collections.TextRangeCollection TextNodes { get; } —
Spire.Doc.Documents.StructureDocumentTagRow constructor StructureDocumentTagRow(Spire.Doc.Document doc) —
Spire.Doc.Documents.StructureDocumentTag property Spire.Doc.Interface.IBody Body { get; } —
Spire.Doc.Documents.TextBodyPart method System.Void Copy(Spire.Doc.Interface.IParagraphBase pItem, System.Boolean clone) —
Spire.Doc.Documents.TextBodyPart method System.Void PasteAfter(Spire.Doc.Interface.IParagraphBase paragraphItem) —
Spire.Doc.Documents.TextBodySelection constructor TextBodySelection(Spire.Doc.Interface.IParagraphBase itemStart, Spire.Doc.Interface.IParagraphBase itemEnd) —
Spire.Doc.Fields.Comment property Spire.Doc.Collections.CommentRangeCollection CommentedItems { get; } —
Spire.Doc.Fields.DocPicture property System.Drawing.SizeF Size { get; set; } —
Spire.Doc.Fields.OMath.OfficeMath method override System.Void ApplyStyle(Spire.Doc.Documents.DefaultCharacterStyle bstyle) —
Spire.Doc.Fields.OMath.OfficeMath method override System.Void ApplyStyle(System.String styleName) —
Spire.Doc.Fields.OMath.OfficeMath property Spire.Doc.Formatting.CharacterFormat CharacterFormat { get; } —
Spire.Doc.Fields.OMath.OfficeMath property Spire.Doc.Formatting.Revisions.EditRevision DeleteRevision { get; set; } —
Spire.Doc.Fields.OMath.OfficeMath property Spire.Doc.Formatting.Revisions.EditRevision InsertRevision { get; set; } —
Spire.Doc.Fields.OMath.OfficeMath property System.Boolean IsDeleteRevision { get; } —
Spire.Doc.Fields.OMath.OfficeMath property System.Boolean IsInsertRevision { get; } —
Spire.Doc.Fields.OMath.OfficeMath property System.Boolean IsMoveFromRevision { get; } —
Spire.Doc.Fields.OMath.OfficeMath property System.Boolean IsMoveToRevision { get; } —
Spire.Doc.Fields.OMath.OfficeMath property Spire.Doc.Formatting.Revisions.MoveRevision MoveFromRevision { get; set; } —
Spire.Doc.Fields.OMath.OfficeMath property Spire.Doc.Formatting.Revisions.MoveRevision MoveToRevision { get; set; } —
Spire.Doc.Fields.OMath.OfficeMath property Spire.Doc.Documents.Paragraph OwnerParagraph { get; } —
Spire.Doc.Fields.OMath.OfficeMath property System.String StyleName { get; } —
Spire.Doc.Fields.ParagraphBase method virtual Spire.Doc.CompositeDocumentObject GetAncestor(Spire.Doc.Documents.DocumentObjectType objectType) —
Spire.Doc.Fields.ParagraphBase property System.Boolean HasChildNodes { get; } —
Spire.Doc.Fields.Shapes.ShapeBase method override System.Void ApplyStyle(Spire.Doc.Documents.DefaultCharacterStyle bstyle) —
Spire.Doc.Fields.Shapes.ShapeBase method override System.Void ApplyStyle(System.String styleName) —
Spire.Doc.Fields.Shapes.ShapeBase property Spire.Doc.Formatting.CharacterFormat CharacterFormat { get; } —
Spire.Doc.Fields.Shapes.ShapeBase property Spire.Doc.Formatting.Revisions.EditRevision DeleteRevision { get; set; } —
Spire.Doc.Fields.Shapes.ShapeBase property Spire.Doc.Formatting.Revisions.EditRevision InsertRevision { get; set; } —
Spire.Doc.Fields.Shapes.ShapeBase property System.Boolean IsDeleteRevision { get; } —
Spire.Doc.Fields.Shapes.ShapeBase property System.Boolean IsInsertRevision { get; } —
Spire.Doc.Fields.Shapes.ShapeBase property System.Boolean IsMoveFromRevision { get; } —
Spire.Doc.Fields.Shapes.ShapeBase property System.Boolean IsMoveToRevision { get; } —
Spire.Doc.Fields.Shapes.ShapeBase property Spire.Doc.Formatting.Revisions.MoveRevision MoveFromRevision { get; set; } —
Spire.Doc.Fields.Shapes.ShapeBase property Spire.Doc.Formatting.Revisions.MoveRevision MoveToRevision { get; set; } —
Spire.Doc.Fields.Shapes.ShapeBase property Spire.Doc.Documents.Paragraph OwnerParagraph { get; } —
Spire.Doc.Fields.Shapes.ShapeBase property System.String StyleName { get; } —
Spire.Doc.Fields.Shapes.ShapeBase property System.String Title { get; set; } —
Spire.Doc.Fields.Shapes.Shape property System.Boolean ExtrusionEnabled { get; } —
Spire.Doc.Fields.Shapes.Shape property System.Boolean ShadowEnabled { get; } —
Spire.Doc.Fields.Shapes.Shape property System.Drawing.Color StrokeColor { get; set; } —
Spire.Doc.Fields.Shapes.Shape property System.Double StrokeWeight { get; set; } —
Spire.Doc.Fields.Symbol property System.String Text { get; set; } —
Spire.Doc.HeadersFooters method Spire.Doc.HeaderFooter GetHeaderFooterByType(Spire.Doc.Documents.HeaderFooterType type) —
Spire.Doc.Interface.IBody method Spire.Doc.Table AddTable(System.Boolean showBorder) —
Spire.Doc.Interface.IBody property Spire.Doc.Interface.IParagraph FirstParagraph { get; } —
Spire.Doc.Interface.IBody property Spire.Doc.Collections.BodyRegionCollection Items { get; } —
Spire.Doc.Interface.IParagraphBase method System.Void ApplyStyle(Spire.Doc.Documents.DefaultCharacterStyle bstyle) —
Spire.Doc.Interface.IParagraphBase property Spire.Doc.Formatting.CharacterFormat CharacterFormat { get; } —
Spire.Doc.OwnerHolder method override System.Object Clone() —
Spire.Doc.PermissionEnd constructor PermissionEnd(Spire.Doc.Interface.IDocument document, System.Int32 id) —
Spire.Doc.PermissionEnd property Spire.Doc.PermissionStart PermissionStart { get; } —
Spire.Doc.PermissionStart constructor PermissionStart(Spire.Doc.Interface.IDocument doc, System.Int32 id) —
Spire.Doc.PermissionStart property Spire.Doc.Permission Permission { get; } —
Spire.Doc.Permission method System.Void Remove() —
Spire.Doc.Permission property System.String Editor { get; set; } —
Spire.Doc.TableRow property Spire.Doc.TableCell FirstCell { get; } —
Spire.Doc.TableRow property Spire.Doc.TableCell LastCell { get; } —

附录 D:直接声明移除(54 项)

这些成员在旧类型上自身声明,且新版本中该类型及其祖先均不再提供。因基类变化而丢失的继承成员不在此表,见有效成员面统计。

类型 被移除成员 建议替代
Spire.Doc.Bookmark Bookmark(Spire.Doc.BookmarkStart start) 改用 Bookmark(BookmarkStart, BookmarkEnd),或 BookmarkStart.Bookmark
Spire.Doc.Collections.BodyRegionCollection BodyRegionCollection(Spire.Doc.Body body) 通常从 Body.Items 获取;不要自行 new
Spire.Doc.Collections.CellCollection CellCollection(Spire.Doc.TableRow owner) 从 TableRow.Cells 获取,或使用 CellCollection(CompositeDocumentObject)
Spire.Doc.Collections.CellCollection System.Int32 Add(Spire.Doc.TableCell cell) 改用基类 DocumentObjectCollection 的 DocumentObject 重载并显式转换
Spire.Doc.Collections.CellCollection System.Int32 IndexOf(Spire.Doc.TableCell cell) 改用基类 DocumentObjectCollection 的 DocumentObject 重载并显式转换
Spire.Doc.Collections.CellCollection System.Void Insert(System.Int32 index, Spire.Doc.TableCell cell) 改用基类 DocumentObjectCollection 的 DocumentObject 重载并显式转换
Spire.Doc.Collections.CellCollection System.Void Remove(Spire.Doc.TableCell cell) 改用基类 DocumentObjectCollection 的 DocumentObject 重载并显式转换
Spire.Doc.Collections.CommentsCollection CommentsCollection(Spire.Doc.Document doc) 从 Document.Comments 获取
Spire.Doc.Collections.CommentsCollection System.Int32 Counts() 改用 Count
Spire.Doc.Collections.CommentsCollection System.Void Remove(Spire.Doc.Fields.Comment comment) 改用 Remove(DocumentObject) 或 comment.Remove()
Spire.Doc.Collections.ParagraphCollection ParagraphCollection(Spire.Doc.Collections.BodyRegionCollection bodyItems) 从 Body.Paragraphs 获取,或使用 ParagraphCollection(CompositeDocumentObject)
Spire.Doc.Collections.PermissionCollection Spire.Doc.Permission FindById(System.String id) 改用 FindById(int) / Remove(int)
Spire.Doc.Collections.PermissionCollection Spire.Doc.Permission this[System.String id] { get; } 改用 FindById(int) / Remove(int)
Spire.Doc.Collections.RowCollection RowCollection(Spire.Doc.Table owner) 从 Table.Rows 获取,或使用 RowCollection(CompositeDocumentObject)
Spire.Doc.Collections.RowCollection System.Int32 Add(Spire.Doc.TableRow row) 改用基类 DocumentObjectCollection 的 DocumentObject 重载并显式转换
Spire.Doc.Collections.RowCollection System.Int32 IndexOf(Spire.Doc.TableRow row) 改用基类 DocumentObjectCollection 的 DocumentObject 重载并显式转换
Spire.Doc.Collections.RowCollection System.Void Insert(System.Int32 index, Spire.Doc.TableRow row) 改用基类 DocumentObjectCollection 的 DocumentObject 重载并显式转换
Spire.Doc.Collections.RowCollection System.Void Remove(Spire.Doc.TableRow row) 改用基类 DocumentObjectCollection 的 DocumentObject 重载并显式转换
Spire.Doc.Collections.SectionCollection SectionCollection(Spire.Doc.Document doc) 从 Document.Sections 获取
Spire.Doc.Collections.SectionCollection override System.Int32 Add(Spire.Doc.Interface.ISection section) 改用 DocumentObjectCollection.Add/IndexOf(DocumentObject)
Spire.Doc.Collections.SectionCollection override System.Int32 IndexOf(Spire.Doc.Interface.ISection section) 改用 DocumentObjectCollection.Add/IndexOf(DocumentObject)
Spire.Doc.Collections.TableCollection TableCollection(Spire.Doc.Collections.BodyRegionCollection bodyItems) 从 Body.Tables 获取,或使用 TableCollection(CompositeDocumentObject)
Spire.Doc.DocumentObject Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } 已下移到 CompositeDocumentObject;转换后访问
Spire.Doc.DocumentObject Spire.Doc.DocumentObject FirstChild { get; } 已下移到 CompositeDocumentObject;转换后访问
Spire.Doc.DocumentObject Spire.Doc.DocumentObject LastChild { get; } 已下移到 CompositeDocumentObject;转换后访问
Spire.Doc.DocumentObject virtual System.Int32 GetIndex(Spire.Doc.Interface.IDocumentObject entity) 已下移到 CompositeDocumentObject;转换后访问
Spire.Doc.DocumentObject virtual System.String ToString(System.String seperator) 无直接替代;遍历子项自行拼接文本(可配合 GetText())
Spire.Doc.Documents.DocumentObjectType const Spire.Doc.Documents.DocumentObjectType SDTBlockContent = 9 该 SDT content 概念已移除,无直接替代
Spire.Doc.Documents.DocumentObjectType const Spire.Doc.Documents.DocumentObjectType SDTCellContent = 12 该 SDT content 概念已移除,无直接替代
Spire.Doc.Documents.DocumentObjectType const Spire.Doc.Documents.DocumentObjectType SDTInlineContent = 10 该 SDT content 概念已移除,无直接替代
Spire.Doc.Documents.DocumentObjectType const Spire.Doc.Documents.DocumentObjectType SDTRowContent = 11 该 SDT content 概念已移除,无直接替代
Spire.Doc.Documents.Paragraph Spire.Doc.PermissionEnd AppendPermEnd(System.String id) 改用 AppendPermEnd(int id)
Spire.Doc.Documents.Paragraph Spire.Doc.PermissionStart AppendPermStart(System.String id) 改用 AppendPermStart(int id)
Spire.Doc.Documents.SDTProperties SDTProperties(Spire.Doc.DocumentObject owner) 从 StructureDocumentTag.SDTProperties 获取
Spire.Doc.Documents.StructureDocumentTag Spire.Doc.Documents.SDTContent SDTContent { get; } 改用 StructureDocumentTag.Body(IBody)
Spire.Doc.Documents.StructureDocumentTagCell StructureDocumentTagCell(Spire.Doc.TableRow ownerRow) SDT Cell 不再是 TableCell;改用 CompositeDocumentObject 子节点 API
Spire.Doc.Documents.StructureDocumentTagInline Spire.Doc.Documents.SDTInlineContent SDTContent { get; } 改用 Items / Text / TextNodes,或通过 CompositeDocumentObject 子节点访问
Spire.Doc.Documents.StructureDocumentTagRow Spire.Doc.Collections.CellCollection Cells { get; } SDT Row 不再是 TableRow;无直接替代,改用子节点/CompositeDocumentObject API
Spire.Doc.Documents.StructureDocumentTagRow Spire.Doc.Formatting.RowFormat RowFormat { get; } SDT Row 不再是 TableRow;无直接替代
Spire.Doc.Documents.StructureDocumentTagRow StructureDocumentTagRow(Spire.Doc.Table ownerTable) SDT Row 不再是 TableRow;改用 CompositeDocumentObject 子节点 API
Spire.Doc.Documents.Style static Spire.Doc.Documents.BuiltinStyle NameToBuiltIn(System.String styleName) 无直接替代;维护名称到 BuiltinStyle 的映射,或改用 Enum.TryParse + 名称规范化
Spire.Doc.Documents.TextBodyPart System.Void Copy(Spire.Doc.Fields.ParagraphBase pItem, System.Boolean clone) 改用 Copy(IParagraphBase, bool) 重载
Spire.Doc.Documents.TextBodyPart System.Void PasteAfter(Spire.Doc.Fields.ParagraphBase paragraphItem) 改用 PasteAfter(IParagraphBase) 重载
Spire.Doc.Documents.TextBodySelection TextBodySelection(Spire.Doc.Fields.ParagraphBase itemStart, Spire.Doc.Fields.ParagraphBase itemEnd) 改用 TextBodySelection(IParagraphBase, IParagraphBase)
Spire.Doc.Fields.Comment Spire.Doc.Collections.ParagraphItemCollection Items { get; } 改用 Comment.CommentedItems(CommentRangeCollection)
Spire.Doc.Fields.Comment System.Void EnsureMinimum() 无直接替代;按需添加段落/内容
Spire.Doc.Fields.Footnote Spire.Doc.Body TextBody { get; } Footnote 自身即 IBody,直接调用 AddParagraph/AddTable 等
Spire.Doc.Fields.Footnote System.Void EnsureMinimum() 无直接替代;按需添加段落/内容
Spire.Doc.Fields.OMath.OfficeMath Spire.Doc.Documents.Paragraph ParentParagraph { get; } 改用 OwnerParagraph
Spire.Doc.Fields.ParagraphBase Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } 仅当运行时对象是 CompositeDocumentObject 时可转换后访问;叶子节点改 HasChildNodes
Spire.Doc.Permission Permission(Spire.Doc.PermissionStart start) 改用 PermissionStart.Permission
Spire.Doc.Permission Permission(Spire.Doc.PermissionStart start, Spire.Doc.PermissionEnd end) 改用 PermissionStart.Permission;通过 PermissionEnd.PermissionStart 关联
Spire.Doc.PermissionEnd PermissionEnd(Spire.Doc.Interface.IDocument document, System.String id) 改用 PermissionEnd(IDocument, int)
Spire.Doc.PermissionStart PermissionStart(Spire.Doc.Interface.IDocument doc, System.String id) 改用 PermissionStart(IDocument, int)

附录 E:仍可通过继承访问的移除项(29 项)

这些成员在旧版本中声明于某类型,新版本中该类型或其祖先仍提供同名同签名成员,通常只需重新编译;其中 DocPicture.Rotation 与 HeadersFooters.GetEnumerator 的签名发生变化,不能按“完全兼容”处理。

类型 旧声明成员 新版本中继承自 备注
Spire.Doc.Body Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } Spire.Doc.CompositeDocumentObject 签名一致,通常只需重编译
Spire.Doc.Collections.CellCollection System.Void RemoveAt(System.Int32 index) Spire.Doc.Collections.DocumentObjectCollection 签名一致,通常只需重编译
Spire.Doc.Collections.CommentsCollection System.Void Clear() Spire.Doc.Collections.DocumentObjectCollection 签名一致,通常只需重编译
Spire.Doc.Collections.CommentsCollection System.Void RemoveAt(System.Int32 index) Spire.Doc.Collections.DocumentObjectCollection 签名一致,通常只需重编译
Spire.Doc.Collections.ParagraphCollection override System.Void RemoveAt(System.Int32 index) Spire.Doc.Collections.DocumentObjectCollection 签名一致,通常只需重编译
Spire.Doc.Collections.TableCollection System.Void RemoveAt(System.Int32 index) Spire.Doc.Collections.DocumentObjectCollection 签名一致,通常只需重编译
Spire.Doc.Collections.TextBoxCollection System.Void Clear() Spire.Doc.Collections.DocumentObjectCollection 签名一致,通常只需重编译
Spire.Doc.Collections.TextBoxCollection System.Void RemoveAt(System.Int32 index) Spire.Doc.Collections.DocumentObjectCollection 签名一致,通常只需重编译
Spire.Doc.Document Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } Spire.Doc.CompositeDocumentObject 签名一致,通常只需重编译
Spire.Doc.Documents.Paragraph Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } Spire.Doc.CompositeDocumentObject 签名一致,通常只需重编译
Spire.Doc.Documents.StructureDocumentTag Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } Spire.Doc.CompositeDocumentObject 签名一致,通常只需重编译
Spire.Doc.Documents.StructureDocumentTagInline Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } Spire.Doc.CompositeDocumentObject 签名一致,通常只需重编译
Spire.Doc.Documents.StructureDocumentTagRow Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } Spire.Doc.CompositeDocumentObject 签名一致,通常只需重编译
Spire.Doc.Fields.Comment Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } Spire.Doc.CompositeDocumentObject 签名一致,通常只需重编译
Spire.Doc.Fields.DocPicture System.Single Rotation { get; set; } Spire.Doc.Fields.Shapes.ShapeBase 返回类型 float→double;旧成员隐藏了基类同名属性,新版本改为继承 ShapeBase,源码/二进制均破坏
Spire.Doc.Fields.Footnote Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } Spire.Doc.CompositeDocumentObject 签名一致,通常只需重编译
Spire.Doc.Fields.OMath.OfficeMath Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } Spire.Doc.CompositeDocumentObject 签名一致,通常只需重编译
Spire.Doc.Fields.ShapeObject Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } Spire.Doc.CompositeDocumentObject 签名一致,通常只需重编译
Spire.Doc.Fields.ShapeObject System.Boolean ExtrusionEnabled { get; } Spire.Doc.Fields.Shapes.Shape 签名一致,通常只需重编译
Spire.Doc.Fields.ShapeObject System.Boolean ShadowEnabled { get; } Spire.Doc.Fields.Shapes.Shape 签名一致,通常只需重编译
Spire.Doc.Fields.ShapeObject System.Double StrokeWeight { get; set; } Spire.Doc.Fields.Shapes.Shape 签名一致,通常只需重编译
Spire.Doc.Fields.ShapeObject System.Drawing.Color StrokeColor { get; set; } Spire.Doc.Fields.Shapes.Shape 签名一致,通常只需重编译
Spire.Doc.Fields.Shapes.ShapeBase Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } Spire.Doc.CompositeDocumentObject 签名一致,通常只需重编译
Spire.Doc.Fields.TextBox Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } Spire.Doc.CompositeDocumentObject 签名一致,通常只需重编译
Spire.Doc.HeadersFooters override System.Collections.IEnumerator GetEnumerator() Spire.Doc.Collections.DocumentObjectCollection 返回类型由 IEnumerator 变为 IEnumerator<DocumentObject>;源码可赋值,二进制签名不匹配
Spire.Doc.Pages.FixedLayoutSpan Spire.Doc.DocumentObject ParentNode { get; } Spire.Doc.Pages.LayoutElement 签名一致,通常只需重编译
Spire.Doc.Section Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } Spire.Doc.CompositeDocumentObject 签名一致,通常只需重编译
Spire.Doc.Table Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } Spire.Doc.CompositeDocumentObject 签名一致,通常只需重编译
Spire.Doc.TableRow Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } Spire.Doc.CompositeDocumentObject 签名一致,通常只需重编译

附录 F:非枚举修改(37 项)

类型 成员 变化
Spire.Doc.BodyRegion Spire.Doc.Interface.IBody OwnerTextBody { get; } 返回类型 Spire.Doc.Body → Spire.Doc.Interface.IBody
Spire.Doc.Body override Spire.Doc.Table AddTable(System.Boolean showBorder) 修饰符 [] → [override]
Spire.Doc.Bookmark Bookmark(Spire.Doc.BookmarkStart bookmarkStart, Spire.Doc.BookmarkEnd bookmarkEnd) 参数名 [start, end] → [bookmarkStart, bookmarkEnd]
Spire.Doc.Bookmark System.String Name { get; set; } 访问器 get → get set
Spire.Doc.Collections.DocumentObjectCollection System.Void Add(Spire.Doc.Interface.IDocumentObject documentObject) 返回类型 System.Int32 → System.Void;参数名 [entity] → [documentObject]
Spire.Doc.Collections.DocumentObjectCollection System.Boolean Contains(Spire.Doc.Interface.IDocumentObject documentObject) 参数名 [entity] → [documentObject]
Spire.Doc.Collections.DocumentObjectCollection System.Int32 IndexOf(Spire.Doc.Interface.IDocumentObject documentObject) 参数名 [entity] → [documentObject]
Spire.Doc.Collections.DocumentObjectCollection System.Void Insert(System.Int32 index, Spire.Doc.Interface.IDocumentObject documentObject) 参数名 [index, entity] → [index, documentObject];新增 Obsolete(警告级)
Spire.Doc.Collections.DocumentObjectCollection System.Void Remove(Spire.Doc.Interface.IDocumentObject documentObject) 参数名 [entity] → [documentObject]
Spire.Doc.Collections.DocumentObjectCollection override System.Void RemoveAt(System.Int32 index) 新增 Obsolete(警告级);修饰符 [] → [override]
Spire.Doc.Collections.FormFieldCollection System.Boolean ContainsName(System.String formFieldName) 参数名 [itemName] → [formFieldName]
Spire.Doc.Collections.ParagraphCollection override System.Void Add(Spire.Doc.Interface.IParagraph paragraph) 返回类型 System.Int32 → System.Void
Spire.Doc.Collections.ParagraphCollection override System.Void Insert(System.Int32 index, Spire.Doc.Interface.IParagraph paragraph) 新增 Obsolete(警告级)
Spire.Doc.Collections.ParagraphItemCollection Spire.Doc.Interface.IParagraphBase this[System.Int32 index] { get; } 返回类型 Spire.Doc.Fields.ParagraphBase → Spire.Doc.Interface.IParagraphBase
Spire.Doc.Collections.TableCollection override System.Void Add(Spire.Doc.Interface.ITable table) 返回类型 System.Int32 → System.Void
Spire.Doc.Collections.TableCollection System.Void Insert(System.Int32 index, Spire.Doc.Interface.ITable table) 返回类型 System.Int32 → System.Void;新增 Obsolete(警告级)
Spire.Doc.Collections.TextBoxCollection Spire.Doc.Fields.ShapeObject this[System.Int32 index] { get; } 返回类型 Spire.Doc.Fields.TextBox → Spire.Doc.Fields.ShapeObject
Spire.Doc.CompositeDocumentObject override System.Int32 IndexOf(Spire.Doc.Interface.IDocumentObject child) 参数名 [docObject] → [child]
Spire.Doc.Documents.Paragraph Spire.Doc.Interface.IParagraphBase this[System.Int32 index] { get; } 返回类型 Spire.Doc.Fields.ParagraphBase → Spire.Doc.Interface.IParagraphBase
Spire.Doc.Documents.TextBodySelection Spire.Doc.Interface.IBody TextBody { get; } 返回类型 Spire.Doc.Body → Spire.Doc.Interface.IBody
Spire.Doc.Document Spire.Doc.Interface.IParagraphBase CreateParagraphItem(Spire.Doc.Documents.ParagraphItemType itemType) 返回类型 Spire.Doc.Fields.ParagraphBase → Spire.Doc.Interface.IParagraphBase
Spire.Doc.Document Spire.Doc.Collections.TextBoxCollection TextBoxes { get; } 访问器 get set → get
Spire.Doc.Fields.Comment Spire.Doc.Interface.IBody Body { get; } 返回类型 Spire.Doc.Body → Spire.Doc.Interface.IBody
Spire.Doc.Fields.Field Spire.Doc.Fields.FieldMark Separator { get; set; } 访问器 get → get set
Spire.Doc.Fields.Footnote Spire.Doc.Interface.IBody Body { get; } 返回类型 Spire.Doc.Body → Spire.Doc.Interface.IBody
Spire.Doc.Fields.ParagraphBase override System.Void ApplyStyle(Spire.Doc.Documents.DefaultCharacterStyle bstyle) 修饰符 [] → [override]
Spire.Doc.Fields.Shapes.ShapeBase System.Drawing.SizeF Size { get; set; } 访问器 get → get set
Spire.Doc.Fields.TextBox Spire.Doc.Interface.IBody Body { get; } 返回类型 Spire.Doc.Body → Spire.Doc.Interface.IBody
Spire.Doc.Interface.IParagraphCollection System.Void Add(Spire.Doc.Interface.IParagraph paragraph) 返回类型 System.Int32 → System.Void
Spire.Doc.Interface.IParagraph Spire.Doc.Interface.IParagraphBase this[System.Int32 index] { get; } 返回类型 Spire.Doc.Fields.ParagraphBase → Spire.Doc.Interface.IParagraphBase
Spire.Doc.Interface.ITableCollection System.Void Add(Spire.Doc.Interface.ITable table) 返回类型 System.Int32 → System.Void
Spire.Doc.Interface.ITextBox Spire.Doc.Interface.IBody Body { get; } 返回类型 Spire.Doc.Body → Spire.Doc.Interface.IBody
Spire.Doc.Pages.FixedLayoutColumn Spire.Doc.Interface.IBody Body { get; } 返回类型 Spire.Doc.Body → Spire.Doc.Interface.IBody
Spire.Doc.PermissionEnd System.Int32 Id { get; } 返回类型 System.String → System.Int32
Spire.Doc.PermissionStart System.Int32 Id { get; } 返回类型 System.String → System.Int32
Spire.Doc.Permission Spire.Doc.Documents.EditingGroup EditorGroup { get; set; } 访问器 get → get set
Spire.Doc.Permission System.Int32 Id { get; } 返回类型 System.String → System.Int32

附录 G:基类变化(19 项)

类型 旧基类 新基类
Spire.Doc.Collections.BookmarkCollection Spire.Doc.Collections.DocumentItemCollectionBase Spire.Doc.OwnerHolder
Spire.Doc.Collections.CommentsCollection Spire.Doc.Collections.DocumentItemCollectionBase Spire.Doc.Collections.DocumentObjectCollection
Spire.Doc.Collections.DocumentObjectCollection Spire.Doc.Collections.DocumentItemCollectionBase Spire.Doc.OwnerHolder
Spire.Doc.Collections.FieldCollection Spire.Doc.Collections.DocumentItemCollectionBase Spire.Doc.Collections.DocumentObjectCollection
Spire.Doc.Collections.FormFieldCollection Spire.Doc.Collections.DocumentItemCollectionBase Spire.Doc.Collections.DocumentObjectCollection
Spire.Doc.Collections.ParagraphCollection Spire.Doc.Collections.DocumentSubsetCollection Spire.Doc.Collections.DocumentObjectCollection
Spire.Doc.Collections.PermissionCollection Spire.Doc.Collections.DocumentItemCollectionBase Spire.Doc.OwnerHolder
Spire.Doc.Collections.ShapeItemCollection Spire.Doc.Collections.DocumentObjectCollection Spire.Doc.Collections.DocumentItemCollectionBase
Spire.Doc.Collections.TableCollection Spire.Doc.Collections.DocumentSubsetCollection Spire.Doc.Collections.DocumentObjectCollection
Spire.Doc.Collections.TextBoxCollection Spire.Doc.Collections.DocumentItemCollectionBase Spire.Doc.Collections.DocumentObjectCollection
Spire.Doc.Documents.StructureDocumentTagCell Spire.Doc.TableCell Spire.Doc.CompositeDocumentObject
Spire.Doc.Documents.StructureDocumentTagInline Spire.Doc.Fields.ParagraphBase Spire.Doc.CompositeDocumentObject
Spire.Doc.Documents.StructureDocumentTagRow Spire.Doc.TableRow Spire.Doc.CompositeDocumentObject
Spire.Doc.Fields.Comment Spire.Doc.Fields.ParagraphBase Spire.Doc.Fields.InlineBody
Spire.Doc.Fields.Footnote Spire.Doc.Fields.ParagraphBase Spire.Doc.Fields.InlineBody
Spire.Doc.Fields.OMath.OfficeMath Spire.Doc.Fields.ParagraphBase Spire.Doc.CompositeDocumentObject
Spire.Doc.Fields.Shapes.ShapeBase Spire.Doc.Fields.ParagraphBase Spire.Doc.CompositeDocumentObject
Spire.Doc.Fields.TableOfContent Spire.Doc.Fields.ParagraphBase Spire.Doc.Fields.Field
Spire.Doc.HeadersFooters Spire.Doc.OwnerHolder Spire.Doc.Collections.DocumentObjectCollection

附录 H:类型元数据接口变化摘要

114 个类型的元数据发生变化。公开接口层面的主要增减:

接口 新增实现类型数 说明
Spire.Doc.Interface.IDocCloneable 114 新增实现
System.Collections.Generic.IEnumerable<Spire.Doc.DocumentObject> 37 新增实现
Spire.Doc.Formatting.Revisions.IRevisionTracking 35 新增实现
Spire.Doc.Interface.ICollectionBase 29 新增实现
Spire.Doc.Interface.IDocumentObjectCollection 29 新增实现
System.Collections.IEnumerable 24 新增实现
Spire.Doc.Interface.IBody 7 新增实现
Spire.Doc.Interface.ITextRange 3 新增实现
Spire.Doc.Documents.ISectionCollection 1 新增实现
Spire.Doc.Interface.IField 1 新增实现
接口 丢失实现类型数 说明
Spire.Doc.Documents.IWSectionCollection 1 丢失实现
Spire.Doc.Interface.IDocumentObjectCollection 1 丢失实现
Spire.Doc.Interface.ICollectionBase 1 丢失实现
Spire.Doc.Interface.IBody 1 丢失实现

其中 Spire.Doc.Interface.IDocCloneable 被 114 个类型新增实现;IRevisionTracking 被 35 个类型新增实现;IBody 新增 7 个实现(StructureDocumentTag、Comment、Footnote、DocOleObject、DocPicture、ShapeObject、TextBox),StructureDocumentTagCell 丢失 IBody;ITextRange 新增 3 个实现(Break、Symbol、TableOfContent),IField 新增 1 个实现(TableOfContent)。

非公开/混淆接口(spr...)未计入本表;完整原始接口列表见 JSON 产物。

附录 I:逐类型有效成员面丢失(Top 20)

类型 丢失槽数
Spire.Doc.Documents.StructureDocumentTagCell 27
Spire.Doc.Collections.ShapeItemCollection 11
Spire.Doc.Documents.StructureDocumentTagRow 11
Spire.Doc.PermissionEnd 6
Spire.Doc.PermissionStart 6
Spire.Doc.BookmarkEnd 5
Spire.Doc.BookmarkStart 5
Spire.Doc.Break 5
Spire.Doc.Collections.CellCollection 5
Spire.Doc.Collections.RowCollection 5
Spire.Doc.DocumentObject 5
Spire.Doc.Documents.CommentMark 5
Spire.Doc.Fields.CheckBoxFormField 5
Spire.Doc.Fields.ControlField 5
Spire.Doc.Fields.DropDownFormField 5
Spire.Doc.Fields.Field 5
Spire.Doc.Fields.FieldMark 5
Spire.Doc.Fields.FormField 5
Spire.Doc.Fields.IfField 5
Spire.Doc.Fields.MergeField 5