From 02c010fde33c467e3192f545a38ebf375121a509 Mon Sep 17 00:00:00 2001 From: zhaowenxuan <chacca165@163.com> Date: 星期一, 22 七月 2024 10:30:42 +0800 Subject: [PATCH] 非化验项目以以及检查增加签名图片 检查因编码不能匹配暂注 --- ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java | 204 ++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 160 insertions(+), 44 deletions(-) diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java index 98de276..c9518ba 100644 --- a/ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java +++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java @@ -2,14 +2,13 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; -import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.itextpdf.text.*; import com.itextpdf.text.pdf.*; import com.itextpdf.text.pdf.draw.LineSeparator; import com.ltkj.common.core.domain.AjaxResult; +import com.ltkj.common.core.domain.entity.SysUser; import com.ltkj.common.utils.DateUtils; import com.ltkj.framework.config.MatchUtils; import com.ltkj.hosp.domain.*; @@ -75,10 +74,6 @@ private DictUserInfoMapper dictUserInfoMapper; @Autowired private ISysConfigService sysConfigService; - -// private static final - // TODO PDF鎵�鏈夊尰甯堝悕瀛楁樉绀� 鏍规嵁閰嶇疆is_report_pdf_use_ysqm鍐冲畾鏄惁浣跨敤绛惧悕鍥剧墖 - // TODO 鏈夌鍚嶅浘鐗囧垯浣跨敤绛惧悕鍥剧墖 娌℃湁鍒欎娇鐢ㄦ枃瀛楁樉绀� private List<Map<String, Object>> makePDFInfo(HashMap<String, Object> map, AjaxResult ajaxResult, String key) { List<Map<String, Object>> data = null; @@ -202,6 +197,13 @@ List<LtkjGetexamreportinfo> list = ltkjGetexamreportinfoService.list(lambdaQueryWrapper); // List<LtkjGetexamreportinfo> list = ltkjGetexamreportinfoService.list(); List<ByteArrayOutputStream> jianchas = new ArrayList<>(); + Paragraph elements = new Paragraph(); + elements.setLeading(5f); + elements.setSpacingBefore(10f); + elements.setSpacingAfter(10f); + elements.setAlignment(Element.ALIGN_RIGHT); + Phrase phrase = new Phrase(); + Font doctorFonts = PdfUtils.setFont(9); for (LtkjGetexamreportinfo getexamreportinfo : list) { String xm = getexamreportinfo.getHzxm(); String xb = getexamreportinfo.getHzxb().equals("2") ? "濂�" : "鐢�"; @@ -223,13 +225,79 @@ String sqrxm = getexamreportinfo.getSqrxm(); String zyh = ""; String ch = ""; - String footer = "鐢宠浜猴細" + sqrxm + " 瀹℃牳鍖诲笀锛�" + shysqm + " 鍖诲笀绛惧悕锛�" + bgysqm; - ByteArrayOutputStream outputStream = makeJcPDFByteArrayStream(xm, xb, nl, jcks, zyh, ch, sjks, jcsb, jch, jcxm, ms, ts, null, footer); + String sqrbh = getexamreportinfo.getSqrbh(); + String shysbh = getexamreportinfo.getShysbh(); + String bgysbh = getexamreportinfo.getBgysbh(); + String jcysqm = getexamreportinfo.getJcysqm(); + String jcysbh = getexamreportinfo.getJcysbh(); + StringBuilder builder; + String footer; + // 妫�鏌ヨ繑鍥炵殑鍖诲笀缂栫爜涓嶅睘浜巋is鍖诲笀id 鏆傛敞閲� +// String key = sysConfigService.selectConfigByKey("is_report_pdf_use_ysqm"); +// if (key.equals("Y")){ +// footer = null; +// if (null != sqrbh && StrUtil.isNotBlank(sqrbh)){ +// makeYiShiInfoLine(phrase, doctorFonts, sqrxm, sqrbh,"鐢宠浜猴細"); +// } +// if (null != jcysbh && StrUtil.isNotBlank(jcysbh)){ +// makeYiShiInfoLine(phrase, doctorFonts, jcysqm, jcysbh," 妫�鏌ュ尰甯堬細"); +// } +// if (null != shysbh && StrUtil.isNotBlank(shysbh)){ +// makeYiShiInfoLine(phrase, doctorFonts, shysqm, shysbh," 瀹℃牳鍖诲笀锛�"); +// } +// if (null != bgysbh && StrUtil.isNotBlank(bgysbh)){ +// makeYiShiInfoLine(phrase, doctorFonts, bgysqm, bgysbh," 鎶ュ憡鍖诲笀锛�"); +// } +// }else { + builder = new StringBuilder(); + if (null != sqrxm && StrUtil.isNotBlank(sqrxm)){ + builder.append("鐢宠浜猴細").append(sqrxm); + } + if (null != jcysqm && StrUtil.isNotBlank(jcysqm)){ + builder.append(" 妫�鏌ュ尰甯堬細").append(jcysqm); + } + if (null != shysqm && StrUtil.isNotBlank(shysqm)){ + builder.append(" 瀹℃牳鍖诲笀锛�").append(shysqm); + } + if (null != bgysqm && StrUtil.isNotBlank(bgysqm)){ + builder.append(" 鎶ュ憡鍖诲笀锛�").append(bgysqm); + } + footer = builder.toString().trim(); +// } +// elements.add(phrase); + ByteArrayOutputStream outputStream = makeJcPDFByteArrayStream(xm, xb, nl, jcks, zyh, ch, sjks, jcsb, jch, jcxm, ms, ts, null, footer,elements); if (outputStream == null) throw new Exception(); jianchas.add(outputStream); } return jianchas; + } + + /** + * 鍖诲笀淇℃伅琛� + * @param phrase + * @param doctorFonts + * @param sqrxm + * @param sqrbh + * @throws BadElementException + */ + private void makeYiShiInfoLine(Phrase phrase, Font doctorFonts, String sqrxm, String sqrbh,String title) throws BadElementException { + String qmImg = dictUserInfoMapper.selectQmImgInnerJoinUserByHisDictCode(sqrbh); +// String qmImg = dictUserInfoMapper.selectQmImgInnerJoinUserByUserId(sqrbh); + if (null != qmImg && StrUtil.isNotBlank(qmImg)) { + byte[] decode = Base64.getDecoder().decode(qmImg); + Image image = null; + try { + image = Image.getInstance(decode); + image.scaleToFit(60, 25); + phrase.add(new Chunk(title,doctorFonts)); + phrase.add(new Chunk(image,0,-10,true)); + } catch (IOException e) { + phrase.add(new Chunk(title+sqrxm, doctorFonts)); + } + }else { + phrase.add(new Chunk(title+sqrxm, doctorFonts)); + } } /** @@ -259,7 +327,7 @@ * @param map * @throws DocumentException */ - private void makeHisJianYanTable(Document document1, HashMap<String, Object> map) throws DocumentException, IOException { + private void makeHisJianYanTable(Document document1, HashMap<String, Object> map) throws DocumentException { if (!map.isEmpty()) { String[] titles = new String[]{"浣撴椤圭洰", "浣撴缁撴灉", "鍗曚綅", "鍙傝�冭寖鍥�"}; float[] titlesWidth = new float[]{120, 120, 120, 120}; @@ -286,11 +354,15 @@ String[] split = s.split("\\|"); String qmImg = dictUserInfoMapper.selectQmImgInnerJoinUserByHisDictCode(split[1]); if (null != qmImg && StrUtil.isNotBlank(qmImg)) { - ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(Base64.getDecoder().decode(qmImg)); byte[] decode = Base64.getDecoder().decode(qmImg); - Image image = Image.getInstance(decode); - image.scaleToFit(60, 25); - phrase.add(new Chunk(image,0,-10,true)); + Image image = null; + try { + image = Image.getInstance(decode); + image.scaleToFit(60, 25); + phrase.add(new Chunk(image,0,-10,true)); + } catch (IOException e) { + phrase.add(new Chunk(split[0].trim(),doctorFonts)); + } } else { phrase.add(new Chunk(split[0].trim(),doctorFonts)); } @@ -373,20 +445,7 @@ document1.add(pp); } //鍒ゆ柇涓绘鍖诲笀鏄惁涓虹┖ 绌轰笉鑳芥樉绀簄ull - if (null != entry.getKey().getDoctorName() && null != userService.getById(entry.getKey().getDoctorName())) { - //涓绘鍖诲笀 - String doctorName = "涓绘鍖诲笀锛�" + userService.getById(entry.getKey().getDoctorName()).getNickName(); - Font doctorFonts = PdfUtils.setFont(9); - Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName); - df.setAlignment(Element.ALIGN_RIGHT); - document1.add(df); - } else { - String doctorName = "涓绘鍖诲笀锛�" + "鏃�"; - Font doctorFonts = PdfUtils.setFont(9); - Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName); - df.setAlignment(Element.ALIGN_RIGHT); - document1.add(df); - } + zhuJianYiShi(document1, entry); //鍒嗗壊绾� LineSeparator objectName = new LineSeparator(); document1.add(objectName); @@ -435,25 +494,69 @@ document1.add(pp); } //鍒ゆ柇涓绘鍖诲笀鏄惁涓虹┖ 绌轰笉鑳芥樉绀簄ull - if (null != entry.getKey().getDoctorName() && null != userService.getById(entry.getKey().getDoctorName())) { - //涓绘鍖诲笀 - String doctorName = "涓绘鍖诲笀锛�" + userService.getById(entry.getKey().getDoctorName()).getNickName(); - Font doctorFonts = PdfUtils.setFont(9); - Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName); - df.setAlignment(Element.ALIGN_RIGHT); - document1.add(df); - } else { - String doctorName = "涓绘鍖诲笀锛�" + "鏃�"; - Font doctorFonts = PdfUtils.setFont(9); - Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName); - df.setAlignment(Element.ALIGN_RIGHT); - document1.add(df); - } + zhuJianYiShi(document1, entry); //鍒嗗壊绾� LineSeparator objectName = new LineSeparator(); document1.add(objectName); } } + } + } + + /** + * 涓昏鍖诲笀琛屾樉绀鸿缃� + * @param document1 + * @param entry + * @throws DocumentException + */ + private void zhuJianYiShi(Document document1, Map.Entry<TjOrderRemark, List<TjPdfVO>> entry) throws DocumentException { + if (null != entry.getKey().getDoctorName() && null != userService.getById(entry.getKey().getDoctorName())) { + //涓绘鍖诲笀 + String key = sysConfigService.selectConfigByKey("is_report_pdf_use_ysqm"); + SysUser sysUser = userService.getById(entry.getKey().getDoctorName()); + Font doctorFonts = PdfUtils.setFont(9); + if (key.equals("Y")){ + String qmImg = dictUserInfoMapper.selectQmImgInnerJoinUserByUserId(String.valueOf(sysUser.getUserId())); + if (null != qmImg && StrUtil.isNotBlank(qmImg)) { + Paragraph elements = new Paragraph(); + elements.setLeading(5f); + elements.setSpacingBefore(10f); + elements.setSpacingAfter(10f); + elements.setAlignment(Element.ALIGN_RIGHT); + Phrase phrase = new Phrase(); + phrase.add(new Chunk("涓绘鍖诲笀锛�",doctorFonts)); + byte[] decode = Base64.getDecoder().decode(qmImg); + Image image = null; + try { + image = Image.getInstance(decode); + image.scaleToFit(60, 25); + phrase.add(new Chunk(image,0,-10,true)); + elements.add(phrase); + document1.add(elements); + } catch (IOException e) { + String doctorName = "涓绘鍖诲笀锛�" + sysUser.getNickName(); + Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName); + df.setAlignment(Element.ALIGN_RIGHT); + document1.add(df); + } + }else { + String doctorName = "涓绘鍖诲笀锛�" + sysUser.getNickName(); + Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName); + df.setAlignment(Element.ALIGN_RIGHT); + document1.add(df); + } + }else { + String doctorName = "涓绘鍖诲笀锛�" + sysUser.getNickName(); + Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName); + df.setAlignment(Element.ALIGN_RIGHT); + document1.add(df); + } + } else { + String doctorName = "涓绘鍖诲笀锛�" + "鏃�"; + Font doctorFonts = PdfUtils.setFont(9); + Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName); + df.setAlignment(Element.ALIGN_RIGHT); + document1.add(df); } } @@ -870,12 +973,17 @@ * @param footer * @return bytearrayoutputstream */ - public static ByteArrayOutputStream makeJcPDFByteArrayStream(String xm, String xb, String nl, String jcks, String zyh, String ch, String sjks, String jcsb, String jch, String jcxm, String ms, String ts, File[] files, String footer) { + public static ByteArrayOutputStream makeJcPDFByteArrayStream(String xm, String xb, String nl, String jcks, String zyh, String ch, String sjks, String jcsb, String jch + , String jcxm, String ms, String ts, File[] files, String footer,Paragraph elements) { try { Document document = new Document(PageSize.A4); ByteArrayOutputStream baos = new ByteArrayOutputStream(); PdfWriter writer = PdfWriter.getInstance(document, baos); - writer.setPageEvent(new Footer(footer)); + if (footer != null) { + writer.setPageEvent(new Footer(footer)); + } else { + writer.setPageEvent(new Footer(elements)); + } document.open(); document.setMargins(70, 70, 40, 40); @@ -1146,9 +1254,14 @@ static class Footer extends PdfPageEventHelper { private String footerText; private Font footerFont = PdfUtils.setFont(10); + private Paragraph paragraph; public Footer(String footerText) { this.footerText = footerText; + } + + public Footer(Paragraph paragraph){ + this.paragraph = paragraph; } @Override @@ -1158,7 +1271,10 @@ footer.setWidthPercentage(100); footer.getDefaultCell().setBorder(Rectangle.NO_BORDER); footer.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER); - footer.addCell(new Phrase(footerText, footerFont)); + if (footerText != null) + footer.addCell(new Phrase(footerText, footerFont)); + if (paragraph != null) + footer.addCell(paragraph); footer.writeSelectedRows(0, -1, 36, 50, writer.getDirectContent()); } } -- Gitblit v1.8.0