diff --git a/1200Gxml心电图绘制/App.config b/1200Gxml心电图绘制/App.config index 480323a..6811c3c 100644 --- a/1200Gxml心电图绘制/App.config +++ b/1200Gxml心电图绘制/App.config @@ -1,23 +1,32 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1200Gxml心电图绘制/服务/ExampleServer.cs b/1200Gxml心电图绘制/服务/ExampleServer.cs index 5d7de9f..7321e79 100644 --- a/1200Gxml心电图绘制/服务/ExampleServer.cs +++ b/1200Gxml心电图绘制/服务/ExampleServer.cs @@ -11,8 +11,8 @@ using System.Reflection.Emit; using 心电图绘制; using Newtonsoft.Json; using 心电图绘制.Properties; -using 心电图绘制; using System.Drawing; +using Newtonsoft.Json.Linq; namespace _1200Gxml心电图绘制 { @@ -59,19 +59,72 @@ namespace _1200Gxml心电图绘制 //获取客户端传递的参数 // string data = request.Params == null ? "" : string.Join(";", request.Params.Select(x => x.Key + "=" + x.Value).ToArray()); string strMQName = string.Empty; - LogHelper.Info("接收到请求", ""); + //LogHelper.Info("接收到请求", ""); string data = ""; try { if (request != null && request.Params != null) { - - if (request.URL.Contains("printecg")) + //注意调整URL顺序 + if (request.URL.StartsWith(@"/printecg_image")) + { + JObject paramsObj = null; + string[] array = request.Params.Select(x => x.Value).ToArray(); + if (array.Length > 0 && !string.IsNullOrWhiteSpace(array[0])) + try + { + //LogHelper.Info("请求参数", array[0].Trim()); + paramsObj = JsonConvert.DeserializeObject(array[0].Trim()); + } + catch (Exception ex) { paramsObj = null; } + if (paramsObj != null) + { + if (paramsObj.ContainsKey("filepath") && + !string.IsNullOrWhiteSpace(paramsObj["filepath"] == null ? null : paramsObj["filepath"].ToString().Trim())) + { + try + { + Log("开始处理请求:" + paramsObj["regid"].ToString().Trim()); + print.GetEcgViewDataImage_img(paramsObj); + if (paramsObj["type"].ToString().Trim().Equals(@"1")) + { + data = print.imagebase; + } + else + { + data = print.filename; + } + Log("请求处理完成:" + paramsObj["regid"].ToString().Trim()); + try + { + if (false) + print.FlySubmit3(new PatientInfo() + { + regid = paramsObj["regid"].ToString().Trim(), + examid = paramsObj["examid"].ToString().Trim(), + diagContent = paramsObj["diagContent"] == null ? "" : paramsObj["diagContent"].ToString().Trim(), + orgid = paramsObj["orgid"] == null ? "" : paramsObj["orgid"].ToString().Trim(), + orgname = paramsObj["orgname"] == null ? "" : paramsObj["orgname"].ToString().Trim(), + doctorName = paramsObj["doctorName"] == null ? "" : paramsObj["doctorName"].ToString().Trim(), + isAbnormal = paramsObj["isAbnormal"] == null ? "" : paramsObj["isAbnormal"].ToString().Trim() + }); + } + catch (Exception ex) { } + } + catch (Exception ex) { data = "生成数据文件异常"; } + } + else + data = "心电数据为空"; + } + else + data = "解析数据不正确"; + } + else if (request.URL.StartsWith(@"/printecg")) { string[] array = request.Params.Select(x => x.Value).ToArray(); if (array.Length > 0) { - LogHelper.Info("请求参数", array[0]); + //LogHelper.Info("请求参数", array[0]); PatientInfo patientInfo = JsonConvert.DeserializeObject(array[0]); print.cBoxSpeed = cBoxSpeed; print.cBoxAmplitude = cBoxAmplitude; @@ -80,45 +133,58 @@ namespace _1200Gxml心电图绘制 if (patientInfo != null) { - if (!string.IsNullOrEmpty(patientInfo.filepath)) + if (!string.IsNullOrWhiteSpace(patientInfo.filepath)) { - Log("开始处理请求:" + patientInfo.regid); - Image image = null; - if (!string.IsNullOrEmpty(patientInfo.image)) + try { - image = UniversalFun.ConvertFromBase64String(patientInfo.image); - + Log("开始处理请求:" + patientInfo.regid); + Image image = null; + if (!string.IsNullOrWhiteSpace(patientInfo.image)) + { + image = UniversalFun.ConvertFromBase64String(patientInfo.image); + } + string ecgDataJsonStr = UniversalFun.GetTextFileContent(patientInfo.filepath); + print.GetEcgViewDataImage(image, "", patientInfo, patientInfo.type, ecgDataJsonStr); + if (patientInfo.type == 1) + { + data = print.imagebase; + } + else + { + data = print.filename; + } + Log("请求处理完成:" + patientInfo.regid); + try + { + if (false) + { + patientInfo.diagContent = patientInfo.diagContent == null ? "" : patientInfo.diagContent.Trim(); + patientInfo.orgid = patientInfo.orgid == null ? "" : patientInfo.orgid.Trim(); + patientInfo.orgname = patientInfo.orgname == null ? "" : patientInfo.orgname.Trim(); + patientInfo.doctorName = patientInfo.doctorName == null ? "" : patientInfo.doctorName.Trim(); + patientInfo.isAbnormal = patientInfo.isAbnormal == null ? "" : patientInfo.isAbnormal.Trim(); + print.FlySubmit3(patientInfo); + } + } + catch (Exception ex) { } } - string ecgDataJsonStr = UniversalFun.GetTextFileContent(patientInfo.filepath); - print.GetEcgViewDataImage(image, "", patientInfo, patientInfo.type, ecgDataJsonStr); - if (patientInfo.type == 1) - { - data = print.imagebase; - } - else - { - data = print.filename; - } - Log("请求处理完成:" + patientInfo.regid); + catch (Exception ex) { data = "生成数据文件异常"; } } else { data = "心电数据为空"; } - } else { data = "解析数据不正确"; } - } } else { - data = "非指定请求方法"; + data = "非指定请求方法"; } - } else { @@ -127,7 +193,7 @@ namespace _1200Gxml心电图绘制 } catch (Exception e) { - LogHelper.Info("OnPost Error:", e.Message); + //LogHelper.Info("OnPost Error:", e.Message); } //设置返回信息 string content = data; //string.Format("0000Successful!{0}", data); @@ -146,7 +212,7 @@ namespace _1200Gxml心电图绘制 public override void OnGet(HttpRequest request, HttpResponse response) { - LogHelper.Info("请求到接口", ""); + //LogHelper.Info("请求到接口", ""); //当文件不存在时应返回404状态码 string requestURL = request.URL; diff --git a/1200Gxml心电图绘制/服务/UniversalFun.cs b/1200Gxml心电图绘制/服务/UniversalFun.cs index 4570552..5e07ed2 100644 --- a/1200Gxml心电图绘制/服务/UniversalFun.cs +++ b/1200Gxml心电图绘制/服务/UniversalFun.cs @@ -62,11 +62,13 @@ namespace 心电图绘制 /// /// 图片转换成PDF /// + /// Margins默认值36 /// /// - public static void ConvertBitmapToPdf(Bitmap bitmap, string pdfPath) + public static void ConvertBitmapToPdf(Bitmap bitmap, string pdfPath, + float? width = null, float? height = null, + float? marginLeft = null, float? marginRight = null, float? marginTop = null, float? marginBottom = null) { - string directoryPath = Path.GetDirectoryName(pdfPath); if (directoryPath != null && !Directory.Exists(directoryPath)) { @@ -74,6 +76,8 @@ namespace 心电图绘制 } // 创建一个文档对象 Document document = new Document(); + if (marginLeft != null && marginRight != null && marginTop != null && marginBottom != null) + document.SetMargins(marginLeft.Value, marginRight.Value, marginTop.Value, marginBottom.Value); // 创建一个PdfWriter实例 PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(pdfPath, FileMode.Create)); @@ -81,7 +85,8 @@ namespace 心电图绘制 // 打开文档以便添加内容 document.Open(); // 设置页面尺寸与图像尺寸一致 - iTextSharp.text.Rectangle pageSize = new iTextSharp.text.Rectangle(bitmap.Width, bitmap.Height + 50); + iTextSharp.text.Rectangle pageSize = new iTextSharp.text.Rectangle(width != null ? width.Value : bitmap.Width, + height != null ? height.Value : (bitmap.Height + 50)); document.SetPageSize(pageSize); // 将Bitmap转换为iTextSharp的Image对象 iTextSharp.text.Image image = ConvertBitmapToImageSharp(bitmap); diff --git a/1200Gxml心电图绘制/服务/print.cs b/1200Gxml心电图绘制/服务/print.cs index b55de97..cfb6017 100644 --- a/1200Gxml心电图绘制/服务/print.cs +++ b/1200Gxml心电图绘制/服务/print.cs @@ -1,13 +1,17 @@ using _1200Gxml心电图绘制; using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Configuration; using System.Drawing; +using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.IO; using System.Linq; +using System.Net.Http; using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows.Forms; using 心电图绘制; @@ -75,6 +79,101 @@ namespace 心电图绘制 return quotients; } + /// + /// 获得心电诊断快照数据 + /// + public void GetEcgViewDataImage_img(JObject paramsObj) + { + try + { + Bitmap bmp = null; + Graphics gfx = null; + using (HttpClient client_web = new HttpClient(new HttpClientHandler + { + ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true + })) + { + byte[] imageData = client_web.GetByteArrayAsync(paramsObj["filepath"].ToString().Trim()).Result; + using (MemoryStream stream = new MemoryStream(imageData, false)) + { + using (bmp = new Bitmap(stream)) + { + bmp.SetResolution(_printDpi, _printDpi); + using (gfx = Graphics.FromImage(bmp)) + { + gfx.SmoothingMode = SmoothingMode.AntiAlias;//抗锯齿 + + Font font = new Font(@"微软雅黑", float.Parse(@"9.8")); + Brush brush = Brushes.Black; + PointF? point = null; + + //image + Image image = null; + if (paramsObj["image"] != null && !string.IsNullOrWhiteSpace(paramsObj["image"].ToString().Trim())) + { + try { image = UniversalFun.ConvertFromBase64String(paramsObj["image"].ToString().Trim()); } + catch (Exception ex) { image = null; } + } + if (true) + try + { + if (image == null) + { + point = new PointF(float.Parse(ConfigurationManager.AppSettings["printecg_image__doctorName_point"].Split(',')[0].Trim()), + float.Parse(ConfigurationManager.AppSettings["printecg_image__doctorName_point"].Split(',')[1].Trim())); + gfx.DrawString(paramsObj["doctorName"] == null ? "" : paramsObj["doctorName"].ToString().Trim(), font, brush, point.Value); + } + else + { + point = new PointF(float.Parse(ConfigurationManager.AppSettings["printecg_image__doctorNameImg_point"].Split(',')[0].Trim()), + float.Parse(ConfigurationManager.AppSettings["printecg_image__doctorNameImg_point"].Split(',')[1].Trim())); + using (Bitmap bmpSource = new Bitmap(image, 160, 80)) + { + bmpSource.SetResolution(_printDpi, _printDpi); + gfx.DrawImage(bmpSource, point.Value); + } + } + } + catch (Exception ex) { } + + //diagContent + string diagContent = paramsObj["diagContent"] == null ? "" : paramsObj["diagContent"].ToString().Trim(); + string[] diagArray = diagContent.Split(Environment.NewLine.ToCharArray()); + diagContent = string.Empty; + for (int i = 0; i < diagArray.Length; i++) diagContent += diagArray[i].Trim(); + int wrap = 0; + if (!int.TryParse(ConfigurationManager.AppSettings["printecg_image__diagContent_wrap"], out wrap)) + wrap = 0; + diagContent = stringWrap(diagContent, wrap); + point = new PointF(float.Parse(ConfigurationManager.AppSettings["printecg_image__diagContent_point"].Split(',')[0].Trim()), + float.Parse(ConfigurationManager.AppSettings["printecg_image__diagContent_point"].Split(',')[1].Trim())); + gfx.DrawString(diagContent, font, brush, point.Value); + + switch (paramsObj["type"].ToString().Trim()) + { + case "1"://返回base64 + imagebase = UniversalFun.ConvertToBase64String(bmp, ImageFormat.Jpeg); + break; + case "2"://生成pdf + string path = string.IsNullOrWhiteSpace(ConfigurationManager.AppSettings["path"]) ? Application.StartupPath : ConfigurationManager.AppSettings["path"].Trim(); + UniversalFun.ConvertBitmapToPdf(bmp, path + @"\" + paramsObj["examid"].ToString().Trim() + @"\" + paramsObj["examid"].ToString().Trim() + ".pdf", + bmp.Width + 4, bmp.Height + 4, 2, 0, 2, 0); + filename = @"/" + paramsObj["examid"].ToString().Trim() + @"/" + paramsObj["examid"].ToString().Trim() + ".pdf"; + break; + default: + break; + } + } + } + } + } + } + catch (Exception ex) + { + throw ex; + } + } + /// /// 获得心电诊断快照数据 /// @@ -350,7 +449,6 @@ namespace 心电图绘制 return submitInfoToFLY6(FER); } - /// /// 提交诊断结论到福乐云 /// @@ -362,5 +460,18 @@ namespace 心电图绘制 string resultStr = commonOptions.PostByParas(ConfigurationManager.AppSettings["flowygtReportAddUrl"], token, jsonContent); return resultStr; } + + public string stringWrap(string input, int maxCharactersPerLine) + { + if (string.IsNullOrWhiteSpace(input)) input = ""; + input = input.Trim().Trim(Environment.NewLine.ToCharArray()).Trim(); + if (maxCharactersPerLine >= 1) + { + string pattern = $".{{1,{maxCharactersPerLine}}}"; + return Regex.Replace(input, pattern, m => $"{m.Value + Environment.NewLine}").Trim(Environment.NewLine.ToCharArray()).TrimEnd(); + } + else + return input; + } } }