您的位置:首页 > 编程语言 > ASP

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

2013-05-26 15:20 375 查看

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灵活处理各种需求,后边会继续尝试根据条件加载不同的模版
示例下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: