背景: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 是一个功能很是强大,并且易于使用的产品。若是你也使用其报表功能,那就更好了。和其余第三方厂商同样,一般有不少方法完成同一件事,可是你须要权衡购买或再使用的成本和产品带来的方便。
从许可和订价上来讲,与市场上其余相似产品相比,它并非很贵。因此,在我看来这是一个很是划算的花销。