JRT打印报告示例

借助JRT实现的打印客户端和打印元素绘制协议及表格元素,设计器基本成型,这次可以试着写一个用模板控制布局的打印报告示例了,测试点报告表格维护、打印标签、打印数据、打印条码、打印图片、打印表格。基于新架构的代码比M写打印简单多了,容错性更好。

设计器维护的模板
在这里插入图片描述

界面调用
在这里插入图片描述
打印效果
在这里插入图片描述
界面调用代码
在这里插入图片描述

示例代码,底层基础牢固了实现起来就很简单了,这个例子就能很好的代码基于JRT的打印业务实现

import JRT.Core.DataGrid.GridDto;
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.Entity.JRTPrintTemplate;
import JRT.Model.Entity.JRTPrintTemplateEle;
import JRTBLLBase.BaseHttpHandlerNoSession;
import JRTBLLBase.Helper;import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;/*** 调用模板数据来打印,这是一个模拟打印的demo,调用模板数据组装打印数据*/
public class PrintTemplateTest extends BaseHttpHandlerNoSession {/*** 按传入的RowID输出符合打印元素绘制协议的数据来实现打印控制** @param RowID   业务主键* @param P1* @param P2* @param P3* @param P4* @param P5* @param P6* @param P7* @param P8* @param P9* @param P10* @param P11* @param P12* @param P13* @param Session* @param Output* @return*/public String GetData(String RowID, String P1, String P2, String P3, String P4, String P5, String P6, String P7, String P8, String P9, String P10, String P11, String P12, String P13, OutValue Session, OutValue Output) throws Exception {List<PrintElement> retList = new ArrayList<>();//查询模板数据JRTPrintTemplateDto template = GetOneTemplate(null, "JRTReport");//存打印的Data数据Hashtable<String, String> printDataMap = new Hashtable<>();printDataMap.put("姓名", "小乌鱼");printDataMap.put("性别", "男");printDataMap.put("年龄", "32岁");printDataMap.put("登记号", "0947809");printDataMap.put("检验号", "24011901");printDataMap.put("科室", "体检科");printDataMap.put("标本", "全血");printDataMap.put("床号", "");printDataMap.put("诊断", "体检");printDataMap.put("采集日期", "2024-01-19");printDataMap.put("采集时间", "16:00");printDataMap.put("医嘱备注", "体检");printDataMap.put("医嘱名称", "血细胞分析五分类");printDataMap.put("申请医生", "乌鱼");printDataMap.put("申请日期", "2024-01-19");printDataMap.put("操作者", "李四");printDataMap.put("审核日期", "2024-01-19");printDataMap.put("审核时间", "17:00");printDataMap.put("审核者", "张三");//存打印的图数据Hashtable<String, String> printImgMap = new Hashtable<>();printImgMap.put("RPC", "http://localhost:8080/JRTWeb/FileService/zlz/logo.png");//存项目结果数据List<Object> repResList = new ArrayList<>();RepResPrintDto oneRes = new RepResPrintDto();oneRes.AbFlag = "*";oneRes.RefRange = "12-34um/ml";oneRes.Result = "50";oneRes.Seq = "1";oneRes.TestCodeName = "白细胞计数";repResList.add(oneRes);oneRes = new RepResPrintDto();oneRes.AbFlag = "*";oneRes.RefRange = "12-34um/ml";oneRes.Result = "50";oneRes.Seq = "2";oneRes.TestCodeName = "红细胞计数";repResList.add(oneRes);oneRes = new RepResPrintDto();oneRes.AbFlag = "";oneRes.RefRange = "12-34um/ml";oneRes.Result = "33";oneRes.Seq = "3";oneRes.TestCodeName = "淋巴细胞计数";repResList.add(oneRes);oneRes = new RepResPrintDto();oneRes.AbFlag = "↓";oneRes.RefRange = "22-34um/ml";oneRes.Result = "5";oneRes.Seq = "4";oneRes.TestCodeName = "单核细胞计数";repResList.add(oneRes);oneRes = new RepResPrintDto();oneRes.AbFlag = "↓";oneRes.RefRange = "22-34um/ml";oneRes.Result = "5";oneRes.Seq = "5";oneRes.TestCodeName = "单核细胞计数";repResList.add(oneRes);oneRes = new RepResPrintDto();oneRes.AbFlag = "↓";oneRes.RefRange = "22-34um/ml";oneRes.Result = "5";oneRes.Seq = "6";oneRes.TestCodeName = "单核细胞计数";repResList.add(oneRes);oneRes = new RepResPrintDto();oneRes.AbFlag = "↓";oneRes.RefRange = "22-34um/ml";oneRes.Result = "5";oneRes.Seq = "7";oneRes.TestCodeName = "单核细胞计数";repResList.add(oneRes);oneRes = new RepResPrintDto();oneRes.AbFlag = "↓";oneRes.RefRange = "22-34um/ml";oneRes.Result = "5";oneRes.Seq = "8";oneRes.TestCodeName = "单核细胞计数";repResList.add(oneRes);//画图片元素PrintImage(template, retList, printImgMap);//画数据元素PrintData(template, retList, printDataMap);//画标签元素PrintLabel(template, retList);//画线元素PrintLine(template, retList);//画表格元素PrintDataGrid(template, retList, repResList);return Helper.Object2Json(retList);}/*** 输出报告结果** @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")) {//得到表格定义GridDto defGrid = (GridDto) Helper.Json2Object(ele.PrintText, GridDto.class);int lastY = PrintDrawProtocol.DrawGrid(retList, defGrid, null, repResList, "", null);}}}/*** 输出图片** @param template* @param template     模板* @param retList      元素列表* @param printDataMap 数据哈希*/private void PrintImage(JRTPrintTemplateDto template, List<PrintElement> retList, Hashtable<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);}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")) {int width = ele.PrintWidth;int height = ele.PrintHeight;int endX = ele.PrintX + width;int endY = ele.PrintY;int 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;}/*** 存获得的一个模板数据*/public static class JRTPrintTemplateDto extends JRTPrintTemplate {/*** 模板元素*/public List<JRTPrintTemplateEle> EleList;}/*** 打印的报告结果实体*/public static class RepResPrintDto {/*** 序号*/public String Seq;/*** 项目名称*/public String TestCodeName;/*** 结果*/public String Result;/*** 标志*/public String AbFlag;/*** 参考范围*/public String RefRange;}
}

后面会进行更细致的打磨,包括集中打印等测试示例实现

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

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

相关文章

时间序列预测模型实战案例(三)(LSTM)(Python)(深度学习)时间序列预测(包括运行代码以及代码讲解)

目录 引言 LSTM的预测效果图 LSTM机制 了解LSTM的结构 忘记门 输入门 输出门 LSTM的变体 只有忘记门的LSTM单元 独立循环(IndRNN)单元 双向RNN结构(LSTM) 运行代码 代码讲解 引言 LSTM&#xff08;Long Short-Term Memory&#xff09;是一种常用的循环神经网络&a…

二叉树的基础概念及遍历

二叉树(Binary Tree)的基础 1、树的概念 1、树的概念 树是一种非线性的数据结构&#xff0c;是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合&#xff0c;将它称为树&#xff0c;是因为在形状上像一颗倒着的树&#xff0c;如下图所示就是一颗二叉…

有同事线上环境修改表字段长度,导致mysql死锁

虽然是小表&#xff0c;数据量只有几十。但是有接口的访问量大&#xff0c;其中会使用到这张表。 线上更改的varchar的长度&#xff0c;导致锁表。结果直接导致接口服务挂了。 navicat有工具可以直接看进程 命令方式 定位 show OPEN TABLES where In_use > 0; show pro…

day02:列表、表格、表单

01-列表 作用&#xff1a;布局内容排列整齐的区域。 列表分类&#xff1a;无序列表、有序列表、定义列表。 无序列表 作用&#xff1a;布局排列整齐的不需要规定顺序的区域。 标签&#xff1a;ul 嵌套 li&#xff0c;ul 是无序列表&#xff0c;li 是列表条目。 <ul>…

怎么做表单链接_从表单链接到营销策略

从表单链接到营销策略&#xff1a;一场无与伦比的转化之旅 在数字营销的世界里&#xff0c;表单链接是一种至关重要的元素。它不仅是一个简单的链接&#xff0c;更是企业与潜在客户之间建立联系的桥梁。如何将表单链接巧妙地融入营销策略&#xff0c;让潜在客户转化为真正的客…

【C语言】- 设置控制台标题、编码、文字颜色、大小和字体

【C语言】- 设置控制台标题、编码、文字颜色、大小和字体 文章目录 【C语言】- 设置控制台标题、编码、文字颜色、大小和字体1 - 设置控制台标题2 - 设置控制台编码3 - 设置控制台字体和大小参考链接 1 - 设置控制台标题 因为要用到 Windows API&#xff0c;所以需要包含头文件…

移动端 h5-table react版本支持虚拟列表

介绍 适用于 react ts 的 h5 移动端项目 table 组件 github 链接 &#xff1a;https://github.com/duKD/react-h5-table 有帮助的话 给个小星星 有两种表格组件 常规的&#xff1a; 支持 左侧固定 滑动 每行点击回调 支持 指定列排序 支持滚动加载更多 效果和之前写的vue…

C++(13)——string

上篇文章中介绍了中部分函数的用法&#xff0c;本篇文章将继续对其他的函数进行介绍&#xff1a; 1. substr: string substr (size_t pos 0, size_t len npos) const; 函数的两个参数如上述代码所示&#xff0c;此函数的主要作用是根据一个已有的的对象的起始坐标开始&a…

linux磁盘,分区,挂载等等

1. 修改磁盘分区的标签 例如&#xff1a;733be18b-7baf-d84c-879d-ca3db465f179太长了&#xff0c;修改一下。 linuxchenxiao:/media/linux/733be18b-7baf-d84c-879d-ca3db465f179$ 先 sudo blkid sudo blkid 找到你想修改的UUID(唯一标识符) /dev/sda1: UUID"733be…

RK3566 linux加入uvc app

SDK中external/uvc_app/目录提供了将板卡模拟成uvc camera的功能。 一、buildroot使能uvc_app 1、进入到buildroot目录 在sdk目录下执行以下命令&#xff1a; cd buildroot 2、选择defconfig 执行命令&#xff1a; source build/envsetup.sh 输入数字然后回车选择板卡&…

(C++) list底层模拟实现

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 首先&#xff0c;list底层是一个带头双向循环链表&#xff0c;再一个&#xff0c;我们还要解决一个问题&#xff0c;list的迭代器&#xff0c;vector和string的迭代器可以直接&#xff0c;是因为他们的地址空间是连续的&…

An Association-Based Fusion Method for Multi-Modal Classification

F ∈ { C o n c a t ; A d d } \in\{Concat;Add\} ∈{Concat;Add} 辅助信息 作者未提供代码