背景:html
本文試圖證實和審查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 來拯救開發人員的緣由。c++
文檔轉換:web
我將在文章的其他部分來介紹Spire.Doc能夠適用的多種場景。文中展現的全部例子都可以在 Spire.Doc 的DEMO中找到,你能夠很容易地下載並使用它們。個人例子是一個簡單的控制檯程序,固然它也支持其餘平臺,如web項目或者Silverlight項目等。服務器
用他們本身的話來講,Spire.Doc 宣稱:"Spire.Doc for .NET 能夠將word文件轉換成最多見和流行的格式。" 框架
爲了開始使用Spire.Doc,你首先須要添加Spire.Doc,Spire.License 和 Spire.Pdf引用到你的項目中,這兩個組件是打包在Spire.Doc中的.ide
你須要一個有效的 Spire.Doc受權文件才能使用這個類庫,不然它將在文檔中顯示"評估版本"警告。設置受權很是簡單,只要設置授件位置,類庫就會自動完成驗證等工做。還有其餘的方法來加載受權文件,好比動態指定或將其加入到資源文件中。詳細的文檔能夠參考這裏。. 佈局
FileInfo licenseFile = new FileInfo(@"C:\ManasBhardwaj\license.lic"); 測試
Spire.License.LicenseProvider.SetLicenseFile(licenseFile); spa
爲了驗證基本的功能,我使用了一個word文檔包含簡單文字、一張圖片和一個表格。以下圖所示,你也能夠在Demo中找到。 .net
類庫的核心固然是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 是一個功能很是強大,並且易於使用的產品。若是你也使用其報表功能,那就更好了。和其餘第三方廠商同樣,一般有不少方法完成同一件事,可是你須要權衡購買或再使用的成本和產品帶來的方便。
從許可和訂價上來講,與市場上其餘相似產品相比,它並非很貴。因此,在我看來這是一個很是划算的花銷。