开源Word读写组件DocX介绍与入门

开发 后端
读写Offic格式的文档,大家多少都有用到,可能方法也很多,组件有很多。这里不去讨论其他方法的优劣,只是向大家介绍一款开源的读写word文档的组件。读写Excel有NPOI,读写Word,那看看DocX吧。

今天向大家介绍一款.NET下的开源轻量级Word 2007/2010格式读写组件DocX,很小巧,能够满足大部分工作需求吧,最重要的是可以不用庞大的Office。

1.前言

读写Offic格式的文档,大家多少都有用到,可能方法也很多,组件有很多。这里不去讨论其他方法的优劣,只是向大家介绍一款开源的读写word文档的组件。读写Excel有NPOI,读写Word,那看看DocX吧。

DocX是一个以非常直观简单的方式操作Word 2007/2010文件的轻量级.NET组件。它的速度非常快,而且不需要安装微软的Office软件。在中国,免费并且小巧的WPS有足够的理由让很多用户放弃庞大的Office,那在实际软件开发过程中,这玩意就有用处了。遗憾是不支持2003,但总归是被淘汰的趋势,而且用WPS,也没有啥版本的区别。

2.DocX的主要特点

DocX组件目前的最新版本是V1.0.0.12,主要特点有:

1.支持在文件中插入、删除和替代文本,支持所有的文本格式,如字体,下划线,高亮等。

2.支持插入图片、超链接、表格、页眉页脚以及自定义属性等。

3.支持类似JQuery的链式写法,很方便编程开发。

3.DocX入门例子

DocX中一个Word文档的主要对象有段落(Paragraph)、图像(Image)、表格(Table)、自定义属性(CustomProperty)。关于详细的使用和API接口,可以参考CHM文档,没有自己制作最新版的,我用的是上一个版本,基本使用够了。有精力的可以自己去看源码,自己制作一份。注意,无特殊注明,本文的绝大部分代码都来自V1.0.0.10版本的帮助文档,新的11和12版本好像没有增加大的新功能,只是修改不少Bug,以及增加了案例和单元测试,至于没有介绍到的,可以自己去翻文档,大家可以去开源网站下载最新源码。

3.1 新建与加载Doc文档

新建和加载Word文档的方法都在Docx类中,操作也很简单,如下所示:

  1. //新建一个Word文档,加载Load的方法和Create使用一样。 
  2.  using (DocX document = DocX.Create(@"..\Test.docx")) 
  3.  { 
  4.      //添加一些基本对象,如段落等 
  5.      document.Save();//保存 
  6.  } 

3.2 添加段落及控制格式

 文本段落和格式控制是Word文档的最常用对象,DocX支持插入段落以及对段落格式进行很全面的控制。下面一一举例。

插入段落的方法是DocX类的InsertParagraph方法,该方法有好几种使用方法,不仅可以控制插入的位置,还可以控制格式。

  1. using (DocX document = DocX.Create(@"Test.docx")) 
  2.  { 
  3.      //首先创建1个格式对象 
  4.      Formatting formatting = new Formatting(); 
  5.      formatting.Bold = true
  6.      formatting.FontColor = Color.Red; 
  7.      formatting.Size = 30; 
  8.       //控制段落插入的位置 
  9.      int index = document.Text.Length / 2; 
  10.      //将文本插入到指定位置,并控制格式 
  11.      document.InsertParagraph(index, "New text"false, formatting); 
  12.      document.Save();//保存文档 
  13.  } 

注意,上面只是插入段落,也可以单独定义1个段落对象Paragraph,然后在这个段落中插入表格,图像,以及操作自定义属性。如下面的例子,其中比较详细介绍的对图像的操作:

  1. using (DocX document = DocX.Create(@"Test.docx")) 
  2.  { 
  3.      //给文档新建1个段落对象 
  4.      Paragraph p = document.InsertParagraph("Here is Picture 1"false); 
  5.      //给文档添加1个图像 
  6.      Novacode.Image img = document.AddImage(@"Image.jpg"); 
  7.      //将图像插入到段落后面 
  8.      Picture pic = p.InsertPicture(img.Id, "Photo 31415""A pie I baked."); 
  9.      //选择图像,并修改图像尺寸 
  10.      pic.Rotation = 30;     
  11.      pic.Width = 400; 
  12.      pic.Height = 300; 
  13.      //设置图片形状,并水平翻转图片 
  14.      pic.SetPictureShape(BasicShapes.cube); 
  15.      pic.FlipHorizontal = true;     
  16.      document.Save();//保存文档 
  17.  } 

格式控制Formatting类全部是属性,没有方法。有很多控制格式的属性,直接进行设置就可以了,暂时没有发现这个版本支持样式,所以只能定义1个全局格式来控制标题了。具体的格式控制可以去看该类的文档。太多,不一一列举,基本使用上面的代码就可以说明了。

另外新版本已经支持了增加超链接(Hyperlink)功能,使用很简单,DocX的AddHyperlink方法直接完成。

3.3 插入图像及图像控制

上面的例子其实已经介绍了几种插入图片的方式,一种是在DocX对象中直接AddImage,另外就是在段落中插入。其中3.2的例子已经很详细介绍了图像的控制,比如修改尺寸,旋转等。更详细的设置在Picture类中。

3.4 插入表格及表格控制

表格是Word文档另外一个重点,在实际使用环境中,也是比例很高的一个。先介绍下DocX中表格对象的结构:

1个表格对象Table有行,列组成,行列可以通过索引访问。Table对象的基本单一是单元格(Cell),每一个Row对象由多个Cell对象组成,Cell对象有一个默认的Paragraph对象,这样可以对这个Paragraph对象进行格式控制,从而控制单元格的格式。表格还可以设置相关属性,对齐,是否自适应表格大小等。Table对象的操作也很灵活,可以插入和移除行,同样也可以插入和移除列。

DocX对象插入表格也有几种方式,可以直接用DocX对象的InsertTable方法,也可以在段落对象后面插入;同理也可以在Table对象前后插入段落对象,这与排版有关了。看1个综合的例子吧:

3.5 页眉页脚控制

页面和页脚的使用非常类似。支持三种类型,首页,奇数页和偶数页。貌似还没有支持节。这里只列举页脚的基本使用。

  1. using (DocX document = DocX.Create(@"Test.docx"))  
  2.  { 
  3.      document.AddFooters();//添加所有的页脚 
  4.      Footers footers = document.Footers; //获取该文档所有的页脚 
  5.      //获取文档第一页的页脚 
  6.      Footer first = footers.first;  
  7.      //获取奇数页的页脚 
  8.      Footer odd = footers.odd;  
  9.      //获取偶数页的页脚 
  10.      even = footers.even;  
  11.      //设置不同页使用不同的页脚 
  12.      document.DifferentFirstPage = true;  
  13.      document.DifferentOddAndEvenPages = true;  
  14.      //设置页脚的内容 
  15.      Paragraph p = first.InsertParagraph(); 
  16.      p.Append("This is the first pages footer.");     
  17.      document.Save(); //记得保存 
  18.  } 

3.6 自定义属性支持

虽然还没有用DocX投入实际使用,但个人认为对自定义属性的支持是最强大的1个功能,不仅可以自己制作模版,还可以直接在DocX中新增自定义属性,这样在导出大批量相同的格式的文档时就很有用。比如打印成绩单,报表等等。由于本人从没有使用Word 2007及以上版本,所有也从没有接触过这个自定义属性功能。我的理解,类似一个“占位标”或”文本控件”,然后在开发的时候,可以给这些位置填充值,以批量生成一些文件。下面只简单的介绍一个直接添加自定义属性,并赋值的例子,高级一点的话,可以自己更加细致的排版,这样就美观点。

  1. using (DocX document = DocX.Load(@"C:\Example\Test.docx")) 
  2.  { 
  3.      //先定义一个自定义属性 
  4.      CustomProperty forename; 
  5.      //先判断文档中是否存在该名称的自定义属性 
  6.      if (!document.CustomProperties.ContainsKey("forename")) 
  7.      {    //不存在则创建一个,并给其赋值"Cathal" 
  8.          document.AddCustomProperty(new CustomProperty("forename""Cathal")); 
  9.      } 
  10.      //获取这个自定义属性,并打印出它的值 
  11.      forename = document.CustomProperties["forename"]; 
  12.      Console.WriteLine(string.Format("Name: '{0}', Value: '{1}'\nPress any key...",  
  13.                          forename.Name, forename.Value)); 
  14.      document.Save(); 
  15.  } 

4.资源

开源网址:http://docx.codeplex.com/

原文链接:http://www.cnblogs.com/asxinyu/archive/2013/02/22/2921861.html

责任编辑:张伟 来源: 博客园
相关推荐

2017-03-10 16:24:50

Android读写Word读写PDF

2013-01-10 13:50:25

Android开发组件

2019-11-19 11:20:25

Python数据结构Windows

2012-05-25 15:35:43

JMSJava

2014-06-23 09:11:01

2009-08-18 17:02:45

Django入门

2013-03-25 10:26:19

XML数据库

2021-03-26 08:20:51

SpringBoot读写分离开发

2023-07-07 08:36:45

配置注解jar

2009-07-10 18:06:59

JTree Swing

2021-02-26 20:55:56

JavaNIO随机

2011-10-28 16:53:04

Jacob

2017-08-24 15:09:13

GAN神经网络无监督学习

2009-07-02 10:27:20

JSP技术JSP入门

2009-06-22 14:13:08

JSF入门

2009-08-25 16:01:43

DataList控件入

2009-07-17 14:38:51

轻量级Swing组件

2019-04-29 11:18:43

开源Sensu监控

2009-07-17 11:13:46

AWT和SwingSwing组件

2019-05-07 09:31:41

TiDBMySQL数据
点赞
收藏

51CTO技术栈公众号