zoukankan      html  css  js  c++  java
  • 【好文翻译】一步一步教你使用Spire.Doc转换Word文档格式

    背景:

    本文试图证明和审查Spire.Doc的格式转换能力。很长的一段时间里,为了操作文档,开发人员不得不在服务器上安装Office软件。首先,这是一个很糟糕的设计和实践。第二,微软从没打算把Office作为一个服务器组件,它也用来在服务器端解释和操作文档的。于是乎,产生了类似Spire.Doc这样的类库。当我们讨论这个问题时,值得一提的是 Office Open Xml. Office Open XML (也有非正式地称呼为 OOXML OpenXML) 是一种压缩的, 基于XML的文件格式,由微软开发,用于表现电子表格,展示图表,演示和文字处理等。在200511月,微软宣布作为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:ManasBhardwajlicense.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 是一个功能非常强大,而且易于使用的产品。如果你也使用其报表功能,那就更好了。和其他第三方厂商一样,通常有很多方法完成同一件事,但是你需要权衡购买或再使用的成本和产品带来的方便。

    从许可和定价上来说,与市场上其他类似产品相比,它并不是很贵。所以,在我看来这是一个非常划算的花销。

  • 相关阅读:
    C#修饰符
    Exploring jQuery .live() and .die()
    ASP.NET Session丢失问题原因及解决方案
    5个 PHP 安全措施(转)
    jQuery方法click() bind() live() delegate()区别
    高性能网站的十四条黄金法则(雅虎14条)
    计算机科学概论读书笔记系列——绪论
    进程、线程、应用程序域、托管代码、元数据等。
    互联网协议入门(转)
    js跨域访问问题
  • 原文地址:https://www.cnblogs.com/gc2013/p/3787798.html
Copyright © 2011-2022 走看看