【套打】表单插件中获取默认打印机原创
金蝶云社区-_Tmp
_Tmp
13人赞赏了该文章 1,448次浏览 未经作者许可,禁止转载编辑于2020年11月24日 18:42:49

<0>效果:

image.png


<1>实现,通过前端QueryPrinterInfo指令获取打印机信息

相关代码image.png

image.png

image.png

[Kingdee.BOS.Util.HotUpdate]

    [Description("获取打印机信息")]

    public class PrinterSamplePlugIn : AbstractListPlugIn

    {

        //超时时间

        private int timeoutMilliseconds = 10000;

        //默认打印机线程同步开关

        private ManualResetEvent manualEvent = new ManualResetEvent(false);

        //打印机查询信息结果

        private KDPrinterQueryInfoResult printerQueryInfoResult;

        //打印机查询信息请求

        private KDPrinterQueryInfoArg printerQueryInfoArg;


        private static readonly string QueryPrinterInfo = "QueryPrinterInfo";


        public override void CustomEvents(CustomEventsArgs e)

        {

            if (e == null)

                return;

            if (e.EventName == QueryPrinterInfo)

            {

                try

                {

                    KDPrinterQueryInfoResult result = JSONObject.Parse(e.EventArgs).ConvertToObject<KDPrinterQueryInfoResult>();

                    //命令区分

                    if (result.JobId == printerQueryInfoArg.JobId)

                        printerQueryInfoResult = result;

                }

                catch

                {

                    //代码跑到这个位置代表着转换失败,考虑是否插件没有升级,打印服务有没有升级的兼容

                }

                finally

                {

                    manualEvent.Set();

                }

            }

        }


        public override void BarItemClick(BarItemClickEventArgs e)

        {

            if (e.BarItemKey.EqualsIgnoreCase("GetDefPrinter"))

                if (printerQueryInfoArg != null)

                {

                    return;

                }

            manualEvent.Reset();

            printerQueryInfoResult = null;

            printerQueryInfoArg = new KDPrinterQueryInfoArg()

            {

                IsDialog = false,

                IsDefaultInfo = true,

                IncludeAll = false,

                JobId = Guid.NewGuid().ToString(),

                PrintAddress = string.Empty,

            };

            this.View.AddAction(QueryPrinterInfo, printerQueryInfoArg);

            this.View.ShowProcessForm((x) =>

            {

                var result = GetPrinterResult();

                this.View.ShowOperateResult(result);

                printerQueryInfoResult = null;

                printerQueryInfoArg = null;

            }, "获取默认打印机配置...");

            MainWorker.QuequeTask(this.View.Context, () =>

            {

                try

                {

                    System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1));

                    manualEvent.WaitOne(timeoutMilliseconds);

                }

                catch (Exception ex)

                {


                }

                finally

                {

                    if (this.View != null)

                        this.View.Session["ProcessRateValue"] = 100;

                }

            }, (T) => { });

        }


        private OperateResultCollection GetPrinterResult()

        {

            if (printerQueryInfoResult == null)

            {

                OperateResult nullResult = new OperateResult()

                {

                    Name = "获取打印机配置",

                    MessageType = MessageType.FatalError,

                    SuccessStatus = false,

                    Message = "获取打印机配置",

                };

                return new OperateResultCollection() { nullResult };

            }

            OperateResultCollection collection = new OperateResultCollection();

            OperateResult successResult = new OperateResult()

            {

                Name = "获取打印机配置",

                MessageType = MessageType.Normal,

                SuccessStatus = true,

                Message = "获取打印机配置成功",

            };

            collection.Add(successResult);

            var defaultPrinter = printerQueryInfoResult.Printer;

            if (defaultPrinter == null)

                return collection;

            //输出部分常规打印机信息

            foreach (var prop in defaultPrinter.GetType().GetProperties())

            {

                if (!prop.CanRead)

                    continue;

                OperateResult propResult = new OperateResult()

                {

                    Name = prop.Name,

                    MessageType = MessageType.Normal,

                    SuccessStatus = true,

                    Message = ObjectUtils.Object2String(prop.GetValue(defaultPrinter, null)),

                };

                collection.Add(propResult);

            }

            return collection;

        }

    }


图标赞 13
13人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0