【原创】Aspose.Words组件介绍及使用—基本介绍与DOM概述
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html
本博客其他.NET开源项目文章目录:http://www.cnblogs.com/asxinyu/p/4329755.html
我之前博客有一篇开源的Word读写组件的介绍:http://www.cnblogs.com/asxinyu/archive/2013/02/22/2921861.html ,引起了不少人的关注,机缘巧合,也使得我结识了一些朋友,由于DocX的一些原因(不稳定,更新很慢),我了解到了Aspose.Words这个组件,非常好,文档齐全,案例丰富,功能也很多,支持非常完善。所以我业余时间就把官方的文档和例子翻译和总结了一下,希望对大家有点帮助,同时也对自己是一个提高。我决定把这个组件的使用作为一个系列,目前已经有2篇的内容,后面的要根据时间慢慢写。
如对您有帮助,不要吝啬你的鼠标,支持一下哦,如翻译的不好,或者有错误漏洞,还请广大网友指出,一个人的能力毕竟有限,而且我只是一个业余打酱油的。
1.基本介绍
Aspose.Words是一个商业.NET类库,可以使得应用程序处理大量的文件任务。Aspose.Words支持Doc,Docx,RTF,HTML,OpenDocument,PDF,XPS,EPUB和其他格式。使用Aspose.Words可以在不使用Microsoft.Word的情况下生成、修改、转换和打印文档。在项目中使用Aspose.Words可以有以下好处。
1.1丰富的功能集
其丰富的功能特性主要有以下4个方面:
1)格式转换。Aspose.Words具有高质量的文件格式转换功能,可以和Doc,OOXL,RTF,TXT等格式互相转换。
2)文档对象模型。通过丰富的API以编程方式访问所有的文档元素和格式,允许创建,修改,提取,复制,分割,加入,和替换文件内容。
3)文件渲染。可以在服务器端转换整个文档或者页面为PDF,XPS,SWF格式,同样可以转换文档页面为图像格式,或者.NET Graphics对象,这些功能和Microsoft.Word是一样的。
4)报表。可以从对象或者数据源填充模版生成文件。
1.2不需要Microsoft.Word
Aspose.Words可以在没有安装Microsoft Office的机器上工作。所有的Aspose组件都是独立,不需要微软公司的授权。总之, Aspose.Words在安全性、稳定性、可扩展性、速度、价格和自动化功能方面,是一个很不错的选择。
1.3独立的平台
Aspose.Words可以运行在Windows,Linux和Mac OS操作系统上面。可以使用Aspose.Words去创建32位或者64位的.NET应用程序,包括Asp.NET、WCF、WinForm等等,还可以使用Com组件在Asp、Perl、PHP和Python语言中使用,同样可以在Mono平台上使用Aspose.Words建立.NET应用程序。
1.4性能和可伸缩性
Aspose.Words可以运行在服务器和客户端,它是一个独立的.NET程序集,可以被任何.NET应用程序复制和部署。使用Aspose.Words可以在短时间内产生成千上万的文档,可以打开文档,并修改格式和内容,填充数据并保存。Aspose.Words是多线程安全的,不同的线程在同一时间处理不同的文档。
1.5最小的学习曲线
虽然Aspose.Words拥有150多个公共类和枚举类型,但是Aspose.Words的学习曲线很小因为Aspose.Words的API是围绕下列目标精心设计的:
1) 借鉴一些著名的API设计经验,如Microsoft Word。
2) 借鉴.NET框架设计指南的经验。
3) 提供易于使用的详细的文档元素操作文档。
以前在项目中使用Microsoft Word的开发者,可以在Aspose.Words中找到很多熟悉的类、方法和属性。
2.文档对象模型概述
2.1 DOM介绍
Aspose.Words的文档对象模型(以下简称DOM)是一个Word文档在内存中的映射,Aspose.Words的DOM可以编程读取、操作和修改Word文档的内容和格式。理解DOM的结构和相应的类型,是使用Aspose.Words灵活编程的基础,这一点非常重要。下面的一个Word文档例子和其结构如下图所示:

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

从上图的结构和对应的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类。
2.2 Node类型
当Aspose.Words读取Word文档到内存中时,不同类型的文档元素被不同的类型对象来替代,每一个文本框的text, paragraph, table, section都是Node对象,甚至文档本身都是一个Node。Aspose.Words为每一种文档节点类型都定义了一个类。
下面是一个UML类图,表示DOM中不同node类型之间的关系。抽象类的名字用斜体表示。注意,Aspose.Words DOM中同样包括了一些非节点类型的类,例如Style, PageSetup, Font等等,它们没有在这幅图里面显示。

看看这些主要的类及作用
| 
 Aspose.Words类  | 
 类别  | 
 描述  | 
| 
 Document  | 
 Document  | 
 Document对象是文档树的根节点,提供访问整个文档的入口  | 
| 
 Section  | 
 Document  | 
 Section对象对应一个文档中的一节  | 
| 
 Body  | 
 Document  | 
 是一节中的主要文本容器  | 
| 
 HeaderFooter  | 
 Document  | 
 一节中的特殊页眉或者页脚容器  | 
| 
 GlossaryDocument  | 
 Document  | 
 代表一个Word文档中词汇表的根条目  | 
| 
 BuildingBlock  | 
 Document  | 
 代表一个词汇表文档,如构件,自动图文集或一个自动更正条目  | 
| 
 Text  | 
 一个文本段落,保护内联的节点  | 
|
| 
 Text  | 
 一个格式一致的文本块  | 
|
| 
 Text  | 
 一个书签的起点标记  | 
|
| 
 Text  | 
 一个书签的结束标记  | 
|
| 
 Text  | 
 一个特殊的字符指定一个单词字段的开始  | 
|
| 
 Text  | 
 单词字段的分隔符  | 
|
| 
 Text  | 
 一个特殊的字符指定一个单词字段的结束  | 
|
| 
 Text  | 
 一个表单字段  | 
|
| 
 Text  | 
 特殊字符类型,没有具体的  | 
|
| 
 Tables  | 
 Word文档中的表格  | 
|
| 
 Tables  | 
 一个表格对象的行  | 
|
| 
 Tables  | 
 表格行的单元格  | 
|
| 
 Shapes  | 
 Word文档中的图像,形状,文本框或者OLE对象  | 
|
| 
 Shapes  | 
 一组Shapes对象  | 
|
| 
 Shapes  | 
 一个文档中的Sharp或者图像,图表  | 
|
| 
 Annotations  | 
 文档中包括文本的脚注或者尾注  | 
|
| 
 Annotations  | 
 文档中包含文本的注释  | 
|
| 
 Annotations  | 
 一个相关的注释区域的开始  | 
|
| 
 Annotations  | 
 一个相关的注释区域的结束  | 
|
| 
 Markup  | 
 在一个段落内围绕一个或多个内嵌结构的智能标记  | 
|
| 
 Markup  | 
 文档中的某些结构的自定义XML标记  | 
|
| 
 Markup  | 
 文档中的一种结构化的文档标签(内容控制)  | 
|
| 
 Math  | 
 代表Office的数学对象,如函数,方程或者矩阵  | 
2.3组成模式
Aspose.Words文档的结构树非常重要,下面的设计吐可以更清晰的理解各个节点之间的包含关系。
2.3.1 Document and Section
文档和节:

从上图可以看出:
1.一个Document有1个或者多个Section(节)节点;
2.Section有1个Body(正文),没有或者有多个HeaderFooter节点;
3.Body和HeaderFooter可以包含多个块级节点;
4.1个Document能够有一个GlossaryDocument.
1个Word文档包含1个或多个节,一个节可以定义自己的页码,边距,方向,以及页眉页脚的文字;一个节保护主要的问题,如页眉,页脚(首页,奇数页,偶数页)。
2.3.2 Block-level节点
Block-level节点的关系图如下所示:

从上图中可以看到:
1.Block-level元素可以出现在文档中的很多地方,如Body的子节点,脚注,评论,单元格其他元素。
2.最重要的Block-level节点是表格和段落;
3.1个表格有0行或者多行;
CustomXmlMarkup 和StructuredDocumentTag可以包含其他Block-level节点;
2.3.3 Inline-level节点

从上面的图表可以看到下列关系:
1.Paragraph是最经常出现的Inline-level节点;
2.Paragraph可以包含不同的Run格式节点;也可以包含书签(bookmarks)和注释(annotations)
3.Paragraph还可以包含形状,图像,绘图对象等,以及智能标签;
2.3.4 表格行单元格

Table可以包含很多行,行可以包含单元格,单元格可以包括block-level节点。
2.4 设计模式与导航
Aspose.Words将文档表示为一个有节点组成的树,因此就可以在节点之间互相切换。Aspose.Words提供了一个“文档浏览器”(DocumentExplorer),这是一个项目例子Demo。如下图所示:

可以通过Node类的ParentNode属性来访问上级节点,因此很方便获取父节点。文档对象模型是有大量的对象组合而成,他们的关系如下:
1.Node类是所有节点类的基类;
2.CompositeNode类是组合节点的基类;
3.Node类的中,没有子节点管理的接口,子节点管理的方法只出现在CompositeNode;
4.从Node类中移除子节点管理的方法,更干净,可以减少很多额外的转换;
第一篇基本介绍就介绍到这里,我们可以看到这个组件的功能是非常强大的,特别是文档的转换保存,操作也很灵活,相比DocX当然要强大。只不过唯一不足它是商业的,自己业余玩玩倒是没问题,源代码等下一篇写例子了,再发上来吧,至于官方的资料,是商业的,大家都懂的。至于途径吗,官方网站在这里:http://www.aspose.com/,国内的途径吧,CSDN比较多,呵呵。
【原创】Aspose.Words组件介绍及使用—基本介绍与DOM概述的更多相关文章
- .NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍
		
Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器 ...
 - 【转】 (C#)利用Aspose.Cells组件导入导出excel文件
		
Aspose.Cells组件可以不依赖excel来导入导出excel文件: 导入: public static System.Data.DataTable ReadExcel(String strFi ...
 - (C#)利用Aspose.Cells组件导入导出excel文件
		
Aspose.Cells组件可以不依赖excel来导入导出excel文件: 导入: public static System.Data.DataTable ReadExcel(String strFi ...
 - [原创]Robo 3T 1.2.1 工具使用介绍
		
[原创]Robo 3T 1.2.1 工具使用介绍 1 Robo 3T 1.2.1 简介 robo 3t 是一款MongoDB的辅助插件,可以帮助您在管理数据库内容以及数据库代码编辑方面提供一定的开发 ...
 - [原创]用Charles模拟App各种网络带宽测试介绍
		
[原创]用Charles模拟App各种网络带宽测试介绍 相信每个测试在进行自己公司App测试时,都会碰到一个问题,如何去模拟各种App在各种带宽下的测试情况,估计很少有公司直接去采用2g/3g/4g卡 ...
 - Hadoop介绍-3.HDFS介绍和YARN原理介绍
		
一. HDFS介绍: Hadoop2介绍 HDFS概述 HDFS读写流程 1. Hadoop2介绍 Hadoop是Apache软件基金会旗下的一个分布式系统基础架构.Hadoop2的框架最核心的 ...
 - Aspose.Words组件介绍及使用—基本介绍与DOM概述
		
1.基本介绍 Aspose.Words是一个商业.NET类库,可以使得应用程序处理大量的文件任务.Aspose.Words支持Doc,Docx,RTF,HTML,OpenDocument,PDF,XP ...
 - C#操作Word Aspose.Words组件介绍及使用—基本介绍与DOM概述
		
1.基本介绍 Aspose.Words是一个商业.NET类库,可以使得应用程序处理大量的文件任务.Aspose.Words支持Doc,Docx,RTF,HTML,OpenDocument,PDF,XP ...
 - Aspose.word组件介绍
		
阅读目录 1.基本介绍 2.文档对象模型概述 本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html 本博客其他.NET开 ...
 
随机推荐
- c# http get请求与post请求实例
			
//http请求工具类 using System;using System.Collections.Generic;using System.IO;using System.Linq;using Sy ...
 - 使用SQL Server 2008 维护计划(图解)
			
使用Sql Server 2008的维护计划可以实现自动备份数据库,并自动删除过期备份的功能. 一.环境 OS: Microsoft Windows Server 2003 R2 soft:Micro ...
 - 数字对象NSNumber
			
//将int类型转化成对象 ; NSNumber *numberString = [NSNumber numberWithInt:number]; //对象是可以放入数组的 NSArray *arra ...
 - 浏览器兼容性-JS篇
			
总结一下平时遇到的浏览器兼容性问题,本篇关于JS. 1.事件绑定 兼容写法: function add(obj,event){ if (obj.addEventListener) { obj.addE ...
 - webpack模块加载css文件及图片地址
			
webpack支持css文件加载并打包,只需安装相应加载器并在配置文件中配置 . 加载的css文件内容会与该模块里的js内容混合封装,这样做的好处是一个js文件包含了所有的css与js内容,有效减少了 ...
 - CF2.D
			
D. Santa Claus and a Palindrome time limit per test 2 seconds memory limit per test 256 megabytes in ...
 - HDU3465 树状数组逆序数
			
Life is a Line Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)T ...
 - .Net程序员之不学Java做安卓开发:奇怪的Java语法
			
1.final关键字:用以修饰类时,表示类不可以被继承,指向基本数据类型或者引用类型时,该类只可以在声明的时候初始化 2.@Override 类似C# 中override关键字,表示对父类的重写.网上 ...
 - Usaco*Monthly Expense
			
Description Farmer John是一个令人惊讶的会计学天才,他已经明白了他可能会花光他的钱,这些钱本来是要维持农场每个月的正常运转的.他已经计算了他以后N(1<=N<=100 ...
 - SqlServer游标简介
			
游标实例: Declare MyCusror Cursor Scroll For Select * From Master_Goods Order By GoodsID Ope ...