Aspose Word模板使用總結
阿新 • • 發佈:2018-01-17
姓名 屬性 height emp username 文本框 equals idt users
Aspose Word模板使用總結
命名空間:
- using Aspose.Words;
- using Aspose.Words.Saving;
- using System.IO;
- using System.Data;
添加dll:
鏈接:http://pan.baidu.com/s/1pJG899T 密碼:bv3k
1.創建word模版,使用MergeFeild綁定數據
新建一個Word文檔,命名為Template.doc
註意:這裏並不是輸入"《”和“》”就可以了,而是必須在菜單的"插入→文檔部件→域”找到MergeField並輸入相應的域名
2.使用數組提供數據源
- string tempPath = Server.MapPath("~/Docs/Temp/Template.doc");
- string outputPath = Server.MapPath("~/Docs/Output/Template.doc");
- //載入模板
- var doc = new Document(tempPath);
- //提供數據源
- String[] fieldNames = new String[] {"UserName", "Gender", "BirthDay", "Address"};
- Object[] fieldValues = new Object[] {"張三", "男", "1988-09-02", "陜西鹹陽"};
- //合並模版,相當於頁面的渲染
- doc.MailMerge.Execute(fieldNames, fieldValues);
- //保存合並後的文檔
- doc.Save(outputPath);
- //在WebForm中,保存文檔到流中,使用Response.?BinaryWrite輸出該文件
- var docStream = new MemoryStream();
- doc.Save(docStream, SaveOptions.CreateSaveOptions(SaveFormat.Doc));
- Response.ContentType = "application/msword";
- Response.AddHeader("content-disposition", "attachment; filename=Template.doc");
- Response.BinaryWrite(docStream.ToArray());
- Response.End();
- //在MVC中采用,保存文檔到流中,使用base.File輸出該文件
- var docStream = new MemoryStream();
- doc.Save(docStream, SaveOptions.CreateSaveOptions(SaveFormat.Doc));
- return base.File(docStream.ToArray(), "application/msword","Template.doc");
3.創建循環數據的模版,這裏的循環數據類似頁面的for結構,不拘泥於形式table
?TableStart:UserList?
姓名:?UserName?
?TableEnd:UserList?
4.使用DataTable提供數據源
- //創建名稱為UserList的DataTable
- DataTable table=new DataTable("UserList");
- table.Columns.Add("UserName");
- table.Columns.Add("Gender");
- table.Columns.Add("BirthDay");
- table.Columns.Add("Address");
- //----------------------------------------------------------------------------------------------------
- //載入模板
- var doc = new Document(tempPath);
- //提供數據源
- var datatable= GetDataTable();
- //合並模版,相當於頁面的渲染
- doc.MailMerge.ExecuteWithRegions(datatable);
- var docStream = new MemoryStream();
- doc.Save(docStream, SaveOptions.CreateSaveOptions(SaveFormat.Doc));
- return base.File(docStream.ToArray(), "application/msword","Template.doc");
5.綁定帶有子循環數據模版
6.使用DataSet提供數據源
- //用戶表結構
- DataTable table = new DataTable("UserList");
- table.Columns.Add(new DataColumn("Id", typeof(int)));
- table.Columns.Add("UserName");
- table.Columns.Add("Gender");
- table.Columns.Add("BirthDay");
- table.Columns.Add("Address");
- //分數表結構
- DataTable table = new DataTable("ScoreList");
- table.Columns.Add(new DataColumn("UserId", typeof(int)));
- table.Columns.Add("Name");
- table.Columns.Add("Score");
- //----------------------------------------------------------------------------------------------------
- //載入模板
- var doc = new Document(tempPath);
- //提供數據源
- DataSet dataSet = new DataSet();
- var userTable= GetUserDataTable();
- var userScoreTable= GetUserScoreDataTable();
- dataSet.Tables.Add(userTable);
- dataSet.Tables.Add(userScoreTable);
- dataSet.Relations.Add(new DataRelation("ScoreListForUser",userTable.Columns["Id"],?userScoreTable.Columns["UserId"]));
- //合並模版,相當於頁面的渲染
- doc.MailMerge.ExecuteWithRegions(dataSet);
- var docStream = new MemoryStream();
- doc.Save(docStream, SaveOptions.CreateSaveOptions(SaveFormat.Doc));
- return base.File(docStream.ToArray(), "application/msword","Template.doc");
7.模版上使用書簽,插入標記位置
選中文檔中的文字,在菜單的"插入→書簽”指定書簽的名稱,排序依據選定為位置,添加一個新書簽。選中的文字為書簽的Text屬性,這裏是為了方便查看。也可以直接插入一個書簽並指定位置,只是不明顯。
8.在書簽位置插入另一個文檔的內容
- //載入模板
- var doc = new Document(tempPath);
- var doc1 = new Document(tempPath1);//新文檔
- //找到名稱為PositionFlag的書簽
- var bookmark= doc.Range.Bookmarks["PositionFlag"];
- //清空書簽的文本
- bookmark.Text = "";
- //使用DocumentBuilder對象插入一些文檔對象,如插入書簽,插入文本框,插入復選框,插入一個段落,插入空白頁,追加或另一個word文件的內容等。
- var builder = new DocumentBuilder(doc);
- //定位到指定位置進行插入操作
- builder.MoveToBookmark("PositionFlag");
- //在PositionFlag書簽對應的位置,插入另一個文檔的內容。
- //InsertDocument方法可以在http://www.aspose.com/docs/display/wordsnet/How+to++Insert+a+Document+into+another+Document找到
- InsertDocument(bookmark.BookmarkStart.ParentNode, doc1);
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模板使用總結