【套打】套打打印自定义图片原创
金蝶云社区-_Tmp
_Tmp
20人赞赏了该文章 3757次浏览 未经作者许可,禁止转载编辑于2020年07月23日 17:05:55

针对非单据的图片以及与单据没有关联的图片,可以通过二开数据包实现图片写入到套打数据包中(参考增加套打自定义字段

第一步,配置对应的套打模板。

针对文本字段和数据表格单元格字段,我们支持动态字段或者GetValue()函数取对应的动态字段值,但是针对图片控件在界面上没有这样的配置,我们可以通过套打模板导出进行套打元数据修改。

对图片字段的其他属性配置后,导出套打模板,修改模板上的字段标识,并重新导入

image.png


第二步,表单插件实现

image.png

注意,这里配置的DataSourceId也就是图片控件的数据源标识,对应的自定义属性标识与模板上设置的一致。


第三步,验证效果:

image.png


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();

                }

            }

        }


赞 20