好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

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

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

继上篇: Aspose Word模板使用总结

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灵活处理各种需求,后边会继续尝试根据条件加载不同的模版

示例下载

 

 

分类:  Aspose.Word

强大的二分查找法(Binary Search)

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于Aspose Word模版使用总结篇2带示例的详细内容...

  阅读:87次