万能报表打印时解析富文本控件的错误解决方法原创
金蝶云社区-许聪文
许聪文
7人赞赏了该文章 468次浏览 未经作者许可,禁止转载编辑于2020年06月24日 17:08:21

如题:格式文本控件绑定了单据的富文本控件,打印会出现乱码。解决方法为,绑定的时候选择htnl,绑定字段image.png绑定单据的富文本字段,然后还需要编写单据/列表代码:

如下:

  /// <summary>

        /// 准备打印万能报表模板单据数据

        /// </summary>

        /// <param name="e"></param>

        public override void OnPrepareDevPrintData(PreparePrintDevDataEventArgs e)

        {

            base.OnPrepareDevPrintData(e);

            /////对应的分录相同的标记

            Entity headentity = this.View.BusinessInfo.GetEntity("FBillHead");

            if (headentity == null)

                return;

            ////表格兼容处理

            if (!e.DataSource.Tables.Contains(headentity.TableName))

                return;

            //重建数据表字段,并修改类型

            DataTable dtEntity = e.DataSource.Tables[headentity.TableName];

            //字段1

            DataColumn myDataColum = new DataColumn();

            myDataColum.DataType = System.Type.GetType("System.String");

            myDataColum.ColumnName = "F_RichText1";

            dtEntity.Columns.Add(myDataColum);

            //字段2

            DataColumn myDataColum2 = new DataColumn();

            myDataColum2.DataType = System.Type.GetType("System.String");

            myDataColum2.ColumnName = "F_BZXXRichText1"; ;

            dtEntity.Columns.Add(myDataColum2);

            for (int i = 0; i < dtEntity.Rows.Count; i++)

            {

                //转换富文本成html

                byte[] aWrite = (byte[])dtEntity.Rows[i]["F_RichText"];//意见

                byte[] aWrite2 = (byte[])dtEntity.Rows[i]["F_BZXXRichText"];//说明

                if (!aWrite.IsNullOrEmpty())

                {

                    dtEntity.Rows[i]["F_RichText1"] = Encoding.UTF8.GetString(aWrite);//意见

                }

                if (!aWrite2.IsNullOrEmpty())

                {

                    dtEntity.Rows[i]["F_BZXXRichText1"] = Encoding.UTF8.GetString(aWrite2);//说明

                }

            }

            dtEntity.Columns.Remove("F_RichText");

            dtEntity.Columns.Remove("F_BZXXRichText");

            myDataColum.ColumnName = "F_RichText";

            myDataColum2.ColumnName = "F_BZXXRichText";

        }

就可以了,后续如有其他关于万能报表的解决方法,欢迎大家分享。

赞 7