19. var userScoreTable= GetUserScoreDataTable(); 20. dataSet.Tables.Add(userTable); 21. dataSet.Tables.Add(userScoreTable); 22. dataSet.Relations.Add(new DataRelation(\ScoreListForUser\Id\UserId\23. //合并模版,相当于页面的渲染 24. doc.MailMerge.ExecuteWithRegions(dataSet); 25. var docStream = new MemoryStream(); 26. doc.Save(docStream, SaveOptions.CreateSaveOptions(SaveFormat.Doc)); 27. return base.File(docStream.ToArray(), \application/msword\Template.doc\7.模版上使用书签,插入标记位置
选中文档中的文字,在菜单的\插入→书签”指定书签的名称,排序依据选定为位置,添加一个新书签。选中的文字为书签的Text属性,这里是为了方便查看。也可以直接插入一个书签并指定位置,只是不明显。
8.在书签位置插入另一个文档的内容
1. //载入模板 2. var doc = new Document(tempPath); 3. var doc1 = new Document(tempPath1);//新文档 4. //找到名称为PositionFlag的书签 5. var bookmark= doc.Range.Bookmarks[\PositionFlag\6. //清空书签的文本 7. bookmark.Text = \8. //使用DocumentBuilder对象插入一些文档对象,如插入书签,插入文本框,插入复选框,插入一个段落,插入空白页,追加或另一个word文件的内容等。 9. var builder = new DocumentBuilder(doc); 10. //定位到指定位置进行插入操作 11. builder.MoveToBookmark(\PositionFlag\12. //在PositionFlag书签对应的位置,插入另一个文档的内容。 13. //InsertDocument方法可以在http://www.aspose.com/docs/display/wordsnet/How+to++Insert+a+Document+into+another+Document找到 14. InsertDocument(bookmark.BookmarkStart.ParentNode, doc1); 9.创建word模版,使用MergeFeild插入图片
10.插入图片示例
1. string tempPath = Server.MapPath(\~/Docs/Temp/Template.doc\2. string logoPath = Server.MapPath(\~/Content/logo.jpg\3. var doc = new Document(tempPath); //载入模板 4. //提供数据源 5. String[] fieldNames = new String[] { \logo\Gender\BirthDay\Address\Logo\6. Object[] fieldValues = new Object[] { \张三\男\1988-09-02\陕西咸阳\7. //增加处理图片大小程序 8. //doc.MailMerge.FieldMergingCallback = new HandleMergeFieldInsertDocument(); 9. //合并模版,相当于页面的渲染 10. doc.MailMerge.Execute(fieldNames, fieldValues); 11. 12. //在MVC中采用,保存文档到流中,使用base.File输出该文件 13. var docStream = new MemoryStream(); 14. doc.Save(docStream, SaveOptions.CreateSaveOptions(SaveFormat.Doc)); 15. return base.File(docStream.ToArray(), \application/msword\Template.doc\ 效果如下:
增加图片大小处理的程序
1. //Aspose.Word提供了一个类似Handler的功能,IFieldMergingCallback允许我们动态的处理MergeField 2. void IFieldMergingCallback.FieldMerging(FieldMergingArgs e){} //处理文本 3. void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs args){} //处理图片 4. //这里我们处理图片写了一个自定义的类实现 5. class HandleMergeFieldInsertDocument : IFieldMergingCallback 6. { 7. //文本处理在这里,如果写在这一块,则不起作用 8. void IFieldMergingCallback.FieldMerging(FieldMergingArgs e) 9. { 10. 11. } 12. //图片处理在这里 13. void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs args) 14. { 15. if (args.DocumentFieldName.Equals(\Logo\16. { 17. // 使用DocumentBuilder处理图片的大小 18. DocumentBuilder builder = new DocumentBuilder(args.Document); 19. builder.MoveToMergeField(args.FieldName); 20. 21. Shape shape = builder.InsertImage(args.FieldValue.ToString()); 22. 23. // 设置x,y坐标和高宽. 24. shape.Left = 0; 25. shape.Top = 0; 26. shape.Width = 60; 27. shape.Height = 80; 28. } 29. } 30. }

