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


    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
    <stringstring> 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, 
    falsefalse);
                    
    while (document.GetText().IndexOf(rd.Key) != -1)
                        document.Replace(rd.Key, rd.Value, 
    falsefalse);
                }
                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 == nullthrow new ArgumentNullException("document");
                
    if (bookmarkName == nullthrow new ArgumentNullException("bookmarkName");
                
    if (data == nullthrow new ArgumentNullException("data");
                
    if (data.Columns.Count < 1throw 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;
            }
  • 相关阅读:
    SpringCloud高可用和高并发
    时间重要性,我们需要如何利用极致
    Spring是什么 包括SpringBean SpringMVC SpringBoot SpringCloud
    Java 线程的基本使用
    JVM 内存模型
    Java 8 ArrayList 详解
    Java 8 HashMap 源码解析
    Docker 运行 MySQL,使用 docker-compose
    Spring Boot 主从读写分离
    Spring Boot 整合 MyBatis 实现乐观锁和悲观锁
  • 原文地址:https://www.cnblogs.com/Chinasf/p/1663398.html
Copyright © 2020-2023  润新知