凭证摘要包含低位非打印字符打印出错处理方案
金蝶云社区-天冥异
天冥异
2人赞赏了该文章 1004次浏览 未经作者许可,禁止转载编辑于2018年08月02日 20:24:17

凭证打印时候,如果凭证摘要里面引入了低位非打印字符,则会报打印失败,如下图所示:

凭证打印时候,如果凭证摘要里面引入了低位非打印字符,则会报打印失败,如下图所示:aaaa.png 
QQ1.png 

可以在套打插件里面处理一下,将凭证摘要信息里面的低位非打印字符过滤掉。
表单插件:

列表插件:

扩展下凭证,将插件挂上去:
QQ图片20180614173004.png 


将插件拷贝到website/bin下面,重启IIS, 重新打印预览,可以正常打印处理了:


  1. 表单插件:

  2. using System;

  3. using System.Collections.Generic;

  4. using System.Linq;

  5. using System.Text;

  6. using System.Threading.Tasks;

  7. using Kingdee.BOS.Core;

  8. using Kingdee.BOS.Core.Bill.PlugIn;

  9. using Kingdee.BOS.Core.List.PlugIn;

  10. using Kingdee.BOS.Core.QueryInvoke;

  11. using Kingdee.BOS.Core.SqlBuilder;

  12. using Kingdee.BOS;

  13. using Kingdee.BOS.Util;


  14. using Kingdee.BOS.Core.DynamicForm;

  15. using Kingdee.BOS.Core.DynamicForm.PlugIn;

  16. using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;

  17. using Kingdee.BOS.Core.Bill;

  18. using Kingdee.BOS.Core.Bill.PlugIn.Args;

  19. using Kingdee.BOS.Orm.DataEntity;

  20. using Kingdee.BOS.Orm.Metadata.DataEntity;

  21. using System.IO;

  22. using Kingdee.BOS.Core.Metadata.FieldElement;

  23. using Kingdee.BOS.Core.Metadata.EntityElement;

  24. using System.Data;

  25. using Kingdee.BOS.App.Data;

  26. using Kingdee.BOS.Core.Metadata;


  27. namespace TestPrintPlugin

  28. {

  29.     public class PZPrintPlugin : AbstractBillPlugIn

  30.     {

  31.         public override void OnPrepareNotePrintData(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.PreparePrintDataEventArgs e)

  32.         {

  33.             if (e.DataSourceId.Equals("FEntity", StringComparison.OrdinalIgnoreCase))

  34.             {

  35.                 //在原数据包基础上修改套打字段的值

  36.                 if (e.DataObjects != null)

  37.                 {

  38.                     foreach (DynamicObject obj in e.DataObjects)

  39.                     {

  40.                         //修改一般字段值

  41.                         if (obj.DynamicObjectType.Properties.ContainsKey("FEXPLANATION"))

  42.                         {

  43.                             string FEXPLANATION = obj["FEXPLANATION"] as string;

  44.                             FEXPLANATION = Utils.ReplaceLowOrderASCIICharacters(FEXPLANATION);

  45.                             obj["FEXPLANATION"] = FEXPLANATION;

  46.                         }

  47.                     }

  48.                 }


  49.             }


  50.             base.OnPrepareNotePrintData(e);

  51.         }

  52.     }


  53. }

复制代码

  1. 列表插件:

  2. using System;

  3. using System.Collections.Generic;

  4. using System.Linq;

  5. using System.Text;

  6. using System.Threading.Tasks;


  7. using Kingdee.BOS.Core.Bill.PlugIn;

  8. using Kingdee.BOS.Core.Metadata.FieldElement;

  9. using Kingdee.BOS.Orm.DataEntity;

  10. using Kingdee.BOS.Orm.Metadata.DataEntity;

  11. using Kingdee.BOS.Core.List.PlugIn;

  12. using Kingdee.BOS.ServiceHelper;

  13. using TestPrintPlugin;


  14. namespace TestListPrintPlugin

  15. {

  16.     public class PZListPrintPlugin : AbstractListPlugIn

  17.     {

  18.         public override void OnAfterPrint(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.AfterPrintEventArgs e)

  19.         {

  20.             base.OnAfterPrint(e);

  21.         }


  22.         public override void OnPrepareNotePrintData(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.PreparePrintDataEventArgs e)

  23.         {

  24.             if (e.DataSourceId.Equals("FEntity", StringComparison.OrdinalIgnoreCase))

  25.             {

  26.                 //在原数据包基础上修改套打字段的值

  27.                 if (e.DataObjects != null)

  28.                 {

  29.                     foreach (DynamicObject obj in e.DataObjects)

  30.                     {

  31.                         //修改一般字段值

  32.                         if (obj.DynamicObjectType.Properties.ContainsKey("FEXPLANATION"))

  33.                         {

  34.                             string FEXPLANATION = obj["FEXPLANATION"] as string;

  35.                             FEXPLANATION = Utils.ReplaceLowOrderASCIICharacters(FEXPLANATION);

  36.                             obj["FEXPLANATION"] = FEXPLANATION;

  37.                         }

  38.                     }

  39.                 }


  40.             }


  41.             base.OnPrepareNotePrintData(e);

  42.         }

  43.     }


  44. }


复制代码

  1. using System;

  2. using System.Collections.Generic;

  3. using System.Globalization;

  4. using System.Linq;

  5. using System.Text;

  6. using System.Threading.Tasks;


  7. namespace TestPrintPlugin

  8. {

  9.     public static class Utils

  10.     {

  11.         /// <summary>

  12.         /// 把一个字符串中的 低序位 ASCII 字符 替换成 &#x  字符

  13.         /// 转换  ASCII  0 - 8  -> � - 

  14.         /// 转换  ASCII 11 - 12 -> -

  15.         /// 转换  ASCII 14 - 31 ->  - 

  16.         /// </summary>

  17.         /// <param name="tmp"></param>

  18.         /// <returns></returns>

  19.         public static string ReplaceLowOrderASCIICharacters(string tmp)

  20.         {

  21.             StringBuilder info = new StringBuilder();

  22.             foreach (char cc in tmp)

  23.             {

  24.                 int ss = (int)cc;

  25.                 if (((ss >= 0) && (ss <= 8)) || ((ss >= 11) && (ss <= 12)) || ((ss >= 14) && (ss <= 32)))

  26.                 {


  27.                     //info.AppendFormat("&#x{0:X};", ss);

  28.                 }

  29.                 else

  30.                 {

  31.                     info.Append(cc);

  32.                 }

  33.             }

  34.             return info.ToString();

  35.         }


  36.     }

  37. }


复制代码


赞 2