背景:
本文試圖證明和審查Spire.Doc的格式轉換能力。很長的一段時間裡,為了操作文檔,開發人員不得不在服務器上安裝Office軟件。首先,這是一個很糟糕的設計和實踐。第二,微軟從沒打算把Office作為一個服務器組件,它也用來在服務器端解釋和操作文檔的。於是乎,產生了類似Spire.Doc這樣的類庫。當我們討論這個問題時,值得一提的是 Office Open Xml. Office Open XML (也有非正式地稱呼為 OOXML 或OpenXML) 是一種壓縮的, 基於XML的文件格式,由微軟開發,用於表現電子表格,展示圖表,演示和文字處理等。在2005年11月,微軟宣布作為ECMA國際主要合作伙伴,將其開發的基於XML的文件格式標准化,稱之為"Office Open XML" 。Open XML的引進使office文檔結構更加標准化,並且開發人員使用 Open XML SDK可以直接進行很多簡單的操作,但是仍然有很多差距,如將word文檔轉換成其他格式,比如PDF,圖像,或者HTML等。這就是Spire.Doc 來拯救開發人員的原因。
文檔轉換:
我將在文章的其余部分來介紹Spire.Doc可以適用的多種場景。文中展示的所有例子均可以在 Spire.Doc 的DEMO中找到,你可以很容易地下載並使用它們。我的例子是一個簡單的控制台程序,當然它也支持其他平台,如web項目或者Silverlight項目等。
用他們自己的話來說,Spire.Doc 宣稱:"Spire.Doc for .NET 可以將word文件轉換成最常見和流行的格式。"
為了開始使用Spire.Doc,你首先需要添加Spire.Doc,Spire.License 和 Spire.Pdf引用到你的項目中,這兩個組件是打包在Spire.Doc中的.
你需要一個有效的 Spire.Doc授權文件才能使用這個類庫,否則它將在文檔中顯示"評估版本"警告。設置授權非常簡單,只要設置授件位置,類庫就會自動完成驗證等工作。還有其他的方法來加載授權文件,比如動態指定或將其加入到資源文件中。詳細的文檔可以參考這裡。.
FileInfo licenseFile = new FileInfo(@"C:\ManasBhardwaj\license.lic");
Spire.License.LicenseProvider.SetLicenseFile(licenseFile);
為了驗證基本的功能,我使用了一個word文檔包含簡單文字、一張圖片和一個表格。如下圖所示,你也可以在Demo中找到。
類庫的核心當然是Document類。所以我們從創建Document對象開始,然後加載文檔信息。簡單得只需要三行代碼,你就可以把一個相當復雜包含不同元素的Word文檔轉換成一個完全不同的文檔,比如HTML格式文檔。
//Create word document
Document document = new Document();
document.LoadFromFile(@"This is a Test Document.docx");
插入圖片
//Insert image
DocPicture picture=document.Sections[0].Paragraphs[0].AppendPicture(Image.FromFile(image.png);
插入表格
addTable(document.Sections[0]);
privatevoid addTable(Section section)
{
//create a table with border
Spire.Doc.Table table = section.AddTable(true );
String[] header = { "Column A", "Column B", "Column C" };
String[][] data ={
newString[]{"Value 1","V 1.1","V 1.2"} ,
newstring[]{"Value 2","V 2.1","V 2.2"}
};
table.ResetCells(data.Length + 1, header.Length);
TableRow Frow = table.Rows[0];
Frow.IsHeader = true;
Frow.Height = 15; //unit: point, 1point = 0.3528 mm
for (int i = 0; i < header.Length; i++)
{
Frow.Cells[i].CellFormat.BackColor = Color.FromArgb(142, 91, 155, 213);
Frow.Cells[i].CellFormat.VerticalAlignment = VerticalAlignment.Middle;
Paragraph p = Frow.Cells[i].AddParagraph();
p.Format.HorizontalAlignment = Spire.Doc.Documents.HorizontalAlignment.Left;
TextRange txtRange = p.AppendText(header[i]);
txtRange.CharacterFormat.Bold = true;
}
for (int r = 0; r < data.Length; r++)
{
TableRow dataRow = table.Rows[r + 1];
dataRow.Height = 15;
dataRow.HeightType = TableRowHeightType.Exactly;
dataRow.RowFormat.BackColor = Color.Empty;
for (int c = 0; c < data[r].Length; c++)
{
if (r % 2 == 0)
dataRow.Cells1.CellFormat.BackColor = Color.FromArgb(137, 222, 230, 246);
dataRow.Cells1.CellFormat.VerticalAlignment = VerticalAlignment.Middle;
dataRow.Cells1.AddParagraph().AppendText(data[r]1);
}
}
}
轉化成HTML文檔
//將文件轉化成HTML文檔
document.SaveToFile("Test.html", FileFormat.Html);
所以,現在我們已經有了准備轉換的文檔可以使用。我們來看看在這背後發生了什麼。你可以看到產生了一個新的HTML文檔,還有額外的文件和文件夾。這些文件和文件夾都不過是用於保留原word文檔中存在的額外信息用的。在這一范例中,文件夾中包含了原有文檔中我們添加的那張測試圖片,而樣式表中所包含了表格的樣式定義。所以,這個轉換不僅轉換了數據,還盡力保證了類似樣式這些額外信息的完整性。
樣式表看起來是這樣的:
只是一個簡單參數的不同,就可以讓你可以把文檔轉換成另一種格式,比如下述的PDF。最另我滿意的是,所有這些都是基於一個框架,我們可以將文檔轉換成不同的格式而不需要額外的樣式和配置定義。而且請注意,所有這些都是在內存中完成的,因此你不需要額外的系統權限。我記得以前在一個項目中當我們想轉換時,為了導出PDF我們不得不將數據從一個組件傳到另一個,而且還不能在不同的文檔格式中保持相同的布局。
轉成PDF
//把文件轉化成PDF
document.SaveToFile("Test.Pdf", FileFormat.PDF);
只需很少的代碼你就得到了下面的PDF文檔。因為我使用的是試用版本所以有授權警告。當你使用正式版時,就沒有警告了。
轉換成XML
在FileFormat 類中顯示它最多支持24種文件格式。我自己最喜歡XML格式。它具有很好的擴展性,你可以在文檔中對數據做很多處理。比如,你可以使用word文檔創建一個來源於原始文件的XML文檔。
//Convert the file to Xml
document.SaveToFile("Test.Xml", FileFormat.Xml);
轉成圖片
那麼轉成圖片呢?Spire.Doc支持把文檔直接轉換成圖片,所有.net框架支持的圖片格式都可以。
//保存成圖片
Image image = document.SaveToImages(0, ImageType.Metafile);
image.Save("Test.tif", System.Drawing.Imaging.ImageFormat.Tiff);
總結
在轉換word文檔到其他任何格式文件方面,Spire.Doc 是一個功能非常強大,而且易於使用的產品。如果你也使用其報表功能,那就更好了。和其他第三方廠商一樣,通常有很多方法完成同一件事,但是你需要權衡購買或再使用的成本和產品帶來的方便。
從許可和定價上來說,與市場上其他類似產品相比,它並不是很貴。所以,在我看來這是一個非常劃算的花銷。