龙空技术网

Java word读取/导出修改 最强工具 aspose(1.2初识word与aspose对象)

EYE33 64

前言:

而今看官们对“java文档管理系统”可能比较珍视,看官们都需要知道一些“java文档管理系统”的相关知识。那么小编也在网上收集了一些有关“java文档管理系统””的相关文章,希望咱们能喜欢,看官们快快来学习一下吧!

aspose.Words 文档对象模型 (DOM) 是 Word 文档的内存中表示形式。Aspose.Words DOM 允许您以编程方式读取、操作和修改 Word 文档的内容和格式。

本节介绍Aspose.Words DOM的主要类及其关系。通过使用 Aspose.Words DOM 类,您可以获得对文档元素和格式的编程访问。

创建文档对象树

当文档被读入Aspose.Words DOM时,将构建一个对象树,并且源文档的不同类型的元素具有自己的具有各种属性的DOM树对象。

构建文档节点树

当 Aspose.Words 将 Word 文档读入内存时,它会创建表示各种文档元素的不同类型的对象。文本、段落、表格或节的每次运行都是一个节点,甚至文档本身也是一个节点。Aspose.Words 为每个文档节点类型定义一个类。

Aspose.Words 中的文档树遵循复合设计模式:

所有节点类最终都派生自Node类,该类是 Aspose.Words 文档对象模型中的基类。可以包含其他节点的节点(例如,SectionParagraph)派生自 CompositeNode 类,而CompositeNode类又派生自Node类。

下面提供的图表显示了 Aspose.Words 文档对象模型 (DOM) 的节点类之间的继承。抽象类的名称以斜体显示。

Aspose.Words DOM 还包含非节点类,如Style或Font,用于自定义文档中的外观和样式。此图中未将这些类显示为不是从 Node 类继承的。

让我们看一个例子。下图显示了具有不同类型内容的 Microsoft Word 文档。

将上述文档读入 Aspose.Words DOM 时,将创建对象树,如下面的架构所示。

文档、节、段落、表格、形状、运行和关系图上的所有其他省略号都是表示 Word 文档元素的 Aspose.Words 对象。

获取节点类型

尽管Node类足以区分不同的节点,但 Aspose.Words 提供了NodeType枚举来简化某些 API 任务,例如选择特定类型的节点。

可以使用NodeType属性获取每个节点的类型。此属性返回节点类型枚举值。例如,由Paragraph类表示的段落节点返回NodeType段落,由Table类表示的表节点返回NodeType

下面的示例演示如何使用NodeType枚举获取节点类型:

文档树导航

Aspose.Words 将文档表示为节点树,使您能够在节点之间导航。本节介绍如何在 Aspose.Words 中浏览和导航文档树。

当您在文档资源管理器中打开前面显示的示例文档时,节点树的显示方式与它在 Aspose.Words 中的表示方式完全相同。

您可以在Aspose.Words GitHub上学习示例项目“Document Explorer”。

文档节点关系

树中的节点之间有关系:

包含另一个节点的节点是父节点。父节点中包含的节点是子节点。同一父节点的子节点是同级节点。节点始终是“文档”节点。

可以包含其他节点的节点派生自CompositeNode类,所有节点最终派生自Node类。这两个基类为树结构导航和修改提供了通用方法和属性。

下面的 UML 对象图显示了示例文档的多个节点及其通过父属性、子属性和同级属性相互之间的关系:

文档是节点所有者

节点始终属于特定文档,即使它刚刚创建或从树中删除,因为重要的文档范围结构(如样式和列表)存储在“文档”节点中。例如,不可能有没有文档的段落,因为每个段落都有一个为文档全局定义的指定样式。创建任何新节点时都会使用此规则。将新段落直接添加到 DOM 需要将文档对象传递给构造函数。

属性返回节点所属的文档。

使用 DocumentBuilder 创建新段落时,生成器始终有一个通过DocumentBuilder.Document属性链接到该段落的文档类。

下面的代码示例演示在创建任何节点时,始终定义将拥有该节点的文档:

父节点

每个节点都有一个由ParentNode属性指定的父节点。节点没有父节点,即父节点为空,在以下情况下:

节点刚刚创建,尚未添加到树中。节点已从树中删除。这是始终具有空父节点的根文档节点。

可以通过调用Remove方法从其父节点中删除节点。下面的代码示例演示如何访问父节点:

子节点

访问复合节点的子节点的最有效方法是通过分别返回第一个和最后一个子节点的FirstChild和LastChild属性。如果没有子节点,这些属性将返回null

CompositeNode还提供ChildNode集合,支持对子节点进行索引或枚举访问。属性是节点的实时集合,这意味着每当更改文档(例如删除或添加节点时),都会自动更新子节点集合。

如果节点没有子节点,则ChildNodes属性返回一个空集合。可以使用HasChildNodes属性检查复合节点是否包含任何子节点

下面的代码示例演示如何使用 ChildNode 集合提供的枚举器枚举复合节点的直接子节点:

下面的代码示例演示如何使用索引访问枚举复合节点的直接子节点:

同级节点

可以分别使用“上一个同级”和“下一级同级”属性获取紧接在特定节点之前或之后的节点。如果节点是其父节点的最后一个子节点,则NextSibling属性为null。相反,如果节点是其父节点的第一个子节点,则PreviousSibling属性为null

下面的代码示例演示如何有效地访问复合节点的所有直接和间接子节点:

对子节点和父节点的类型化访问

到目前为止,我们已经讨论了返回基本类型之一的属性 - Node 或CompositeNode。但有时在某些情况下,您可能需要将值强制转换为特定节点类,例如RunParagraph。也就是说,在使用Aspose.Words DOM时,你不能完全摆脱强制转换,它是复合的。

为了减少对强制转换的需求,大多数 Aspose.Words 类都提供了提供强类型访问的属性和集合。类型化访问有三种基本模式:

父节点公开类型化的FirstXXXLastXXX属性。例如,文档具有“第一节”和“最后一节”属性。同样,具有诸如第一行,最后一行等属性。父节点公开子节点的类型化集合,例如Document.Section、Body.Paragraphs 等。子节点提供对其父节点的类型化访问,例如Run.ParentParagraph、Paragraph.ParentSection 等。

类型化属性只是有用的快捷方式,有时比从 Node.ParentNode 和CompositeNode.FirstChild 继承的泛型属性更容易访问。

标签: #java文档管理系统