【原創】Aspose.Words元件介紹及使用—基本介紹與DOM概述
我之前部落格有一篇開源的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 |
一個特殊的字元指定一個單詞欄位的結束 |
|
Tables |
Word文件中的表格 |
|
Tables |
一個表格物件的行 |
|
Tables |
表格行的單元格 |
|
Shapes |
Word文件中的影象,形狀,文字框或者OLE物件 |
|
Shapes |
一組Shapes物件 |
|
Shapes |
一個文件中的Sharp或者影象,圖表 |
|
Annotations |
文件中包括文字的腳註或者尾註 |
|
Annotations |
文件中包含文字的註釋 |
|
Annotations |
一個相關的註釋區域的結束 |
|
Markup |
在一個段落內圍繞一個或多個內嵌結構的智慧標記 |
|
Markup |
文件中的某些結構的自定義XML標記 |
|
Math |
代表Office的數學物件,如函式,方程或者矩陣 |
2.3組成模式
Aspose.Words文件的結構樹非常重要,下面的設計吐可以更清晰的理解各個節點之間的包含關係。
2.3.1 Document and Section
文件和節:
從上圖可以看出:
1.一個Document有1個或者多個Section(節)節點;
2.Section有1個Body(正文),沒有或者有多個HeaderFooter節點;
3.Body和HeaderFooter可以包含多個塊級節點;
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概述
我之前部落格有一篇開源的Word讀寫元件的介紹:http://www.cnblogs.com/asxinyu/archive/2013/02/22/2921861.html ,引起了不少人的關注,機緣巧合,也使得我結識了一些朋友,由於DocX的一些原因(不穩定,更新很慢),我瞭解到了Aspose.
【原創】Open JDK更換過程及更換後的問題總結與分析
javac 原則 是否 java環境 sys classpath 運行環境 too 計算 由於2019年1月起Oracle對通用計算以外的應用場景開始收費,綜合看來還是主要針對嵌入式的Java應用進行收費,畢竟嵌入式設備的數量是龐大的,可以有數億元進賬。 因Oracle
【原創】java-NIO(一)阻塞IO與非阻塞IO--轉載請註明出處
零、一個小故事 在講解阻塞IO與非阻塞IO之前,先舉出一個小小的例子: 一個老闆經營一個飯店,最初的時候,每來一個客人安排一個服務員招呼,客人很滿意。 後來客人越來越多,需要的服務員越來越多,但是餐廳的後廚已經擠滿了服務員,不
【HBase】HBase的環境搭建及基本使用
1、HBase體系結構 2、HBase功能 HBase是一種Hadoop 資料庫,用於儲存資料和檢索資料。與RDBMS 相比,HBase可以儲存海量資料,資料條目數可達上億條,可以準實時檢索,檢索的速度達到秒級別。HBase是基於HDFS的,具有HDFS的優勢
【原創】java-NIO(一)阻塞IO與非阻塞IO
零、一個小故事 在講解阻塞IO與非阻塞IO之前,先舉出一個小小的例子: 一個老闆經營一個飯店,最初的時候,每來一個客人安排一個服務員招呼,客人很滿意。 後來客人越來越多,需要的服務員越來越多,但是餐廳的後廚已經擠滿了服務員,不能請更多的服務員了,之前的
【原創】docker原始碼分析(1)---框架與engine
原始碼為docker 1.6.2版本 為啥要用1.6.2版本,這是因為我買了一本書《Docker容器與容器雲》,這本書裡面也是用的1.6.2版本。 一邊可以學習這本書,一邊研究原始碼,事半功
【shell】分別提取檔名中的基本名與副檔名
檔名是有【基本名】與【副檔名】兩部分構成 1.藉助【%】操作符從檔名中提取基本名部分 Linux:/qinys # file_name='get_name.tar.gz'Linux:/qinys # name=${file_name%.*}Linux:/qinys # echo "Th
【原創】.NET平臺機器學習元件-Infer.NET連載(一)介紹
關於本文件的說明 本文件基於Infer.NET 2.6對Infer.NET User Guide進行中文翻譯,但進行了若干簡化和提煉,按照原網站的思路進行,但不侷限與其順序。 歡迎傳播分享,必須保持原作者的資訊,但禁止將該文件直接用於商業盈利。 本人正在研究基於Infer.NET元件,並
資料庫分散式事務XA規範介紹及Mysql底層實現機制【原創】
1. 引言 分散式事務主要應用領域主要體現在資料庫領域、微服務應用領域。微服務應用領域一般是柔性事務,不完全滿足ACID特性,特別是I隔離性,比如說saga不滿足隔離性,主要是通過根據分支事務執行成功或失敗,執行相應的前滾的重試或者後滾的補償操作來達成全域性事務的最終一致性,但是全域性事務與全域性事務之間沒有
【原創】Kuberneters-HelmV3.3.1入門介紹及實踐
一、為什麼需要Helm? Kubernetes目前已成為容器編排的事實標準,隨著傳統架構向微服務容器化架構的轉變,從一個巨大的單體的應用切分為多個微服務,每個微服務可獨立部署和擴充套件,實現了敏捷開發和快速部署,但是由於從大一個應用變成了多個微服務,導致服務數大幅增加,對於Kubernetes來說,針對每個服
C#操作Word Aspose.Words組件介紹及使用—基本介紹與DOM概述
控制 包含 枚舉類 讀取 標記 服務器端 方法 python level 1.基本介紹 Aspose.Words是一個商業.NET類庫,可以使得應用程序處理大量的文件任務。Aspose.Words支持Doc,Docx,RTF,HTML,OpenDocument,PDF,XP
【原創】關於Visual Studio相關插件的介紹與下載
ron 原來 bsp 推薦 blog 需要 地址 操作 說明 免責說明:本頁面插件僅供學習使用,切勿用於商業用途,插件來源均來自互聯網。 原文地址:http://www.cnblogs.com/cokefenta/p/7987766.html 在使用VS進行Unity的開發
Keepalived兩節點出現雙VIP情況及解決方法【原創】
1、故障現象 倆臺伺服器keepalived的vip在倆臺伺服器同時出現 A:10.70.12.72 B:10.70.12.73 2、問題分析 1)、先分析那臺伺服器在提供服務 A:10.70.12.72 B:10.70.12.73 可以看到是B機器72在對外提
【轉】前端構建工具 gulpjs 的使用介紹及技巧
原文地址 http://www.cnblogs.com/2050/p/4198792.html gulpjs 是一個前端構建工具,與 gruntjs 相比,gulpjs 無需寫一大堆繁雜的配置引數,API 也非常簡單,學習起來很容易,而且 gulpjs 使用的是 nodej
【原創】基於NodeJS Express框架開發的一個VIP視訊網站專案及原始碼分享
專案名稱:視訊網站專案 開發語言:HTML,CSS(前端),JavaScript,NODEJS(expres)(後臺) 資料庫:MySQL 開發環境:Win7,Webstorm 上線部署環境:Linux伺服器 主要功能我們先來看一下最終的效果:使用者主頁的搭建: 實現了主頁輪播圖的顯示和切換,使用者可以從
【原創】使用JS封裝的一個小型遊戲引擎及原始碼分享
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Game 1.0</title> <!--引入需要的css檔案,
【原創】使用HTML5+canvas+JavaScript開發的原生中國象棋遊戲及原始碼分享
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style>
【原創】大資料基礎之Spark(4)RDD原理及程式碼解析
一 簡介 spark核心是RDD,官方文件地址:https://spark.apache.org/docs/latest/rdd-programming-guide.html#resilient-distributed-datasets-rdds官方描述如下:重點是可容錯,可並行處理 Spark r
【原創】大數據基礎之Spark(4)RDD原理及代碼解析
sso 數據 queue running upd parallel input gettime side 一 簡介 spark核心是RDD,官方文檔地址:https://spark.apache.org/docs/latest/rdd-programming-guide.h
【原創】大資料基礎之Spark(5)Shuffle實現原理及程式碼解析
一 簡介 Shuffle,簡而言之,就是對資料進行重新分割槽,其中會涉及大量的網路io和磁碟io,為什麼需要shuffle,以詞頻統計reduceByKey過程為例, serverA:partition1: (hello, 1), (word, 1)serverB:partition2: (hell