当前位置: 首页 > news >正文

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打印鉴定记录单

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

数据处理-Matplotlib 绘图展示

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

机器人三定律及伦理分析

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

自动驾驶算法———车道检测(一)

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

小程序自学教程

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

How do I format markdown chatgpt response in tkinter frame python?

题意&#xff1a;怎样在Tkinter框架中使用Python来格式化Markdown格式的ChatGPT响应&#xff1f; 问题背景&#xff1a; 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目录 然后包含&#xff1a; #include <QtSerialBus/qmodbustcpclient.h>...

初识c++(命名空间,缺省参数,函数重载)

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

印尼Facebook直播网络需要达到什么要求?

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

力扣题解(最长回文子串)

5. 最长回文子串 给你一个字符串 s&#xff0c;找到 s 中最长的 回文子串 。思路&#xff1a; 对于第i个字符&#xff0c;可能的回文子串构成方式有两种&#xff0c;一种是以i位置元素为中心元素&#xff0c;向着两边扩展&#xff0c;一种是以i位置和i1位置元素为中心&#xf…...

数据湖表格式 Hudi/Iceberg/DeltaLake/Paimon TPCDS 性能对比(Spark 引擎)

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

脚本练习-每5分钟执行一次获取当前服务器的基本情况

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

技术探索之kotlin浅谈

Kotlin是一种静态类型编程语言&#xff0c;它运行在Java虚拟机&#xff08;JVM&#xff09;上&#xff0c;可以与Java代码互操作。Kotlin由JetBrains开发&#xff0c;是一种现代、简洁且安全的编程语言。它在2011年首次亮相&#xff0c;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 中&#xff0c;设置 SGD 优…...

机器学习基本概念,Numpy,matplotlib和张量Tensor知识进一步学习

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

博客前端项目学习day01

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

java Collections.synchronizedCollection方法介绍

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

力扣每日一题:3011. 判断一个数组是否可以变为有序

力扣官网&#xff1a;前往作答&#xff01;&#xff01;&#xff01;&#xff01; 今日份每日一题&#xff1a; 题目要求&#xff1a; 给你一个下标从 0 开始且全是 正 整数的数组 nums 。 一次 操作 中&#xff0c;如果两个 相邻 元素在二进制下数位为 1 的数目 相同 &…...

ubuntu 上vscode +cmake的debug调试配置方法

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

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...