ImageFieldMergingArgs
内容
[
隐藏
]ImageFieldMergingArgs class
提供数据ImageFieldMerging
事件.
要了解更多信息,请访问邮件合并和报告文档文章。
public class ImageFieldMergingArgs : FieldMergingArgsBase
特性
姓名 | 描述 |
---|---|
Document { get; } | 返回Document 执行邮件合并的对象。 |
DocumentFieldName { get; } | 获取文档中指定的合并字段的名称。 |
Field { get; } | 获取表示当前合并字段的对象。 |
FieldName { get; } | 获取数据源中合并字段的名称。 |
FieldValue { get; set; } | 从数据源获取或设置字段的值。 |
Image { get; set; } | 指定邮件合并引擎必须插入到文档中的图像。 |
ImageFileName { get; set; } | 设置邮件合并引擎必须插入到文档中的图像的文件名。 |
ImageHeight { get; set; } | 指定要插入到文档中的图像的图像高度。 |
ImageStream { get; set; } | 指定邮件合并引擎从中读取图像的流。 |
ImageWidth { get; set; } | 指定要插入到文档中的图像的图像宽度。 |
RecordIndex { get; } | 获取正在合并的记录的从零开始的索引。 |
Shape { get; set; } | 指定邮件合并引擎必须插入到文档中的形状。 |
TableName { get; } | 获取当前合并操作的数据表的名称,如果名称不可用,则获取空字符串。 |
评论
当文档中遇到图像邮件 merge 字段时,在邮件合并期间会发生此事件。您可以响应此事件以返回 a 文件名、流或Image对象到邮件 merge 引擎,以便将其插入到文档中。
共有三个属性可供选择ImageFileName
, ImageStream
和Image
指定必须从何处获取图像。 仅设置这些属性之一。
要将图像邮件合并字段插入到 Word 文档中,请选择“插入/字段”命令 ,然后选择“合并字段”并键入“Image:MyFieldName”。
例子
演示如何将存储在数据库 BLOB 字段中的图像插入到报表中。
public void ImageFromBlob()
{
Document doc = new Document(MyDir + "Mail merge destination - Northwind employees.docx");
doc.MailMerge.FieldMergingCallback = new HandleMergeImageFieldFromBlob();
string connString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={DatabaseDir + "Northwind.accdb"};";
string query = "SELECT FirstName, LastName, Title, Address, City, Region, Country, PhotoBLOB FROM Employees";
using (OleDbConnection conn = new OleDbConnection(connString))
{
conn.Open();
// 打开数据读取器,需要处于一次读取所有记录的模式。
OleDbCommand cmd = new OleDbCommand(query, conn);
IDataReader dataReader = cmd.ExecuteReader();
doc.MailMerge.ExecuteWithRegions(dataReader, "Employees");
}
doc.Save(ArtifactsDir + "MailMergeEvent.ImageFromBlob.docx");
}
private class HandleMergeImageFieldFromBlob : IFieldMergingCallback
{
void IFieldMergingCallback.FieldMerging(FieldMergingArgs args)
{
// 没做什么。
}
/// <summary>
/// 当邮件合并在文档中遇到名称中包含“Image:”标记的 MERGEFIELD 时,将调用此函数。
/// </summary>
void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs e)
{
MemoryStream imageStream = new MemoryStream((byte[])e.FieldValue);
e.ImageStream = imageStream;
}
}
展示如何在 MERGEFIELDS 在邮件合并期间接受图像时设置图像尺寸。
public void MergeFieldImageDimension()
{
Document doc = new Document();
// 插入一个 MERGEFIELD,它将在邮件合并期间接受来自源的图像。使用字段代码来引用
// 数据源中的一列,包含我们希望在邮件合并中使用的图像的本地系统文件名。
DocumentBuilder builder = new DocumentBuilder(doc);
FieldMergeField field = (FieldMergeField)builder.InsertField("MERGEFIELD Image:ImageColumn");
// 数据源应该有一个名为“ImageColumn”的列。
Assert.AreEqual("Image:ImageColumn", field.FieldName);
// 创建合适的数据源。
DataTable dataTable = new DataTable("Images");
dataTable.Columns.Add(new DataColumn("ImageColumn"));
dataTable.Rows.Add(ImageDir + "Logo.jpg");
dataTable.Rows.Add(ImageDir + "Transparent background logo.png");
dataTable.Rows.Add(ImageDir + "Enhanced Windows MetaFile.emf");
// 配置回调以在合并时修改图像的大小,然后执行邮件合并。
doc.MailMerge.FieldMergingCallback = new MergedImageResizer(200, 200, MergeFieldImageDimensionUnit.Point);
doc.MailMerge.Execute(dataTable);
doc.UpdateFields();
doc.Save(ArtifactsDir + "Field.MERGEFIELD.ImageDimension.docx");
}
/// <summary>
/// 将所有邮件合并图像的大小设置为一个定义的宽度和高度。
/// </summary>
private class MergedImageResizer : IFieldMergingCallback
{
public MergedImageResizer(double imageWidth, double imageHeight, MergeFieldImageDimensionUnit unit)
{
mImageWidth = imageWidth;
mImageHeight = imageHeight;
mUnit = unit;
}
public void FieldMerging(FieldMergingArgs e)
{
throw new NotImplementedException();
}
public void ImageFieldMerging(ImageFieldMergingArgs args)
{
args.ImageFileName = args.FieldValue.ToString();
args.ImageWidth = new MergeFieldImageDimension(mImageWidth, mUnit);
args.ImageHeight = new MergeFieldImageDimension(mImageHeight, mUnit);
Assert.AreEqual(mImageWidth, args.ImageWidth.Value);
Assert.AreEqual(mUnit, args.ImageWidth.Unit);
Assert.AreEqual(mImageHeight, args.ImageHeight.Value);
Assert.AreEqual(mUnit, args.ImageHeight.Unit);
}
private readonly double mImageWidth;
private readonly double mImageHeight;
private readonly MergeFieldImageDimensionUnit mUnit;
}
也可以看看
- class FieldMergingArgsBase
- 命名空间 Aspose.Words.MailMerging
- 部件 Aspose.Words