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靈活處理各種需求,后邊會繼續嘗試根據條件加載不同的模版
示例下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM