期刊/Apose.Word元件介紹(上)

出自台灣中等學校資訊管理人學會

跳轉到: 導航, 搜索

目錄

[編輯] 前言

本文中介紹Apose的Word元件使用方法,此元件在開發Smart School的擴充報表時會運用到;為在Smart School中支援的元件,以下為此元件的特色。

  • 不需安裝Microsoft Word軟體,就可運用內建的物件模型來讀取、編輯及產生Word文件。
  • 內建的物件模型支援大部份Word功能,例如文字格式操作、表格、圖片、合併列印...等。
  • 支援許多的檔案格式,如DOC、DOCX、RTF、WML、HTML、PDF,算是相當的完善,而PDF格式需要再搭配使用Aspose.PDF元件。
  • 讀入及輸出檔案的效率高。

在Office軟體當中每個都有提供物件模型,也能在在.NET平台當中引用使用,那為何要多花費用去買Aspose.Word元件來使用呢?在Aspose的說明書中針對這點特別強調,底下摘錄其重點,詳細可參考Aspose的說明書:

  • 穩定性:若是要安裝Microsoft Word軟體才能輸出Word檔案,那麼可能會因為使用者安裝的版本不同,例如Office XP、Office 2007而導致產生出來的檔案格式不一致;這對使用者及軟體開發人員都會相當困惱。
  • 速度:在.NET當中用Microsoft Word的物件模型,相當於模擬使用Word軟體;而Aspose的元件是直接用程式產生Word格式的檔案,在快速上自然會快上許多。

[編輯] 安裝Aspose.Word元件

Aspose.Word元件可以由此下載試用版,在安裝好後可以在其安裝目錄找到Aspose.Words.dll檔案可以於.NET專案當中引用,以筆者而言的目錄是:

 C:\Program Files\Aspose\Aspose.Words\Bin\net2.0\Aspose.Words.dll
 C:\Program Files\Aspose\Aspose.Words\Bin\net1.1\Aspose.Words.dll

底下以圖示的方式來說明加入的步驟。

[編輯] 步驟一:於專案中點選Add Reference

2549102779_82b5af70ac_o.png

[編輯] 步驟二:選取Aspose.Word元件

2549929566_1c108d4c12_o.png

[編輯] 步驟三:於程式碼中引用Aspose.Word元件

2549190183_a1936a3408_o.png

[編輯] 步驟四:編譯是否成功引用

2550037564_76c3e6c8ff_o.png

[編輯] 物件模型基本觀念

在測試能夠正確引用Aspose.Word後,接下來我們看到物件模型的設計,所有元件幾乎都繼承至Node元件擁有共通的屬性;Node往下分為兩大類,一大類為直接繼續至Node元件,另一大類為CompositeNode,CompositeNode與Node的差別在於前者可以包含其它的Node元件,例如表格元件就是很典型例子,表格元件(Table)可以包含列元件(Row),列元件裡面又可以再包含表格元件。

[編輯] 物件模型圖

Aspose.Word的物件模型設計,是很典型在DesignPattern當中的Composite Pattern,有興趣的讀者可以至Google搜尋,相信會很有收穫。

2544694100_a2d2951e59_o.png

[編輯] 重要物件說明

底下以表格的方式來說明重要的物件用途。

物件名稱 物件說明
Document 代表Word文件物件,此物件會包含許多文件的元件,如段落(Section)、內文(Body)…等等。
Section 代表Word當中的一個節。
Body 代表在節裡的主要文字。
HeaderFooter 代表在節裡的段落首及段落尾。
Comment 代表Word文件裡的註解。
Shape 代表在Word文件裡的影像、圖形或是OLE物件。
GroupShape 一群Shape物件的組合。
Paragraph 代表一小段文字。
Table 代表Word文字中的表格。
Row 代表表格的列。
Cell 代表表格的欄位。
BookmarkStart 代表書籤,用來標註書籤的開始。
BookmarkEnd 代表書籤,用來標註書籤的結束。

[編輯] 範例一:Document類別

在安裝好了Aspose.Word元件後,並且也針對其物件模型做基本的介紹,接下來我們來針對重要的物件來做實驗,以瞭解這些物件的用法。

一個Document 物件代表一份Microsoft Word文件,Document 物件包含了整個文件內容、格式、樣式、自定屬性,Document 物件可以儲存到檔案或是一個 Stream 物件,也可透過 Brwoser 傳送到 Client;如果想建立文件、使用樣版進行合併列印、讀取 Word 文件內容…,Document 類別是一個起點。

private void DoSomething_Click(Objectsender,EventArgs e)
{
 
Document doc = new Document(filename);
 
}

Document的來源可以是一個Word檔案、一個Stream物件,或是加密的文件。

  • 以下來源為Word檔案。
private void DoSomething_Click(Objectsender,EventArgs e)
{
 
String filename="C:\\Word.doc";
 
Document doc = new Document(filename);
 
}
  • 以下來源為Stream物件。
private void DoSomething_Click(Objectsender,EventArgs e)
{
 
System.IO.FileStream filestream = new  System.IO.FileStream("C:\\Word.doc",System.IO.FileMode.Open);
 
Document doc = new Document(filestream);
 
}
  • 以下來源為加密的Word檔案,要留意的是需註明檔案型態為LoadFormat.Doc,最後一個參數為文件的密碼名稱。
private void DoSomething_Click(Objectsender,EventArgs e)
{
 
Document doc = new Document("C:\\Word.doc", LoadFormat.Doc, "Password");
 
}

[編輯] 範例二:DocumentBuilder類別

我們手中有了Document物件之後,接下來會想在文件裡面動些手腳,例如加入文字或是表格,此時需借助DocumentBuilder類別來處理文件內容。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Aspose.Words;
 
namespace AsposeWord
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void DoSomething_Click(object sender, EventArgs e)
        {
 
            //建立Document物件
            Document doc = new Document();
 
            //建立DocumentBuilder物件 
            DocumentBuilder builder = new DocumentBuilder(doc);
 
            //將DocumentBuilder的顏色設定為紅色
            builder.Font.Color = System.Drawing.Color.Red;
 
            //將DocumentBuilder的顏色設定為雙底線
            builder.Font.Underline = Underline.Double;
 
            //新增文字
            builder.Writeln("臺灣中等學校資訊管理人學會");
 
            //新增超連結
            builder.InsertHyperlink("tsima","http://www.tsima.org.tw",false);
 
            //將上述設定的格式清除
            builder.Font.ClearFormatting();
 
 
            //將文件存檔
            doc.Save("Test.doc");
 
        }
    }
}