JRT打印药敏报告

news2024/9/24 15:17:32

最近没写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());
            //查询并且填充Data
            MakePrintDataMap(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.coloradmin.cn/o/1915161.html

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

相关文章

react学习——24redux实现求和案例(精简版)

1、目录结构 2、count/index.js import React, {Component} from "react"; //引入store,用于获取数据 import store from ../../redux/store export default class Count extends Component {state {count:store.getState()}componentDidMount() {//监测redux中的…

手撸俄罗斯方块(一)——简单介绍

手撸俄罗斯方块 简单介绍 《俄罗斯方块》&#xff08;俄语&#xff1a;Тетрис&#xff0c;英语&#xff1a;Tetris&#xff09;&#xff0c;是1980年末期至1990年代初期风靡全世界的电脑游戏&#xff0c;是落下型益智游戏的始祖&#xff0c;电子游戏领域的代表作之一&a…

关于气象探测设备的介绍

气象探测设备概述 气象探测设备是用于收集、记录和分析大气环境信息的专用工具。它们能够实时监测气温、湿度、气压、风速、风向、降雨量等多种气象要素&#xff0c;为天气预报、气候研究、农业生产和环境保护等领域提供重要数据支持。气象探测设备种类繁多&#xff0c;包括地…

【UML用户指南】-33-对体系结构建模-系统和模型

目录 1、系统和子系统 2、模型和视图 3、跟踪 4、常用建模技术 4.1、对系统的体系结构建模 4.2、对系统的系统建模 模型是对现实世界的简化——即对系统的抽象&#xff0c;建立模型的目的是为了更好地理解系统。 1、系统和子系统 一个系统可能被分解成一组子系统&#…

MySQL超详细学习教程,2023年硬核学习路线

文章目录 前言1. 数据库的相关概念1.1 数据1.2 数据库1.3 数据库管理系统1.4 数据库系统1.5 SQL 2. MySQL数据库2.1 MySQL安装2.2 MySQL配置2.2.1 添加环境变量2.2.2 新建配置文件2.2.3 初始化MySQL2.2.4 注册MySQL服务2.2.5 启动MySQL服务 2.3 MySQL登录和退出2.4 MySQL卸载2.…

推荐3款电脑必备专业软件,错过拍大腿

SolveigMM Video Splitter SolveigMM Video Splitter是一款功能强大的视频编辑工具&#xff0c;主要用于视频的无损剪切和合并。该软件支持多种常见的视频格式&#xff0c;如AVI、WMV、ASF、MP3、WMA等。此外&#xff0c;它还支持AVCHD、MPEG-2、WebM、FLV等格式&#xff0c;并…

论文 | REACT: SYNERGIZING REASONING AND ACTING INLANGUAGE MODELS

本文首先认为&#xff0c;到目前为止&#xff0c;LLM 在语言理解方面令人印象深刻&#xff0c;它们已被用来生成 CoT&#xff08;思想链&#xff09;来解决一些问题&#xff0c;它们也被用于执行和计划生成。 尽管这两者是分开研究的&#xff0c;但本文旨在以交错的方式将推理…

JDBC编程的学习——MYsql版本

目录 前言 什么是JDBC ??? 前置准备 使用JDBC的五个关键步骤 1.建立与数据库的连接 2.创建具体的sql语句和Statement 3.执行SQL语句 4.处理结果集 5.释放资源 完整流程展示 前言 笔者在先前的博客就提过会写关于JDBC的内容 [Mysql] 的基础知识和sql 语句.教你速成…

python怎么调用cmd命令

关于python调用cmd命令&#xff1a; 1、python的OS模块 OS模块调用CMD命令有两种方式&#xff1a;os.popen()、os.system()都是用当前进程来调用。 OS.system是无法获取返回值的。当运行结束后接着往下面执行程序。用法如&#xff1a;OS.system("ipconfig"). OS.…

Invoice OCR

Invoice OCR 发票识别 其他类型ORC&#xff1a; DIPS_YTPC OCR-CSDN博客

【AI大模型】检索增强生成(RAG)模型在企业中的应用

彩蛋 ChatGPT4相比于ChatGPT3.5,有着诸多不可比拟的优势&#xff0c;比如图片生成、图片内容解析、GPTS开发、更智能的语言理解能力等&#xff0c;但是在国内使用GPT4存在网络及充值障碍等问题&#xff0c;如果您对ChatGPT4.0感兴趣&#xff0c;可以私信博主为您解决账号和环境…

基于Make的c工程No compilation commands found报错

由于安装gcc时只安装了build-essential&#xff0c;没有将其添加到环境变量中&#xff0c;因此打开Make工程时&#xff0c;CLion会产生如下错误&#xff1a; 要解决这个问题&#xff0c;一个方法是将GCC添加到环境变量中&#xff0c;但是这个方法需要修改至少两个配置文件&…

校园外卖系统带万字文档在线外卖管理系统java项目java课程设计java毕业设计

文章目录 校园外卖系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码带万字文档&#xff08;9.9&#xffe5;带走&#xff09; 校园外卖系统 一、项目演示 校园外卖服务系统 二、项目介绍 语言&#xff1a;java 数据库&…

MySQL实现数据备份的方式可以基于哪几种?

MySQL 数据库实现数据备份的方式主要有以下几种&#xff1a; 物理备份 (Physical Backup)&#xff1a; 冷备份 (Cold Backup)&#xff1a;在数据库关闭的情况下&#xff0c;直接复制数据库文件&#xff08;数据文件、日志文件等&#xff09;。这种方式操作简单&#xff0c;但是…

pd虚拟机去虚拟化是什么意思?pd虚拟机去虚拟化教程 PD虚拟机优化设置

Parallels Desktop for Mac&#xff08;PD虚拟机&#xff09;去虚拟化是指在虚拟机&#xff08;Virtual Machine&#xff0c;简称 VM&#xff09;中禁用或减少虚拟化层的影响&#xff0c;使其表现更接近于物理机。这种操作通常用于提高虚拟机的性能或解决某些软件兼容性问题。具…

【BUG】Python3|COPY 指令合并 ts 文件为 mp4 文件时长不对(含三种可执行源代码和解决方法)

文章目录 前言源代码FFmpeg的安装1 下载2 安装 前言 参考&#xff1a; python 合并 ts 视频&#xff08;三种方法&#xff09;使用 FFmpeg 合并多个 ts 视频文件转为 mp4 格式 Windows 平台下&#xff0c;用 Python 合并 ts 文件为 mp4 文件常见的有三种方法&#xff1a; 调用…

系统数据加密传输的实现

文章目录 1、背景2、需求3、实现思路3.1 密码加密3.2 密码解密3.3 nacos密码加密 4、相关工具类4.1 非对称加密RSA4.2 对称加密AES4.3 Nacos加解密的实现&#xff1a;Jasypt 5、历史数据兼容处理 1、背景 用户在浏览器发送请求数据到后台系统&#xff0c;期间数据在网络传输&a…

osgverse浏览器端编译

目录 1 WSL安装(Windows subsystem for Linux)2 emsdk准备3 SetUp.sh安装(osgverse源码目录下)4 显示与问题 内容 WSL安装(Windows subsystem for Linux) 安装wsl&#xff1a;wsl --install 将版本设置为wsl1(因为版本2比版本1慢很多)&#xff1a;wsl --set-version ubuntu 1…

防火墙基础实验配置

一&#xff0c;实验拓扑 二&#xff0c;实验需求&#xff1a; 1.DMZ区内的服务器&#xff0c;办公区仅能在办公时间内&#xff08;9&#xff1a;00 - 18&#xff1a;00&#xff09;可以访问&#xff0c;生产区的设备全天可以访问 2.生产区不允许访问互联网&#xff0c;办公区…

迂回战术:“另类“全新安装 macOS 15 Sequoia beta2 的极简方法

概述 随着 WWDC 24 的胜利闭幕&#xff0c;Apple 平台上各种 beta 版的系统也都“跃跃欲出”&#xff0c;在 mac 上自然也不例外。 本次全新的 macOS 15 Sequoia&#xff08;红杉&#xff09;包含了诸多重磅升级&#xff0c;作为秃头开发者的我们怎么能不先睹为快呢&#xff1…