• Aspose Word模版使用总结篇2带示例


    Aspose Word模版使用总结篇2带示例

    9.创建word模版,使用MergeFeild插入图片
    10.插入图片示例
      string tempPath = Server.MapPath("~/Docs/Temp/Template.doc");
      string logoPath = Server.MapPath("~/Content/logo.jpg");
      var doc = new Document(tempPath); //载入模板
       //提供数据源
       String[] fieldNames = new String[] { "logo", "Gender", "BirthDay", "Address","Logo" };
       Object[] fieldValues = new Object[] { "张三", "男", "1988-09-02", "陕西咸阳",logoPath };
       //增加处理图片大小程序
       //doc.MailMerge.FieldMergingCallback = new HandleMergeFieldInsertDocument();
       //合并模版,相当于页面的渲染
        doc.MailMerge.Execute(fieldNames, fieldValues);
     
       //在MVC中采用,保存文档到流中,使用base.File输出该文件
       var docStream = new MemoryStream();
       doc.Save(docStream, SaveOptions.CreateSaveOptions(SaveFormat.Doc));
       return base.File(docStream.ToArray(), "application/msword", "Template.doc");
      效果如下:
      
     增加图片大小处理的程序
    Aspose.Word提供了一个类似Handler的功能,IFieldMergingCallback允许我们动态的处理MergeField
     void IFieldMergingCallback.FieldMerging(FieldMergingArgs e){} //处理文本
     void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs args){} //处理图片
    这里我们处理图片写了一个自定义的类实现
     class HandleMergeFieldInsertDocument : IFieldMergingCallback
        {
            //文本处理在这里,如果写在这一块,则不起作用
            void IFieldMergingCallback.FieldMerging(FieldMergingArgs e)
            {
                
            }
            //图片处理在这里
            void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs args)
            {
                if (args.DocumentFieldName.Equals("Logo"))
                {
                    // 使用DocumentBuilder处理图片的大小
                    DocumentBuilder builder = new DocumentBuilder(args.Document);
                    builder.MoveToMergeField(args.FieldName);
                    
                    Shape shape = builder.InsertImage(args.FieldValue.ToString());
     
                    // 设置x,y坐标和高宽.
                    shape.Left = 0;
                    shape.Top = 0;
                    shape.Width = 60;
                    shape.Height = 80;
                }
            }
        }
    效果如下:
    11.向模版插入Html
    这里的家乡简介使用html格式
    12.插入html示例
     string tempPath = Server.MapPath("~/Docs/Temp/Template.doc");
     string descHtml = "";//这里是html文本,由于太长略去
     var doc = new Document(tempPath); //载入模板
     //提供数据源
     String[] fieldNames = new String[] { "UserName", "Gender", "BirthDay", "Address","Desc"};
     Object[] fieldValues = new Object[] { "张三", "男", "1988-09-02", "陕西咸阳", descHtml};
     //增加处理html程序
     doc.MailMerge.FieldMergingCallback = new HandleMergeFieldInsertHtml();
     //合并模版,相当于页面的渲染
     doc.MailMerge.Execute(fieldNames, fieldValues);
     //在MVC中采用,保存文档到流中,使用base.File输出该文件
     var docStream = new MemoryStream();
      doc.Save(docStream, SaveOptions.CreateSaveOptions(SaveFormat.Doc));
      return base.File(docStream.ToArray(), "application/msword", "Template.doc");
    如果不增加html的处理程序,默认以文本的输出,这里我们写一个自定义的处理类
     class HandleMergeFieldInsertHtml : IFieldMergingCallback
        {
            //文本处理在这里
            void IFieldMergingCallback.FieldMerging(FieldMergingArgs e)
            {
                if (e.DocumentFieldName.Equals("Desc"))
                {
                    // 使用DocumentBuilder处理图片的大小
                    DocumentBuilder builder = new DocumentBuilder(e.Document);
                    builder.MoveToMergeField(e.FieldName);
                    builder.InsertHtml(e.FieldValue.ToString());
                }
            }
            //图片处理在这里
            void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs args)
            {
               
            }
        }
    IFieldMergingCallback在循环结构中同样适用
    小结:利用书签加上标志位,利用自定义的IFieldMergingCallback灵活处理各种需求,后边会继续尝试根据条件加载不同的模版
    示例下载
     
     
  • 相关阅读:
    git ——visual studio code 工具之 Git Graph & git clone & git checkout
    docker中添加redis & 在程序中应用
    Configuring Redis for ASP.NET Core Session Store(转载)
    Configuring Redis Session State In ASP.NET Core(转载)
    http请求端口占用异常——处理思路
    在pods中添加有关httpclient的 压力测试 & 监控
    Singleton HttpClient? Beware of this serious behaviour and how to fix it
    HttpClient 之 CLOSE_WAIT
    HttpClient的使用
    HttpClient连接池之CLOSE_WAIT
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3100054.html
Copyright © 2020-2023  润新知