From: https://www.pianshen.com/article/300982052/
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 |
代表一個詞彙表文件,如構件,自動圖文集或一個自動更正條目 |
Paragraph |
Text |
一個文字段落,保護內聯的節點 |
Run |
Text |
一個格式一致的文字塊 |
BookmarkStart |
Text |
一個書籤的起點標記 |
BookmarkEnd |
Text |
一個書籤的結束標記 |
FieldStart |
Text |
一個特殊的字元指定一個單詞欄位的開始 |
FieldSeparator |
Text |
單詞欄位的分隔符 |
FieldEnd |
Text |
一個特殊的字元指定一個單詞欄位的結束 |
FormField |
Text |
一個表單欄位 |
SpecialChar |
Text |
特殊字元型別,沒有具體的 |
Table |
Tables |
Word文件中的表格 |
Row |
Tables |
一個表格物件的行 |
Cell |
Tables |
表格行的單元格 |
Shape |
Shapes |
Word文件中的影像,形狀,文字框或者OLE物件 |
GroupShape |
Shapes |
一組Shapes物件 |
DrawingML |
Shapes |
一個文件中的Sharp或者影像,圖表 |
Footnote |
Annotations |
文件中包括文字的腳註或者尾註 |
Comment |
Annotations |
文件中包含文字的註釋 |
CommentRangeStart |
Annotations |
一個相關的註釋區域的開始 |
CommentRangeEnd |
Annotations |
一個相關的註釋區域的結束 |
SmartTag |
Markup |
在一個段落內圍繞一個或多個內嵌結構的智慧標記 |
CustomXmlMarkup |
Markup |
文件中的某些結構的自定義XML標記 |
StructuredDocumentTag |
Markup |
文件中的一種結構化的文件標籤(內容控制) |
OfficeMath |
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類中移除子節點管理的方法,更乾淨,可以減少很多額外的轉換;