示例#1
0
        private void startHttpThread()
        {
            using (HttpListener listerner = new HttpListener())
            {
                listerner.AuthenticationSchemes = AuthenticationSchemes.Anonymous;//指定身份验证 Anonymous匿名访问
                listerner.Prefixes.Add("http://127.0.0.1:" + port + "/report/");

                listerner.Start();

                log.Info("WebServer Start Successed.......");
                PrinterControl printerControl = new PrinterControl();
                var            reportTemplate = string.Empty;
                while (true)
                {
                    //等待请求连接
                    //没有请求则GetContext处于阻塞状态

                    HttpListenerContext ctx = listerner.GetContext();
                    string callback         = string.Empty;
                    try
                    {
                        log.Info("开始处理请求…… ");
                        Uri url = ctx.Request.Url;
                        ctx.Response.StatusCode  = 200;//设置返回给客服端http状态代码
                        ctx.Response.ContentType = "application/json";
                        Dictionary <string, string> parm = getData(ctx);
                        if (parm.Count > 0)
                        {
                            var printUrl = parm["url"].ToString().Trim();
                            callback = parm["callback"].ToString().Trim();
                            log.Info(printUrl + ":   " + printUrl);
                            var postData = parm["postData"].ToString().Trim();
                            log.Info(postData + ":   " + postData);
                            var cookieStr = parm["cookieStr"].ToString().Trim();
                            log.Info(cookieStr + ":   " + cookieStr);
                            var printerParams = parm["printerParams"].ToString().Trim();
                            log.Info(printerParams + ":   " + printerParams);
                            var charset = parm["charset"].ToString().Trim();
                            log.Info(charset + ":   " + charset);
                            reportTemplate = parm["_report"].ToString().Trim();
                            log.Info(reportTemplate + ":   " + reportTemplate);
                            SetPrint(sysIniPath, reportTemplate);
                            PrinterSettings settings = new PrinterSettings();
                            //settings.DefaultPageSettings.PaperSize.Kind= System.Drawing.Printing.PaperKind.Custom;
                            //1.设置打印机名称
                            settings.PrinterName = INIHepler.INIGetStringValue(sysIniPath, reportTemplate, reportTemplate, null);
                            //2.设置打印机打印方向
                            settings.DefaultPageSettings.Landscape = Convert.ToBoolean(INIHepler.INIGetStringValue(sysIniPath, reportTemplate, "SetLandscape", null));
                            //3.设置纸张

                            //settings.DefaultPageSettings.PaperSize.PaperName = INIHepler.INIGetStringValue(sysIniPath, reportTemplate, "SetPaperName", null);


                            //纸张高度
                            var SetPaperHeight = INIHepler.INIGetStringValue(sysIniPath, reportTemplate, "SetPaperHeight", 0 + "");
                            //纸张宽度
                            var SetPaperWidth = INIHepler.INIGetStringValue(sysIniPath, reportTemplate, "SetPaperWidth", 0 + "");

                            PaperSize paperSize = new PaperSize(reportTemplate, Convert.ToInt32(SetPaperWidth), Convert.ToInt32(SetPaperHeight));
                            settings.DefaultPageSettings.PaperSize = paperSize;



                            //4下边距
                            var SetMarginsBottom = INIHepler.INIGetStringValue(sysIniPath, reportTemplate, "SetMarginsBottom", 0 + "");
                            //5上边距
                            var SetMarginsTop = INIHepler.INIGetStringValue(sysIniPath, reportTemplate, "SetMarginsTop", 0 + "");
                            //6左边距
                            var SetMarginsLeft = INIHepler.INIGetStringValue(sysIniPath, reportTemplate, "SetMarginsLeft", 0 + "");
                            //7右边距
                            var SetMarginsRight = INIHepler.INIGetStringValue(sysIniPath, reportTemplate, "SetMarginsRight", 0 + "");
                            //8------设置边距
                            Margins margins = new Margins();
                            margins.Bottom = Convert.ToInt32(SetMarginsBottom);
                            margins.Top    = Convert.ToInt32(SetMarginsTop);
                            margins.Left   = Convert.ToInt32(SetMarginsLeft);
                            margins.Right  = Convert.ToInt32(SetMarginsRight);
                            settings.DefaultPageSettings.Margins = margins;
                            var result = printerControl.SilentPrint(printUrl, postData, cookieStr, printerParams, charset, settings);
                            log.Info("本地打印服务调用打印操作:" + result);
                            using (StreamWriter writer = new StreamWriter(ctx.Response.OutputStream))
                            {
                                // writer.WriteLine(result);
                                writeJS(writer, result.ToString(), callback);
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        if (ctx != null)
                        {
                            ctx.Response.StatusCode = 500;//设置返回给客服端http状态代码
                            using (StreamWriter writer = new StreamWriter(ctx.Response.OutputStream))
                            {
                                writeJS(writer, "{status:'error',msg:'" + e.StackTrace + "'}", callback);
                                log.Info("调用本地打印服务出现异常" + e.StackTrace + "*******" + e.Message + "*******" + e.InnerException.StackTrace);
                            }
                        }
                    }
                }
            }
        }