天天看点

【原创】Aspose.Words组件介绍及使用—基本介绍与DOM概述1.基本介绍2.文档对象模型概述

如对您有帮助,不要吝啬你的鼠标,支持一下哦,如翻译的不好,或者有错误漏洞,还请广大网友指出,一个人的能力毕竟有限,而且我只是一个业余打酱油的。

aspose.words是一个商业.net类库,可以使得应用程序处理大量的文件任务。aspose.words支持doc,docx,rtf,html,opendocument,pdf,xps,epub和其他格式。使用aspose.words可以在不使用microsoft.word的情况下生成、修改、转换和打印文档。在项目中使用aspose.words可以有以下好处。

其丰富的功能特性主要有以下4个方面:

1)格式转换。aspose.words具有高质量的文件格式转换功能,可以和doc,ooxl,rtf,txt等格式互相转换。

2)文档对象模型。通过丰富的api以编程方式访问所有的文档元素和格式,允许创建,修改,提取,复制,分割,加入,和替换文件内容。

3)文件渲染。可以在服务器端转换整个文档或者页面为pdf,xps,swf格式,同样可以转换文档页面为图像格式,或者.net graphics对象,这些功能和microsoft.word是一样的。

4)报表。可以从对象或者数据源填充模版生成文件。

aspose.words可以在没有安装microsoft office的机器上工作。所有的aspose组件都是独立,不需要微软公司的授权。总之, aspose.words在安全性、稳定性、可扩展性、速度、价格和自动化功能方面,是一个很不错的选择。

aspose.words可以运行在windows,linux和mac os操作系统上面。可以使用aspose.words去创建32位或者64位的.net应用程序,包括asp.net、wcf、winform等等,还可以使用com组件在asp、perl、php和python语言中使用,同样可以在mono平台上使用aspose.words建立.net应用程序。

aspose.words可以运行在服务器和客户端,它是一个独立的.net程序集,可以被任何.net应用程序复制和部署。使用aspose.words可以在短时间内产生成千上万的文档,可以打开文档,并修改格式和内容,填充数据并保存。aspose.words是多线程安全的,不同的线程在同一时间处理不同的文档。

虽然aspose.words拥有150多个公共类和枚举类型,但是aspose.words的学习曲线很小因为aspose.words的api是围绕下列目标精心设计的:

1) 借鉴一些著名的api设计经验,如microsoft word。

2) 借鉴.net框架设计指南的经验。

3) 提供易于使用的详细的文档元素操作文档。

以前在项目中使用microsoft word的开发者,可以在aspose.words中找到很多熟悉的类、方法和属性。

aspose.words的文档对象模型(以下简称dom)是一个word文档在内存中的映射,aspose.words的dom可以编程读取、操作和修改word文档的内容和格式。理解dom的结构和相应的类型,是使用aspose.words灵活编程的基础,这一点非常重要。下面的一个word文档例子和其结构如下图所示:

【原创】Aspose.Words组件介绍及使用—基本介绍与DOM概述1.基本介绍2.文档对象模型概述

当上述文档被aspose.words的dom读取时,会创建如下结构的树形对象:

【原创】Aspose.Words组件介绍及使用—基本介绍与DOM概述1.基本介绍2.文档对象模型概述

从上图的结构和对应的word文档,我们可以看到大概的dom中相关对象的结构,有了这些基本概念,就可以很流程的操作word文档了。document, section, paragraph, table, shape, run 以及图中的其他椭圆形的都是aspose.words对象,这些对象具有树形的层级结构,图中的注释同样说明这些文档对象树中的对象具有多个属性。

aspose.words中的dom有以下特点:

1.所有的节点(node)类最终都继承于node类,它是aspose.words dom的基本类型。

2.节点可以包含(嵌套)其他节点,例如section和paragraph都继承自compositenode类,而compositenode类来源与node类。

当aspose.words读取word文档到内存中时,不同类型的文档元素被不同的类型对象来替代,每一个文本框的text, paragraph, table, section都是node对象,甚至文档本身都是一个node。aspose.words为每一种文档节点类型都定义了一个类。

下面是一个uml类图,表示dom中不同node类型之间的关系。抽象类的名字用斜体表示。注意,aspose.words dom中同样包括了一些非节点类型的类,例如style, pagesetup, font等等,它们没有在这幅图里面显示。

【原创】Aspose.Words组件介绍及使用—基本介绍与DOM概述1.基本介绍2.文档对象模型概述

 看看这些主要的类及作用

aspose.words类

类别

描述

document

document对象是文档树的根节点,提供访问整个文档的入口

section

section对象对应一个文档中的一节

body

是一节中的主要文本容器

headerfooter

一节中的特殊页眉或者页脚容器

glossarydocument

代表一个word文档中词汇表的根条目

buildingblock

代表一个词汇表文档,如构件,自动图文集或一个自动更正条目

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.paragraph.html">paragraph</a>

text

一个文本段落,保护内联的节点

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.run.html">run</a>

一个格式一致的文本块

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.bookmarkstart.html">bookmarkstart</a>

一个书签的起点标记

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.bookmarkend.html">bookmarkend</a>

一个书签的结束标记

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.fields.fieldstart.html">fieldstart</a>

一个特殊的字符指定一个单词字段的开始

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.fields.fieldseparator.html">fieldseparator</a>

单词字段的分隔符

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.fields.fieldend.html">fieldend</a>

一个特殊的字符指定一个单词字段的结束

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.fields.formfield.html">formfield</a>

一个表单字段

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.specialchar.html">specialchar</a>

特殊字符类型,没有具体的

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.tables.table.html">table</a>

tables

 word文档中的表格

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.tables.row.html">row</a>

一个表格对象的行

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.tables.cell.html">cell</a>

表格行的单元格

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.drawing.shape.html">shape</a>

shapes

word文档中的图像,形状,文本框或者ole对象

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.drawing.groupshape.html">groupshape</a>

一组shapes对象

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.drawing.drawingml.html">drawingml</a>

一个文档中的sharp或者图像,图表

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.footnote.html">footnote</a>

annotations

文档中包括文本的脚注或者尾注

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.comment.html">comment</a>

文档中包含文本的注释

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.commentrangestart.html">commentrangestart</a>

一个相关的注释区域的开始

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.commentrangeend.html">commentrangeend</a>

一个相关的注释区域的结束

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.markup.smarttag.html">smarttag</a>

markup

在一个段落内围绕一个或多个内嵌结构的智能标记

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.markup.customxmlmarkup.html">customxmlmarkup</a>

文档中的某些结构的自定义xml标记

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.markup.structureddocumenttag.html">structureddocumenttag</a>

文档中的一种结构化的文档标签(内容控制)

<a href="http://www.cnblogs.com/asxinyu/admin/aspose.words.math.officemath.html">officemath</a>

math

代表office的数学对象,如函数,方程或者矩阵

aspose.words文档的结构树非常重要,下面的设计吐可以更清晰的理解各个节点之间的包含关系。

文档和节:

【原创】Aspose.Words组件介绍及使用—基本介绍与DOM概述1.基本介绍2.文档对象模型概述

从上图可以看出:

1.一个document有1个或者多个section(节)节点;

2.section有1个body(正文),没有或者有多个headerfooter节点;

3.body和headerfooter可以包含多个块级节点;

1个word文档包含1个或多个节,一个节可以定义自己的页码,边距,方向,以及页眉页脚的文字;一个节保护主要的问题,如页眉,页脚(首页,奇数页,偶数页)。

block-level节点的关系图如下所示:

【原创】Aspose.Words组件介绍及使用—基本介绍与DOM概述1.基本介绍2.文档对象模型概述

从上图中可以看到:

1.block-level元素可以出现在文档中的很多地方,如body的子节点,脚注,评论,单元格其他元素。

2.最重要的block-level节点是表格和段落;

3.1个表格有0行或者多行;

customxmlmarkup 和structureddocumenttag可以包含其他block-level节点;

【原创】Aspose.Words组件介绍及使用—基本介绍与DOM概述1.基本介绍2.文档对象模型概述

从上面的图表可以看到下列关系:

1.paragraph是最经常出现的inline-level节点;

2.paragraph可以包含不同的run格式节点;也可以包含书签(bookmarks)和注释(annotations)

3.paragraph还可以包含形状,图像,绘图对象等,以及智能标签;

【原创】Aspose.Words组件介绍及使用—基本介绍与DOM概述1.基本介绍2.文档对象模型概述

table可以包含很多行,行可以包含单元格,单元格可以包括block-level节点。

aspose.words将文档表示为一个有节点组成的树,因此就可以在节点之间互相切换。aspose.words提供了一个“文档浏览器”(documentexplorer),这是一个项目例子demo。如下图所示:

【原创】Aspose.Words组件介绍及使用—基本介绍与DOM概述1.基本介绍2.文档对象模型概述

可以通过node类的parentnode属性来访问上级节点,因此很方便获取父节点。文档对象模型是有大量的对象组合而成,他们的关系如下:

1.node类是所有节点类的基类;

2.compositenode类是组合节点的基类;

3.node类的中,没有子节点管理的接口,子节点管理的方法只出现在compositenode;

4.从node类中移除子节点管理的方法,更干净,可以减少很多额外的转换;