JRT打印药敏报告

最近没写jrt系列博客,不是中途而废了。而是在写微生物系统。今天终于把微生物大体完成了,伴随着业务的实现,框架趋于完善和稳定。构建一套完美而强大的打印体系一直是我的理想,从最开始C#的winform打印控件到刚接触bs时候用js打印html,到bs驱动cs,一路走来探索打印,虽然一直在进步,但是总归有点瑕疵。

这次我所有的打印期待在JRT上都完美的实现,为一直以为检验的打印可以算得上最复杂梯队了。

检验需要考虑下面问题:
1.打印质控图
2.打印各种报告和特殊报告
3.不光检验系统自己打印报告,还要给自助机打印,his打印,其他第三方打印
4.报告单要批量处理成pdf给第三方
5.融合自己内部打印和外部PDF文件打印
6.实现A5和A4报告混合成A4打印两个A5
7.支持打印跨平台

之前的打印报告演示是demo实例,那么这次提供完整真实的打印实现,下面是效果和代码。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
调用方式
在这里插入图片描述

jrt打印微生物报告

/*
本代码权归属于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.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 LISPrintReport extends BaseHttpHandlerNoSession implements IGridChangePage {/*** 打印元素*/private List<PrintElement> retList = new ArrayList<>();/*** 打印模板数据*/JRTPrintTemplateDto template = null;/*** 存打印的Data数据*/Hashtable<String, String> printDataMap = null;/*** 表格换页之前要执行的逻辑** @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, "ReportPrint");//换报告之后无脑输出一个分页retList.add(PrintDrawProtocol.ChangePage());//查询并且填充DataMakePrintDataMap(reportDR);//存打印的图数据HashMap<String, String> imgData = MakePrintImageData(reportDR);//查询结果数据List<Object> repResList = MakePrintResultData(reportDR);//画固定图片元素PrintFixImage(template, retList);//画数据元素PrintData(template, retList, printDataMap);//画标签元素PrintLabel(template, retList);//画线元素PrintLine(template, retList);//画表格元素PrintDataGrid(template, retList, repResList);//打印报告图片PrintReportImage(template, retList, imgData);}return Helper.Object2Json(retList);}/*** 构造打印的报告结果数据** @param reportDR 报告主键* @return*/private List<Object> MakePrintResultData(long reportDR) throws Exception {List<Object> retList = new ArrayList<>();List<RPVisitNumberReportResult> resList = EntityManager().FindByColVal(RPVisitNumberReportResult.class, "VisitNumberReportDR", reportDR);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);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 PrintDataGrid(JRTPrintTemplateDto template, List<PrintElement> retList, List<Object> repResList) throws Exception {for (JRTPrintTemplateEle ele : template.EleList) {//输出表格if (ele.PrintType.equals("DataGrid")) {if (!ele.DataField.equals("Result")) {continue;}//得到表格定义GridDto defGrid = (GridDto) Helper.Json2Object(ele.PrintText, GridDto.class);int lastY = PrintDrawProtocol.DrawGrid(retList, defGrid, null, repResList, "ReportRes", this);int index = 0;for (Object one : repResList) {HashMap repRes = (HashMap) one;//有药敏结果的输出药敏if (repRes.containsKey("AntSen")) {List<Object> antSenList = (List<Object>) repRes.get("AntSen");GridDto antGrid = GetAntGridDef();index++;if (index == 1) {//第一个菌接着结果后面打印antGrid.PageList.get(0).Top = lastY;} else {//第二个菌从结果位置打印antGrid.PageList.get(0).Top = ele.PrintY.intValue();}if (antGrid != null&&antSenList.size()>0) {lastY = PrintDrawProtocol.DrawGrid(retList, antGrid, null, antSenList, "AntSen", this);}//打印专家规则String expertRule=(String)repRes.get("专家规则");if(Helper.IsNotEmptyStr(expertRule)) {List<Object> expertList=new ArrayList<>();HashMap expertHs=new HashMap();expertHs.put("data","专家规则:");expertList.add(expertHs);expertHs=new HashMap();expertHs.put("data",expertRule);expertList.add(expertHs);GridDto def=GetOneColGrid(antGrid.PageList.get(0).Left,lastY-antGrid.RowHeight, GridDraw.GetGridWidth(antGrid));lastY = PrintDrawProtocol.DrawGrid(retList, def, null, expertList, "ExpertRule", this);}//打印备注String remark=(String)repRes.get("备注");if(Helper.IsNotEmptyStr(remark)) {List<Object> remarkList=new ArrayList<>();HashMap eremarkHs=new HashMap();eremarkHs.put("data","备注:");remarkList.add(eremarkHs);eremarkHs=new HashMap();eremarkHs.put("data",remark);remarkList.add(eremarkHs);GridDto def=GetOneColGrid(antGrid.PageList.get(0).Left,lastY-antGrid.RowHeight, GridDraw.GetGridWidth(antGrid));lastY = PrintDrawProtocol.DrawGrid(retList, def, null, remarkList, "Remark", 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 template     模板* @param retList      元素列表* @param printDataMap 数据图*/private void PrintReportImage(JRTPrintTemplateDto template, List<PrintElement> retList, HashMap<String, String> printDataMap) {for (JRTPrintTemplateEle ele : template.EleList) {//输出图片if (ele.PrintType.equals("Graph")) {boolean isSign = false;if (ele.PrintFlag.equals("D")) {isSign = true;}String dataField = ele.DataField;if (!ele.DataField.isEmpty() && printDataMap.containsKey(ele.DataField)) {dataField = printDataMap.get(ele.DataField);} else {continue;}PrintElement printEle = PrintDrawProtocol.DrawGraph(ele.PrintX, ele.PrintY, ele.PrintWidth, ele.PrintHeight, dataField, isSign, false);retList.add(printEle);}}}/*** 输出数据** @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;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/44387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day11:文件处理

一、文件与文件模式介绍 1、什么是文件 文件是操作系统提供给用户/应用程序操作硬盘的一种虚拟的概念/接口 用户/应用程序(open()) 操作系统&#xff08;文件&#xff09; 计算机硬件&#xff08;硬盘&#xff09;2、为何要用文件 ①用户/应用程序可以通过文件将数据永久保存…

【最强八股文 -- 计算机网络】【快速版】DNS 解析过程

步骤一&#xff1a;查询浏览器及计算机本地 HOST 文件中是否有对应的 缓存 步骤二&#xff1a;请求本地 DNS 服务器 (无则请求 根级 获取能提供信息的权威 DNS 服务器 ) 步骤三&#xff1a;逐级返回对应的 IP 至浏览器 步骤四&#xff1a;浏览器发起连接并缓存 参考资料&#x…

通过Arcgis从逐月平均气温数据中提取并计算年平均气温

通过Arcgis快速将逐月平均气温数据生成年平均气温数据。本次用2020年逐月平均气温数据操作说明。 一、准备工作 &#xff08;1&#xff09;准备Arcmap桌面软件&#xff1b; &#xff08;2&#xff09;准备2020年逐月平均气温数据&#xff08;NC格式&#xff09;、范围图层数据&…

JAVA分布式事务详情分布式事务的解决方案Java中的分布式事务实现

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

数一140+上岸|七月强化一定要避开这3个雷区!

当然可以&#xff0c;强化阶段的主要任务就是做题&#xff01; 但是不用一刀切&#xff0c;强化阶段听课和做题可以二八原则&#xff0c;就是听课占20%&#xff0c;做题占80%。 因为自己去自学讲义的话&#xff0c;比如张宇18讲&#xff0c;会漏掉一些重点&#xff0c;有的技…

进程间的通信--管道

文章目录 一、进程通信的介绍1.1进程间为什么需要通信1.2进程如何通信 二、管道2.1匿名管道2.1.1文件描述符理解管道2.1.2接口使用2.1.3管道的4种情况2.1.4管道的五种特征 2.2管道的使用场景2.2.1命令行中的管道2.2.2进程池 2.命名管道2.1.1原理2.2.2接口2.2.3代码实例 一、进程…

scipy库中,不同应用滤波函数的区别,以及FIR滤波器和IIR滤波器的区别

一、在 Python 中&#xff0c;有多种函数可以用于应用 FIR/IIR 滤波器&#xff0c;每个函数的使用场景和特点各不相同。以下是一些常用的 FIR /IIR滤波器应用函数及其区别&#xff1a; from scipy.signal import lfiltery lfilter(fir_coeff, 1.0, x)from scipy.signal impo…

【Docker-compose】搭建php 环境

文章目录 Docker-compose容器编排1. 是什么2. 能干嘛3. 去哪下4. Compose 核心概念5. 实战 &#xff1a;linux 配置dns 服务器&#xff0c;搭建lemp环境&#xff08;Nginx MySQL (MariaDB) PHP &#xff09;要求6. 配置dns解析配置 lemp Docker-compose容器编排 1. 是什么 …

springer latex模板参考文献不显示

原因 his is BibTeX, Version 0.99d (TeX Live 2024) The top-level auxiliary file: sn-article.aux I couldn’t open style file sn-mathphys-num.bst —line 2 of file sn-article.aux : \bibstyle{sn-mathphys-num : } I’m skipping whatever remains of this command I…

【智能算法改进】一种混合多策略改进的麻雀搜索算法

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】麻雀搜索算法&#xff08;SSA&#xff09;原理及实现 2.改进点 精英反向学习策略 将精英反向学习策略应用到初始化阶段, 通过反向解的生成与精英个体的选择, 不仅使算法搜索范围得到扩大, 提…

Gunicorn的预分叉架构:快速启动与高效资源利用

Gunicorn的预分叉架构&#xff1a;快速启动与高效资源利用 引言 Gunicorn&#xff08;Green Unicorn&#xff09;是一个Python WSGI HTTP服务器&#xff0c;设计用来为Python web应用提供高效、可靠的服务。Gunicorn支持同步和异步工作模式&#xff0c;并且兼容多种Web框架。…

从零开学C++:类和对象(上)

引言&#xff1a;在学习了C的入门级知识之后&#xff0c;现在就让我们一起进入类和对象的学习吧&#xff0c;该知识点我将分为上&#xff0c;中&#xff0c;下三个部分对其进行讲解。 更多有关C语言和数据结构的知识详解可前往个人主页&#xff1a;计信猫 目录 一&#xff0c;类…

通过实例说明.NET Autofac依赖注入的多种方式

Autofac提供了多种灵活的依赖注入方式&#xff0c;包括但不限于构造函数注入、属性注入、方法注入、字段注入、元数据注入和动态参数注入。根据具体的需求选择合适的注入方式&#xff0c;可以有效地管理对象的依赖关系和生命周期 构造函数注入 构造函数注入&#xff08;Const…

CSS 【详解】自定义属性(又名 CSS 变量)

声明变量 - - 变量命名规则 支持数字命名支持使用短横线和空格命名支持中文等CJK文字不支持包含$、[、]、^、(、)、%、"等特殊字符的命名&#xff0c;要使用这些特殊字符&#xff0c;需要使用反斜杠转义。 变量值 可以是任意值或表达式 --direction: to top;--gradient…

Android liveData 监听异常,fragment可见时才收到回调记录

背景&#xff1a;在app的fragment不可见的情况下使用&#xff0c;发现注册了&#xff0c;但是没有回调导致数据一直未更新&#xff0c;只有在fragment可见的时候才收到回调 // 观察通用信息mLightNaviTopViewModel.getUpdateCommonInfo().observe(this, new Observer<Common…

python 之修改host配置

背景&#xff1a;生产环境登录 test.ai.com &#xff0c;如果要登录验收的 test.ai.com 要改host配置&#xff0c;所以写了个python脚本 host生产环境配置为 # 192.163.0.0 test.ai.com host验收环境为 192.163.0.0 test.ai.com 不加host配置默认是生成哈 import os # C:…

[嵌入式 C 语言] 按位与、或、取反、异或

若协议中如下图所示&#xff1a; 注意&#xff1a; 长度为1&#xff0c;表示1个字节&#xff0c;也就是0xFF&#xff0c;也就是 1111 1111 &#xff08;这里0xFF只是单纯表示一个数&#xff0c;也可以是其他数&#xff0c;这里需要注意的是1个字节的意思&#xff09; 一、按位…

第三课网关作用

实验拓扑图&#xff1a; 基础配置&#xff1a; PC1的基础配置 PC2的基础配置&#xff1a; PC4的基础配置 AR1添加PC4网段: 并且添加pc1,pc2的网段。 并且添加pc1,pc2的网段。 原理&#xff1a;PC4先把数据交给100.100.100.1&#xff0c;交给了路由器&#xff0c;路由器再把数…

瑞萨RH850 RTC计时进位异常

RH850 MCU的RTC&#xff08;实时时钟&#xff09;采用BCD&#xff08;二进制编码的十进制&#xff09;编码格式&#xff0c;支持闰年自动识别&#xff0c;并具有秒、分、时、日、周、月、年的进位功能。其中&#xff0c;秒和分为60进位&#xff0c;时为12或24进位&#xff0c;周…