针对非单据的图片以及与单据没有关联的图片,可以通过二开数据包实现图片写入到套打数据包中(参考增加套打自定义字段)
第一步,配置对应的套打模板。
针对文本字段和数据表格单元格字段,我们支持动态字段或者GetValue()函数取对应的动态字段值,但是针对图片控件在界面上没有这样的配置,我们可以通过套打模板导出进行套打元数据修改。
对图片字段的其他属性配置后,导出套打模板,修改模板上的字段标识,并重新导入
第二步,表单插件实现
注意,这里配置的DataSourceId也就是图片控件的数据源标识,对应的自定义属性标识与模板上设置的一致。
第三步,验证效果:
public override void OnPrepareNotePrintData(PreparePrintDataEventArgs e)
{
base.OnPrepareNotePrintData(e);
if (!e.DataSourceId.EqualsIgnoreCase(TargetEntity))
return;
var objectType = e.DynamicObjectType;
//针对套打注册新的图片字段属性,注意类型为byte[]
if (!objectType.Properties.ContainsKey(PictureKey))
objectType.RegisterProperty(PictureKey, typeof (byte[]));
int idx = 0;
foreach (var srcObj in e.DataObjects)
{
//复制新的数据包
var newObj = new DynamicObject(objectType);
foreach (var prop in srcObj.DynamicObjectType.Properties)
{
newObj[prop] = srcObj[prop];
}
//对新的数据包填入图片字段
newObj[PictureKey] = LoadImage();
e.DataObjects[idx++] = newObj;
}
}
/// <summary>
/// 用户自实现图片加载逻辑
/// </summary>
/// <returns></returns>
private byte[] LoadImage()
{
using (System.Drawing.Image image = Image.FromFile(@"D:\1.jpg"))
{
using (MemoryStream memoryStream = new MemoryStream())
{
image.Save(memoryStream, ImageFormat.Jpeg);
return memoryStream.ToArray();
}
}
}