WEB开发网
开发学院WEB开发ASP Syncfusion Essential DocIO操作word文件实用函数... 阅读

Syncfusion Essential DocIO操作word文件实用函数

 2010-02-05 10:46:11 来源:WEB开发网   
核心提示:Essential DocIO.NET库,能够读写Microsoft Word文件,Syncfusion Essential DocIO操作word文件实用函数,该组件是一个对象模型,同Microsoft Office COM类库相似,转换:支持使用Essential PDF将MS Word文档转换为PDF,高级特性:
Essential DocIO

.NET库,能够读写Microsoft Word文件。该组件是一个对象模型,同Microsoft Office COM类库相似,它不采用COM interop,以C#编写。如果系统内没有安装Microsoft Word,可以考虑该组件。

创建新的MS Word文档:支持创建包含文本、图片、图表、页面和页脚的MS Word文档。

文档格式化:支持格式化为通用的MS Word 报告。

文档生成基于模板:基于模板生成文档,可以使用MS Word GUI设计文档报告,然后使用DocIO向模板文件内动态填充数据。

文档属性:读写Word文档的属性设置。

转换:支持使用Essential PDF将MS Word文档转换为PDF。

高级特性:支持复制和合并多个MS Word文档为单个文档。
转换HTML到word
    public static byte[] ConvertHtmlToDoc(string html)
    {
      var document = new WordDocument();
      IWSection section = document.AddSection();
      IWParagraph para = section.AddParagraph();
      
      string errorMessage = "";
      bool valid = section.Body.IsValidXHTML(html, XHTMLValidationType.Strict, out errorMessage);
      if (!valid)
        throw new InvalidCastException(errorMessage + "<hr>" + html) ;
      document.XHTMLValidateOption = XHTMLValidationType.Strict;
      section.Body.InsertXHTML(html);
      var outMem = new MemoryStream();

      document.Save(outMem, FormatType.Doc);
      outMem.Seek(0, SeekOrigin.Begin);
      var content = new byte[outMem.Length];
      outMem.Read(content, 0, content.Length);
      outMem.Dispose();
      document.Close();
      return content;
    }


生成Word的时候替换指定的文字
    /// <summary>
    /// 生成Word的时候替换指定的文字
    /// </summary>
    /// <param name="templatePath"></param>
    /// <param name="FileName"></param>
    /// <param name="replaysDictionary"></param>
    public static void ReplaceDocContent(string templateFileName, string newFileName,
                       Dictionary<string, string> replaysDictionary)
    {
      IWordDocument document = new WordDocument();
      document.Open(templateFileName, FormatType.Doc);
      foreach (var rd in replaysDictionary)
      {
        if (string.IsNullOrEmpty(document.GetText())) continue;

        document.Replace(rd.Key, rd.Value, false, false);
        while (document.GetText().IndexOf(rd.Key) != -1)
          document.Replace(rd.Key, rd.Value, false, false);
      }
      document.Save(newFileName, FormatType.Doc);
    }


给文档加密码保护
    public static Stream SetDocPRotect(byte[] docContent, string key)
    {
      var mem = new MemoryStream(docContent);
      mem.Seek(0, SeekOrigin.Begin);

      IWordDocument document = new WordDocument(mem, FormatType.Automatic);
      document.Protect(ProtectionType.AllowOnlyFormFields, key);
      var outMem = new MemoryStream();
      document.Save(outMem, FormatType.Doc);
      outMem.Seek(0, SeekOrigin.Begin);
      return outMem;
    }


在书签位置创建一个表格
    public static IWTable ReplaceTable(WordDocument document, string bookmarkName, DataTable data, string mergeColName , List<List<string>> mutilTableCaption)
    {
      if (document == null) throw new ArgumentNullException("document");
      if (bookmarkName == null) throw new ArgumentNullException("bookmarkName");
      if (data == null) throw new ArgumentNullException("data");
      if (data.Columns.Count < 1) throw new ArgumentNullException("data");
      
      int captionCount = mutilTableCaption != null && mutilTableCaption.Count > 0 ? mutilTableCaption.Count : 1;
      WTable table = new WTable(document, true);

      table.ResetCells(data.Rows.Count + captionCount, data.Columns.Count);

      for (var colCount = 0; colCount < captionCount; colCount++)
      {
        for (var col = 0; col < data.Columns.Count; col++)
        {
          var paragraph = table.Rows[colCount].Cells[col].AddParagraph();

          var caption = data.Columns[col].ColumnName;
          if (mutilTableCaption != null && mutilTableCaption.Count > 0)
            caption = mutilTableCaption[colCount][col];
          var text = paragraph.AppendText(caption);
          paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center;
          text.CharacterFormat.FontName = "宋体";
          text.CharacterFormat.Bold = false;
          text.CharacterFormat.FontSize = 10.5f;
        }
      }

      for (var row = captionCount; row <= data.Rows.Count; row++)
        for (var col = 0; col < data.Columns.Count; col++)
        {
          var paragraph = table.Rows[row].Cells[col].AddParagraph();
          var text = paragraph.AppendText(data.Rows[row - captionCount][col] + "");

          text.CharacterFormat.FontName = "宋体";
          text.CharacterFormat.FontSize = 9f;
          double val = 0;
          if (double.TryParse(text.Text, out val))
          {
            text.Text = Math.Round(val, 2) + "";
            //align right
            paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Right;
            table.Rows[row].Cells[col].CellFormat.VerticalAlignment = VerticalAlignment.Middle;
            table.Rows[row].Cells[col].CellFormat.TextWrap = false;
          }
        }
      //合并单元格,向下合并
      if (!string.IsNullOrEmpty(mergeColName))
        for (var row = captionCount; row < table.Rows.Count; row++)
        {
          var cell = table.Rows[row].Cells[data.Columns[mergeColName].Ordinal];
          cell.CellFormat.VerticalMerge = CellMerge.Start;
          var text = data.Rows[row - captionCount][mergeColName] + "";
          if (row > captionCount)
          {
            var priorCell = table.Rows[row - captionCount].Cells[data.Columns[mergeColName].Ordinal];
            var findText = data.Rows[row - captionCount - 1][mergeColName] + "";
            if (text.Equals(findText))
              cell.CellFormat.VerticalMerge = CellMerge.Continue;
          }
        }

      BookmarksNavigator bk = new BookmarksNavigator(document);
      bk.MoveToBookmark(bookmarkName);

      TextBodyPart body= bk.GetBookmarkContent();
      bk.DeleteBookmarkContent(true);

      bk.InsertTable(table);
      return table;
    }

Tags:Syncfusion Essential DocIO

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接