JRT打印鉴定记录单
良好的基础会使上层实现越做越简单,jrt在开始写业务之前就把运用场景需要的基础实验和设计完毕了。基于jrt的基础可以很轻松的实现强大的打印效果。jrt的打印和lodop比较像,是高度为满足建议系统打印定制的打印实现,设计器可能没lodop通用,但是画布统一,可以容易的实现在线预览、得到pdf、图片、控制粒度细、支持Windows、Linux。是自主可控的医疗信创打印不二之选。
这次分享个打印记录单的效果和业务代码
打印逻辑
/*
本代码权归属于JRT计划,任何单位或个人未经许可,不得以任何方式复制、传播、展示、发布、分发、重新分发、修改、反编译、
反向编译或以其他方式使用本框架的任何部分,包括但不限于源代码、二进制文件、文档、演示文稿、示例代码和API。
使用本框架的用户需遵守以下条款:
用户只能以个人学习和研究为目的使用本框架,不得将其用于商业用途。
用户在使用本框架时,应遵守所有适用的法律和法规,包括但不限于版权法、商标法、专利法和隐私权法。
用户在使用本框架时,应自行承担风险和责任,并确保不会侵犯任何知识产权或个人权利。
本框架的使用仅限于用户自己使用,不得将其分发给其他用户或将其用于任何形式的共享或传播。
在使用本框架时,用户应尊重和保护其他用户的隐私和个人信息,不得将其泄露给任何第三方。
违反以上条款将视为侵权行为,将采取法律手段维护JRT合法权益。*/
import JRT.Core.DataGrid.*;
import JRT.Core.Dto.HashParam;
import JRT.Core.Dto.OutValue;
import JRT.Core.Dto.PrintElement;
import JRT.Core.MultiPlatform.JRTContext;
import JRT.Core.Util.Convert;
import JRT.Core.Util.PrintDrawProtocol;
import JRT.Model.Bussiness.Parameters;
import JRT.Model.Entity.*;
import JRTBLLBase.BaseHttpHandlerNoSession;
import JRTBLLBase.Helper;import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;/*** 实现jrt打印记录单逻辑*/
public class LISPrintIDPProcess extends BaseHttpHandlerNoSession implements IGridChangePage {/*** 打印元素*/private List<PrintElement> retList = new ArrayList<>();/*** 打印模板数据*/JRTPrintTemplateDto template = null;/*** 存打印的Data数据*/Hashtable<String, String> printDataMap = null;/*** 最后绘图的Y*/private int lastY=0;/*** 表格换页之前要执行的逻辑** @param gridKey* @param maxY*/public void PreChangePageDo(String gridKey, int maxY) {}/*** 表格换页之后要执行的逻辑** @param gridKey* @param maxY*/public void AfterChangePageDo(String gridKey, int maxY) {System.out.println("换页后执行逻辑");//画固定图片元素PrintFixImage(template, retList);//画数据元素PrintData(template, retList, printDataMap);//画标签元素PrintLabel(template, retList);//画线元素PrintLine(template, retList);}/*** 按传入的ReportDRS输出符合打印元素绘制协议的数据来实现打印控制,多个报告用上尖号分割** @param Param 参数* @param Session* @param Output* @return*/public String QueryPrintData(Parameters Param, OutValue Session, OutValue Output) throws Exception {String ReportDRS = Param.P0;String[] repArr = ReportDRS.split("\\^");//循环打印每个报告for (String repStr : repArr) {if (Helper.IsEmptyStr(repStr)) {continue;}long reportDR = Convert.ToLong(repStr);//查询模板数据template = GetOneTemplate(null, "IDPProcessPrint");//换报告之后无脑输出一个分页retList.add(PrintDrawProtocol.ChangePage());//查询并且填充DataMakePrintDataMap(reportDR);//查询结果数据List<Object> repResList = MakePrintResultData(reportDR);//画固定图片元素PrintFixImage(template, retList);//画数据元素PrintData(template, retList, printDataMap);//画标签元素PrintLabel(template, retList);//画线元素PrintLine(template, retList);PrintIDPCultureMedRes(template, retList,reportDR);PrintIDPUpMach(template, retList,reportDR);//画表格元素PrintAntDataGrid(template, retList, repResList);}return Helper.Object2Json(retList);}/*** 输出培养基信息* @param template 模板* @param retList 元素列表* @param reportDR 报告主键* @throws Exception*/private void PrintIDPCultureMedRes(JRTPrintTemplateDto template, List<PrintElement> retList,long reportDR) throws Exception{List<Object> gridData = new ArrayList<>();List<IDPResult> idpList = EntityManager().FindByColVal(IDPResult.class, "VisitNumberReportDR", reportDR);if (idpList != null && idpList.size() > 0) {for (IDPResult idp : idpList) {String remark = Helper.ToStr(idp.Remark);List<IDPCultureMedPakRes> pakList = EntityManager().FindByColVal(IDPCultureMedPakRes.class, "IDPResultDR", idp.RowID);if (pakList != null && pakList.size() > 0) {for (IDPCultureMedPakRes pak : pakList) {String cultureMedPak = EntityManager().DolerGetCName(BTIDPCultureMedPak.class, pak.IDPCultureMedPakDR);List<IDPCultureMedRes> medList = EntityManager().FindByColVal(IDPCultureMedRes.class, "IDPResultDR", idp.RowID);if (medList != null && medList.size() > 0) {for (IDPCultureMedRes med : medList) {String idpCultureMedium = EntityManager().DolerGetCName(BTIDPCultureMedium.class, med.IDPCultureMediumDR);String name = "[" + med.RowID + "]" + idpCultureMedium;String cultureDesk = Helper.ToStr(med.CultureDesk);String fromInfo = remark + "-" + idpCultureMedium + ":" + cultureDesk;HashMap oneRow = new HashMap();oneRow.put("培养基", idpCultureMedium);if (Helper.IsNotEmptyStr(med.CultureDesk)&&Helper.IsNumeric(med.CultureDesk)) {oneRow.put("形态描述", Helper.ToStr(EntityManager().DolerGetCol(BTIDPCultureDesk.class, Convert.ToLong(med.CultureDesk), "Remark")));} else {oneRow.put("形态描述", "");}oneRow.put("菌落计数", med.Num);oneRow.put("容器", med.ContainerCode);oneRow.put("拉丝试验", med.Special);oneRow.put("生化反应", med.BioReaction);oneRow.put("百分百", med.Rate);oneRow.put("上机类型", EntityManager().DolerGetCName(BTIDPMach.class,med.IDPMachDR));oneRow.put("快速鉴定", EntityManager().DolerGetCName(BTOrganism.class,med.OrganismDR));oneRow.put("菌落颜色", med.OrgColor);oneRow.put("菌落大小", med.OrgSize);oneRow.put("湿度", med.OrgHumidity);oneRow.put("菌类型", med.OrgType);oneRow.put("粘稠度", med.OrgViscosity);oneRow.put("边缘", med.OrgEdge);oneRow.put("其他说明", med.OrgRemark);gridData.add(oneRow);}}}}}}for (JRTPrintTemplateEle ele : template.EleList) {//输出表格if (ele.PrintType.equals("DataGrid")) {if (!ele.DataField.equals("IDPCultureMedRes")) {continue;}//得到表格定义GridDto defGrid = (GridDto) Helper.Json2Object(ele.PrintText, GridDto.class);PrintElement printEle = PrintDrawProtocol.DrawLabel(defGrid.PageList.get(0).Left, defGrid.PageList.get(0).Top, "培养记录", "宋体", 12, "Bold", null, "", "", "");defGrid.PageList.get(0).Top+=20;retList.add(printEle);lastY=defGrid.PageList.get(0).Top;if(gridData.size()>0) {lastY = PrintDrawProtocol.DrawGrid(retList, defGrid, null, gridData, "IDPCultureMedRes", this);}}}}/*** 输出培养基信息* @param template 模板* @param retList 元素列表* @param reportDR 报告主键* @throws Exception*/private void PrintIDPUpMach(JRTPrintTemplateDto template, List<PrintElement> retList,long reportDR) throws Exception{List<Object> gridData = new ArrayList<>();List<IDPResult> idpList = EntityManager().FindByColVal(IDPResult.class, "VisitNumberReportDR", reportDR);if (idpList != null && idpList.size() > 0) {for (IDPResult idp : idpList) {String remark = Helper.ToStr(idp.Remark);List<IDPUpMach> list = EntityManager().FindByColVal(IDPUpMach.class, "IDPResultDR", idp.RowID);if (list != null && list.size() > 0) {for (IDPUpMach one : list) {HashMap oneRow = new HashMap();oneRow.put("培养结果", one.TxtResult);oneRow.put("上机仪器", EntityManager().DolerGetCName(BTIDPMach.class,one.IDPMachDR));oneRow.put("板条类型", Helper.ToStr(EntityManager().DolerGetCol(BTIDPSlats.class,one.IDPSlatsDR,"SlatsCName")));oneRow.put("板条批号", one.SlatsNo);oneRow.put("上机备注", one.Remark);oneRow.put("上机ID", one.UpID);oneRow.put("上机人", EntityManager().DolerGetCName(SYSUser.class,one.UpMachUserDR));oneRow.put("上机日期", Helper.DateIntToStr(one.UpMachDate));oneRow.put("上机时间", Helper.TimeIntToStr(one.UpMachTime));gridData.add(oneRow);}}}}if(gridData.size()>0) {for (JRTPrintTemplateEle ele : template.EleList) {//输出表格if (ele.PrintType.equals("DataGrid")) {if (!ele.DataField.equals("IDPUpMach")) {continue;}//得到表格定义GridDto defGrid = (GridDto) Helper.Json2Object(ele.PrintText, GridDto.class);lastY+=20;PrintElement printEle = PrintDrawProtocol.DrawLabel(defGrid.PageList.get(0).Left, lastY, "上机记录", "宋体", 12, "Bold", null, "", "", "");retList.add(printEle);defGrid.PageList.get(0).Top=lastY+20;lastY = PrintDrawProtocol.DrawGrid(retList, defGrid, null, gridData, "IDPUpMach", this);}}}}/*** 构造打印的报告结果数据** @param reportDR 报告主键* @return*/private List<Object> MakePrintResultData(long reportDR) throws Exception {List<Object> retList = new ArrayList<>();List<IDPResult> idpList=EntityManager().FindByColVal(IDPResult.class,"VisitNumberReportDR",reportDR);List<Long> repDRS=new ArrayList<>();if(idpList!=null&&idpList.size()>0){for(IDPResult one:idpList){if(one.LinkReportDR!=null){repDRS.add(one.LinkReportDR);}}}if(repDRS.size()==0){repDRS.add(reportDR);}//查询药敏结果for(Long oneRepDR:repDRS) {List<RPVisitNumberReportResult> resList = EntityManager().FindByColVal(RPVisitNumberReportResult.class, "VisitNumberReportDR", oneRepDR);if (resList != null && resList.size() > 0) {for (RPVisitNumberReportResult res : resList) {if (res.IsNotAllowPrint != null && res.IsNotAllowPrint == true) {continue;}if (Helper.IsEmptyStr(res.TextRes)) {continue;}BTTestCode tsDto = EntityManager().DolerGet(BTTestCode.class, res.TestCodeDR);if (!tsDto.ResultFormat.equals("M")) {continue;}HashMap out = new HashMap();out.put("序号", retList.size() + 1);out.put("项目名称", tsDto.CName);out.put("缩写", tsDto.Synonym);out.put("结果", res.TextRes);out.put("标志", TransAbFlag(res.AbFlag));out.put("单位", res.Unit);out.put("参考范围", res.RefRanges);out.put("实验方法", EntityManager().DolerGetCName(BTTestMethod.class, res.MethodDR));out.put("多耐药", res.MultipleResChild);if (tsDto.ResultFormat.equals("M")) {out.put("菌落计数", res.Unit);out.put("单位", "");} else {out.put("菌落计数", "");}out.put("专家规则", res.ExpertRule);out.put("备注", res.ResNoes);out.put("耐药机制", "");//微生物取药敏结果if (tsDto.ResultFormat.equals("M")) {//查询药敏书记List<RPVisitNumberReportResSen> senList = EntityManager().FindByColVal(RPVisitNumberReportResSen.class, "VisitNumberReportResultDR", res.RowID);if (senList != null && senList.size() > 0) {List<HashMap> senOutList = new ArrayList<>();for (RPVisitNumberReportResSen sen : senList) {BTAntibiotics ant = EntityManager().DolerGet(BTAntibiotics.class, sen.AntibioticsDR);HashMap outSen = new HashMap();outSen.put("序号", senOutList.size() + 1);outSen.put("抗生素名称", ant.CName);outSen.put("KB", Helper.ToStr(sen.KbValue));outSen.put("MIC", Helper.ToStr(sen.MicValue));outSen.put("ET", Helper.ToStr(sen.EtestValue));outSen.put("敏感度", EntityManager().DolerGetCName(BTSensitivity.class, sen.SensitivityDR));outSen.put("折点S", sen.SRanges);outSen.put("折点I", sen.IRanges);outSen.put("折点R", sen.RRanges);outSen.put("折点SDD", sen.SDDRanges);senOutList.add(outSen);}out.put("AntSen", senOutList);}//查询耐药机制书记List<RPVisitNumberRepResRst> rstList = EntityManager().FindByColVal(RPVisitNumberRepResRst.class, "VisitNumberReportResultDR", res.RowID);if (rstList != null && rstList.size() > 0) {String rstStr = "";for (RPVisitNumberRepResRst rst : rstList) {if (Helper.IsEmptyStr(rst.TextResult)) {continue;}BTMCResistanceItem rstItem = EntityManager().DolerGet(BTMCResistanceItem.class, rst.ResistanceItemDR);rstStr += rstItem.CName + ":" + rst.TextResult + " ";}out.put("耐药机制", rstStr);}}retList.add(out);}}}return retList;}/*** 往打印单个数据里面塞入数据** @param reportDR 报告主键*/private void MakePrintDataMap(long reportDR) throws Exception {RPVisitNumberReport rep = EntityManager().DolerGet(RPVisitNumberReport.class, reportDR);RPVisitNumberReportExt repExt = EntityManager().DolerGet(RPVisitNumberReportExt.class, rep.VisitNumberReportExtID);RPVisitNumber vis = EntityManager().DolerGet(RPVisitNumber.class, rep.VisitNumberDR);RPVisitNumberExt visExt = EntityManager().DolerGet(RPVisitNumberExt.class, vis.VisitNumberExtID);//存打印的Data数据printDataMap = new Hashtable<>();printDataMap.put("姓名", vis.SurName);printDataMap.put("性别", EntityManager().DolerGetCName(BTSpecies.class, vis.SpeciesDR));printDataMap.put("年龄", vis.AgeDesc);printDataMap.put("登记号", vis.RegNo);printDataMap.put("检验号", vis.VisitNumber);printDataMap.put("科室", EntityManager().DolerGetCName(BTLocation.class, vis.LocationDR));printDataMap.put("标本", Helper.ToStr(EntityManager().DolerGetCol(BTSpecimen.class, vis.SpecimenDR, "IName")));printDataMap.put("床号", vis.BedNo);printDataMap.put("诊断", visExt.Symptom);printDataMap.put("采集日期", Helper.DateIntToStr(vis.CollectDate));printDataMap.put("采集时间", Helper.TimeIntToStr(vis.CollectTime));printDataMap.put("医嘱备注", visExt.ReqNotes);printDataMap.put("医嘱名称", rep.TestSetName);printDataMap.put("申请医生", EntityManager().DolerGetCName(BTDoctor.class, vis.DoctorDR));printDataMap.put("申请日期", Helper.DateIntToStr(vis.RequestDate));printDataMap.put("初审者", EntityManager().DolerGetCName(SYSUser.class, rep.EntryUserDR));printDataMap.put("初审者签名", Helper.ToStr(EntityManager().DolerGetCol(SYSUser.class, rep.EntryUserDR, "Code")));printDataMap.put("初审日期", Helper.DateIntToStr(rep.EntryDate));printDataMap.put("初审时间", Helper.TimeIntToStr(rep.EntryTime));printDataMap.put("审核者", EntityManager().DolerGetCName(SYSUser.class, rep.AuthUserDR));printDataMap.put("审核日期", Helper.DateIntToStr(rep.AuthDate));printDataMap.put("审核时间", Helper.TimeIntToStr(rep.AuthTime));printDataMap.put("审核者签名", Helper.ToStr(EntityManager().DolerGetCol(SYSUser.class, rep.AuthUserDR, "Code")));printDataMap.put("出生日期", Helper.DateIntToStr(visExt.BirthDate));printDataMap.put("仪器名称", "");printDataMap.put("流水号", rep.EpisodeNo);printDataMap.put("病案号", vis.MedicalRecordNo);printDataMap.put("病区", EntityManager().DolerGetCName(BTWard.class, vis.WardDR));printDataMap.put("血型", EntityManager().DolerGetCName(BTABOBG.class, visExt.AboDR) + EntityManager().DolerGetCName(BTRHBG.class, visExt.RhDR));printDataMap.put("电话", visExt.MobileNo);printDataMap.put("地址", visExt.Address);printDataMap.put("接收者", EntityManager().DolerGetCName(SYSUser.class, vis.ReceiveUserDR));printDataMap.put("接收者签名", Helper.ToStr(EntityManager().DolerGetCol(SYSUser.class, vis.ReceiveUserDR, "Code")));printDataMap.put("接收日期", Helper.DateIntToStr(vis.ReceiveDate));printDataMap.put("接收时间", Helper.TimeIntToStr(vis.ReceiveTime));printDataMap.put("打印时间", Helper.GetNowDateStr());printDataMap.put("核收日期", Helper.DateIntToStr(rep.AcceptDate));printDataMap.put("核收时间", Helper.TimeIntToStr(rep.AcceptTime));printDataMap.put("核收者", EntityManager().DolerGetCName(SYSUser.class, rep.AcceptUserDR));printDataMap.put("核收者签名", Helper.ToStr(EntityManager().DolerGetCol(SYSUser.class, rep.AcceptUserDR, "Code")));printDataMap.put("报告评价", repExt.MajorConclusion);printDataMap.put("标本质量", EntityManager().DolerGetCName(BTSpecimenQuality.class, vis.SpecimenQualityDR));BTWorkGroupMachine wgm = EntityManager().DolerGet(BTWorkGroupMachine.class, rep.WorkGroupMachineDR);printDataMap.put("工作小组", wgm.CName);BTWorkGroup wg = EntityManager().DolerGet(BTWorkGroup.class, wgm.WorkGroupDR);printDataMap.put("工作组", wg.CName);printDataMap.put("报告说明", repExt.ReportRemark);BTHospital hos = EntityManager().DolerGet(BTHospital.class, vis.HospitalDR);printDataMap.put("标题", hos.CName + wg.CName + "鉴定记录");printDataMap.put("采集部位", EntityManager().DolerGetCName(BTAnatomicalSite.class, vis.AnatomicalSiteDR));printDataMap.put("患者类型", EntityManager().DolerGetCName(BTAdmissionType.class, vis.AdmissionTypeDR));printDataMap.put("证件类型", EntityManager().DolerGetCName(BTCertType.class, visExt.CertTypeDR));printDataMap.put("证件号", visExt.CertNo);if (vis.Urgent != null && vis.Urgent == 1) {printDataMap.put("加急", "急");} else {printDataMap.put("加急", "");}printDataMap.put("身份证号", vis.IDNumber);printDataMap.put("采集者", EntityManager().DolerGetCName(SYSUser.class, vis.CollectUserDR));printDataMap.put("采集者签名", Helper.ToStr(EntityManager().DolerGetCol(SYSUser.class, vis.CollectUserDR, "Code")));}/*** 得到报告图片数据** @param reprtDR* @return*/private HashMap<String, String> MakePrintImageData(long reprtDR) throws Exception {HashMap<String, String> out = new HashMap<>();List<RPVisitNumberReportImage> imgList = EntityManager().FindByColVal(RPVisitNumberReportImage.class, "VisitNumberReportDR", reprtDR);if (imgList != null && imgList.size() > 0) {String fileService = (String) Helper.GetBllMethodData("common.GetParaCommon", "GetFileServiceAddr", EntityManager());for (RPVisitNumberReportImage img : imgList) {out.put(img.ImageClass, fileService + img.FileName);}}return out;}/*** 输出药敏报告结果** @param template* @param template 模板* @param retList 元素列表* @param repResList 报告结果列表*/private void PrintAntDataGrid(JRTPrintTemplateDto template, List<PrintElement> retList, List<Object> repResList) throws Exception {int index = 0;for (Object one : repResList) {HashMap repRes = (HashMap) one;GridDto antGrid = GetAntGridDef();lastY+=20;PrintElement printEle = PrintDrawProtocol.DrawLabel(antGrid.PageList.get(0).Left, lastY, Helper.ToStr(repRes.get("结果")), "宋体", 12, "Bold", null, "", "", "");retList.add(printEle);//有药敏结果的输出药敏if (repRes.containsKey("AntSen")) {List<Object> antSenList = (List<Object>) repRes.get("AntSen");index++;if (antGrid != null&&antSenList.size()>0) {antGrid.PageList.get(0).Top = lastY+20;lastY = PrintDrawProtocol.DrawGrid(retList, antGrid, null, antSenList, "AntSen", this);}//打印耐药机制String rstRes=(String)repRes.get("耐药机制");if(Helper.IsNotEmptyStr(rstRes)) {List<Object> rstResList=new ArrayList<>();HashMap rstResHs=new HashMap();rstResHs.put("data","耐药机制:");rstResList.add(rstResHs);rstResHs=new HashMap();rstResHs.put("data",rstRes);rstResList.add(rstResHs);GridDto def=GetOneColGrid(antGrid.PageList.get(0).Left,lastY-antGrid.RowHeight, GridDraw.GetGridWidth(antGrid));lastY = PrintDrawProtocol.DrawGrid(retList, def, null, rstResList, "RstRes", this);}//不同的菌输出一个换页retList.add(PrintDrawProtocol.ChangePage());}}}/*** 得到只有一列的无边框表格来画长的换行串* @param left 左边* @param top 顶部* @param width 宽度* @return*/private GridDto GetOneColGrid(int left,int top,int width){//这部分由设计器维护的Json得到表格维护信息GridDto def = new GridDto();//边框宽度def.BoderWidth=0;//列数def.Cols=1;//是否左填充def.ColsLeftFull=0;//第一页控制参数GridPageDto page = new GridPageDto();//换页行数page.ChangePageRowNum=999;page.Left=left;//顶部page.Top=top;def.PageList.add(page);//定义表格的列GridColDto col = new GridColDto();col = new GridColDto();col.DataField = "data";col.Width = width;def.DataCol.add(col);return def;}/*** 输出固定图片** @param template* @param template 模板* @param retList 元素列表*/private void PrintFixImage(JRTPrintTemplateDto template, List<PrintElement> retList) {for (JRTPrintTemplateEle ele : template.EleList) {try {//输出图片if (ele.PrintType.equals("Graph")) {boolean isSign = false;if (ele.PrintFlag.equals("D")) {isSign = true;}String dataField = ele.DataField;//不是图标的,且不包含https的不打印if (isSign == false && !dataField.contains("http")) {continue;}//取图标书记if (isSign) {HashParam hs = new HashParam();hs.Add("Code", dataField);hs.Add("ImgType", "DEF");JRTPrintImage printImage = EntityManager().GetByPara(JRTPrintImage.class, hs);if (printImage != null) {dataField = printImage.ImgBase64String;}}PrintElement printEle = PrintDrawProtocol.DrawGraph(ele.PrintX, ele.PrintY, ele.PrintWidth, ele.PrintHeight, dataField, isSign, false);retList.add(printEle);}}catch (Exception ex){Helper.WriteExceptionLog("打印图片异常",ex);}}}/*** 输出数据** @param template 模板* @param retList 元素列表* @param printDataMap 数据哈希*/private void PrintData(JRTPrintTemplateDto template, List<PrintElement> retList, Hashtable<String, String> printDataMap) {for (JRTPrintTemplateEle ele : template.EleList) {//输出标签if (ele.PrintType.equals("Data")) {String dataFiled = ele.DataField;if (!dataFiled.isEmpty() && printDataMap.containsKey(dataFiled)) {//带字的条码if (ele.PrintFlag.contains("BarCode")) {String BarType = ele.PrintFlag.replace("BarCode", "");PrintElement printEle = PrintDrawProtocol.DrawBarCode(ele.PrintX, ele.PrintY, printDataMap.get(dataFiled), true, ele.PrintWidth, ele.PrintHeight, BarType, ele.PrintFont, Convert.ToDouble(ele.PrintFontSize).intValue(), ele.PrintFontStyle, PrintDrawProtocol.GetPrintAlignment(ele.PrintAlignment), ele.Color, ele.Angle);retList.add(printEle);}//不带字的条码else if (ele.PrintFlag.contains("BarCodeN")) {String BarType = ele.PrintFlag.replace("BarCodeN", "");PrintElement printEle = PrintDrawProtocol.DrawBarCode(ele.PrintX, ele.PrintY, printDataMap.get(dataFiled), false, ele.PrintWidth, ele.PrintHeight, BarType, ele.PrintFont, Convert.ToDouble(ele.PrintFontSize).intValue(), ele.PrintFontStyle, PrintDrawProtocol.GetPrintAlignment(ele.PrintAlignment), ele.Color, ele.Angle);retList.add(printEle);}//画普通数据else {PrintElement printEle = PrintDrawProtocol.DrawLabel(ele.PrintX, ele.PrintY, printDataMap.get(dataFiled), ele.PrintFont, Convert.ToDouble(ele.PrintFontSize).intValue(), ele.PrintFontStyle, PrintDrawProtocol.GetPrintAlignment(ele.PrintAlignment), ele.Color, "", ele.Angle);retList.add(printEle);}}}}}/*** 输出标签** @param template* @param retList*/private void PrintLabel(JRTPrintTemplateDto template, List<PrintElement> retList) {for (JRTPrintTemplateEle ele : template.EleList) {//输出标签if (ele.PrintType.equals("Label")) {PrintElement printEle = PrintDrawProtocol.DrawLabel(ele.PrintX, ele.PrintY, ele.PrintText, ele.PrintFont, Convert.ToDouble(ele.PrintFontSize).intValue(), ele.PrintFontStyle, PrintDrawProtocol.GetPrintAlignment(ele.PrintAlignment), ele.Color, "", ele.Angle);retList.add(printEle);}}}/*** 输出线** @param template* @param retList*/private void PrintLine(JRTPrintTemplateDto template, List<PrintElement> retList) {for (JRTPrintTemplateEle ele : template.EleList) {//输出先if (ele.PrintType.equals("ILineN")) {long width = ele.PrintWidth;long height = ele.PrintHeight;long endX = ele.PrintX + width;long endY = ele.PrintY;long lineWidth = height;if (height > width) {endX = ele.PrintX;endY = ele.PrintY;lineWidth = width;}PrintElement printEle = PrintDrawProtocol.DrawLine(ele.PrintX, ele.PrintY, endX, endY, lineWidth, ele.PrintFlag, ele.Color);retList.add(printEle);}}}/*** 通过模板主键或者代码得到模板数据供打印使用** @param rowID* @param code* @return*/private JRTPrintTemplateDto GetOneTemplate(Integer rowID, String code) throws Exception {JRTPrintTemplateDto retDto = null;//按主键取if (rowID != null) {retDto = EntityManager().GetById(JRTPrintTemplateDto.class, rowID);}//按代码取else if (code != null && !code.isEmpty()) {retDto = EntityManager().GetByColVal(JRTPrintTemplateDto.class, "Code", code);}if (retDto != null) {HashParam hs = new HashParam();hs.Add("PrintTemplateDR", retDto.RowID);retDto.EleList = EntityManager().FindAllSimple(JRTPrintTemplateEle.class, hs);}return retDto;}/*** 得到抗生素表格定义** @return* @throws Exception*/private GridDto GetAntGridDef() throws Exception {for (JRTPrintTemplateEle ele : template.EleList) {//输出表格if (ele.PrintType.equals("DataGrid")) {if (!ele.DataField.equals("AntSen")) {continue;}//得到表格定义GridDto defGrid = (GridDto) Helper.Json2Object(ele.PrintText, GridDto.class);return defGrid;}}return null;}/*** 翻译结果标识** @param abFlag* @return*/private String TransAbFlag(String abFlag) {if (abFlag == null) {return "";}if (abFlag.equals("L")) {abFlag = "↓";} else if (abFlag.equals("H")) {abFlag = "↑";} else if (abFlag.equals("PL")) {abFlag = "↓↓↓";} else if (abFlag.equals("PH")) {abFlag = "↑↑↑";} else if (abFlag.equals("A")) {abFlag = "*";} else if (abFlag.equals("S")) {abFlag = "***";}return abFlag;}/*** 存获得的一个模板数据*/public static class JRTPrintTemplateDto extends JRTPrintTemplate {/*** 模板元素*/public List<JRTPrintTemplateEle> EleList;}}
相关文章:

JRT打印鉴定记录单
良好的基础会使上层实现越做越简单,jrt在开始写业务之前就把运用场景需要的基础实验和设计完毕了。基于jrt的基础可以很轻松的实现强大的打印效果。jrt的打印和lodop比较像,是高度为满足建议系统打印定制的打印实现,设计器可能没lodop通用&am…...

数据处理-Matplotlib 绘图展示
文章目录 1. Matplotlib 简介2. 安装3. Matplotlib Pyplot4. 绘制图表1. 折线图2. 散点图3. 柱状图4. 饼图5. 直方图 5. 中文显示 1. Matplotlib 简介 Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。 Ma…...

Nginx -Web服务器/反向代理/负载均衡
文章目录 一、web服务1.1 nginx安装1.2 配置文件1.3 Nginx处理Web机制 二、反向代理三、负载均衡3.1 分类3.2 负载相关配置文件3.3 keepalive 提高吞吐量3.4 配置浏览器缓存 附、JMeter性能测试工具 以赛促学内容,大概率感觉会使用nginx做web服务,特对nginx做总结归纳. Nginx是…...

机器人三定律及伦理分析
全世界的机器人定律并没有一个统一的标准或体系,但是在科学文献中,最广为人知的是由科幻小说家阿西莫夫提出的“机器人三定律”。本文将以这些定律为基础,分析现有的机器人伦理和实际应用中的问题,给出若干实例,并对相…...

自动驾驶算法———车道检测(一)
“ 在本章中,我将指导您构建一个简单但有效的车道检测管道,并将其应用于Carla 模拟器中捕获的图像。管道将图像作为输入,并产生车道边界的数学模型作为输出。图像由行车记录仪(固定在车辆挡风玻璃后面的摄像头)捕获。…...

小程序自学教程
从0开始搭建微信小程序前后台 0、准备 如何安装?去CSDN搜索“xxx安装教程”即可。 (1)工具 IntelliJ IDEA(必选)——Java开发集成环境,可以前后端同时使用 Web Storm——web开发集成环境,主要…...

How do I format markdown chatgpt response in tkinter frame python?
题意:怎样在Tkinter框架中使用Python来格式化Markdown格式的ChatGPT响应? 问题背景: Chatgpt sometimes responds in markdown language. Sometimes the respond contains ** ** which means the text in between should be bold and ### te…...

vs2019 QT无法打开源文件QModbusTcpClient
vs2019无法打开源文件QModbusTcpClient 如果配置的msvc2019,则查找到Include目录 然后包含: #include <QtSerialBus/qmodbustcpclient.h>...

初识c++(命名空间,缺省参数,函数重载)
一、命名空间 1、namespace的意义 在C/C中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全 局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名 冲突…...

印尼Facebook直播网络需要达到什么要求?
在全球化浪潮的推动下,海外直播正受到企业、个人和机构的广泛关注和青睐。无论是用于营销、推广还是互动,海外直播为各种组织提供了更多机会和可能性。本文将探讨在进行印尼Facebook直播前,需要满足哪些网络条件以确保直播的质量和用户体验。…...

力扣题解(最长回文子串)
5. 最长回文子串 给你一个字符串 s,找到 s 中最长的 回文子串 。思路: 对于第i个字符,可能的回文子串构成方式有两种,一种是以i位置元素为中心元素,向着两边扩展,一种是以i位置和i1位置元素为中心…...

数据湖表格式 Hudi/Iceberg/DeltaLake/Paimon TPCDS 性能对比(Spark 引擎)
当前,业界流行的集中数据湖表格式 Hudi/Iceberg/DeltaLake,和最近出现并且在国内比较火的 Paimon。我们现在看到的很多是针对流处理场景的读写性能测试,那么本篇文章我们将回归到大数据最基础的场景,对海量数据的批处理查询。本文…...

脚本练习-每5分钟执行一次获取当前服务器的基本情况
设计一个shell程序,每5分钟执行一次获取当前服务器的基本情况(内存使用率,CPU负载,I/O,磁盘使用率),保存到120.20.20.20数据库上数据库帐号aaa密码bbb库名test表名host 创建一个名为server_stat…...

技术探索之kotlin浅谈
Kotlin是一种静态类型编程语言,它运行在Java虚拟机(JVM)上,可以与Java代码互操作。Kotlin由JetBrains开发,是一种现代、简洁且安全的编程语言。它在2011年首次亮相,2017年被谷歌宣布为Android官方开发语言。…...

机器学习之常用优化器
机器学习之常用优化器 1、SGD 优化器1.2、 SGD 的优缺点 2、 Adam 优化器2.1、设置 Adam 优化器2.2、使用 Adam 优化器的训练流程2.3、Adam 优化器的优缺点 3. AdamW 优化器3.1、示例3.2、训练过程3.3、AdamW 优化器的优点 1、SGD 优化器 在 PyTorch 中,设置 SGD 优…...

机器学习基本概念,Numpy,matplotlib和张量Tensor知识进一步学习
机器学习一些基本概念: 监督学习 监督学习是机器学习中最常见的形式之一,它涉及到使用带标签的数据集来训练模型。这意味着每条训练数据都包含输入特征和对应的输出标签。目标是让模型学会从输入到输出的映射,这样当给出新的未见过的输入时…...

博客前端项目学习day01
这里写自定义目录标题 登录创建项目配置环境变量,方便使用登录页面验证码登陆表单 在VScode上写前端,采用vue3。 登录 创建项目 检查node版本 node -v 创建一个新的项目 npm init vitelatest blog-front-admin 中间会弹出询问是否要安装包,…...

java Collections.synchronizedCollection方法介绍
Collections.synchronizedCollection 是 Java 中的一个实用方法,用于创建一个线程安全的集合。它通过包装现有的集合对象来实现线程安全,以确保在多线程环境中对集合的访问是安全的。 主要功能 线程安全:通过同步包装现有的集合,使得在多线程环境中对集合的所有访问(包括…...

力扣每日一题:3011. 判断一个数组是否可以变为有序
力扣官网:前往作答!!!! 今日份每日一题: 题目要求: 给你一个下标从 0 开始且全是 正 整数的数组 nums 。 一次 操作 中,如果两个 相邻 元素在二进制下数位为 1 的数目 相同 &…...

ubuntu 上vscode +cmake的debug调试配置方法
在ubuntu配置pcl点云库以及opencv库的时候,需要在CMakeLists.txt中加入相应的代码。配置完成后,无法调试,与在windows上体验vs studio差别有点大。 找了好多调试debug配置方法,最终能用的有几种,但是有一种特别好用&a…...

使用Redis实现签到功能:Java示例解析
使用Redis实现签到功能:Java示例解析 在本博客中,我们将讨论一个使用Redis实现的签到功能的Java示例。该示例包括两个主要方法:sign()和signCount(),分别用于用户签到和计算用户当月的签到次数。 1. 签到方法:sign()…...

tableau标靶图,甘特图与瀑布图绘制 - 9
标靶图,甘特图与瀑布图 1. 标靶图绘制1.1 筛选器筛选日期1.2 条形图绘制1.3 编辑参考线1.4 设置参考线1.5 设置参考区间1.6 四分位设置1.7 其他标靶图结果显示 2.甘特图绘制2.1 选择列属性2.2 选择列属性2.3 创建新字段2.4 设置天数大小及颜色 3. 瀑布图绘制3.1 she…...

双向链表专题
在之前的单链表专题中,了解的单链表的结构是如何实现的,以及学习了如何实现单链表得各个功能。单链表虽然也能实现数据的增、删、查、改等功能,但是要找到尾节点或者是要找到指定位置之前的节点时,还是需要遍历链表,这…...

SpringCoud组件
一、使用SpringCloudAlibaba <dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2023.0.1.0</version><…...

向量的定义和解释
这是一个向量: 向量具有大小(大小)和方向: 线的长度显示其大小,箭头指向方向。 在这里玩一个: 我们可以通过将它们从头到尾连接来添加两个向量: 无论我们添加它们的顺序如何,我们都…...

IoTDB 集群高效管理:一键启停功能介绍
如何快速启动、停止 IoTDB 集群节点的功能详解! 在部署 IoTDB 集群时,对于基础的单机模式,启动过程相对简单,仅需执行 start-standalone 脚本来启动 1 个 ConfigNode 节点和 1 个 DataNode 节点。然而,对于更高级的分布…...

一个spring boot项目的启动过程分析
1、web.xml 定义入口类 <context-param><param-name>contextConfigLocation</param-name><param-value>com.baosight.ApplicationBoot</param-value> </context-param> 2、主入口类: ApplicationBoot,SpringBoot项目的mian函数 SpringBo…...

智驭未来:人工智能与目标检测的深度交融
在科技日新月异的今天,人工智能(AI)如同一股不可阻挡的浪潮,正以前所未有的速度重塑着我们的世界。在众多AI应用领域中,目标检测以其独特的魅力和广泛的应用前景,成为了连接现实与智能世界的桥梁。本文旨在…...

01MFC建立单个文件类型——画线
文章目录 选择模式初始化文件作用解析各初始化文件解析 类导向创建鼠标按键按下抬起操作函数添加一个变量记录起始位置注意事项代码实现效果图 虚实/颜色线 选择模式 初始化文件作用解析 运行: 各初始化文件解析 MFC(Microsoft Foundation Classes&am…...

免杀中用到的工具
🟢 绝大部分无法直接生成免杀木马,开发、测试免杀时会用到。 工具简称 概述 工具来源 下载路径 x64dbg 中文版安装程序(Jan 6 2024).exe 52pojie hellshell 官方的加密或混淆shellcode github Releases ORCA / HellShell GitLab hellshe…...