開源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,主要特色有:code

1.支持在文件中插入、刪除和替代文本,支持全部的文本格式,如字體,下劃線,高亮等。orm

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類中,操做也很簡單,以下所示:

//新建一個Word文檔,加載Load的方法和Create使用同樣。  using (DocX document = DocX.Create(@"..\Test.docx"))  {      //添加一些基本對象,如段落等      document.Save();//保存  }

3.2 添加段落及控制格式

文本段落和格式控制是Word文檔的最經常使用對象,DocX支持插入段落以及對段落格式進行很全面的控制。下面一一舉例。

插入段落的方法是DocX類的InsertParagraph方法,該方法有好幾種使用方法,不只能夠控制插入的位置,還能夠控制格式。

using (DocX document = DocX.Create(@"Test.docx"))  {      //首先建立1個格式對象      Formatting formatting = new Formatting();      formatting.Bold = true;      formatting.FontColor = Color.Red;      formatting.Size = 30;       //控制段落插入的位置      int index = document.Text.Length / 2;      //將文本插入到指定位置,並控制格式      document.InsertParagraph(index, "New text", false, formatting);      document.Save();//保存文檔  }

注意,上面只是插入段落,也能夠單獨定義1個段落對象Paragraph,而後在這個段落中插入表格,圖像,以及操做自定義屬性。以下面的例子,其中比較詳細介紹的對圖像的操做:

using (DocX document = DocX.Create(@"Test.docx"))  {      //給文檔新建1個段落對象      Paragraph p = document.InsertParagraph("Here is Picture 1", false);      //給文檔添加1個圖像      Novacode.Image img = document.AddImage(@"Image.jpg");      //將圖像插入到段落後面      Picture pic = p.InsertPicture(img.Id, "Photo 31415", "A pie I baked.");      //選擇圖像,並修改圖像尺寸      pic.Rotation = 30;          pic.Width = 400;      pic.Height = 300;      //設置圖片形狀,並水平翻轉圖片      pic.SetPictureShape(BasicShapes.cube);      pic.FlipHorizontal = true;          document.Save();//保存文檔  }

格式控制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 頁眉頁腳控制

頁面和頁腳的使用很是相似。支持三種類型,首頁,奇數頁和偶數頁。貌似尚未支持節。這裏只列舉頁腳的基本使用。

using (DocX document = DocX.Create(@"Test.docx"))   {      document.AddFooters();//添加全部的頁腳      Footers footers = document.Footers; //獲取該文檔全部的頁腳      //獲取文檔第一頁的頁腳      Footer first = footers.first;       //獲取奇數頁的頁腳      Footer odd = footers.odd;       //獲取偶數頁的頁腳      even = footers.even;       //設置不一樣頁使用不一樣的頁腳      document.DifferentFirstPage = true;       document.DifferentOddAndEvenPages = true;       //設置頁腳的內容      Paragraph p = first.InsertParagraph();      p.Append("This is the first pages footer.");          document.Save(); //記得保存  }

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.  }

相關文章
相關標籤/搜索