From 1e91dc33009cfdc951b2642877f40280b51c3089 Mon Sep 17 00:00:00 2001
From: zjh <1084500556@qq.com>
Date: 星期五, 28 二月 2025 15:17:01 +0800
Subject: [PATCH] zjh20250228

---
 ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java | 3741 +++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 2,883 insertions(+), 858 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 66484cb..dd2f9cb 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
@@ -6,36 +6,54 @@
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.itextpdf.text.*;
+import com.itextpdf.text.Font;
+import com.itextpdf.text.Image;
+import com.itextpdf.text.Rectangle;
 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.SysDictData;
 import com.ltkj.common.core.domain.entity.SysUser;
 import com.ltkj.common.utils.DateUtils;
-import com.ltkj.common.utils.StringUtils;
+import com.ltkj.common.utils.SecurityUtils;
 import com.ltkj.framework.config.MatchUtils;
 import com.ltkj.hosp.domain.*;
+import com.ltkj.hosp.mapper.DictUserInfoMapper;
+import com.ltkj.hosp.mapper.TjOrderDetailMapper;
+import com.ltkj.hosp.mapper.TjOrderRemarkMapper;
+import com.ltkj.hosp.mapper.TjRulesMapper;
 import com.ltkj.hosp.service.*;
+import com.ltkj.hosp.sqlDomain.LtkjExamJcbgd;
 import com.ltkj.hosp.sqlDomain.LtkjHybgd;
 import com.ltkj.hosp.sqlDomain.LtkjHysqd;
-import com.ltkj.mall.mallOrderUtils.TjConstants;
+import com.ltkj.hosp.vodomain.CsProVo;
+import com.ltkj.system.service.ISysConfigService;
+import com.ltkj.system.service.ISysDictDataService;
 import com.ltkj.system.service.ISysUserService;
 import com.ltkj.web.config.pdfutils.PdfUtils;
+import com.ltkj.web.controller.system.SysDeptController;
+import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.Resource;
+import java.awt.*;
 import java.io.*;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.math.BigDecimal;
+import java.text.Collator;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
 
-import static com.ltkj.web.config.pdfutils.PDFBinaryUtil.getPDFBinary;
+import static com.ltkj.common.utils.pdfutils.PdfUtils.createTable;
 
 /**
  * 妫�鏌� 妫�楠屾姤鍛妏df鐢熸垚
@@ -75,77 +93,40 @@
     private String value;
     @Value("${path.reportServer}")
     private String urlValue;
+    @Autowired
+    private DictUserInfoMapper dictUserInfoMapper;
+    @Autowired
+    private ISysConfigService sysConfigService;
+    @Resource
+    private LtkjExamJcbgdService jcbgdService;
+    @Resource
+    private LtkjExamJcsqdService jcsqdService;
+    @Autowired
+    private IDictHospService dictHospService;
+    @Autowired
+    private ISysDictDataService sysDictDataService;
+    @Autowired
+    private ITjRulesService tjRulesService;
+    @Autowired
+    private TjRulesMapper tjRulesMapper;
+    @Autowired
+    private TjOrderRemarkMapper tjOrderRemarkMapper;
+    @Autowired
+    private TjOrderDetailMapper tjOrderDetailMapper;
+    @Autowired
+    private SysDeptController sysDeptController;
+    @Autowired
+    private ITjProAdvicerulesService tjProAdvicerulesService;
+    @Autowired
+    private TjOrderYcxmService ycxmService;
 
-//    private static final
+    private Integer pdfPage = 0;
 
-    /**
-     * 閫氳繃his API璇锋眰鑾峰彇鏁版嵁鐢熸垚PDF
-     * @param pdfInfoMap
-     * @param params
-     * @param tjOrder
-     * @param tjReportTemplate
-     * @return
-     * @deprecated 鏈夋暟鎹悓姝ヤ笉鍦ㄨ皟鐢ㄦ帴鍙h幏鍙栨暟鎹洿鎺ユ煡鏁版嵁搴撴嬁鏁版嵁鐢熸垚
-     */
-    @Deprecated
-    public AjaxResult execHisRequest(HashMap<String, Object> pdfInfoMap, Map<String, Object> params,TjOrder tjOrder,TjReportTemplate tjReportTemplate) {
-        List<Map<String, Object>> list;
-        String hisRegistrationId = params.get("his_registration_id").toString();
-        AjaxResult getlabreportinfo = apiGetMethodService.getHISDataNew("Getlabreportinfo", params);
-        list = makePDFInfo(pdfInfoMap, getlabreportinfo, "鑾峰彇妫�楠屾姤鍛婅褰曚俊鎭�");
-        JSONArray jsonArray = JSONUtil.createArray();
-        if (list != null) {
-            params.clear();
-            for (Map<String, Object> stringObjectMap : list) {
-                if (stringObjectMap == null)
-                    continue;
-                JSONObject obj = JSONUtil.createObj();
-                obj.putOpt("鎶ュ憡璁板綍", stringObjectMap);
-                String jybgid = stringObjectMap.get("JYBGID").toString();
-                params.put("jybgid", jybgid);
-                // 鑾峰彇妫�楠岀粨鏋滆褰曚俊鎭�
-                AjaxResult getlabdetailinfo = apiGetMethodService.getHISDataNew("Getlabdetailinfo", params);
-                putData(obj, getlabdetailinfo, "妫�楠岀粨鏋滆褰�");
-                // 鑾峰彇寰敓鐗╂姤鍛婅褰曚俊鎭�
-                AjaxResult getlabgermrepinfo = apiGetMethodService.getHISDataNew("Getlabgermrepinfo", params);
-                putData(obj, getlabgermrepinfo, "寰敓鐗╂姤鍛婅褰�");
-                // 鑾峰彇寰敓鐗╄嵂鏁忎俊鎭�
-                AjaxResult getlabgermdetailinfo = apiGetMethodService.getHISDataNew("Getlabgermdetailinfo", params);
-                putData(obj, getlabgermdetailinfo, "寰敓鐗╄嵂鏁忎俊鎭�");
-                // 鑾峰彇鍗辨�ュ�间俊鎭�
-                AjaxResult getlaburgentinfo = apiGetMethodService.getHISDataNew("Getlaburgentinfo", params);
-                putData(obj, getlaburgentinfo, "鍗辨満鍊间俊鎭�");
-                jsonArray.put(obj);
-            }
-            // 鑾峰彇妫�鏌ユ姤鍛婁俊鎭�
-            params.clear();
-            params.put("his_registration_id", hisRegistrationId);
-            params.put("ksmc", "");
-            params.put("pationid", "");
-            params.put("ksrq", "");
-            params.put("jsrq", "");
-            params.put("pagecount", 100);
-            params.put("page", 1);
-            params.put("status", "");
-            AjaxResult getexamreportinfo = apiGetMethodService.getHISDataNew("Getexamreportinfo", params);
-            JSONObject object = JSONUtil.parseObj(getexamreportinfo.get("result"));
-            JSONObject response = JSONUtil.parseObj(object.get("Response"));
-            if (!response.getStr("ResultCode").equals("0")) {
-                if (!response.getStr("ResultContent").contains("鏌ヨ澶辫触"))
-                    return AjaxResult.error("鐢熸垚瓒呮椂锛岃閲嶈瘯");
-            }
-            JSONObject obj = JSONUtil.createObj();
-            putData(obj, getexamreportinfo, "妫�鏌ユ姤鍛�");
-            jsonArray.put(obj);
-//            System.out.println(JSONUtil.toJsonStr(jsonArray));
-            if (makePDF(hisRegistrationId, jsonArray,tjOrder,tjReportTemplate)) {
-                log.info("宸茬敓鎴愭姤鍛�");
-                return AjaxResult.success("宸茬敓鎴愭姤鍛婏紒鍙洿鎺ョ偣鍑婚瑙堬紒");
-            } else return AjaxResult.error();
-        } else {
-            return AjaxResult.error("鏈幏鍙栧埌妫�楠屾姤鍛婅褰曚俊鎭�");
-        }
-    }
+    private static int DEFAULT_FONT_SIZE = 10;
+    private static int DEFAULT_LITTLE_TITLE_FONT_SIZE = 11;
+    private static int DEFAULT_TITLE_FONT_SIZE = 12;
+    private static int DEFAULT_ZONGJIAN_FONT_SIZE = 15;
+    private static String HOSP_NAME;
 
     private List<Map<String, Object>> makePDFInfo(HashMap<String, Object> map, AjaxResult ajaxResult, String key) {
         List<Map<String, Object>> data = null;
@@ -161,106 +142,1734 @@
         return data;
     }
 
-    public void putData(JSONObject jsonObject, AjaxResult result, String key) {
+/*    public void putData(JSONObject jsonObject, AjaxResult result, String key) {
         if (Integer.parseInt(result.get("code").toString()) == 200) {
             List<Map<String, Object>> data = (List<Map<String, Object>>) result.get("data");
             jsonObject.putOpt(key, data);
         }
     }
 
-    public AjaxResult hisPDF(TjOrder tjOrder,TjCustomer customer,TjReportTemplate tjReportTemplate) throws DocumentException {
-        HashMap<String, Object> pdfChangGui = makePDFInfo(tjOrder, customer, tjReportTemplate);
+    public AjaxResult hisPDF(TjOrder tjOrder, TjCustomer customer, TjReportTemplate tjReportTemplate) throws Exception {
+        DictHosp dictHosp = dictHospService.list().get(0);
+        String color = sysConfigService.selectConfigByKey("report_title_color");
+//        list.get(0).getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌")
+        List<SysDictData> sysUserSex = sysDictDataService.list(new LambdaQueryWrapper<SysDictData>().eq(SysDictData::getDictType, "sys_user_sex"));
+        HashMap<String, Object> map = makeHisJianYan(tjOrder, customer);
+        HashMap<String, Object> pdfChangGui = makePDFInfo(tjOrder, customer, tjReportTemplate, dictHosp, map);
+        if (pdfChangGui == null)
+            return AjaxResult.error();
         Document document = (Document) pdfChangGui.get("document");
         PdfCopy copy = (PdfCopy) pdfChangGui.get("copy");
         ByteArrayOutputStream finalOutPut = (ByteArrayOutputStream) pdfChangGui.get("stream");
         ByteArrayOutputStream byteArrayOutputStream1 = new ByteArrayOutputStream();
         Document document1 = new Document(PageSize.A4);
         PdfWriter pdfWriter = null;
+        int pageSize = 0;
         try {
-             pdfWriter = PdfWriter.getInstance(document1, byteArrayOutputStream1);
+            pdfWriter = PdfWriter.getInstance(document1, byteArrayOutputStream1);
+//            if (dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌")){
+            if (true) {
+                String sex = "";
+                if (customer.getCusSex() != null) {
+                    for (SysDictData userSex : sysUserSex) {
+                        if (userSex.getDictValue().equals(String.valueOf(customer.getCusSex()))) {
+                            sex = userSex.getDictLabel();
+                        }
+                    }
+                }
+                if (StrUtil.isBlank(sex)) sex = "鏈煡";
+//                pdfWriter.setPageEvent(new FooterHeaderPageEvent("婢勫悎鐭垮姟灞�涓績鍖婚櫌",customer.getCusName(),tjOrder.getTjNumber(),sex,String.valueOf(DateUtil.ageOfNow(customer.getCusBrithday())),null));
+                pdfWriter.setPageEvent(new FooterHeaderPageEvent(dictHosp.getHospName(), customer.getCusName(), tjOrder.getTjNumber(), sex, String.valueOf(DateUtil.ageOfNow(customer.getCusBrithday())), null));
+                pageSize = pdfWriter.getPageNumber();
+            }
         } catch (DocumentException e) {
-            e.printStackTrace();
+            log.error(String.valueOf(e));
             return AjaxResult.error();
         }
         document1.setMargins(70, 70, 40, 40);
         document1.open();
-        // 闈炲寲楠岄」鐩姤鍛�
-        Map<TjOrderRemark, List<TjPdfVO>> printReport = new HashMap<>();
-        notHuaYanData(tjOrder.getTjNumber(), printReport,tjOrder,customer);
+
+//        if (dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌")){
+        if (true) {
+            // 缁勮浣撴妫�鏌ラ」鐩姤鍛�
+            Map<TjOrderRemark, List<TjPdfVO>> printReport = new HashMap<>();
+            notHuaYanData(tjOrder.getTjNumber(), printReport, tjOrder, customer);
+            try {
+                notHuaYanTable(document1, printReport, dictHosp, color, false);
+            } catch (DocumentException e) {
+                log.error("闈炲寲楠岄」鐩~鍏呰〃鏍煎紓甯�");
+                log.error(String.valueOf(e));
+                return AjaxResult.error();
+            }
+            // 缁勮妫�楠屾暟鎹�
+            makeHisJianYanTable(document1, map, dictHosp, color);
+
+            // 缁勮pacs妫�鏌ユ暟鎹�
+            printReport = new HashMap<>();
+            pacsJianChaData(tjOrder.getTjNumber(), printReport, tjOrder, customer);
+            try {
+                notHuaYanTable(document1, printReport, dictHosp, color, true);
+            } catch (DocumentException e) {
+                log.error("pacs椤圭洰濉厖琛ㄦ牸寮傚父");
+                log.error(String.valueOf(e));
+                return AjaxResult.error();
+            }
+        } else {
+            // 闈炲寲楠岄」鐩姤鍛�
+            Map<TjOrderRemark, List<TjPdfVO>> printReport = new HashMap<>();
+            notHuaYanData(tjOrder.getTjNumber(), printReport, tjOrder, customer);
+            try {
+                notHuaYanTable(document1, printReport, dictHosp, color, true);
+            } catch (DocumentException e) {
+                log.error("闈炲寲楠岄」鐩~鍏呰〃鏍煎紓甯�");
+                log.error(String.valueOf(e));
+                return AjaxResult.error();
+            }
+            // 缁勮妫�楠屾暟鎹�
+            makeHisJianYanTable(document1, map, dictHosp, color);
+        }
+        document1.close();
+
+        PdfReader reader = null;
+        reader = new PdfReader(byteArrayOutputStream1.toByteArray());
+        int numberOfPages1 = reader.getNumberOfPages();
+        for (int i = 1; i <= numberOfPages1; i++) {
+            PdfImportedPage page = copy.getImportedPage(reader, i);
+            copy.addPage(page);
+        }
+
+//        if (!dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌")){
+        if (!true) {
+            List<ByteArrayOutputStream> jianchas = makeHisJianChaTable(tjOrder);
+//        List<ByteArrayOutputStream> jianchas = makeCcgcHisJianChaTable(tjOrder);
+            try {
+                for (ByteArrayOutputStream jiancha : jianchas) {
+                    reader = new PdfReader(jiancha.toByteArray());
+                    numberOfPages1 = reader.getNumberOfPages();
+                    for (int i = 1; i <= numberOfPages1; i++) {
+                        PdfImportedPage page = copy.getImportedPage(reader, i);
+                        copy.addPage(page);
+                    }
+                    jiancha.close();
+                }
+            } catch (IOException e) {
+                log.error("鎷疯礉pdf寮傚父");
+                log.error(String.valueOf(e));
+                return AjaxResult.error();
+            }
+        }
+        reader.close();
+        byteArrayOutputStream1.close();
+        document.close();
+        copy.close();
+
+        String outputFileName1 = customer.getCusId() + tjOrder.getTjNumber() + customer.getCusName() + "_鎶ュ憡.pdf";
         try {
-            notHuaYanTable(document1, printReport);
+            PdfReader pdfReader = new PdfReader(finalOutPut.toByteArray());
+            int pages = pdfReader.getNumberOfPages();
+            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+            PdfStamper pdfStamper = new PdfStamper(pdfReader, outputStream);
+//            if (!dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌")){
+            if (!true) {
+                PdfContentByte contentByte;
+                BaseFont baseFont = PdfUtils.createBaseFont(null);
+                for (int i = 2; i <= pages; i++) {
+                    contentByte = pdfStamper.getOverContent(i);
+                    contentByte.beginText();
+                    contentByte.setFontAndSize(baseFont, 11);
+                    float x = contentByte.getPdfDocument().getPageSize().getWidth() / 2;
+                    float y = 20;
+                    contentByte.showTextAligned(PdfContentByte.ALIGN_CENTER, String.valueOf(i - 1), x, y, 0);
+                    contentByte.endText();
+                }
+            }
+            pdfStamper.close();
+            pdfReader.close();
+            finalOutPut = outputStream;
+        } catch (IOException e) {
+            log.error(String.valueOf(e));
+            return AjaxResult.error();
+        }
+        savePDFFile(outputFileName1, tjOrder, customer, finalOutPut);
+        return AjaxResult.success();
+    }
+
+    public AjaxResult hisPDFNew(TjOrder tjOrder, TjCustomer customer, TjReportTemplate tjReportTemplate) throws Exception {
+        pdfPage = 0;
+        DictHosp dictHosp = dictHospService.list().get(0);
+        String color = sysConfigService.selectConfigByKey("report_title_color");
+        List<SysDictData> sysUserSex = sysDictDataService.list(new LambdaQueryWrapper<SysDictData>().eq(SysDictData::getDictType, "sys_user_sex"));
+        // 妫�楠屾暟鎹�
+        HashMap<String, Object> map = makeHisJianYan(tjOrder, customer);
+        String sex = "";
+        if (customer.getCusSex() != null) {
+            for (SysDictData userSex : sysUserSex) {
+                if (userSex.getDictValue().equals(String.valueOf(customer.getCusSex()))) {
+                    sex = userSex.getDictLabel();
+                }
+            }
+        }
+        if (StrUtil.isBlank(sex)) sex = "鏈煡";
+
+
+        // 鐢熸垚 document2 骞跺皢鍏跺唴瀹逛繚瀛樺埌 byteArrayOutputStream2 涓�
+        ByteArrayOutputStream byteArrayOutputStream2 = new ByteArrayOutputStream();
+        Document document2 = new Document(PageSize.A4);
+        PdfWriter writer2 = PdfWriter.getInstance(document2, byteArrayOutputStream2);
+
+        writer2.setPageEvent(new FooterHeaderPageEvent(dictHosp.getHospName(), customer.getCusName(), tjOrder.getTjNumber(), sex, String.valueOf(DateUtil.ageOfNow(customer.getCusBrithday())), 0));
+
+        document2.setMargins(50, 70, 40, 50);
+        document2.open();
+
+        List<CsProVo> list = tjOrderRemarkService.cSWebGetProByTjNumAndOrderId(tjOrder.getTjNumber(), false);
+
+        Font defaultFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+        Font defaultTitleFont = PdfUtils.setFont(DEFAULT_LITTLE_TITLE_FONT_SIZE);
+        defaultTitleFont.setStyle(Font.BOLD);
+        Paragraph paragraph = PdfUtils.setParagraph(defaultTitleFont, "妫�鏌ョ瀹や笌妫�鏌ラ」鐩�");
+        document2.add(paragraph);
+
+        PdfPTable table = new PdfPTable(new float[]{80, 100, 80, 80});
+        table.setTotalWidth(PageSize.A4.getWidth() - 100);
+        table.setLockedWidth(true);
+        table.setHorizontalAlignment(Element.ALIGN_LEFT);
+        String[] titles = {"绉戝", "浣撴椤圭洰", "妫�鏌ョ姸鎬�", "妫�鏌ユ椂闂�"};
+
+        for (String head : titles) {
+            table.addCell(PdfUtils.createCell(head, defaultFont, Rectangle.BOX, Element.ALIGN_CENTER, 5f, 5f));
+        }
+        Map<String, List<CsProVo>> listMap = list.stream().collect(Collectors.groupingBy(CsProVo::getDeptName));
+        for (Map.Entry<String, List<CsProVo>> entry : listMap.entrySet()) {
+            String dept = entry.getKey();
+            List<CsProVo> proVos = entry.getValue();
+            PdfPCell deptCell = new PdfPCell();
+            deptCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+            deptCell.setHorizontalAlignment(Element.ALIGN_CENTER);
+            deptCell.setPhrase(new Phrase(dept, defaultFont));
+            deptCell.setPaddingTop(5f);
+            deptCell.setPaddingBottom(5f);
+            deptCell.setRowspan(proVos.size());
+            table.addCell(deptCell);
+            proVos.forEach(proVo -> {
+                table.addCell(PdfUtils.createCell(proVo.getProName(), defaultFont, Rectangle.BOX, Element.ALIGN_CENTER, 5f, 5f));
+                String tjType = "";
+                switch (proVo.getType()) {
+                    case 0:
+                        tjType = "鏈";
+                        break;
+                    case 1:
+                        tjType = "宸叉";
+                        break;
+                    case 2:
+                        tjType = "寮冩";
+                        break;
+                    case 3:
+                        tjType = "寤舵湡";
+                        break;
+                }
+                table.addCell(PdfUtils.createCell(tjType, defaultFont, Rectangle.BOX, Element.ALIGN_CENTER, 5f, 5f));
+                String tjTime = "";
+                if (proVo.getQdcreateTime() != null) {
+                    tjTime = new SimpleDateFormat("yyyy-MM-dd").format(proVo.getQdcreateTime());
+                }
+                table.addCell(PdfUtils.createCell(tjTime, defaultFont, Rectangle.BOX, Element.ALIGN_CENTER, 5f, 5f));
+            });
+        }
+        document2.add(table);
+
+        for (int i = 0; i < 2; i++) {
+            paragraph = PdfUtils.setParagraph(defaultFont, "");
+            document2.add(paragraph);
+        }
+
+
+        //        List<TjOrderRemark> remarks = tjOrderRemarkMapper.getzongjianyishengchakanyichangxiangmu3( tjOrder.getTjNumber());
+        List<TjOrderDetail> orderDetails = tjOrderDetailMapper.getzongjianyishengchakanyichangxiangmu4(tjOrder.getTjNumber());
+//        List<Map<String, Object>> jiancha = new ArrayList<>();
+
+
+        paragraph = PdfUtils.setParagraph(defaultTitleFont, "妫�鏌ョ患杩帮細");
+        paragraph.setSpacingBefore(3f);
+        paragraph.setSpacingAfter(2f);
+        document2.add(paragraph);
+
+        int xmXh = 1;
+        for (Map.Entry<Long, List<TjOrderDetail>> entry : orderDetails.stream().collect(Collectors.groupingBy(TjOrderDetail::getProId)).entrySet()) {
+            List<TjOrderDetail> details = entry.getValue();
+            String xmmc = details.get(0).getProName();
+            boolean isXmWrite = false;
+            for (TjOrderDetail detail : details) {
+                if (!isXmWrite) {
+                    paragraph = new Paragraph(xmXh + ".  " + xmmc, defaultFont);
+                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                    document2.add(paragraph);
+                    isXmWrite = true;
+                }
+                String result = detail.getProResult();
+                if (StrUtil.isNotBlank(result)) {
+                    int index = 1;
+                    result = result.replaceAll("鏈姤鍛婁粎瀵规湰娆℃鏌ヨ礋璐o紝涓村簥鍖荤敓渚濇嵁鐥呮儏濡傛湁鐤戦棶锛岃鍙婃椂澶嶆煡鎴栬繘涓�姝ユ鏌�", "");
+                    String[] split = result.split("\n");
+                    StringBuilder builder = new StringBuilder();
+                    for (String s : split) {
+                        if (StrUtil.isBlank(s.replaceAll("\n", "").trim())) continue;
+                        builder.append("    (").append(index).append(")").append(s).append("\n");
+                        index++;
+                    }
+                    result = builder.toString();
+                }
+                paragraph = new Paragraph(result, defaultFont);
+                paragraph.setAlignment(Element.ALIGN_LEFT);
+                document2.add(paragraph);
+            }
+            paragraph = PdfUtils.setParagraph(defaultFont, "");
+            paragraph.setLeading(0f);
+            paragraph.setSpacingBefore(0f);
+            paragraph.setSpacingAfter(5f);
+            document2.add(paragraph);
+            xmXh++;
+        }
+
+        for (Map.Entry<String, Object> item : map.entrySet()) {
+            String xmmc = item.getKey();
+            HashMap<String, Object> entryValue = (HashMap<String, Object>) item.getValue();
+            ArrayList<List<String>> lists = (ArrayList<List<String>>) entryValue.get("data");
+            boolean isXmWrite = false;
+            int index = 1;
+            for (List<String> i : lists) {
+                if (i.contains("鈫�") || i.contains("鈫�")) {
+                    if (!isXmWrite) {
+                        paragraph = new Paragraph(xmXh + ".  " + xmmc, defaultFont);
+                        paragraph.setAlignment(Element.ALIGN_LEFT);
+                        document2.add(paragraph);
+                        isXmWrite = true;
+                    }
+                    String content = "    (" + index + ") " + i.get(0) + "锛�" + i.get(1) + "  " + i.get(3) + "  " + i.get(4) + "      " + i.get(2);
+                    paragraph = new Paragraph(content, defaultFont);
+                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                    document2.add(paragraph);
+                    index++;
+                }
+            }
+            paragraph = PdfUtils.setParagraph(defaultFont, "");
+            paragraph.setSpacingBefore(0f);
+            paragraph.setSpacingAfter(5f);
+            document2.add(paragraph);
+            xmXh++;
+        }
+
+
+        paragraph = PdfUtils.setParagraph(defaultFont, "");
+        paragraph.setLeading(0f);
+        paragraph.setSpacingBefore(10f);
+        paragraph.setSpacingAfter(10f);
+        document2.add(paragraph);
+
+
+        paragraph = PdfUtils.setParagraph(defaultTitleFont, "鍖荤敓寤鸿锛�");
+        paragraph.setSpacingBefore(3f);
+        paragraph.setSpacingAfter(2f);
+        document2.add(paragraph);
+        xmXh = 0;
+        for (Map.Entry<String, Object> item : map.entrySet()) {
+            String xmmc = item.getKey();
+            HashMap<String, Object> entryValue = (HashMap<String, Object>) item.getValue();
+            ArrayList<List<String>> lists = (ArrayList<List<String>>) entryValue.get("data");
+            boolean isXmWrite = false;
+            int index = 1;
+            for (List<String> i : lists) {
+                if (i.contains("鈫�") || i.contains("鈫�")) {
+                    if (!isXmWrite) {
+                        xmXh++;
+                        paragraph = new Paragraph("銆�" + xmXh + "." + xmmc + "銆�", defaultFont);
+                        paragraph.setAlignment(Element.ALIGN_LEFT);
+                        document2.add(paragraph);
+                        isXmWrite = true;
+                    }
+                    String content = "    (" + index + ")" + i.get(0) + "锛�" + i.get(1) + "  " + i.get(3) + "  " + i.get(4) + "  " + i.get(2);
+                    paragraph = new Paragraph(content, defaultFont);
+                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                    document2.add(paragraph);
+                    // 绗叚浣嶆槸lis椤圭洰id
+//                    LambdaQueryWrapper<TjProject> wrapper = new LambdaQueryWrapper<>();
+//                    wrapper.eq(TjProject::getLisXmbm,i.get(5));
+//                    TjProject project = projectService.getOne(wrapper);
+//                    if (project != null) {
+//                        LambdaQueryWrapper<TjRules> queryWrapper = new LambdaQueryWrapper<>();
+//                        queryWrapper.eq(TjRules::getProId,project.getProId());
+//                        List<TjRules> rules = tjRulesService.list(queryWrapper);
+//                        if (!rules.isEmpty()){
+//
+//                        }
+                    String str = "    ";
+                    List<Map<String, Object>> maps = tjRulesService.getyichangxiangmujianyiguize(i.get(5), "", i.get(2), tjOrder.getTjNumber(), i.get(5), "");
+                    if (!maps.isEmpty()) {
+                        for (Map<String, Object> objectMap : maps) {
+//                                paragraph = new Paragraph(str+"寤鸿鏍囬",defaultFont);
+//                                paragraph.setAlignment(Element.ALIGN_LEFT);
+//                                document2.add(paragraph);
+//
+//                                paragraph = new Paragraph(str+objectMap.get("bt").toString(),defaultFont);
+//                                paragraph.setAlignment(Element.ALIGN_LEFT);
+//                                document2.add(paragraph);
+//
+//                                paragraph = new Paragraph(str+"寤鸿鍐呭",defaultFont);
+//                                paragraph.setAlignment(Element.ALIGN_LEFT);
+//                                document2.add(paragraph);
+//
+//                                paragraph = new Paragraph(str+objectMap.get("nr").toString(),defaultFont);
+//                                paragraph.setAlignment(Element.ALIGN_LEFT);
+//                                document2.add(paragraph);
+                            String content1 = str + objectMap.get("bt").toString().trim() + objectMap.get("nr").toString().trim();
+                            if (StrUtil.isBlank(content1))
+                                content1 = "     鏈姤鍛婁粎瀵规湰娆℃鏌ヨ礋璐o紝涓村簥鍖荤敓渚濇嵁鐥呮儏濡傛湁鐤戦棶锛岃鍙婃椂澶嶆煡鎴栬繘涓�姝ユ鏌�";
+
+                            paragraph = new Paragraph(content1, defaultFont);
+                            paragraph.setAlignment(Element.ALIGN_LEFT);
+                            document2.add(paragraph);
+                        }
+                        paragraph = PdfUtils.setParagraph(defaultFont, "");
+                        paragraph.setSpacingBefore(2f);
+                        paragraph.setSpacingAfter(5f);
+                        document2.add(paragraph);
+                    }
+//                    }
+                    index++;
+                }
+            }
+            paragraph = PdfUtils.setParagraph(defaultFont, "");
+            paragraph.setSpacingBefore(0f);
+            paragraph.setSpacingAfter(5f);
+            document2.add(paragraph);
+        }
+
+
+        for (Map.Entry<Long, List<TjOrderDetail>> entry : orderDetails.stream().collect(Collectors.groupingBy(TjOrderDetail::getProId)).entrySet()) {
+            List<TjOrderDetail> details = entry.getValue();
+            String xmmc = details.get(0).getProName();
+            boolean isXmWrite = false;
+            int index = 1;
+            for (TjOrderDetail detail : details) {
+                if (!isXmWrite) {
+                    xmXh++;
+                    paragraph = new Paragraph("銆�" + xmXh + "." + xmmc + "銆�", defaultFont);
+                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                    document2.add(paragraph);
+                    isXmWrite = true;
+                }
+                String result = detail.getProResult();
+                if (StrUtil.isNotBlank(result)) {
+//                    result = result.replaceAll(" ","").replaceAll("\t","");
+//                    result = result.replaceAll("\n鏈姤鍛婁粎瀵规湰娆℃鏌ヨ礋璐o紝涓村簥鍖荤敓渚濇嵁鐥呮儏濡傛湁鐤戦棶锛岃鍙婃椂澶嶆煡鎴栬繘涓�姝ユ鏌�", "");
+//                    result = "\n      " + result.replaceAll("\n", "\n      ");
+                    int index1 = 1;
+                    String[] split = result.split("\n");
+                    boolean contains = result.contains("鏈姤鍛婁粎瀵规湰娆℃鏌ヨ礋璐o紝涓村簥鍖荤敓渚濇嵁鐥呮儏濡傛湁鐤戦棶锛岃鍙婃椂澶嶆煡鎴栬繘涓�姝ユ鏌�");
+                    StringBuilder builder = new StringBuilder();
+                    for (String s : split) {
+                        if (StrUtil.isBlank(s.replaceAll("\n", "").trim())) continue;
+                        builder.append("    (").append(index1).append(")").append(s).append("\n");
+                        index1++;
+                    }
+                    if (!contains)
+                        builder.append("    (").append(index1).append(")").append("鏈姤鍛婁粎瀵规湰娆℃鏌ヨ礋璐o紝涓村簥鍖荤敓渚濇嵁鐥呮儏濡傛湁鐤戦棶锛岃鍙婃椂澶嶆煡鎴栬繘涓�姝ユ鏌�");
+                    else builder.substring(0, builder.length() - 1);
+                    result = builder.toString();
+                }
+//                String content = "  (" + index + ") " + detail.getProName() + "锛�" + result;
+//                content = content.replaceAll("[\\n\\r]+$", "");
+//                content = content.replaceAll("\\s+$", "");
+//                paragraph = new Paragraph(content, defaultFont);
+                paragraph = new Paragraph(result, defaultFont);
+                paragraph.setAlignment(Element.ALIGN_LEFT);
+                document2.add(paragraph);
+                String str = "     ";
+                List<Map<String, Object>> maps = tjRulesService.getyichangxiangmujianyiguize(entry.getKey().toString(), "", "", tjOrder.getTjNumber(), detail.getProName(), "");
+                for (Map<String, Object> objectMap : maps) {
+                    String content1 = str + objectMap.get("bt").toString() + objectMap.get("nr").toString();
+                    if (StrUtil.isBlank(content1))
+                        content1 = "     鏈姤鍛婁粎瀵规湰娆℃鏌ヨ礋璐o紝涓村簥鍖荤敓渚濇嵁鐥呮儏濡傛湁鐤戦棶锛岃鍙婃椂澶嶆煡鎴栬繘涓�姝ユ鏌�";
+
+                    paragraph = new Paragraph(content1, defaultFont);
+                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                    document2.add(paragraph);
+                }
+                index++;
+                paragraph = PdfUtils.setParagraph(defaultFont, "");
+                paragraph.setLeading(0f);
+                paragraph.setSpacingBefore(0f);
+                paragraph.setSpacingAfter(5f);
+                document2.add(paragraph);
+            }
+        }
+
+
+        for (int i = 0; i < 1; i++) {
+            paragraph = PdfUtils.setParagraph(defaultFont, "");
+            document2.add(paragraph);
+        }
+
+        paragraph = PdfUtils.setParagraph(defaultTitleFont, "鎬绘鍖荤敓寤鸿锛�");
+        document2.add(paragraph);
+        if (tjOrder.getCheckAdvice() == null) {
+            paragraph = PdfUtils.setParagraph(defaultFont, "鏃�");
+            document2.add(paragraph);
+        } else {
+            paragraph = PdfUtils.setParagraph(defaultFont, tjOrder.getCheckAdvice());
+            document2.add(paragraph);
+        }
+
+
+        Paragraph paragraphNone = new Paragraph("", defaultFont);
+        paragraphNone.setAlignment(Element.ALIGN_LEFT);
+        //琛岄棿璺�
+        paragraphNone.setLeading(5f);
+        paragraphNone.setSpacingBefore(10f);
+        paragraphNone.setSpacingAfter(10f);
+        document2.add(paragraphNone);
+        paragraphNone = new Paragraph("", defaultFont);
+        paragraphNone.setAlignment(Element.ALIGN_LEFT);
+        //琛岄棿璺�
+        paragraphNone.setLeading(5f);
+        paragraphNone.setSpacingBefore(10f);
+        paragraphNone.setSpacingAfter(10f);
+        document2.add(paragraphNone);
+
+
+        PdfPTable tableQz = new PdfPTable(new float[]{100f, 100f, 50f});
+        tableQz.setTotalWidth(PageSize.A4.getWidth() - 100);
+        tableQz.setLockedWidth(true);
+        tableQz.setHorizontalAlignment(Element.ALIGN_LEFT);
+        tableQz.getDefaultCell().setBorder(0);
+        tableQz.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
+
+        Font zongJianFont = PdfUtils.setFont(DEFAULT_ZONGJIAN_FONT_SIZE);
+        Font zongJianTitleFont = PdfUtils.setFont(DEFAULT_ZONGJIAN_FONT_SIZE);
+        zongJianTitleFont.setStyle(Font.BOLD);
+
+        for (int i = 0; i < 3; i++) {
+            PdfPCell cell = new PdfPCell();
+            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+            cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
+            cell.setPhrase(new Phrase("", defaultFont));
+            cell.setBorder(Rectangle.NO_BORDER);
+            tableQz.addCell(cell);
+        }
+
+
+        PdfPCell cell = new PdfPCell();
+        cell.setBorder(Rectangle.NO_BORDER);
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
+        cell.setPhrase(new Phrase("", defaultFont));
+        cell.setRowspan(3);
+        tableQz.addCell(cell);
+
+        cell = new PdfPCell();
+        cell.setBorder(Rectangle.NO_BORDER);
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
+        cell.setPaddingTop(10);
+        cell.setPaddingBottom(10);
+        cell.setPhrase(new Phrase("浣撴鍗曚綅鐩栫珷:", zongJianTitleFont));
+
+        tableQz.addCell(cell);
+
+        cell = new PdfPCell();
+        cell.setBorder(Rectangle.NO_BORDER);
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
+        cell.setPaddingTop(10);
+        cell.setPaddingBottom(10);
+        cell.setPhrase(new Phrase("", zongJianFont));
+        tableQz.addCell(cell);
+
+
+        cell = new PdfPCell();
+        cell.setBorder(Rectangle.NO_BORDER);
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
+        cell.setPaddingTop(10);
+        cell.setPaddingBottom(10);
+        cell.setPhrase(new Phrase("鎬绘鍖诲笀:", zongJianTitleFont));
+        tableQz.addCell(cell);
+
+        cell = new PdfPCell();
+        cell.setBorder(Rectangle.NO_BORDER);
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
+        cell.setPaddingTop(10);
+        cell.setPaddingBottom(10);
+//        cell.setPhrase(new Phrase("浣曞皬濠�", zongJianFont));
+        cell.setPhrase(new Phrase(sysConfigService.selectConfigByKey("pdf_report_zongjianysname"), zongJianFont));
+        tableQz.addCell(cell);
+
+        cell = new PdfPCell();
+        cell.setBorder(Rectangle.NO_BORDER);
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
+        cell.setPaddingTop(10);
+        cell.setPaddingBottom(10);
+        cell.setPhrase(new Phrase("鎬绘鏃ユ湡:", zongJianTitleFont));
+        tableQz.addCell(cell);
+
+        cell = new PdfPCell();
+        cell.setBorder(Rectangle.NO_BORDER);
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
+        cell.setPaddingTop(10);
+        cell.setPaddingBottom(10);
+        cell.setPhrase(new Phrase(new SimpleDateFormat("yyyy-MM-dd").format(tjOrder.getCheckTime()), zongJianFont));
+        tableQz.addCell(cell);
+
+        document2.add(tableQz);
+
+        document2.close();
+
+
+        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+        Document document = new Document(PageSize.A4);
+        PdfWriter pdfWriter = null;
+//        int pageSize = 0;
+//        try {
+        pdfWriter = PdfWriter.getInstance(document, byteArrayOutputStream);
+        pdfWriter.setPageEvent(new FooterHeaderPageEvent(dictHosp.getHospName(), customer.getCusName(), tjOrder.getTjNumber(), sex, String.valueOf(DateUtil.ageOfNow(customer.getCusBrithday())), null));
+//            pageSize = pdfWriter.getPageNumber();
+//        } catch (DocumentException e) {
+//            log.error(String.valueOf(e));
+//            return AjaxResult.error();
+//        }
+        // 鍚庨潰椤电爜鏁伴噺
+        int dataPageNumer = pdfWriter.getPageNumber();
+        document.setMargins(70, 70, 40, 40);
+        document.open();
+
+        Map<TjOrderRemark, List<TjPdfVO>> printReport = new HashMap<>();
+        notHuaYanData(tjOrder.getTjNumber(), printReport, tjOrder, customer);
+        try {
+            notHuaYanTable(document, printReport, dictHosp, color, false);
         } catch (DocumentException e) {
             log.error("闈炲寲楠岄」鐩~鍏呰〃鏍煎紓甯�");
-            e.printStackTrace();
+            log.error(String.valueOf(e));
             return AjaxResult.error();
         }
-        // 缁勮妫�楠屾暟鎹�
-        HashMap<String, Object> map = makeHisJianYan(tjOrder, customer);
-        makeHisJianYanTable(document1, map);
-        List<ByteArrayOutputStream> jianchas = makeHisJianChaTable(tjOrder);
-        document1.close();
-        pdfWriter.close();
         PdfReader reader = null;
+        makeHisJianYanTable(document, map, dictHosp, color);
+
+        printReport = new HashMap<>();
+        pacsJianChaData(tjOrder.getTjNumber(), printReport, tjOrder, customer);
         try {
-            reader = new PdfReader(byteArrayOutputStream1.toByteArray());
-            int numberOfPages1 = reader.getNumberOfPages();
-            for (int i = 1; i <= numberOfPages1; i++) {
-                PdfImportedPage page = copy.getImportedPage(reader, i);
-                copy.addPage(page);
-            }
-            for (ByteArrayOutputStream jiancha : jianchas) {
-                reader = new PdfReader(jiancha.toByteArray());
-                numberOfPages1 = reader.getNumberOfPages();
-                for (int i = 1; i <= numberOfPages1; i++) {
-                    PdfImportedPage page = copy.getImportedPage(reader, i);
-                    copy.addPage(page);
-                }
-                jiancha.close();
-            }
-            reader.close();
-            byteArrayOutputStream1.close();
-            document.close();
-            copy.close();
-        } catch (IOException e) {
-            log.error("鎷疯礉pdf寮傚父");
-            e.printStackTrace();
+            notHuaYanTable(document, printReport, dictHosp, color, true);
+        } catch (DocumentException e) {
+            log.error("pacs椤圭洰濉厖琛ㄦ牸寮傚父");
+            log.error(String.valueOf(e));
             return AjaxResult.error();
         }
-        String outputFileName1 = customer.getCusId() + tjOrder.getTjNumber() + customer.getCusName() + "_鎶ュ憡.pdf";
-        savePDFFile(outputFileName1,tjOrder, customer, finalOutPut);
-        TjReport tjReport = new TjReport();
+        document.close();
+
+
+        // 棣栭〉琛ㄥ崟
         String tjNumber = tjOrder.getTjNumber();
-        tjReport.setTjNumber(String.valueOf(tjNumber));
-        tjReport.setPath(urlValue + outputFileName1);
-        // 鏂囦欢閰嶇疆
-//        String outputPath1 = "/Users/chacca/寮�鍙戠浉鍏�/浠g爜/";
-        String outputPath1 = value+"\\";
-        String pdfBinary = getPDFBinary(outputPath1 + outputFileName1);
-        tjReport.setReport(pdfBinary);
-        tjReport.setType("浣撴鎶ュ憡");
-        tjReport.setPrint("pdf");
-        tjReportService.save(tjReport);
-        LambdaUpdateWrapper<TjOrder> updateWrapper = new LambdaUpdateWrapper<>();
-        updateWrapper.eq(TjOrder::getTjNumber, tjNumber);
-        updateWrapper.set(TjOrder::getReportTime, new Date());
-        updateWrapper.set(TjOrder::getPrintLastTime, new Date());
-        updateWrapper.set(TjOrder::getDownloadLastTime, new Date());
-        updateWrapper.set(TjOrder::getStatus, TjConstants.TJ_END);
-        tjOrderService.update(updateWrapper);
+        String template = tjReportTemplate.getTemplate();
+        LambdaQueryWrapper<DictComp> wq111 = new LambdaQueryWrapper<>();
+        wq111.eq(DictComp::getDrugManufacturerId, tjOrder.getFirmId());
+        DictComp dictComp = dictCompService.getOne(wq111);
+        LambdaQueryWrapper<TjOrderDetail> wq2 = new LambdaQueryWrapper<>();
+        wq2.eq(TjOrderDetail::getOrderId, tjOrder.getOrderId());
+        wq2.isNotNull(TjOrderDetail::getFlowingWaterId);
+        List<TjOrderDetail> detailList = tjOrderDetailService.list(wq2);
+        for (TjOrderDetail tjOrderDetail : detailList) {
+            TjProject tjProject = projectService.selectTjProjectByProId(tjOrderDetail.getProId());
+            tjOrderDetail.setProject(tjProject);
+        }
+        ByteArrayOutputStream byteArrayOutputStream4 = new ByteArrayOutputStream();
+        PdfReader reader4 = null;
+        PdfStamper pdfStamper = null;
+
+        reader4 = new PdfReader(new ByteArrayInputStream(Base64.getDecoder().decode(template)));
+        pdfStamper = new PdfStamper(reader4, byteArrayOutputStream4);
+        AcroFields acroFields = pdfStamper.getAcroFields();
+        BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
+        acroFields.addSubstitutionFont(bf);
+        HashMap<String, Object> data = new HashMap<>();
+        Long cusSex = customer.getCusSex();
+        String tjtype;
+        if (cusSex == 0) {
+            sex = "鐢�";
+        } else {
+            sex = "濂�";
+        }
+        HashMap<String, String> hashMap = new HashMap<>();
+        hashMap.put("name", customer.getCusName());
+        if ("1".equals(tjOrder.getTjType())) {
+            tjtype = "鍥㈤槦";
+            hashMap.put("tjtype", tjtype);
+        } else {
+            tjtype = "涓汉";
+            hashMap.put("tjtype", tjtype);
+        }
+        if (dictComp == null) {
+            hashMap.put("work", "鏃�");
+        } else {
+            hashMap.put("work", dictComp.getCnName());
+        }
+        hashMap.put("sex", sex);
+        hashMap.put("tjnumber", tjNumber);
+        hashMap.put("tjdate", DateUtils.parseDateToStr("yyyy/MM/dd", tjOrder.getCreateTime()));
+        hashMap.put("phone", customer.getCusPhone());
+        for (String key : hashMap.keySet()) {
+            acroFields.setFieldProperty(key, "textsize", DEFAULT_FONT_SIZE, null);
+            acroFields.setField(key, hashMap.get(key));
+        }
+        pdfStamper.setFormFlattening(true);
+        pdfStamper.close();
+        reader4.close();
+        // 灏嗕慨鏀瑰悗鐨凱DF鍐呭鍐欏叆
+        byte[] bytes = byteArrayOutputStream4.toByteArray();
+
+
+        ByteArrayOutputStream finalOutput = new ByteArrayOutputStream();
+        Document mergedDocument = new Document(PageSize.A4);
+        PdfCopy copy = new PdfCopy(mergedDocument, finalOutput);
+        mergedDocument.open();
+
+        reader4 = new PdfReader(new ByteArrayInputStream(bytes));
+        int numberOfPages = reader4.getNumberOfPages();
+        for (int i = 1; i <= numberOfPages; i++) {
+            copy.addPage(copy.getImportedPage(reader4, i));
+        }
+
+        PdfReader reader2 = new PdfReader(byteArrayOutputStream2.toByteArray());
+        int numberOfPages2 = reader2.getNumberOfPages();
+        for (int i = 1; i <= numberOfPages2; i++) {
+            PdfImportedPage page = copy.getImportedPage(reader2, i);
+            copy.addPage(page);
+        }
+        reader2.close();
+
+        PdfReader reader1 = new PdfReader(byteArrayOutputStream.toByteArray());
+        int numberOfPages1 = reader1.getNumberOfPages();
+        for (int i = 1; i <= numberOfPages1; i++) {
+            PdfImportedPage page = copy.getImportedPage(reader1, i);
+            copy.addPage(page);
+        }
+        reader1.close();
+        mergedDocument.close();
+
+        String outputFileName1 = customer.getCusId() + tjOrder.getTjNumber() + customer.getCusName() + "_鎶ュ憡.pdf";
+        savePDFFile(outputFileName1, tjOrder, customer, finalOutput);
+        return AjaxResult.success();
+    }*/
+
+    public AjaxResult hisPDFNew2(TjOrder tjOrder, TjCustomer customer, TjReportTemplate tjReportTemplate, TjReportTemplate zongJianYiShiQianMing) throws Exception {
+        String s1 = sysConfigService.selectConfigByKey("tjreport_font_size_second_page_info");
+        String s2 = sysConfigService.selectConfigByKey("tjreport_font_size_second_page_title");
+        String s3 = sysConfigService.selectConfigByKey("tjreport_font_size_result_title");
+        String s4 = sysConfigService.selectConfigByKey("tjreport_font_size_zongjian");
+//        String hospName = sysDeptController.getdangqiandengluyuanqu().get("msg").toString();
+        if (StrUtil.isNotBlank(s1) && Integer.parseInt(s1) > 10) DEFAULT_FONT_SIZE = Integer.parseInt(s1);
+        else DEFAULT_FONT_SIZE = 10;
+        if (StrUtil.isNotBlank(s2) && Integer.parseInt(s2) > 10) DEFAULT_LITTLE_TITLE_FONT_SIZE = Integer.parseInt(s2);
+        else DEFAULT_LITTLE_TITLE_FONT_SIZE = 10;
+        if (StrUtil.isNotBlank(s3) && Integer.parseInt(s3) > 10) DEFAULT_TITLE_FONT_SIZE = Integer.parseInt(s3);
+        else DEFAULT_TITLE_FONT_SIZE = 10;
+        if (StrUtil.isNotBlank(s4) && Integer.parseInt(s4) > 10) DEFAULT_ZONGJIAN_FONT_SIZE = Integer.parseInt(s4);
+        else DEFAULT_ZONGJIAN_FONT_SIZE = 10;
+        pdfPage = 0;
+        DictHosp dictHosp = dictHospService.list().get(0);
+        HOSP_NAME = dictHosp.getHospName();
+        String color = sysConfigService.selectConfigByKey("report_title_color");
+        List<SysDictData> sysUserSex = sysDictDataService.list(new LambdaQueryWrapper<SysDictData>().eq(SysDictData::getDictType, "sys_user_sex"));
+        // 妫�楠屾暟鎹�
+        HashMap<String, Object> map = makeHisJianYan(tjOrder, customer);
+        String sex = "";
+        if (customer.getCusSex() != null) {
+            for (SysDictData userSex : sysUserSex) {
+                if (userSex.getDictValue().equals(String.valueOf(customer.getCusSex()))) {
+                    sex = userSex.getDictLabel();
+                }
+            }
+        }
+        if (StrUtil.isBlank(sex)) sex = "鏈煡";
+
+
+        // 鐢熸垚 document2 骞跺皢鍏跺唴瀹逛繚瀛樺埌 byteArrayOutputStream2 涓�
+        ByteArrayOutputStream byteArrayOutputStream2 = new ByteArrayOutputStream();
+        Document document2 = new Document(PageSize.A4);
+        PdfWriter writer2 = PdfWriter.getInstance(document2, byteArrayOutputStream2);
+
+        writer2.setPageEvent(new FooterHeaderPageEvent(dictHosp.getHospName(), customer.getCusName(), tjOrder.getTjNumber(), sex, String.valueOf(DateUtil.ageOfNow(customer.getCusBrithday())), 0));
+
+        document2.setMargins(50, 70, 40, 50);
+        document2.open();
+
+        List<CsProVo> list = tjOrderRemarkService.cSWebGetProByTjNumAndOrderId(tjOrder.getTjNumber(), false);
+
+        Font defaultFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+        Font defaultTitleFont = PdfUtils.setFont(DEFAULT_LITTLE_TITLE_FONT_SIZE);
+        defaultTitleFont.setStyle(Font.BOLD);
+        Paragraph paragraph = PdfUtils.setParagraph(defaultTitleFont, "妫�鏌ョ瀹や笌妫�鏌ラ」鐩�");
+        document2.add(paragraph);
+
+        PdfPTable table = new PdfPTable(new float[]{80, 100, 80, 80});
+        table.setTotalWidth(PageSize.A4.getWidth() - 100);
+        table.setLockedWidth(true);
+        table.setHorizontalAlignment(Element.ALIGN_LEFT);
+        String[] titles = {"绉戝", "浣撴椤圭洰", "妫�鏌ョ姸鎬�", "妫�鏌ユ椂闂�"};
+
+        for (String head : titles) {
+            table.addCell(PdfUtils.createCell(head, defaultFont, Rectangle.BOX, Element.ALIGN_CENTER, 5f, 5f));
+        }
+//        Map<String, List<CsProVo>> listMap = list.stream()
+//                .collect(Collectors.groupingBy(i -> i.getDeptId() + "_" + i.getDeptName()));
+        Map<String, List<CsProVo>> listMap = list.stream()
+                .collect(Collectors.groupingBy(
+                        i -> i.getDeptId() + "_" + i.getDeptName(),
+                        TreeMap::new, // 鎸夐敭鎺掑簭
+                        Collectors.mapping(
+                                i -> i,
+                                Collectors.collectingAndThen(
+                                        Collectors.toList(),
+                                        l -> l.stream()
+                                                .sorted(Comparator.comparing(CsProVo::getDeptId)) // 瀵� List 鎺掑簭
+                                                .collect(Collectors.toList())
+                                )
+                        )
+                ));
+
+//        List<CsProVo> sortedList = list.stream()
+//                .sorted(Comparator.comparingLong(CsProVo::getProId))
+//                .collect(Collectors.toList());
+        for (Map.Entry<String, List<CsProVo>> entry : listMap.entrySet()) {
+            String dept = entry.getKey().split("_")[1];
+            List<CsProVo> proVos = entry.getValue();
+            proVos = proVos.stream()
+                    .sorted(Comparator.comparingLong(CsProVo::getProId))
+                    .collect(Collectors.toList());
+            PdfPCell deptCell = new PdfPCell();
+            deptCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+            deptCell.setHorizontalAlignment(Element.ALIGN_CENTER);
+            deptCell.setPhrase(new Phrase(dept, defaultFont));
+            deptCell.setPaddingTop(5f);
+            deptCell.setPaddingBottom(5f);
+            if (proVos.size() > 1)
+                deptCell.setRowspan(proVos.size());
+            table.addCell(deptCell);
+            proVos.forEach(proVo -> {
+                table.addCell(PdfUtils.createCell(proVo.getProName(), defaultFont, Rectangle.BOX, Element.ALIGN_CENTER, 5f, 5f));
+                String tjType = "";
+                switch (proVo.getType()) {
+                    case 0:
+                        tjType = "鏈";
+                        break;
+                    case 1:
+                        tjType = "宸叉";
+                        break;
+                    case 2:
+                        tjType = "寮冩";
+                        break;
+                    case 3:
+                        tjType = "寤舵湡";
+                        break;
+                }
+                table.addCell(PdfUtils.createCell(tjType, defaultFont, Rectangle.BOX, Element.ALIGN_CENTER, 5f, 5f));
+                String tjTime = "";
+                if (proVo.getQdcreateTime() != null) {
+                    tjTime = new SimpleDateFormat("yyyy-MM-dd").format(proVo.getQdcreateTime());
+                }
+                table.addCell(PdfUtils.createCell(tjTime, defaultFont, Rectangle.BOX, Element.ALIGN_CENTER, 5f, 5f));
+            });
+        }
+        document2.add(table);
+
+        for (int i = 0; i < 2; i++) {
+            paragraph = PdfUtils.setParagraph(defaultFont, "");
+            document2.add(paragraph);
+        }
+
+
+        //        List<TjOrderRemark> remarks = tjOrderRemarkMapper.getzongjianyishengchakanyichangxiangmu3( tjOrder.getTjNumber());
+        List<TjOrderDetail> orderDetails = tjOrderDetailMapper.getzongjianyishengchakanyichangxiangmu4(tjOrder.getTjNumber());
+//        List<Map<String, Object>> jiancha = new ArrayList<>();
+
+
+        paragraph = PdfUtils.setParagraph(defaultTitleFont, "妫�鏌ョ患杩帮細");
+        paragraph.setSpacingBefore(3f);
+        paragraph.setSpacingAfter(2f);
+        document2.add(paragraph);
+        int xmXh = 1;
+        Map<Long, List<TjOrderDetail>> collect = orderDetails.stream().collect(Collectors.groupingBy(TjOrderDetail::getProId));
+        LambdaQueryWrapper<TjOrderYcxm> wq = new LambdaQueryWrapper<>();
+        wq.eq(TjOrderYcxm::getTjh, tjOrder.getTjNumber());
+        List<TjOrderYcxm> ycxms = ycxmService.list(wq);
+        if (null != ycxms && !ycxms.isEmpty()) {
+
+            Map<String, List<TjOrderYcxm>> stringListMap = ycxms.stream().collect(Collectors.groupingBy(TjOrderYcxm::getParentName));
+
+            for (Map.Entry<String, List<TjOrderYcxm>> entry : stringListMap.entrySet()) {
+                List<TjOrderYcxm> details = entry.getValue();
+                String xmmc = entry.getKey();
+//                    String xmmc = details.get(0).getProName();
+                boolean isXmWrite = false;
+                int index = 1;
+                for (TjOrderYcxm detail : details) {
+//                        if (!entry.getKey().equals(detail.getProId())) continue;
+                    if (!isXmWrite) {
+                        paragraph = new Paragraph(xmXh + ".  " + xmmc, defaultFont);
+                        paragraph.setAlignment(Element.ALIGN_LEFT);
+                        document2.add(paragraph);
+                        isXmWrite = true;
+                    }
+                    String result = detail.getJcjg();
+                    if (StrUtil.isNotBlank(result)) {
+                        result = result.replaceAll("鏈姤鍛婁粎瀵规湰娆℃鏌ヨ礋璐o紝涓村簥鍖荤敓渚濇嵁鐥呮儏濡傛湁鐤戦棶锛岃鍙婃椂澶嶆煡鎴栬繘涓�姝ユ鏌�", "");
+                        StringBuilder builder = new StringBuilder();
+                        if (StrUtil.isBlank(result.replaceAll("\n", "").trim())) continue;
+                        builder.append("    (").append(index).append(")").append(detail.getJcxm()).append(": ").append(result).append("\n");
+                        index++;
+
+                        result = builder.toString();
+                    }
+                    paragraph = new Paragraph(result, defaultFont);
+                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                    document2.add(paragraph);
+                }
+                if (isXmWrite) {
+                    paragraph = PdfUtils.setParagraph(defaultFont, "");
+                    paragraph.setLeading(0f);
+                    paragraph.setSpacingBefore(0f);
+                    paragraph.setSpacingAfter(5f);
+                    document2.add(paragraph);
+                    xmXh++;
+                }
+            }
+        }else {
+            for (Map.Entry<String, List<CsProVo>> deptEntry : listMap.entrySet()) {
+                List<CsProVo> proVos = deptEntry.getValue();
+                if (proVos.size() > 1) {
+                    proVos = proVos.stream()
+                            .sorted(Comparator.comparingLong(CsProVo::getProId))
+                            .collect(Collectors.toList());
+                }
+                // 宸茬粡閬嶅巻杩囩殑
+                ArrayList<String> jianYanYiDa = new ArrayList<>();
+                for (CsProVo proVo : proVos) {
+
+                    // 妫�鏌�
+                    for (Map.Entry<Long, List<TjOrderDetail>> entry : collect.entrySet()) {
+                        if (!entry.getKey().equals(proVo.getProId())) continue;
+                        List<TjOrderDetail> details = entry.getValue();
+                        String xmmc = proVo.getProName();
+//                    String xmmc = details.get(0).getProName();
+                        boolean isXmWrite = false;
+                        int index = 1;
+                        for (TjOrderDetail detail : details) {
+//                        if (!entry.getKey().equals(detail.getProId())) continue;
+                            if (!isXmWrite) {
+                                paragraph = new Paragraph(xmXh + ".  " + xmmc, defaultFont);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                document2.add(paragraph);
+                                isXmWrite = true;
+                            }
+                            String result = detail.getProResult();
+                            if (StrUtil.isNotBlank(result)) {
+                                result = result.replaceAll("鏈姤鍛婁粎瀵规湰娆℃鏌ヨ礋璐o紝涓村簥鍖荤敓渚濇嵁鐥呮儏濡傛湁鐤戦棶锛岃鍙婃椂澶嶆煡鎴栬繘涓�姝ユ鏌�", "");
+                                StringBuilder builder = new StringBuilder();
+                                if (StrUtil.isBlank(result.replaceAll("\n", "").trim())) continue;
+                                builder.append("    (").append(index).append(")").append(detail.getProName()).append(": ").append(result).append("\n");
+                                index++;
+
+                                result = builder.toString();
+                            }
+                            paragraph = new Paragraph(result, defaultFont);
+                            paragraph.setAlignment(Element.ALIGN_LEFT);
+                            document2.add(paragraph);
+                        }
+                        if (isXmWrite) {
+                            paragraph = PdfUtils.setParagraph(defaultFont, "");
+                            paragraph.setLeading(0f);
+                            paragraph.setSpacingBefore(0f);
+                            paragraph.setSpacingAfter(5f);
+                            document2.add(paragraph);
+                            xmXh++;
+                        }
+                    }
+
+                    // 妫�楠�
+                    for (Map.Entry<String, Object> item : map.entrySet()) {
+                        String xmmc = item.getKey();
+                        HashMap<String, Object> entryValue = (HashMap<String, Object>) item.getValue();
+                        ArrayList<List<String>> lists = (ArrayList<List<String>>) entryValue.get("data");
+                        boolean isXmWrite = false;
+                        int index = 1;
+                        for (List<String> i : lists) {
+                            if (!i.get(6).contains(String.valueOf(proVo.getProId()))) continue;
+                            if (i.contains("鈫�") || i.contains("鈫�")) {
+                                if (jianYanYiDa.contains(i.get(5))) continue;
+                                jianYanYiDa.add(i.get(5));
+                                if (!isXmWrite) {
+                                    paragraph = new Paragraph(xmXh + ".  " + xmmc, defaultFont);
+                                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                                    document2.add(paragraph);
+                                    isXmWrite = true;
+                                }
+                                String content = "    (" + index + ") " + i.get(0) + "锛�" + i.get(1) + "  " + i.get(3) + "  " + i.get(4) + "      " + i.get(2);
+                                paragraph = new Paragraph(content, defaultFont);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                document2.add(paragraph);
+                                index++;
+                            }
+                        }
+                        if (isXmWrite) {
+                            paragraph = PdfUtils.setParagraph(defaultFont, "");
+                            paragraph.setSpacingBefore(0f);
+                            paragraph.setSpacingAfter(5f);
+                            document2.add(paragraph);
+                            xmXh++;
+                        }
+                    }
+                }
+            }
+        }
+
+        paragraph = PdfUtils.setParagraph(defaultFont, "");
+        paragraph.setLeading(0f);
+        paragraph.setSpacingBefore(10f);
+        paragraph.setSpacingAfter(10f);
+        document2.add(paragraph);
+        paragraph = PdfUtils.setParagraph(defaultTitleFont, "鍖荤敓寤鸿锛�");
+        paragraph.setSpacingBefore(3f);
+        paragraph.setSpacingAfter(2f);
+        document2.add(paragraph);
+        xmXh = 0;
+//        LambdaQueryWrapper<TjOrderYcxm> wq = new LambdaQueryWrapper<>();
+//        wq.eq(TjOrderYcxm::getTjh, tjOrder.getTjNumber());
+//        List<TjOrderYcxm> ycxms = ycxmService.list(wq);
+        if (null != ycxms && !ycxms.isEmpty()) {
+
+            Map<String, List<TjOrderYcxm>> stringListMap = ycxms.stream().collect(Collectors.groupingBy(TjOrderYcxm::getParentName));
+
+            for (Map.Entry<String, List<TjOrderYcxm>> entry : stringListMap.entrySet()) {
+                List<TjOrderYcxm> details = entry.getValue();
+                if(null !=details && !details.isEmpty()){
+                    details= details.stream()
+                            .sorted(Comparator.comparing(TjOrderYcxm::getJcxm))
+                            .collect(Collectors.toList());
+                    boolean isXmWrite = false;
+                    int index = 1;
+                    int index1 = 1;
+                    for (TjOrderYcxm detail : details) {
+                        String xmmc = entry.getKey().toString();
+                        if (!isXmWrite) {
+                            xmXh++;
+                            paragraph = new Paragraph("銆�" + xmXh + "." + xmmc + "銆�", defaultFont);
+                            paragraph.setAlignment(Element.ALIGN_LEFT);
+                            document2.add(paragraph);
+                            isXmWrite = true;
+                        }
+                        String result = detail.getJcjg();
+                        if (StrUtil.isNotBlank(result)) {
+                            StringBuilder builder = new StringBuilder();
+                            if (StrUtil.isBlank(result.replaceAll("\n", "").trim())) continue;
+                            builder.append("    (").append(index1).append(")").append(detail.getJcxm()).append(": ").append(result).append("\n");
+                            index1++;
+
+                            result = builder.toString();
+                        }
+                        if (StrUtil.isNotBlank(result)) {
+                            paragraph = new Paragraph(result, defaultFont);
+                            paragraph.setAlignment(Element.ALIGN_LEFT);
+                            document2.add(paragraph);
+                        } else {
+                            paragraph = new Paragraph("寤鸿瀹氭湡澶嶆煡", defaultFont);
+                            paragraph.setAlignment(Element.ALIGN_LEFT);
+                            document2.add(paragraph);
+                        }
+                        String str = "     ";
+                        List<Map<String, Object>> maps = new ArrayList<>();
+
+                            String jynr = detail.getJynr();
+                            JSONArray array = JSONUtil.parseArray(jynr);
+                            for (Object object : array) {
+                                Map<String,Object> objectMap=new HashMap<>();
+                                JSONObject jsonObject = (JSONObject) object;
+                                String bt = jsonObject.getStr("bt");
+                                String nr = jsonObject.getStr("nr");
+                                objectMap.put("bt",bt);
+                                objectMap.put("nr",nr);
+                                if(null !=bt || null !=nr) maps.add(objectMap);
+                            }
+                            List<Map<String, Object>> collect1 = maps.stream().distinct().collect(Collectors.toList());
+                            for (Map<String, Object> objectMap : collect1) {
+                                String content = str + objectMap.get("bt").toString() + objectMap.get("nr").toString();
+                                if (StrUtil.isBlank(content)) content = "     ";
+                                paragraph = new Paragraph(content, defaultFont);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                document2.add(paragraph);
+                            }
+                        index++;
+                        paragraph = PdfUtils.setParagraph(defaultFont, "");
+                        paragraph.setLeading(0f);
+                        paragraph.setSpacingBefore(0f);
+                        paragraph.setSpacingAfter(5f);
+                        document2.add(paragraph);
+                    }
+                }
+            }
+
+            /*for (Map.Entry<String, List<CsProVo>> deptEntry : listMap.entrySet()) {
+                List<CsProVo> proVos = deptEntry.getValue();
+                if (proVos.size() > 1) {
+                    proVos = proVos.stream()
+                            .sorted(Comparator.comparingLong(CsProVo::getProId))
+                            .collect(Collectors.toList());
+                }
+                ArrayList<String> jianYanYiDa = new ArrayList<>();
+                for (CsProVo proVo : proVos) {
+                    // 妫�鏌�
+                    for (Map.Entry<Long, List<TjOrderDetail>> entry : collect.entrySet()) {
+                        if (!entry.getKey().equals(proVo.getProId())) continue;
+                        List<TjOrderDetail> details = entry.getValue();
+                        if(null !=details && !details.isEmpty()){
+                             details= details.stream()
+                                     .sorted(Comparator.comparing(TjOrderDetail::getProName))
+                                    .collect(Collectors.toList());
+                            boolean isXmWrite = false;
+                            int index = 1;
+                            int index1 = 1;
+                            for (TjOrderDetail detail : details) {
+                                String xmmc = proVo.getProName();
+//                                String xmmc = detail.getProName();
+                                if (!isXmWrite) {
+                                    xmXh++;
+                                    paragraph = new Paragraph("銆�" + xmXh + "." + xmmc + "銆�", defaultFont);
+                                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                                    document2.add(paragraph);
+                                    isXmWrite = true;
+                                }
+                                String result = detail.getProResult();
+                                if (StrUtil.isNotBlank(result)) {
+                                    StringBuilder builder = new StringBuilder();
+//                                    String[] split = result.split("\n");
+//                                    for (String s : split) {
+//                                        if (StrUtil.isBlank(s.replaceAll("\n", "").trim())) continue;
+//                                        builder.append("    (").append(index1).append(")").append(s).append("\n");
+//                                        index1++;
+//                                    }
+
+                                        if (StrUtil.isBlank(result.replaceAll("\n", "").trim())) continue;
+                                        builder.append("    (").append(index1).append(")").append(detail.getProName()).append(": ").append(result).append("\n");
+                                        index1++;
+
+                                    result = builder.toString();
+                                }
+                                if (StrUtil.isNotBlank(result)) {
+                                    paragraph = new Paragraph(result, defaultFont);
+                                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                                    document2.add(paragraph);
+                                } else {
+                                    paragraph = new Paragraph("寤鸿瀹氭湡澶嶆煡", defaultFont);
+                                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                                    document2.add(paragraph);
+                                }
+                                String str = "     ";
+                                List<Map<String, Object>> maps = new ArrayList<>();
+
+                                LambdaQueryWrapper<TjOrderYcxm> ycwq=new LambdaQueryWrapper<>();
+                                ycwq.eq(TjOrderYcxm::getTjh,tjOrder.getTjNumber());
+                                ycwq.eq(TjOrderYcxm::getJcxm,detail.getProName());
+                                TjOrderYcxm ycxm = ycxmService.getOne(ycwq);
+                                if(null !=ycxm){
+                                    String jynr = ycxm.getJynr();
+                                    JSONArray array = JSONUtil.parseArray(jynr);
+                                    for (Object object : array) {
+                                        Map<String,Object> objectMap=new HashMap<>();
+                                        JSONObject jsonObject = (JSONObject) object;
+                                        String bt = jsonObject.getStr("bt");
+                                        String nr = jsonObject.getStr("nr");
+                                        objectMap.put("bt",bt);
+                                        objectMap.put("nr",nr);
+                                        if(null !=bt || null !=nr) maps.add(objectMap);
+                                    }
+                                    List<Map<String, Object>> collect1 = maps.stream().distinct().collect(Collectors.toList());
+                                    for (Map<String, Object> objectMap : collect1) {
+                                        String content = str + objectMap.get("bt").toString() + objectMap.get("nr").toString();
+                                        if (StrUtil.isBlank(content)) content = "     ";
+                                        paragraph = new Paragraph(content, defaultFont);
+                                        paragraph.setAlignment(Element.ALIGN_LEFT);
+                                        document2.add(paragraph);
+                                    }
+                                }
+                                index++;
+                                paragraph = PdfUtils.setParagraph(defaultFont, "");
+                                paragraph.setLeading(0f);
+                                paragraph.setSpacingBefore(0f);
+                                paragraph.setSpacingAfter(5f);
+                                document2.add(paragraph);
+                            }
+                        }
+                    }
+                    // 妫�楠�
+                    for (Map.Entry<String, Object> item : map.entrySet()) {
+                        String xmmc = item.getKey();
+                        HashMap<String, Object> entryValue = (HashMap<String, Object>) item.getValue();
+                        ArrayList<List<String>> lists = (ArrayList<List<String>>) entryValue.get("data");
+                        boolean isXmWrite = false;
+                        int index = 1;
+                        for (List<String> i : lists) {
+                            if (!i.get(6).contains(String.valueOf(proVo.getProId()))) continue;
+                            if (i.contains("鈫�") || i.contains("鈫�")) {
+                                if (jianYanYiDa.contains(i.get(5))) continue;
+                                jianYanYiDa.add(i.get(5));
+                                if (!isXmWrite) {
+                                    xmXh++;
+                                    paragraph = new Paragraph("銆�" + xmXh + "." + xmmc + "銆�", defaultFont);
+                                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                                    document2.add(paragraph);
+                                    isXmWrite = true;
+                                }
+                                String content = "    (" + index + ")" + i.get(0) + "锛�" + i.get(1) + "  " + i.get(3) + "  " + i.get(4) + "  " + i.get(2);
+                                paragraph = new Paragraph(content, defaultFont);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                document2.add(paragraph);
+                                String str = "    ";
+
+                                LambdaQueryWrapper<TjOrderYcxm> ycwq=new LambdaQueryWrapper<>();
+                                ycwq.eq(TjOrderYcxm::getTjh,tjOrder.getTjNumber());
+                                ycwq.eq(TjOrderYcxm::getJcxm,i.get(0));
+                                TjOrderYcxm ycxm = ycxmService.getOne(ycwq);
+                                if(null !=ycxm){
+                                    String jynr = ycxm.getJynr();
+                                    JSONArray array = JSONUtil.parseArray(jynr);
+                                    for (Object object : array) {
+                                        JSONObject jsonObject = (JSONObject) object;
+                                        String bt = jsonObject.getStr("bt");
+                                        String nr = jsonObject.getStr("nr");
+                                        if(null !=bt || null !=nr) {
+                                            String content1 = str + bt + nr;
+                                            if (StrUtil.isBlank(content)) content1 = "     ";
+                                            paragraph = new Paragraph(content1, defaultFont);
+                                        }
+                                        paragraph.setAlignment(Element.ALIGN_LEFT);
+                                        document2.add(paragraph);
+                                    }
+                                    paragraph = PdfUtils.setParagraph(defaultFont, "");
+                                    paragraph.setSpacingBefore(2f);
+                                    paragraph.setSpacingAfter(5f);
+                                    document2.add(paragraph);
+                                    index++;
+                                }
+                            }
+                        }
+                        if (isXmWrite) {
+                            paragraph = PdfUtils.setParagraph(defaultFont, "");
+                            paragraph.setSpacingBefore(0f);
+                            paragraph.setSpacingAfter(5f);
+                            document2.add(paragraph);
+                        }
+                    }
+                }
+            }*/
+        } else {
+            for (Map.Entry<String, List<CsProVo>> deptEntry : listMap.entrySet()) {
+                List<CsProVo> proVos = deptEntry.getValue();
+                if (proVos.size() > 1) {
+                    proVos = proVos.stream()
+                            .sorted(Comparator.comparingLong(CsProVo::getProId))
+                            .collect(Collectors.toList());
+                }
+                ArrayList<String> jianYanYiDa = new ArrayList<>();
+                for (CsProVo proVo : proVos) {
+                    // 妫�鏌�
+                    for (Map.Entry<Long, List<TjOrderDetail>> entry : collect.entrySet()) {
+                        if (!entry.getKey().equals(proVo.getProId())) continue;
+                        List<TjOrderDetail> details = entry.getValue();
+                        String xmmc = details.get(0).getProName();
+                        boolean isXmWrite = false;
+                        int index = 1;
+                        for (TjOrderDetail detail : details) {
+                            if (!isXmWrite) {
+                                xmXh++;
+                                paragraph = new Paragraph("銆�" + xmXh + "." + xmmc + "銆�", defaultFont);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                document2.add(paragraph);
+                                isXmWrite = true;
+                            }
+                            String result = detail.getProResult();
+                            if (StrUtil.isNotBlank(result)) {
+//                    result = result.replaceAll(" ","").replaceAll("\t","");
+//                    result = result.replaceAll("\n鏈姤鍛婁粎瀵规湰娆℃鏌ヨ礋璐o紝涓村簥鍖荤敓渚濇嵁鐥呮儏濡傛湁鐤戦棶锛岃鍙婃椂澶嶆煡鎴栬繘涓�姝ユ鏌�", "");
+//                    result = "\n      " + result.replaceAll("\n", "\n      ");
+                                int index1 = 1;
+                                String[] split = result.split("\n");
+//                            boolean contains = result.contains("鏈姤鍛婁粎瀵规湰娆℃鏌ヨ礋璐o紝涓村簥鍖荤敓渚濇嵁鐥呮儏濡傛湁鐤戦棶锛岃鍙婃椂澶嶆煡鎴栬繘涓�姝ユ鏌�");
+                                boolean contains = result.contains(" ");
+                                StringBuilder builder = new StringBuilder();
+                                for (String s : split) {
+                                    if (StrUtil.isBlank(s.replaceAll("\n", "").trim())) continue;
+                                    builder.append("    (").append(index1).append(")").append(s).append("\n");
+                                    index1++;
+                                }
+//                            if (!contains) builder.append("    (").append(index1).append(")").append("鏈姤鍛婁粎瀵规湰娆℃鏌ヨ礋璐o紝涓村簥鍖荤敓渚濇嵁鐥呮儏濡傛湁鐤戦棶锛岃鍙婃椂澶嶆煡鎴栬繘涓�姝ユ鏌�");
+//                            if (!contains) builder.append("    (").append(index1).append(")").append(" ");
+//                            else builder.substring(0,builder.length() - 1);
+                                result = builder.toString();
+                            }
+//                String content = "  (" + index + ") " + detail.getProName() + "锛�" + result;
+//                content = content.replaceAll("[\\n\\r]+$", "");
+//                content = content.replaceAll("\\s+$", "");
+//                paragraph = new Paragraph(content, defaultFont);
+                            if (StrUtil.isNotBlank(result)) {
+                                paragraph = new Paragraph(result, defaultFont);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                document2.add(paragraph);
+                            } else {
+                                paragraph = new Paragraph("寤鸿瀹氭湡澶嶆煡", defaultFont);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                document2.add(paragraph);
+                            }
+                            String str = "     ";
+//                        List<Map<String, Object>> maps = tjRulesService.getyichangxiangmujianyiguize(entry.getKey().toString(),"",
+//                                detail.getYcbz(),tjOrder.getTjNumber(),detail.getProName().replaceAll("[锛�(][^锛�)]*[锛�)]", "")
+//                                        .replaceAll("[ 娴嬪畾妫�娴媇",""),detail.getProResult());
+                            List<Map<String, Object>> maps = new ArrayList<>();
+                            if (detail.getDeptId().equals("2")) {
+                                String[] split = result.split("銆倈,|锛�");
+                                for (String s : split) {
+                                    s = s.replaceAll("\n", "").replaceAll("[锛�(][^锛�)]*[锛�)]", "");
+//                                Map<String,Object> mapss= tjRulesService.getyichangxiangmujianyiguizeJianCha(s);
+                                    Map<String, Object> mapss = tjProAdvicerulesService.getyichangxiangmujianyiguizeJianCha(detail.getKs(), s, "0");
+                                    if (null != mapss) {
+                                        Object bt = mapss.get("bt");
+                                        Object nr = mapss.get("nr");
+                                        if (null != bt && null != nr) maps.add(mapss);
+                                    }
+                                }
+                            }
+                            List<Map<String, Object>> collect1 = maps.stream().distinct().collect(Collectors.toList());
+
+                            for (Map<String, Object> objectMap : collect1) {
+                                String content = str + objectMap.get("bt").toString() + objectMap.get("nr").toString();
+//                            if (StrUtil.isBlank(content)) content = "     鏈姤鍛婁粎瀵规湰娆℃鏌ヨ礋璐o紝涓村簥鍖荤敓渚濇嵁鐥呮儏濡傛湁鐤戦棶锛岃鍙婃椂澶嶆煡鎴栬繘涓�姝ユ鏌�";
+                                if (StrUtil.isBlank(content)) content = "     ";
+                                paragraph = new Paragraph(content, defaultFont);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                document2.add(paragraph);
+                            }
+                            index++;
+                            paragraph = PdfUtils.setParagraph(defaultFont, "");
+                            paragraph.setLeading(0f);
+                            paragraph.setSpacingBefore(0f);
+                            paragraph.setSpacingAfter(5f);
+                            document2.add(paragraph);
+                        }
+                    }
+                    // 妫�楠�
+                    for (Map.Entry<String, Object> item : map.entrySet()) {
+                        String xmmc = item.getKey();
+                        HashMap<String, Object> entryValue = (HashMap<String, Object>) item.getValue();
+                        ArrayList<List<String>> lists = (ArrayList<List<String>>) entryValue.get("data");
+                        boolean isXmWrite = false;
+                        int index = 1;
+                        for (List<String> i : lists) {
+                            if (!i.get(6).contains(String.valueOf(proVo.getProId()))) continue;
+                            if (i.contains("鈫�") || i.contains("鈫�")) {
+                                if (jianYanYiDa.contains(i.get(5))) continue;
+                                jianYanYiDa.add(i.get(5));
+                                if (!isXmWrite) {
+                                    xmXh++;
+                                    paragraph = new Paragraph("銆�" + xmXh + "." + xmmc + "銆�", defaultFont);
+                                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                                    document2.add(paragraph);
+                                    isXmWrite = true;
+                                }
+                                String content = "    (" + index + ")" + i.get(0) + "锛�" + i.get(1) + "  " + i.get(3) + "  " + i.get(4) + "  " + i.get(2);
+                                paragraph = new Paragraph(content, defaultFont);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                document2.add(paragraph);
+                                // 绗叚浣嶆槸lis椤圭洰id
+//                    LambdaQueryWrapper<TjProject> wrapper = new LambdaQueryWrapper<>();
+//                    wrapper.eq(TjProject::getLisXmbm,i.get(5));
+//                    TjProject project = projectService.getOne(wrapper);
+//                    if (project != null) {
+//                        LambdaQueryWrapper<TjRules> queryWrapper = new LambdaQueryWrapper<>();
+//                        queryWrapper.eq(TjRules::getProId,project.getProId());
+//                        List<TjRules> rules = tjRulesService.list(queryWrapper);
+//                        if (!rules.isEmpty()){
+//
+//                        }
+                                String str = "    ";
+                                List<Map<String, Object>> maps = tjRulesService.getyichangxiangmujianyiguize(i.get(5), "",
+                                        i.get(2), tjOrder.getTjNumber(), i.get(0).replaceAll("[锛�(][^锛�)]*[锛�)]", "")
+                                                .replaceAll("[ 娴嬪畾妫�娴媇", ""), i.get(1));
+                                if (!maps.isEmpty()) {
+                                    for (Map<String, Object> objectMap : maps) {
+//                                paragraph = new Paragraph(str+"寤鸿鏍囬",defaultFont);
+//                                paragraph.setAlignment(Element.ALIGN_LEFT);
+//                                document2.add(paragraph);
+//
+//                                paragraph = new Paragraph(str+objectMap.get("bt").toString(),defaultFont);
+//                                paragraph.setAlignment(Element.ALIGN_LEFT);
+//                                document2.add(paragraph);
+//
+//                                paragraph = new Paragraph(str+"寤鸿鍐呭",defaultFont);
+//                                paragraph.setAlignment(Element.ALIGN_LEFT);
+//                                document2.add(paragraph);
+//
+//                                paragraph = new Paragraph(str+objectMap.get("nr").toString(),defaultFont);
+//                                paragraph.setAlignment(Element.ALIGN_LEFT);
+//                                document2.add(paragraph);
+                                        Object bt = objectMap.get("bt");
+                                        Object nr = objectMap.get("nr");
+                                        if (null != bt && null != nr) {
+                                            String content1 = str + bt.toString() + nr.toString().trim();
+                                            if (StrUtil.isBlank(content)) content1 = "     ";
+                                            paragraph = new Paragraph(content1, defaultFont);
+                                        }
+//                                    if (StrUtil.isBlank(content)) content1 = "     鏈姤鍛婁粎瀵规湰娆℃鏌ヨ礋璐o紝涓村簥鍖荤敓渚濇嵁鐥呮儏濡傛湁鐤戦棶锛岃鍙婃椂澶嶆煡鎴栬繘涓�姝ユ鏌�";
+                                        paragraph.setAlignment(Element.ALIGN_LEFT);
+                                        document2.add(paragraph);
+                                    }
+                                    paragraph = PdfUtils.setParagraph(defaultFont, "");
+                                    paragraph.setSpacingBefore(2f);
+                                    paragraph.setSpacingAfter(5f);
+                                    document2.add(paragraph);
+                                }
+//                    }
+                                index++;
+                            }
+                        }
+                        if (isXmWrite) {
+                            paragraph = PdfUtils.setParagraph(defaultFont, "");
+                            paragraph.setSpacingBefore(0f);
+                            paragraph.setSpacingAfter(5f);
+                            document2.add(paragraph);
+                        }
+                    }
+                }
+            }
+        }
+
+        for (int i = 0; i < 1; i++) {
+            paragraph = PdfUtils.setParagraph(defaultFont, "");
+            document2.add(paragraph);
+        }
+        paragraph = PdfUtils.setParagraph(defaultTitleFont, "鎬绘鍖荤敓寤鸿锛�");
+        document2.add(paragraph);
+        if (tjOrder.getCheckAdvice() == null) {
+            paragraph = PdfUtils.setParagraph(defaultFont, "鏃�");
+            document2.add(paragraph);
+        } else {
+            Paragraph paragraphs = new Paragraph(tjOrder.getCheckAdvice(), defaultFont);
+            //璁剧疆鏂囧瓧灞呬腑
+            paragraphs.setAlignment(Element.ALIGN_LEFT);
+            //琛岄棿璺�
+//            paragraphs.setLeading(5f);
+            //璁剧疆娈佃惤涓婄┖鐧�
+            paragraphs.setSpacingBefore(10f);
+            //璁剧疆娈佃惤涓嬬┖鐧�
+            paragraphs.setSpacingAfter(10f);
+//            paragraph = PdfUtils.setParagraph(defaultFont, tjOrder.getCheckAdvice());
+            document2.add(paragraphs);
+        }
+
+
+        Paragraph paragraphNone = new Paragraph("", defaultFont);
+        paragraphNone.setAlignment(Element.ALIGN_LEFT);
+        //琛岄棿璺�
+        paragraphNone.setLeading(5f);
+        paragraphNone.setSpacingBefore(10f);
+        paragraphNone.setSpacingAfter(10f);
+        document2.add(paragraphNone);
+        paragraphNone = new Paragraph("", defaultFont);
+        paragraphNone.setAlignment(Element.ALIGN_LEFT);
+        //琛岄棿璺�
+        paragraphNone.setLeading(5f);
+        paragraphNone.setSpacingBefore(10f);
+        paragraphNone.setSpacingAfter(10f);
+        document2.add(paragraphNone);
+
+
+        PdfPTable tableQz = new PdfPTable(new float[]{100f, 100f, 50f});
+        tableQz.setTotalWidth(PageSize.A4.getWidth() - 100);
+        tableQz.setLockedWidth(true);
+        tableQz.setHorizontalAlignment(Element.ALIGN_LEFT);
+        tableQz.getDefaultCell().setBorder(0);
+        tableQz.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
+
+        Font zongJianFont = PdfUtils.setFont(DEFAULT_ZONGJIAN_FONT_SIZE);
+        Font zongJianTitleFont = PdfUtils.setFont(DEFAULT_ZONGJIAN_FONT_SIZE);
+        zongJianTitleFont.setStyle(Font.BOLD);
+
+        for (int i = 0; i < 3; i++) {
+            PdfPCell cell = new PdfPCell();
+            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+            cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
+            cell.setPhrase(new Phrase("", defaultFont));
+            cell.setBorder(Rectangle.NO_BORDER);
+            tableQz.addCell(cell);
+        }
+
+
+        PdfPCell cell = new PdfPCell();
+        cell.setBorder(Rectangle.NO_BORDER);
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
+        cell.setPhrase(new Phrase("", defaultFont));
+        cell.setRowspan(3);
+        tableQz.addCell(cell);
+
+        cell = new PdfPCell();
+        cell.setBorder(Rectangle.NO_BORDER);
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
+        cell.setPaddingTop(10);
+        cell.setPaddingBottom(10);
+        cell.setPhrase(new Phrase("浣撴鍗曚綅鐩栫珷:", zongJianTitleFont));
+
+        tableQz.addCell(cell);
+
+        File file = new File(value + File.separator + "yinzhang.png");
+        cell = new PdfPCell();
+        cell.setBorder(Rectangle.NO_BORDER);
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
+        cell.setPaddingTop(10);
+        cell.setPaddingBottom(10);
+        if (!file.exists()) {
+            cell.setPhrase(new Phrase("", zongJianFont));
+        }else {
+            FileInputStream fileInputStream = new FileInputStream(file);
+            byte[] fileBytes = new byte[(int) file.length()];
+            fileInputStream.read(fileBytes);
+            fileInputStream.close();
+            Image image = Image.getInstance(Base64.getDecoder().decode(Base64.getEncoder().encodeToString(fileBytes)));
+            image.scaleToFit(90, 90);
+            cell.addElement(image);
+        }
+        tableQz.addCell(cell);
+
+        cell = new PdfPCell();
+        cell.setBorder(Rectangle.NO_BORDER);
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
+        cell.setPaddingTop(10);
+        cell.setPaddingBottom(10);
+        cell.setPhrase(new Phrase("鎬绘鍖诲笀:", zongJianTitleFont));
+        tableQz.addCell(cell);
+
+
+        cell = new PdfPCell();
+        cell.setBorder(Rectangle.NO_BORDER);
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
+        cell.setPaddingTop(10);
+        cell.setPaddingBottom(10);
+        String zongjianysname = sysConfigService.selectConfigByKey("pdf_report_zongjianysname");
+        if (zongJianYiShiQianMing == null && StrUtil.isNotBlank(zongjianysname) && !zongjianysname.equals("鏃�")) {
+            cell.setPhrase(new Phrase(zongjianysname, zongJianFont));
+            tableQz.addCell(cell);
+        } else if (zongJianYiShiQianMing == null && zongjianysname.equals("鏃�")) {
+            String nickName = SecurityUtils.getLoginUser().getUser().getNickName();
+            cell.setPhrase(new Phrase(nickName, zongJianFont));
+            tableQz.addCell(cell);
+        } else {
+            byte[] bytes = Base64.getDecoder().decode(zongJianYiShiQianMing.getTemplate());
+            Image image = Image.getInstance(bytes);
+            image.scaleToFit(100, 100);
+            cell.addElement(image);
+            tableQz.addCell(cell);
+        }
+
+        cell = new PdfPCell();
+        cell.setBorder(Rectangle.NO_BORDER);
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
+        cell.setPaddingTop(10);
+        cell.setPaddingBottom(10);
+        cell.setPhrase(new Phrase("鎬绘鏃ユ湡:", zongJianTitleFont));
+        tableQz.addCell(cell);
+
+        cell = new PdfPCell();
+        cell.setBorder(Rectangle.NO_BORDER);
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
+        cell.setPaddingTop(10);
+        cell.setPaddingBottom(10);
+        cell.setPhrase(new Phrase(new SimpleDateFormat("yyyy-MM-dd").format(tjOrder.getCheckTime()), zongJianFont));
+        tableQz.addCell(cell);
+
+        document2.add(tableQz);
+
+        document2.close();
+
+
+        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+        Document document = new Document(PageSize.A4);
+        PdfWriter pdfWriter = null;
+//        int pageSize = 0;
+//        try {
+        pdfWriter = PdfWriter.getInstance(document, byteArrayOutputStream);
+        pdfWriter.setPageEvent(new FooterHeaderPageEvent(dictHosp.getHospName(), customer.getCusName(), tjOrder.getTjNumber(), sex, String.valueOf(DateUtil.ageOfNow(customer.getCusBrithday())), null));
+//            pageSize = pdfWriter.getPageNumber();
+//        } catch (DocumentException e) {
+//            log.error(String.valueOf(e));
+//            return AjaxResult.error();
+//        }
+        // 鍚庨潰椤电爜鏁伴噺
+        int dataPageNumer = pdfWriter.getPageNumber();
+        document.setMargins(70, 70, 40, 40);
+        document.open();
+
+        Map<TjOrderRemark, List<TjPdfVO>> printReport = new HashMap<>();
+        notHuaYanData(tjOrder.getTjNumber(), printReport, tjOrder, customer);
+        try {
+            notHuaYanTable(document, printReport, dictHosp, color, false);
+        } catch (DocumentException e) {
+            log.error("闈炲寲楠岄」鐩~鍏呰〃鏍煎紓甯�");
+            log.error(String.valueOf(e));
+            return AjaxResult.error();
+        }
+        PdfReader reader = null;
+        makeHisJianYanTable(document, map, dictHosp, color);
+
+        printReport = new HashMap<>();
+        pacsJianChaData(tjOrder.getTjNumber(), printReport, tjOrder, customer);
+        try {
+            notHuaYanTable(document, printReport, dictHosp, color, true);
+        } catch (DocumentException e) {
+            log.error("pacs椤圭洰濉厖琛ㄦ牸寮傚父");
+            log.error(String.valueOf(e));
+            return AjaxResult.error();
+        }
+        document.close();
+
+
+        // 棣栭〉琛ㄥ崟
+        String tjNumber = tjOrder.getTjNumber();
+        String template = tjReportTemplate.getTemplate();
+
+        LambdaQueryWrapper<TjOrderDetail> wq2 = new LambdaQueryWrapper<>();
+        wq2.eq(TjOrderDetail::getOrderId, tjOrder.getOrderId());
+        wq2.isNotNull(TjOrderDetail::getFlowingWaterId);
+        List<TjOrderDetail> detailList = tjOrderDetailService.list(wq2);
+        for (TjOrderDetail tjOrderDetail : detailList) {
+            TjProject tjProject = projectService.selectTjProjectByProId(tjOrderDetail.getProId());
+            tjOrderDetail.setProject(tjProject);
+        }
+        ByteArrayOutputStream byteArrayOutputStream4 = new ByteArrayOutputStream();
+        PdfReader reader4 = null;
+        PdfStamper pdfStamper = null;
+
+        reader4 = new PdfReader(new ByteArrayInputStream(Base64.getDecoder().decode(template)));
+        pdfStamper = new PdfStamper(reader4, byteArrayOutputStream4);
+        AcroFields acroFields = pdfStamper.getAcroFields();
+        BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
+        acroFields.addSubstitutionFont(bf);
+        HashMap<String, Object> data = new HashMap<>();
+        Long cusSex = customer.getCusSex();
+        String tjtype;
+        if (cusSex == 0) {
+            sex = "鐢�";
+        } else {
+            sex = "濂�";
+        }
+        HashMap<String, String> hashMap = new HashMap<>();
+        hashMap.put("name", customer.getCusName());
+        if ("1".equals(tjOrder.getTjType())) {
+            tjtype = "鍥㈤槦";
+            hashMap.put("tjtype", tjtype);
+        } else {
+            tjtype = "涓汉";
+            hashMap.put("tjtype", tjtype);
+        }
+        if (StrUtil.isNotBlank(tjOrder.getFirmName())) {
+            hashMap.put("work", tjOrder.getFirmName());
+        } else {
+//            LambdaQueryWrapper<DictComp> wq111 = new LambdaQueryWrapper<>();
+//            wq111.eq(DictComp::getDrugManufacturerId, tjOrder.getFirmId());
+//            DictComp dictComp = dictCompService.getOne(wq111);
+
+            if (StrUtil.isBlank(tjOrder.getFirmName())) {
+                hashMap.put("work", "鏃�");
+            } else {
+                hashMap.put("work", tjOrder.getFirmName());
+            }
+        }
+        if (StrUtil.isBlank(tjOrder.getFirmDeptName())) {
+            hashMap.put("bumen", "鏃�");
+        } else {
+            hashMap.put("bumen", tjOrder.getFirmDeptName());
+        }
+        hashMap.put("sex", sex);
+        hashMap.put("tjnumber", tjNumber);
+        hashMap.put("tjdate", DateUtils.parseDateToStr("yyyy/MM/dd", tjOrder.getCreateTime()));
+        hashMap.put("phone", customer.getCusPhone());
+        for (String key : hashMap.keySet()) {
+            acroFields.setFieldProperty(key, "textsize", DEFAULT_FONT_SIZE, null);
+            acroFields.setField(key, hashMap.get(key));
+        }
+        pdfStamper.setFormFlattening(true);
+        pdfStamper.close();
+        reader4.close();
+        // 灏嗕慨鏀瑰悗鐨凱DF鍐呭鍐欏叆
+        byte[] bytes = byteArrayOutputStream4.toByteArray();
+
+
+        ByteArrayOutputStream finalOutput = new ByteArrayOutputStream();
+        Document mergedDocument = new Document(PageSize.A4);
+        PdfCopy copy = new PdfCopy(mergedDocument, finalOutput);
+        mergedDocument.open();
+
+        reader4 = new PdfReader(new ByteArrayInputStream(bytes));
+        int numberOfPages = reader4.getNumberOfPages();
+        for (int i = 1; i <= numberOfPages; i++) {
+            copy.addPage(copy.getImportedPage(reader4, i));
+        }
+
+        PdfReader reader2 = new PdfReader(byteArrayOutputStream2.toByteArray());
+        int numberOfPages2 = reader2.getNumberOfPages();
+        for (int i = 1; i <= numberOfPages2; i++) {
+            PdfImportedPage page = copy.getImportedPage(reader2, i);
+            copy.addPage(page);
+        }
+        reader2.close();
+
+        PdfReader reader1 = new PdfReader(byteArrayOutputStream.toByteArray());
+        int numberOfPages1 = reader1.getNumberOfPages();
+        for (int i = 1; i <= numberOfPages1; i++) {
+            PdfImportedPage page = copy.getImportedPage(reader1, i);
+            copy.addPage(page);
+        }
+        reader1.close();
+        mergedDocument.close();
+
+        String outputFileName1 = customer.getCusId() + tjOrder.getTjNumber() + customer.getCusName() + "_鎶ュ憡.pdf";
+        savePDFFile(outputFileName1, tjOrder, customer, finalOutput);
         return AjaxResult.success();
     }
 
     /**
      * 鐢熸垚妫�鏌ヨ〃鏍�
+     *
      * @param tjOrder
      * @return
      */
-    private List<ByteArrayOutputStream> makeHisJianChaTable(TjOrder tjOrder) {
+    private List<ByteArrayOutputStream> makeHisJianChaTable(TjOrder tjOrder) throws Exception {
         LambdaQueryWrapper<LtkjGetexamreportinfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-        lambdaQueryWrapper.eq(LtkjGetexamreportinfo::getHisRegistrationId, tjOrder.getCardId());
+        lambdaQueryWrapper.eq(LtkjGetexamreportinfo::getRequestParamsHisRegistrationId, tjOrder.getCardId());
+        lambdaQueryWrapper.groupBy(LtkjGetexamreportinfo::getJcbgid);
         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(11);
         for (LtkjGetexamreportinfo getexamreportinfo : list) {
             String xm = getexamreportinfo.getHzxm();
             String xb = getexamreportinfo.getHzxb().equals("2") ? "濂�" : "鐢�";
@@ -282,273 +1891,821 @@
             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 tjOrder
+     * @return
+     */
+    private List<ByteArrayOutputStream> makeCcgcHisJianChaTable(TjOrder tjOrder) throws Exception {
+
+        TjCustomer customer = tjCustomerService.getById(tjOrder.getUserId());
+
+        List<LtkjExamJcbgd> list = jcbgdService.getJianJcBaoGaoDanByTjh(tjOrder.getCardId());
+
+        List<ByteArrayOutputStream> jianchas = new ArrayList<>();
+        Paragraph elements = new Paragraph();
+        elements.setLeading(5f);
+        elements.setSpacingBefore(10f);
+        elements.setSpacingAfter(10f);
+        elements.setAlignment(Element.ALIGN_RIGHT);
+
+        for (LtkjExamJcbgd getexamreportinfo : list) {
+            String xm = customer.getCusName();
+            String xb = customer.getCusSex() == 2 ? "濂�" : "鐢�";
+            String nl = customer.getAge();
+            String jcks = "浣撴涓績";
+            String sjks = "";
+            String jcsb = "";
+            String jch = getexamreportinfo.getTmh();
+            String jcxm = getexamreportinfo.getXmmc();
+            String ms = getexamreportinfo.getYxbx();
+            String ts = getexamreportinfo.getYxzd();
+            String bgysqm = getexamreportinfo.getShysxm();
+            String shysqm = getexamreportinfo.getShysdm();
+            String sqrxm = "鐜嬪仴钀�";
+            String zyh = "";
+            String ch = "";
+            String jcysqm = getexamreportinfo.getShysdm();
+            StringBuilder builder;
+            String footer;
+            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();
+            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;
     }
 
     /**
-     * PDF鏂囦欢瀛樺偍鑷虫湰鍦�
-     * @param tjOrder
-     * @param customer
-     * @param finalOutPut
+     * 鍖诲笀淇℃伅琛�
+     *
+     * @param phrase
+     * @param doctorFonts
+     * @param sqrxm
+     * @param sqrbh
+     * @throws BadElementException
      */
-    private void savePDFFile(String outputFileName1,TjOrder tjOrder, TjCustomer customer, ByteArrayOutputStream finalOutPut) {
-        // 鏂囦欢閰嶇疆
-//        String outputPath1 = "/Users/chacca/寮�鍙戠浉鍏�/浠g爜/";
-        String outputPath1 = value+"\\";
-        File file = new File(outputPath1 + outputFileName1);
-        BufferedOutputStream outputStream = null;
-        try {
-            outputStream = new BufferedOutputStream(new FileOutputStream(file));
-            outputStream.write(finalOutPut.toByteArray());
-            outputStream.flush();
-            outputStream.close();
-            finalOutPut.close();
-        } catch (IOException e) {
-            log.error("鏈湴瀛樺偍pdf寮傚父");
-            e.printStackTrace();
+    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));
         }
     }
 
     /**
+     * PDF鏂囦欢瀛樺偍鑷虫湰鍦�
+     *
+     * @param tjOrder
+     * @param customer
+     * @param finalOutPut
+     */
+    private void savePDFFile(String outputFileName1, TjOrder tjOrder, TjCustomer customer, ByteArrayOutputStream finalOutPut) throws IOException, DocumentException, InterruptedException {
+        // 绗竴姝ワ細鐢熸垚鏂囦欢骞朵繚瀛�
+        String outputPath1 = value + File.separator;
+        File file = new File(outputPath1 + outputFileName1);
+        BufferedOutputStream outputStream = null;
+        outputStream = new BufferedOutputStream(new FileOutputStream(file));
+        outputStream.write(finalOutPut.toByteArray());
+        outputStream.flush();
+        outputStream.close();
+        finalOutPut.close();
+
+//        Thread.sleep(2000);
+//
+//        FileInputStream fileInputStream = new FileInputStream(file);
+//        FileOutputStream fileOutputStream = new FileOutputStream(file);
+//
+//        PdfReader pdfReader = new PdfReader(fileInputStream);
+//        PdfStamper pdfStamper = new PdfStamper(pdfReader, fileOutputStream);
+//        AcroFields form = pdfStamper.getAcroFields();
+//
+//        List<String> fieldNames = new ArrayList<>(form.getFields().keySet());
+//        if (fieldNames.contains("page")) {
+//            form.setField("page", "1111");
+//        }
+//
+//        pdfStamper.setFormFlattening(true);  // 璁剧疆涓� true 鍚庤〃鍗曞瓧娈典笉鍙紪杈�
+//
+//        pdfStamper.close();
+//        pdfReader.close();
+//        fileInputStream.close();
+//        fileOutputStream.close();
+    }
+
+
+    /**
      * 濉厖妫�楠岃〃鏍兼暟鎹�
+     *
      * @param document1
      * @param map
      * @throws DocumentException
      */
-    private static 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};
+    private void makeHisJianYanTable(Document document1, HashMap<String, Object> map, DictHosp dictHosp, String colorStr) throws DocumentException {
+        if (!map.isEmpty()) {
+            String[] titles = new String[]{"浣撴椤圭洰", "浣撴缁撴灉", "鎻愮ず", "鍗曚綅", "鍙傝�冭寖鍥�"};
+            float[] titlesWidth = new float[]{280, 100, 40, 100, 120};
             for (Map.Entry<String, Object> entry : map.entrySet()) {
                 String titleName = entry.getKey().trim();
                 HashMap<String, Object> entryValue = (HashMap<String, Object>) entry.getValue();
                 HashSet<String> jyys = (HashSet<String>) entryValue.get("jyys");
                 ArrayList<List<String>> lists = (ArrayList<List<String>>) entryValue.get("data");
-                addJianYanTable(document1,titleName,titles,titlesWidth,lists);
-                Font doctorFonts = PdfUtils.setFont(9);
-                String doctors = "";
-                for (String s : jyys) {
-                    doctors+=s+"銆�";
+                String shsj = entryValue.get("shsj").toString();
+                addJianYanTable(document1, titleName, titles, titlesWidth, lists, dictHosp, colorStr);
+                if (!jyys.isEmpty()) {
+                    Font doctorFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                    String doctors = "";
+                    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("妫�鏌ユ棩鏈燂細" + shsj + "         瀹℃牳鍖诲笀锛�", doctorFonts));
+                    boolean flag = false;
+                    for (String s : jyys) {
+                        if (s.contains("|")) {
+                            flag = true;
+                            String[] split = s.split("\\|");
+                            String qmImg = dictUserInfoMapper.selectQmImgInnerJoinUserByHisDictCode(split[1]);
+                            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(image, 0, -10, true));
+                                } catch (IOException e) {
+                                    phrase.add(new Chunk(split[0].trim(), doctorFonts));
+                                }
+                            } else {
+                                phrase.add(new Chunk(split[0].trim(), doctorFonts));
+                            }
+                        } else {
+                            doctors += s.trim() + "銆�";
+                        }
+                    }
+                    if (!flag) {
+                        String substring = doctors.substring(0, doctors.length() - 1).trim();
+                        Paragraph df = PdfUtils.setParagraph(doctorFonts, "妫�鏌ユ棩鏈燂細" + shsj + "         瀹℃牳鍖诲笀锛�" + substring);
+                        df.setAlignment(Element.ALIGN_RIGHT);
+                        document1.add(df);
+                    } else {
+                        elements.add(phrase);
+                        document1.add(elements);
+                    }
                 }
-                String substring = doctors.substring(0, doctors.length() - 1);
-                Paragraph df = PdfUtils.setParagraph(doctorFonts, "妫�楠屽尰甯堬細"+substring);
-                df.setAlignment(Element.ALIGN_RIGHT);
-                document1.add(df);
                 //鍒嗗壊绾�
-                LineSeparator objectName = new LineSeparator();
-                document1.add(objectName);
+//                if (!dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌")) {
+                if (!true) {
+                    LineSeparator objectName = new LineSeparator();
+                    objectName.setOffset(-5);
+                    document1.add(objectName);
+                }
             }
         }
     }
 
     /**
      * 闈炲寲楠岄」鐩〃鏍煎~鍏�
+     *
      * @param document1
      * @param printReport
      * @throws DocumentException
      */
-    private void notHuaYanTable(Document document1, Map<TjOrderRemark, List<TjPdfVO>> printReport) throws DocumentException {
+    private void notHuaYanTable(Document document1, Map<TjOrderRemark, List<TjPdfVO>> printReport, DictHosp dictHosp, String colorStr, boolean isPacs) throws DocumentException {
         for (Map.Entry<TjOrderRemark, List<TjPdfVO>> entry : printReport.entrySet()) {
-            List<TjPdfVO> value = entry.getValue();
             LambdaQueryWrapper<TjProject> wqqq = new LambdaQueryWrapper<>();
             wqqq.eq(TjProject::getProId, entry.getKey().getProId());
             TjProject one11 = projectService.getOne(wqqq);
+            if (entry.getValue() == null || entry.getValue().isEmpty()) continue;
             //鍒ゆ柇璇ラ」鐩槸鍚﹂渶瑕佹墦鍗版姤鍛�
-            if (null != one11 && "N".equals(one11.getNeedReport())) {
-                continue;
-            }
-            String titleName = null;
-            if (null != one11 && "1".equals(one11.getResultType())) {
-                titleName = one11.getProName();
-                // TODO 鍗曚綅
-                // 璁剧疆鏍囬瀛椾綋鏍峰紡
-                Font titleFonts = PdfUtils.setFont(9);
-                Paragraph paragraph = PdfUtils.setParagraph(titleFonts, titleName);
-                String[] titles = {"浣撴椤圭洰", "浣撴缁撴灉","鍗曚綅"};
-                // 鑾峰彇鍒楄〃鏁版嵁
-                //璁剧疆琛ㄥご瀛椾綋鏍峰紡
-                Font headFont = PdfUtils.setFont(9);
-                // 璁剧疆姝f枃瀛椾綋鏍峰紡锛�12鍙�
-                Font textFont = PdfUtils.setFont(9);
-                //鍒涘缓琛ㄦ牸  灏嗚〃澶村瓧浣撳拰姝f枃瀛椾綋鏀捐繘鍘�
-                PdfPTable table = PdfUtils.setTable2(headFont, textFont, titles, value);
-                document1.add(paragraph);
-                document1.add(table);
-                //鍒ゆ柇澶囨敞鏄惁涓虹┖  绌轰笉鑳芥樉绀簄ull
-                if (entry.getKey().getRemark() == null) {
-                    entry.getKey().setRemark("");
+            if (null != one11 && "Y".equals(one11.getNeedReport())) {
+                TjOrderRemark orderRemark = entry.getKey();
+                List<TjPdfVO> value = entry.getValue();
+                if (StrUtil.isBlank(value.get(0).getProResult()) && (StrUtil.isBlank(value.get(0).getTs()) && StrUtil.isBlank(value.get(0).getSj()))) {
+                    continue;
                 }
-                String remark = "澶囨敞锛�" + entry.getKey().getRemark();
-                if (entry.getKey().getRemark().length() > 50) {
-                    int j = 0;
-                    for (int i = 0; i < remark.length() / 50; i++) {
-                        String substring = remark.substring(j, j + 50);
-                        Font remarkFonts = PdfUtils.setFont(9);
-                        Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring);
-                        document1.add(pp);
-                        j = j + 50;
-                    }
-                    if (remark.length() % 50 != 0) {
-                        String substring = remark.substring((remark.length() / 50) * 50, remark.length() - 1);
-                        Font remarkFonts = PdfUtils.setFont(9);
-                        Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring);
-                        document1.add(pp);
-                    }
-                } else {
-                    Font remarkFonts = PdfUtils.setFont(9);
-                    Paragraph pp = PdfUtils.setParagraph(remarkFonts, remark);
-                    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);
-                }
-                //鍒嗗壊绾�
-                LineSeparator objectName = new LineSeparator();
-                document1.add(objectName);
-            } else {
-                if (null != one11) {
+                String titleName = null;
+                if ("1".equals(one11.getResultType())) {
                     titleName = one11.getProName();
-                } else {
-                    titleName = entry.getKey().getProName();
-                }
-                // 璁剧疆鏍囬瀛椾綋鏍峰紡
-                Font titleFonts = PdfUtils.setFont(9);
-                Paragraph paragraph = PdfUtils.setParagraph(titleFonts, titleName);
-                String[] titles = {"浣撴椤圭洰", "浣撴缁撴灉", "鍗曚綅", "鍙傝�冭寖鍥�"};
-                // 鑾峰彇鍒楄〃鏁版嵁
-                //璁剧疆琛ㄥご瀛椾綋鏍峰紡
-                Font headFont = PdfUtils.setFont(9);
-                // 璁剧疆姝f枃瀛椾綋鏍峰紡锛�12鍙�
-                Font textFont = PdfUtils.setFont(9);
-                //鍒涘缓琛ㄦ牸  灏嗚〃澶村瓧浣撳拰姝f枃瀛椾綋鏀捐繘鍘�
-                PdfPTable table = PdfUtils.setTable(headFont, textFont, titles, value);
-                document1.add(paragraph);
-                document1.add(table);
-                //鍒ゆ柇澶囨敞鏄惁涓虹┖  绌轰笉鑳芥樉绀簄ull
-                if (entry.getKey().getRemark() == null) {
-                    entry.getKey().setRemark("");
-                }
-                String remark = "澶囨敞锛�" + entry.getKey().getRemark();
-                if (entry.getKey().getRemark().length() > 50) {
-                    int j = 0;
-                    for (int i = 0; i < remark.length() / 50; i++) {
-                        String substring = remark.substring(j, j + 50);
-                        Font remarkFonts = PdfUtils.setFont(9);
-                        Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring);
-                        document1.add(pp);
-                        j = j + 50;
+                    // 璁剧疆鏍囬瀛椾綋鏍峰紡
+                    Font titleFonts = PdfUtils.setFont(9);
+                    Paragraph paragraph = PdfUtils.setParagraph(titleFonts, titleName);
+
+//                    if (dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌")) {
+                    if (true) {
+                        Font titleFont = PdfUtils.setFont(DEFAULT_TITLE_FONT_SIZE);
+                        titleFont.setStyle(Font.BOLD);
+                        PdfPCell cellTitle = new PdfPCell(PdfUtils.setParagraph(titleFont, titleName));
+                        cellTitle.setBorder(Rectangle.NO_BORDER);
+                        Color color = Color.decode(colorStr);
+                        cellTitle.setBackgroundColor(new BaseColor(color.getRed(), color.getGreen(), color.getBlue())); // 璁剧疆鑳屾櫙棰滆壊锛堝崄鍏繘鍒� RGB锛�
+                        // 鍒涘缓琛ㄦ牸骞舵坊鍔犲崟鍏冩牸
+                        PdfPTable tableTitle = new PdfPTable(1);
+                        tableTitle.setWidthPercentage(100);
+                        tableTitle.addCell(cellTitle);
+                        // 灏嗚〃鏍兼坊鍔犲埌鏂囨。涓�
+                        document1.add(tableTitle);
+                    } else {
+                        document1.add(paragraph);
                     }
-                    if (remark.length() % 50 != 0) {
-                        String substring = remark.substring((remark.length() / 50) * 50, remark.length() - 1);
-                        Font remarkFonts = PdfUtils.setFont(9);
-                        Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring);
-                        document1.add(pp);
+
+
+//                    String[] titles = {"浣撴椤圭洰", "浣撴缁撴灉", "鍗曚綅"};
+//                    Font headFont = PdfUtils.setFont(9);
+//                    Font textFont = PdfUtils.setFont(9);
+//                    PdfPTable table = PdfUtils.setTable2(headFont, textFont, titles, value,dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌"));
+//                    document1.add(table);
+
+//                    if (dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌") && !value.isEmpty()){
+                    if (!value.isEmpty()) {
+                        if (value.size() > 1) {
+                            if (value.get(0).getPid().equals("1862852701533012001")) {
+                                Font remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                                Paragraph ppp = new Paragraph("闃虫�у弬鑰冨�硷細", remarkFonts);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                paragraph.setLeading(5f);
+                                document1.add(ppp);
+
+                                ppp = new Paragraph("DOB鍊硷細         鈮�      4.0                HP-闃虫��", remarkFonts);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                paragraph.setLeading(5f);
+                                document1.add(ppp);
+
+                                ppp = new Paragraph("                <      4.0                  姝e父", remarkFonts);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                paragraph.setLeading(5f);
+                                document1.add(ppp);
+
+
+                                ppp = new Paragraph("妫�娴嬬粨鏋滐細 DOB=" + value.get(0).getProResult(), remarkFonts);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                paragraph.setLeading(5f);
+                                document1.add(ppp);
+
+                                ppp = new Paragraph("", remarkFonts);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                paragraph.setLeading(5f);
+                                document1.add(ppp);
+                                ppp = new Paragraph("", remarkFonts);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                paragraph.setLeading(5f);
+                                document1.add(ppp);
+                                if (StrUtil.isNotBlank(entry.getKey().getRemark())) {
+                                    ppp = new Paragraph("缁撹锛�" + entry.getKey().getRemark(), remarkFonts);
+                                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                                    paragraph.setLeading(5f);
+                                    document1.add(ppp);
+                                }
+                            } else {
+                                String[] titles = {"浣撴椤圭洰", "浣撴缁撴灉", "鍗曚綅"};
+                                Font headFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                                Font textFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                                PdfPTable table = PdfUtils.setTable2(headFont, textFont, titles, value, isPacs, new float[]{240, 240, 240});
+                                document1.add(table);
+                            }
+                        } else {
+                            Font remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+
+                            if (isPacs) {
+                                Paragraph pp = PdfUtils.setParagraph(remarkFonts, "妫�鏌ユ墍瑙侊細");
+                                document1.add(pp);
+                                Paragraph ppp = new Paragraph(value.get(0).getSj(), remarkFonts);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                paragraph.setLeading(5f);
+                                document1.add(ppp);
+                                pp = PdfUtils.setParagraph(remarkFonts, "缁撹锛�");
+                                document1.add(pp);
+                                ppp = new Paragraph(value.get(0).getTs(), remarkFonts);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                paragraph.setLeading(5f);
+                                document1.add(ppp);
+                            } else {
+                                if (value.get(0).getPid().equals("1862852701533012001")) {
+                                    remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                                    Paragraph ppp = new Paragraph("闃虫�у弬鑰冨�硷細", remarkFonts);
+                                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                                    paragraph.setLeading(5f);
+                                    document1.add(ppp);
+
+                                    ppp = new Paragraph("DOB鍊硷細         鈮�      4.0                HP-闃虫��", remarkFonts);
+                                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                                    paragraph.setLeading(5f);
+                                    document1.add(ppp);
+
+                                    ppp = new Paragraph("                <      4.0                  姝e父", remarkFonts);
+                                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                                    paragraph.setLeading(5f);
+                                    document1.add(ppp);
+
+
+                                    ppp = new Paragraph("妫�娴嬬粨鏋滐細 DOB=" + value.get(0).getProResult(), remarkFonts);
+                                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                                    paragraph.setLeading(5f);
+                                    document1.add(ppp);
+
+                                    ppp = new Paragraph("", remarkFonts);
+                                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                                    paragraph.setLeading(5f);
+                                    document1.add(ppp);
+                                    ppp = new Paragraph("", remarkFonts);
+                                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                                    paragraph.setLeading(5f);
+                                    document1.add(ppp);
+                                    if (StrUtil.isNotBlank(entry.getKey().getRemark())) {
+                                        ppp = new Paragraph("缁撹锛�" + entry.getKey().getRemark(), remarkFonts);
+                                        paragraph.setAlignment(Element.ALIGN_LEFT);
+                                        paragraph.setLeading(5f);
+                                        document1.add(ppp);
+                                    }
+                                } else {
+                                    String[] titles = {"浣撴椤圭洰", "浣撴缁撴灉"};
+                                    Font headFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                                    Font textFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                                    PdfPTable table = PdfUtils.setTable2(headFont, textFont, titles, value, false, new float[]{240, 300});
+                                    document1.add(table);
+                                }
+                            }
+                        }
+                    } else {
+                        String[] titles = {"浣撴椤圭洰", "浣撴缁撴灉", "鍗曚綅"};
+                        Font headFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                        Font textFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                        PdfPTable table = PdfUtils.setTable2(headFont, textFont, titles, value, isPacs, new float[]{240, 240, 240});
+                        document1.add(table);
+                    }
+                    //鍒ゆ柇澶囨敞鏄惁涓虹┖  绌轰笉鑳芥樉绀簄ull
+                    if (entry.getKey().getRemark() == null) {
+                        entry.getKey().setRemark("");
+                    }
+//                    if (!dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌")){
+                    if (false) {
+                        String remark = "澶囨敞锛�" + entry.getKey().getRemark();
+                        if (entry.getKey().getRemark().length() > 50) {
+                            int j = 0;
+                            for (int i = 0; i < remark.length() / 50; i++) {
+                                String substring = remark.substring(j, j + 50);
+                                Font remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                                Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring);
+                                document1.add(pp);
+                                j = j + 50;
+                            }
+                            if (remark.length() % 50 != 0) {
+                                String substring = remark.substring((remark.length() / 50) * 50, remark.length() - 1);
+                                Font remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                                Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring);
+                                document1.add(pp);
+                            }
+                        } else {
+                            Font remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                            Paragraph pp = PdfUtils.setParagraph(remarkFonts, remark);
+                            document1.add(pp);
+                        }
+                    }
+                    //鍒ゆ柇涓绘鍖诲笀鏄惁涓虹┖  绌轰笉鑳芥樉绀簄ull
+                    zhuJianYiShi(document1, entry, orderRemark.getCreateTime(), dictHosp);
+                    //鍒嗗壊绾�
+//                    if (!dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌")) {
+                    if (false) {
+                        LineSeparator objectName = new LineSeparator();
+                        document1.add(objectName);
                     }
                 } else {
-                    Font remarkFonts = PdfUtils.setFont(9);
-                    Paragraph pp = PdfUtils.setParagraph(remarkFonts, remark);
-                    document1.add(pp);
+                    if (entry.getValue().get(0).getProName().contains(";"))
+                        titleName = entry.getValue().get(0).getProName();
+                    else titleName = one11.getProName();
+                    // 璁剧疆鏍囬瀛椾綋鏍峰紡
+                    Font titleFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                    Paragraph paragraph = PdfUtils.setParagraph(titleFonts, titleName);
+
+//                    if (dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌")) {
+                    if (StrUtil.isBlank(value.get(0).getProResult()) && (StrUtil.isBlank(value.get(0).getTs()) && StrUtil.isBlank(value.get(0).getSj()))) {
+                        continue;
+                    }
+                    Font titleFont = PdfUtils.setFont(DEFAULT_TITLE_FONT_SIZE);
+                    titleFont.setStyle(Font.BOLD);
+                    PdfPCell cellTitle = new PdfPCell(PdfUtils.setParagraph(titleFont, titleName));
+                    cellTitle.setBorder(Rectangle.NO_BORDER);
+                    Color color = Color.decode("#B4CDCD");
+                    cellTitle.setBackgroundColor(new BaseColor(color.getRed(), color.getGreen(), color.getBlue())); // 璁剧疆鑳屾櫙棰滆壊锛堝崄鍏繘鍒� RGB锛�
+                    // 鍒涘缓琛ㄦ牸骞舵坊鍔犲崟鍏冩牸
+                    PdfPTable tableTitle = new PdfPTable(1);
+                    tableTitle.setWidthPercentage(100);
+                    tableTitle.addCell(cellTitle);
+                    // 灏嗚〃鏍兼坊鍔犲埌鏂囨。涓�
+                    document1.add(tableTitle);
+
+//                    String[] titles = {"浣撴椤圭洰", "浣撴缁撴灉", "鍗曚綅"};
+//                    Font headFont = PdfUtils.setFont(9);
+//                    Font textFont = PdfUtils.setFont(9);
+//                    PdfPTable table = PdfUtils.setTable(headFont, textFont, titles, value,dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌"));
+//                    document1.add(table);
+
+//                    if (dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌") && !value.isEmpty()){
+                    if (!value.isEmpty()) {
+                        if (value.size() > 1) {
+                            if (value.get(0).getPid().equals("1862852701533012001")) {
+                                Font remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                                Paragraph ppp = new Paragraph("闃虫�у弬鑰冨�硷細", remarkFonts);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                paragraph.setLeading(5f);
+                                document1.add(ppp);
+
+                                ppp = new Paragraph("DOB鍊硷細         鈮�      4.0                HP-闃虫��", remarkFonts);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                paragraph.setLeading(5f);
+                                document1.add(ppp);
+
+                                ppp = new Paragraph("                <      4.0                  姝e父", remarkFonts);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                paragraph.setLeading(5f);
+                                document1.add(ppp);
+
+
+                                ppp = new Paragraph("妫�娴嬬粨鏋滐細 DOB=" + value.get(0).getProResult(), remarkFonts);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                paragraph.setLeading(5f);
+                                document1.add(ppp);
+
+                                ppp = new Paragraph("", remarkFonts);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                paragraph.setLeading(5f);
+                                document1.add(ppp);
+                                ppp = new Paragraph("", remarkFonts);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                paragraph.setLeading(5f);
+                                document1.add(ppp);
+                                if (StrUtil.isNotBlank(entry.getKey().getRemark())) {
+                                    ppp = new Paragraph("缁撹锛�" + entry.getKey().getRemark(), remarkFonts);
+                                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                                    paragraph.setLeading(5f);
+                                    document1.add(ppp);
+                                }
+                            } else {
+                                String[] titles = {"浣撴椤圭洰", "浣撴缁撴灉", "鍗曚綅"};
+                                Font headFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                                Font textFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                                PdfPTable table = PdfUtils.setTable2(headFont, textFont, titles, value, isPacs, new float[]{240, 240, 240});
+                                document1.add(table);
+                            }
+
+                        } else {
+                            Font remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+
+                            if (isPacs) {
+                                Paragraph pp = PdfUtils.setParagraph(remarkFonts, "妫�鏌ユ墍瑙侊細");
+                                document1.add(pp);
+                                Paragraph ppp = new Paragraph(value.get(0).getSj() != null ? value.get(0).getSj() : value.get(0).getProResult(), remarkFonts);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                paragraph.setLeading(5f);
+                                document1.add(ppp);
+                                pp = PdfUtils.setParagraph(remarkFonts, "缁撹锛�");
+                                document1.add(pp);
+                                ppp = new Paragraph(value.get(0).getTs() != null ? value.get(0).getTs() : value.get(0).getProResult(), remarkFonts);
+                                paragraph.setAlignment(Element.ALIGN_LEFT);
+                                paragraph.setLeading(5f);
+                                document1.add(ppp);
+                            } else {
+                                if (value.get(0).getPid().equals("1862852701533012001")) {
+                                    remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                                    Paragraph ppp = new Paragraph("闃虫�у弬鑰冨�硷細", remarkFonts);
+                                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                                    paragraph.setLeading(5f);
+                                    document1.add(ppp);
+
+                                    ppp = new Paragraph("DOB鍊硷細         鈮�      4.0                HP-闃虫��", remarkFonts);
+                                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                                    paragraph.setLeading(5f);
+                                    document1.add(ppp);
+
+                                    ppp = new Paragraph("                <      4.0                  姝e父", remarkFonts);
+                                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                                    paragraph.setLeading(5f);
+                                    document1.add(ppp);
+
+
+                                    ppp = new Paragraph("妫�娴嬬粨鏋滐細 DOB=" + value.get(0).getProResult(), remarkFonts);
+                                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                                    paragraph.setLeading(5f);
+                                    document1.add(ppp);
+
+                                    ppp = new Paragraph("", remarkFonts);
+                                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                                    paragraph.setLeading(5f);
+                                    document1.add(ppp);
+                                    ppp = new Paragraph("", remarkFonts);
+                                    paragraph.setAlignment(Element.ALIGN_LEFT);
+                                    paragraph.setLeading(5f);
+                                    document1.add(ppp);
+                                    if (StrUtil.isNotBlank(entry.getKey().getRemark())) {
+                                        ppp = new Paragraph("缁撹锛�" + entry.getKey().getRemark(), remarkFonts);
+                                        paragraph.setAlignment(Element.ALIGN_LEFT);
+                                        paragraph.setLeading(5f);
+                                        document1.add(ppp);
+                                    }
+                                } else {
+                                    String[] titles = {"浣撴椤圭洰", "浣撴缁撴灉"};
+                                    Font headFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                                    Font textFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                                    PdfPTable table = PdfUtils.setTable2(headFont, textFont, titles, value, false, new float[]{240, 300});
+                                    document1.add(table);
+                                }
+                            }
+
+                        }
+                    } else {
+                        String[] titles = {"浣撴椤圭洰", "浣撴缁撴灉", "鍗曚綅"};
+                        Font headFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                        Font textFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                        PdfPTable table = PdfUtils.setTable(headFont, textFont, titles, value, isPacs);
+                        document1.add(table);
+                    }
+
+
+                    //鍒ゆ柇澶囨敞鏄惁涓虹┖  绌轰笉鑳芥樉绀簄ull
+                    if (entry.getKey().getRemark() == null) {
+                        entry.getKey().setRemark("");
+                    }
+//                    if (!dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌")){
+                    if (!true) {
+                        String remark = "澶囨敞锛�" + entry.getKey().getRemark();
+                        if (entry.getKey().getRemark().length() > 50) {
+                            int j = 0;
+                            for (int i = 0; i < remark.length() / 50; i++) {
+                                String substring = remark.substring(j, j + 50);
+                                Font remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                                Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring);
+                                document1.add(pp);
+                                j = j + 50;
+                            }
+                            if (remark.length() % 50 != 0) {
+                                String substring = remark.substring((remark.length() / 50) * 50, remark.length() - 1);
+                                Font remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                                Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring);
+                                document1.add(pp);
+                            }
+                        } else {
+                            Font remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+                            Paragraph pp = PdfUtils.setParagraph(remarkFonts, remark);
+                            document1.add(pp);
+                        }
+                    }
+                    //鍒ゆ柇涓绘鍖诲笀鏄惁涓虹┖  绌轰笉鑳芥樉绀簄ull
+                    zhuJianYiShi(document1, entry, orderRemark.getCreateTime(), dictHosp);
+//                    if (!dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌")) {
+                    if (!true) {
+                        //鍒嗗壊绾�
+                        LineSeparator objectName = new LineSeparator();
+                        document1.add(objectName);
+                    }
                 }
-                //鍒ゆ柇涓绘鍖诲笀鏄惁涓虹┖  绌轰笉鑳芥樉绀簄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);
-                }
-                //鍒嗗壊绾�
-                LineSeparator objectName = new LineSeparator();
-                document1.add(objectName);
             }
         }
     }
 
-    public HashMap<String, Object> makeHisJianYan(TjOrder tjOrder, TjCustomer customer){
-        // TODO 杩欓噷鍏堜娇鐢ㄦ煡鍏ㄩ儴娴嬭瘯
+    /**
+     * 涓昏鍖诲笀琛屾樉绀鸿缃�
+     *
+     * @param document1
+     * @param entry
+     * @throws DocumentException
+     */
+    private void zhuJianYiShi(Document document1, Map.Entry<TjOrderRemark, List<TjPdfVO>> entry, Date createTime, DictHosp dictHosp) throws DocumentException {
+//        if ((null != entry.getKey().getDoctorName() && null != userService.getById(entry.getKey().getDoctorName())) || dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌") ) {
+        if ((null != entry.getKey().getDoctorName() && null != userService.getById(entry.getKey().getDoctorName())) || true) {
+            //涓绘鍖诲笀
+            String key = sysConfigService.selectConfigByKey("is_report_pdf_use_ysqm");
+            SysUser sysUser = userService.getById(entry.getKey().getDoctorName());
+            String doctorNameDefault = "鏃�";
+            if (sysUser != null) doctorNameDefault = sysUser.getNickName();
+//            if (!entry.getValue().isEmpty() && StrUtil.isNotBlank(entry.getValue().get(0).getShys()) && dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌")){
+            if (!entry.getValue().isEmpty() && StrUtil.isNotBlank(entry.getValue().get(0).getShys()) && true) {
+                doctorNameDefault = entry.getValue().get(0).getShys();
+            }
+            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();
+                    if (createTime != null) {
+                        phrase.add(new Chunk("妫�鏌ユ椂闂达細" + new SimpleDateFormat("yyyy-MM-dd").format(createTime) + "             涓绘鍖诲笀锛�", doctorFonts));
+                    } else {
+                        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 = "涓绘鍖诲笀锛�" + doctorNameDefault;
+                        if (createTime != null)
+                            doctorName = "妫�鏌ユ椂闂达細" + new SimpleDateFormat("yyyy-MM-dd").format(createTime) + "             涓绘鍖诲笀锛�" + doctorNameDefault;
+                        Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName);
+                        df.setAlignment(Element.ALIGN_RIGHT);
+                        document1.add(df);
+                    }
+                } else {
+                    String doctorName = "涓绘鍖诲笀锛�" + doctorNameDefault;
+                    if (createTime != null)
+                        doctorName = "妫�鏌ユ椂闂达細" + new SimpleDateFormat("yyyy-MM-dd").format(createTime) + "             涓绘鍖诲笀锛�" + doctorNameDefault;
+                    Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName);
+                    df.setAlignment(Element.ALIGN_RIGHT);
+                    document1.add(df);
+                }
+            } else {
+                String doctorName = "涓绘鍖诲笀锛�" + doctorNameDefault;
+                if (createTime != null)
+                    doctorName = "妫�鏌ユ椂闂达細" + new SimpleDateFormat("yyyy-MM-dd").format(createTime) + "             涓绘鍖诲笀锛�" + doctorNameDefault;
+                Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName);
+                df.setAlignment(Element.ALIGN_RIGHT);
+                document1.add(df);
+            }
+        } else {
+            String doctorName = "涓绘鍖诲笀锛�" + "鏃�";
+            if (createTime != null)
+                doctorName = "妫�鏌ユ椂闂达細" + new SimpleDateFormat("yyyy-MM-dd").format(createTime) + "             涓绘鍖诲笀锛�" + "鏃�";
+            Font doctorFonts = PdfUtils.setFont(9);
+            Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName);
+            df.setAlignment(Element.ALIGN_RIGHT);
+            document1.add(df);
+        }
+    }
+
+    public HashMap<String, Object> makeHisJianYan(TjOrder tjOrder, TjCustomer customer) {
         LambdaQueryWrapper<LtkjHysqd> ltkjHysqdLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        ltkjHysqdLambdaQueryWrapper.eq(LtkjHysqd::getTjh,tjOrder.getCardId());
+        ltkjHysqdLambdaQueryWrapper.eq(LtkjHysqd::getTjh, tjOrder.getCardId());
         List<LtkjHysqd> list = ltkjHysqdService.list(ltkjHysqdLambdaQueryWrapper);
-//        List<LtkjHysqd> list = ltkjHysqdService.list();
         HashMap<String, Object> data = new HashMap<>();
         for (LtkjHysqd hysqd : list) {
             LambdaQueryWrapper<LtkjHybgd> ltkjHybgdLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            ltkjHybgdLambdaQueryWrapper.eq(LtkjHybgd::getTmh,hysqd.getTmh());
+            ltkjHybgdLambdaQueryWrapper.eq(LtkjHybgd::getTmh, hysqd.getTmh());
             List<LtkjHybgd> hybgds = ltkjHybgdService.list(ltkjHybgdLambdaQueryWrapper);
-            // 澶х被椤圭洰鍚嶇О
-            String xmmc = hysqd.getXmmc();
-            ArrayList<List<String>> lists = new ArrayList<>();
-            HashSet<String> hashSet = new HashSet<>();
-            for (LtkjHybgd hybgd : hybgds) {
-                // 妫�鏌ラ」鐩�
-                String jcxm = hybgd.getJcxm();
-                // 妫�楠岀粨鏋�
-                String jyjg = hybgd.getJyjg();
-                // 缁撴灉鍗曚綅
-                String jgdw = hybgd.getJgdw();
-                // 鑼冨洿鍊�
-                String fwz = hybgd.getFwz();
-                // 妫�楠屽尰甯�
+            if(null !=hybgds && !hybgds.isEmpty()){
+//                hybgds=hybgds.stream().sorted(Comparator.comparing(LtkjHybgd::getJcxm, Collator.getInstance(Locale.CHINA))).collect(Collectors.toList());
+//                hybgds = hybgds.stream()
+//                        .sorted(Comparator.comparingInt(
+//                                a -> a.getJcxm().length() // 鏍规嵁鍚嶅瓧鐨勯暱搴︽帓搴�
+//                        ))
+//                        .collect(Collectors.toList());
+
+                // 澶х被椤圭洰鍚嶇О
+                String xmmc = hysqd.getXmmc();
+                ArrayList<List<String>> lists = new ArrayList<>();
+                HashSet<String> hashSet = new HashSet<>();
+                String shsj = "";
+                for (LtkjHybgd hybgd : hybgds) {
+                    shsj = hybgd.getShsj();
+                    // 妫�鏌ラ」鐩�
+                    String jcxm = hybgd.getJcxm() != null ? hybgd.getJcxm().trim() : null;
+                    // 妫�楠岀粨鏋�
+                    String jyjg = hybgd.getJyjg() != null ? hybgd.getJyjg().trim() : null;
+                    // 缁撴灉鍗曚綅
+                    String jgdw = hybgd.getJgdw() != null ? hybgd.getJgdw().trim() : null;
+                    // 鑼冨洿鍊�
+                    String fwz = hybgd.getFwz() != null ? hybgd.getFwz().trim() : null;
+                    // 妫�楠屽尰甯�
 //                String jyys = hybgd.getJyys();
-                //瀹℃牳鍖荤敓
-                String shysmc = hybgd.getShysmc();
-                if (jyjg != null && StrUtil.isNotBlank(jyjg) && fwz != null && StrUtil.isNotBlank(fwz)){
-                    try {
-                        String[] fwzs = fwz.split("-");
-                        BigDecimal min = new BigDecimal(fwzs[0]);
-                        BigDecimal max = new BigDecimal(fwzs[1]);
-                        BigDecimal jyjgval = new BigDecimal(jyjg);
-                        // 姣旇緝妫�楠岀粨鏋滃拰鑼冨洿鍊�
-                        if (jyjgval.compareTo(min) < 0) {
-                            // jyjg 灏忎簬鑼冨洿鏈�灏忓�硷紝娣诲姞涓嬬澶�
-                            jyjg = jyjg + "   鈫�";
-                        } else if (jyjgval.compareTo(max) > 0) {
-                            // jyjg 澶т簬鑼冨洿鏈�澶у�硷紝娣诲姞涓婄澶�
-                            jyjg = jyjg + "   鈫�";
+                    //瀹℃牳鍖荤敓
+                    String shysmc = hybgd.getShysmc() != null ? hybgd.getShysmc().trim() : null;
+                    // 瀹℃牳鍖诲笀缂栫爜
+                    String shys = hybgd.getShys() != null ? hybgd.getShys().trim() : null;
+                    String ycbz = "";
+
+                    if (jyjg != null && StrUtil.isNotBlank(jyjg) && fwz != null && StrUtil.isNotBlank(fwz)) {
+                        try {
+                            String[] fwzs = fwz.split("-");
+                            BigDecimal min = new BigDecimal(fwzs[0]);
+                            BigDecimal max = new BigDecimal(fwzs[1]);
+                            BigDecimal jyjgval = new BigDecimal(jyjg);
+                            // 姣旇緝妫�楠岀粨鏋滃拰鑼冨洿鍊�
+                            if (jyjgval.compareTo(min) < 0) {
+                                // jyjg 灏忎簬鑼冨洿鏈�灏忓�硷紝娣诲姞涓嬬澶�
+//                            jyjg = jyjg + "   鈫�";
+                                ycbz = "鈫�";
+                            } else if (jyjgval.compareTo(max) > 0) {
+                                // jyjg 澶т簬鑼冨洿鏈�澶у�硷紝娣诲姞涓婄澶�
+//                            jyjg = jyjg + "   鈫�";
+                                ycbz = "鈫�";
+                            }
+                        } catch (Exception ignored) {
                         }
-                    } catch (Exception ignored) {}
-                }
+                    }
 //                LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
 //                queryWrapper.eq(SysUser::getUserName,jyys);
 //                List<SysUser> sysUsers = userService.list(queryWrapper);
 //                if (!sysUsers.isEmpty())
 //                    hashSet.add(sysUsers.get(0).getNickName());
-                if(null !=shysmc) hashSet.add(shysmc);
-                ArrayList<String> strings = new ArrayList<>();
-                strings.add(jcxm);
-                strings.add(jyjg);
-                strings.add(jgdw);
-                strings.add(fwz);
-                lists.add(strings);
-            }
-            if (!lists.isEmpty()) {
-                HashMap<String, Object> map = new HashMap<>();
-                map.put("data",lists);
-                map.put("jyys",hashSet);
-                data.put(xmmc, map);
+                    String key = sysConfigService.selectConfigByKey("is_report_pdf_use_ysqm");
+                    if (null != shys && null != shysmc && key.equals("Y")) {
+                        hashSet.add(shysmc + "|" + shys);
+                    } else {
+                        if (null != shysmc) hashSet.add(shysmc);
+                    }
+                    ArrayList<String> strings = new ArrayList<>();
+                    strings.add(jcxm);
+                    strings.add(jyjg);
+                    strings.add(ycbz);
+                    strings.add(jgdw);
+                    strings.add(fwz);
+                    strings.add(hybgd.getJcxmid());
+                    strings.add(hysqd.getXmid());
+                    lists.add(strings);
+                }
+                if (!lists.isEmpty()) {
+                    HashMap<String, Object> map = new HashMap<>();
+                    map.put("data", lists);
+                    map.put("jyys", hashSet);
+                    if (StrUtil.isNotBlank(shsj)) {
+                        shsj = shsj.split(" ")[0];
+                    }
+                    map.put("shsj", shsj);
+                    data.put(xmmc, map);
+                }
             }
         }
         return data;
@@ -556,10 +2713,11 @@
 
     /**
      * 鐢熸垚PDF妯$増浠ュ強鐢ㄦ埛淇℃伅閮ㄥ垎
+     *
      * @param tjOrder
      * @param reportTemplate
      */
-    public HashMap<String ,Object> makePDFInfo(TjOrder tjOrder,TjCustomer tjCustomer,TjReportTemplate reportTemplate){
+    public HashMap<String, Object> makePDFInfo(TjOrder tjOrder, TjCustomer tjCustomer, TjReportTemplate reportTemplate, DictHosp dictHosp, HashMap<String, Object> jianYanMap) {
         String tjNumber = tjOrder.getTjNumber();
         String template = reportTemplate.getTemplate();
         LambdaQueryWrapper<DictComp> wq111 = new LambdaQueryWrapper<>();
@@ -609,30 +2767,72 @@
             }
             //鎷兼帴閲嶅ぇ闃虫�х粨鏋�
             StringBuffer str = new StringBuffer();
-            str.append("銆愰噸澶ч槼鎬ч」鐩�慭n");
-            LambdaQueryWrapper<TjBigPositive> bigPositiveLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            bigPositiveLambdaQueryWrapper.eq(TjBigPositive::getTjNumber, tjNumber);
-            List<TjBigPositive> list1 = tjBigPositiveService.list(bigPositiveLambdaQueryWrapper);
-            if (list1 != null && list1.size() > 0) {
-                for (int i = 0; i < list1.size(); i++) {
-                    str.append((i + 1) + "銆�" + list1.get(i).getProName() + ";\n");
+//            if (!dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌")) {
+            if (!true) {
+                str.append("銆愰噸澶ч槼鎬ч」鐩�慭n");
+                LambdaQueryWrapper<TjBigPositive> bigPositiveLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                bigPositiveLambdaQueryWrapper.eq(TjBigPositive::getTjNumber, tjNumber);
+                List<TjBigPositive> list1 = tjBigPositiveService.list(bigPositiveLambdaQueryWrapper);
+                if (list1 != null && list1.size() > 0) {
+                    for (int i = 0; i < list1.size(); i++) {
+                        str.append((i + 1) + "銆�" + list1.get(i).getProName() + ";\n");
+                    }
+                } else {
+                    str.append("    鏃狅紱\n");
                 }
-            } else {
-                str.append("    鏃狅紱\n");
             }
             //鎷兼帴寮傚父椤圭洰
             str.append("銆愬紓甯告儏鍐甸」鐩�慭n");
-            if (list.size() > 0) {
-                for (int i = 0; i < list.size(); i++) {
-                    if (list.get(i).getExceptionDesc() == 1) {
-                        str.append((i + 1) + "銆�" + projectService.getById(list.get(i).getProId()).getProName() + ";\n");
+//            if (!dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌")) {
+            if (!true) {
+                if (list.size() > 0) {
+                    for (int i = 0; i < list.size(); i++) {
+                        if (list.get(i).getExceptionDesc() == 1) {
+                            str.append((i + 1) + "銆�" + projectService.getById(list.get(i).getProId()).getProName() + ";\n");
+                        }
                     }
+                } else {
+                    str.append("    鏃狅紱\n");
                 }
             } else {
-                str.append("    鏃狅紱\n");
+                int maxProjectLength = 0;
+                for (Map.Entry<String, Object> item : jianYanMap.entrySet()) {
+                    HashMap<String, Object> entryValue = (HashMap<String, Object>) item.getValue();
+                    ArrayList<List<String>> lists = (ArrayList<List<String>>) entryValue.get("data");
+                    for (List<String> i : lists) {
+                        maxProjectLength = Math.max(maxProjectLength, i.get(0).length());
+                    }
+                }
+                int projectWidth = maxProjectLength * 2;
+                int resultWidth = 8;
+                int flagWidth = 8;
+                int unitWidth = 8;
+                int rangeWidth = 15;
+                str.append(padRight("椤圭洰", projectWidth))
+                        .append(padRight("缁撴灉", resultWidth))
+                        .append(padRight("鏍囧織", flagWidth))
+                        .append(padRight("鍗曚綅", unitWidth))
+                        .append(padRight("鍙傝�冭寖鍥�", rangeWidth))
+                        .append("\n");
+                for (Map.Entry<String, Object> item : jianYanMap.entrySet()) {
+                    HashMap<String, Object> entryValue = (HashMap<String, Object>) item.getValue();
+                    ArrayList<List<String>> lists = (ArrayList<List<String>>) entryValue.get("data");
+                    for (List<String> i : lists) {
+                        if (i.contains("鈫�") || i.contains("鈫�")) {
+                            int currentProjectWidth = i.get(0).length() + (maxProjectLength - i.get(0).length()) * 2 + 2;
+                            str.append(padRight(i.get(0), currentProjectWidth));
+                            str.append(padRight(i.get(1), resultWidth));
+                            str.append(padRight(i.get(2), flagWidth));
+                            str.append(padRight(i.get(3), unitWidth));
+                            str.append(padRight(i.get(4), rangeWidth));
+                            str.append("\n");
+                        }
+                    }
+                }
             }
             //寮傚父椤圭洰
             data.put("yichang", str.toString());
+            data.put("zjrq", new SimpleDateFormat("yyyy-MM-dd").format(tjOrder.getCheckTime()));
             // 閬嶅巻data 缁檖df琛ㄥ崟琛ㄦ牸璧嬪��
             for (String key : data.keySet()) {
                 acroFields.setField(key, data.get(key).toString());
@@ -657,9 +2857,10 @@
             // 娣诲姞璇︽儏椤�
             document.newPage();
             HashMap<String, Object> map = new HashMap<>();
-            map.put("document",document);
-            map.put("copy",copy);
-            map.put("stream",finalOutPut);
+            map.put("document", document);
+            map.put("copy", copy);
+            map.put("stream", finalOutPut);
+            map.put("form", pdfStamper);
             return map;
         } catch (IOException | DocumentException e) {
             e.printStackTrace();
@@ -667,513 +2868,136 @@
         }
     }
 
-    public Boolean makePDF(String cardId, JSONArray jsonArray,TjOrder tjOrder,TjReportTemplate reportTemplate) {
-        String tjNumber = tjOrder.getTjNumber();
-        String template = reportTemplate.getTemplate();
-        LambdaQueryWrapper<TjCustomer> wq1 = new LambdaQueryWrapper<>();
-        wq1.eq(TjCustomer::getCusId, tjOrder.getUserId());
-        TjCustomer tjCustomer = tjCustomerService.getOne(wq1);
-        Long userId = tjCustomer.getCusId();
-        LambdaQueryWrapper<DictComp> wq111 = new LambdaQueryWrapper<>();
-        wq111.eq(DictComp::getDrugManufacturerId, tjOrder.getFirmId());
-        DictComp dictComp = dictCompService.getOne(wq111);
-        LambdaQueryWrapper<TjOrderDetail> wq2 = new LambdaQueryWrapper<>();
-        wq2.eq(TjOrderDetail::getOrderId, tjOrder.getOrderId());
-        //20230306鍒ゆ柇璇ラ」鐩槸鍚﹂��璐�/缂磋垂
-        wq2.isNotNull(TjOrderDetail::getFlowingWaterId);
-        //20230323鍒ゆ柇璇ラ」鐩槸鍚﹀純妫�/鏈
-//                wq2.eq(TjOrderDetail::getTjStatus,1);
-        List<TjOrderDetail> list = tjOrderDetailService.list(wq2);
-        for (TjOrderDetail tjOrderDetail : list) {
-            TjProject tjProject = projectService.selectTjProjectByProId(tjOrderDetail.getProId());
-            tjOrderDetail.setProject(tjProject);
+    public static String padRight(String str, int length) {
+        StringBuilder sb = new StringBuilder(str);
+        while (sb.length() < length) {
+            sb.append(" ");
         }
-        // 鐢熸垚pdf
-        try {
-            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-            PdfReader reader = new PdfReader(new ByteArrayInputStream(Base64.getDecoder().decode(template)));
-            PdfStamper pdfStamper = new PdfStamper(reader, byteArrayOutputStream);
-            // 鑾峰彇pdf琛ㄥ崟
-            AcroFields acroFields = pdfStamper.getAcroFields();
-            BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
-            acroFields.addSubstitutionFont(bf);
-            HashMap<String, Object> data = new HashMap<>();
-            // 璁剧疆鐢ㄦ埛淇℃伅
-            setUserInfo(tjNumber, tjOrder, tjCustomer, data);
-            //寮傚父椤圭洰
-            if (dictComp == null) {
-                data.put("work", "鏃�");
-            } else {
-                data.put("work", dictComp.getCnName());
-            }
-            //灏侀潰椤典笅闈㈢殑鎬绘寤鸿鏄剧ず
-            if (tjOrder.getCheckAdvice() == null) {
-                data.put("remark", "鏃�");
-            } else {
-                data.put("remark", tjOrder.getCheckAdvice());
-            }
-            //灏侀潰椤典笅闈㈢殑鎬绘寤鸿鏄剧ず
-            if (tjOrder.getCheckDoctor() == null) {
-                data.put("docname", "鏃�");
-            } else {
-                data.put("docname", tjOrder.getCheckDoctor());
-            }
-            //鎷兼帴閲嶅ぇ闃虫�х粨鏋�
-            StringBuffer str = new StringBuffer();
-            str.append("銆愰噸澶ч槼鎬ч」鐩�慭n");
-            LambdaQueryWrapper<TjBigPositive> bigPositiveLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            bigPositiveLambdaQueryWrapper.eq(TjBigPositive::getTjNumber, tjNumber);
-            List<TjBigPositive> list1 = tjBigPositiveService.list(bigPositiveLambdaQueryWrapper);
-            if (list1 != null && list1.size() > 0) {
-                for (int i = 0; i < list1.size(); i++) {
-                    str.append((i + 1) + "銆�" + list1.get(i).getProName() + ";\n");
-                }
-            } else {
-                str.append("    鏃狅紱\n");
-            }
-            //鎷兼帴寮傚父椤圭洰
-            str.append("銆愬紓甯告儏鍐甸」鐩�慭n");
-            if (list.size() > 0) {
-                for (int i = 0; i < list.size(); i++) {
-                    if (list.get(i).getExceptionDesc() == 1) {
-                        str.append((i + 1) + "銆�" + projectService.getById(list.get(i).getProId()).getProName() + ";\n");
-                    }
-                }
-            } else {
-                str.append("    鏃狅紱\n");
-            }
-
-            //寮傚父椤圭洰
-            data.put("yichang", str.toString());
-            // 閬嶅巻data 缁檖df琛ㄥ崟琛ㄦ牸璧嬪��
-            for (String key : data.keySet()) {
-                acroFields.setField(key, data.get(key).toString());
-            }
-            //璁剧疆涓烘棤娉曠紪杈�
-            pdfStamper.setFormFlattening(true);
-            pdfStamper.close();
-            reader.close();
-            // 灏嗕慨鏀瑰悗鐨凱DF鍐呭鍐欏叆
-            byte[] bytes = byteArrayOutputStream.toByteArray();
-            // 鍒涘缓鏂扮殑PDF鏂囨。
-            Document document = new Document(PageSize.A4);
-            ByteArrayOutputStream finalOutPut = new ByteArrayOutputStream();
-            PdfCopy copy = new PdfCopy(document, finalOutPut);
-            document.open();
-            reader = new PdfReader(bytes);
-            int numberOfPages = reader.getNumberOfPages();
-            for (int i = 1; i <= numberOfPages; i++) {
-                PdfImportedPage page = copy.getImportedPage(reader, i);
-                copy.addPage(page);
-            }
-            // 娣诲姞璇︽儏椤�
-            document.newPage();
-            ByteArrayOutputStream byteArrayOutputStream1 = new ByteArrayOutputStream();
-            Document document1 = new Document(PageSize.A4);
-            PdfWriter pdfWriter = PdfWriter.getInstance(document1, byteArrayOutputStream1);
-            document1.setMargins(70, 70, 40, 40);
-            document1.open();
-            // 闈炲寲楠岄」鐩姤鍛�
-            Map<TjOrderRemark, List<TjPdfVO>> printReport = new HashMap<>();
-            notHuaYanData(tjNumber, printReport,tjOrder,tjCustomer);
-            for (Map.Entry<TjOrderRemark, List<TjPdfVO>> entry : printReport.entrySet()) {
-                List<TjPdfVO> value = entry.getValue();
-                LambdaQueryWrapper<TjProject> wqqq = new LambdaQueryWrapper<>();
-                wqqq.eq(TjProject::getProId, entry.getKey().getProId());
-                TjProject one11 = projectService.getOne(wqqq);
-                //鍒ゆ柇璇ラ」鐩槸鍚﹂渶瑕佹墦鍗版姤鍛�
-                if (null != one11 && "N".equals(one11.getNeedReport())) {
-                    continue;
-                }
-                String titleName = null;
-                if (null != one11 && "1".equals(one11.getResultType())) {
-                    titleName = one11.getProName();
-                    // TODO 鍗曚綅
-                    // 璁剧疆鏍囬瀛椾綋鏍峰紡
-                    Font titleFonts = PdfUtils.setFont(9);
-                    Paragraph paragraph = PdfUtils.setParagraph(titleFonts, titleName);
-                    String[] titles = {"浣撴椤圭洰", "浣撴缁撴灉","鍗曚綅"};
-                    // 鑾峰彇鍒楄〃鏁版嵁
-                    //璁剧疆琛ㄥご瀛椾綋鏍峰紡
-                    Font headFont = PdfUtils.setFont(9);
-                    // 璁剧疆姝f枃瀛椾綋鏍峰紡锛�12鍙�
-                    Font textFont = PdfUtils.setFont(9);
-                    //鍒涘缓琛ㄦ牸  灏嗚〃澶村瓧浣撳拰姝f枃瀛椾綋鏀捐繘鍘�
-                    PdfPTable table = PdfUtils.setTable2(headFont, textFont, titles, value);
-                    document1.add(paragraph);
-                    document1.add(table);
-                    //鍒ゆ柇澶囨敞鏄惁涓虹┖  绌轰笉鑳芥樉绀簄ull
-                    if (entry.getKey().getRemark() == null) {
-                        entry.getKey().setRemark("");
-                    }
-                    String remark = "澶囨敞锛�" + entry.getKey().getRemark();
-                    if (entry.getKey().getRemark().length() > 50) {
-                        int j = 0;
-                        for (int i = 0; i < remark.length() / 50; i++) {
-                            String substring = remark.substring(j, j + 50);
-                            Font remarkFonts = PdfUtils.setFont(9);
-                            Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring);
-                            document1.add(pp);
-                            j = j + 50;
-                        }
-                        if (remark.length() % 50 != 0) {
-                            String substring = remark.substring((remark.length() / 50) * 50, remark.length() - 1);
-                            Font remarkFonts = PdfUtils.setFont(9);
-                            Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring);
-                            document1.add(pp);
-                        }
-                    } else {
-                        Font remarkFonts = PdfUtils.setFont(9);
-                        Paragraph pp = PdfUtils.setParagraph(remarkFonts, remark);
-                        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);
-                    }
-                    //鍒嗗壊绾�
-                    LineSeparator objectName = new LineSeparator();
-                    document1.add(objectName);
-                } else {
-                    if (null != one11) {
-                        titleName = one11.getProName();
-                    } else {
-                        titleName = entry.getKey().getProName();
-                    }
-                    // 璁剧疆鏍囬瀛椾綋鏍峰紡
-                    Font titleFonts = PdfUtils.setFont(9);
-                    Paragraph paragraph = PdfUtils.setParagraph(titleFonts, titleName);
-                    String[] titles = {"浣撴椤圭洰", "浣撴缁撴灉", "鍗曚綅", "鍙傝�冭寖鍥�"};
-                    // 鑾峰彇鍒楄〃鏁版嵁
-                    //璁剧疆琛ㄥご瀛椾綋鏍峰紡
-                    Font headFont = PdfUtils.setFont(9);
-                    // 璁剧疆姝f枃瀛椾綋鏍峰紡锛�12鍙�
-                    Font textFont = PdfUtils.setFont(9);
-                    //鍒涘缓琛ㄦ牸  灏嗚〃澶村瓧浣撳拰姝f枃瀛椾綋鏀捐繘鍘�
-                    PdfPTable table = PdfUtils.setTable(headFont, textFont, titles, value);
-                    document1.add(paragraph);
-                    document1.add(table);
-                    //鍒ゆ柇澶囨敞鏄惁涓虹┖  绌轰笉鑳芥樉绀簄ull
-                    if (entry.getKey().getRemark() == null) {
-                        entry.getKey().setRemark("");
-                    }
-                    String remark = "澶囨敞锛�" + entry.getKey().getRemark();
-                    if (entry.getKey().getRemark().length() > 50) {
-                        int j = 0;
-                        for (int i = 0; i < remark.length() / 50; i++) {
-                            String substring = remark.substring(j, j + 50);
-                            Font remarkFonts = PdfUtils.setFont(9);
-                            Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring);
-                            document1.add(pp);
-                            j = j + 50;
-                        }
-                        if (remark.length() % 50 != 0) {
-                            String substring = remark.substring((remark.length() / 50) * 50, remark.length() - 1);
-                            Font remarkFonts = PdfUtils.setFont(9);
-                            Paragraph pp = PdfUtils.setParagraph(remarkFonts, substring);
-                            document1.add(pp);
-                        }
-                    } else {
-                        Font remarkFonts = PdfUtils.setFont(9);
-                        Paragraph pp = PdfUtils.setParagraph(remarkFonts, remark);
-                        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);
-                    }
-                    //鍒嗗壊绾�
-                    LineSeparator objectName = new LineSeparator();
-                    document1.add(objectName);
-                }
-            }
-            List<ByteArrayOutputStream> jianchas = new ArrayList<>();
-            for (Object o : jsonArray) {
-                JSONObject jsonObject = (JSONObject) o;
-                // 妫�楠屾姤鍛婁互鍙婄粨鏋滀俊鎭�
-                JSONObject reportInfo = jsonObject.getJSONObject("鎶ュ憡璁板綍");
-                String titleName = "";
-                if (reportInfo != null) {
-                    titleName = reportInfo.getStr("JYXMMC").trim();
-                }
-                JSONArray reportDetails = jsonObject.getJSONArray("妫�楠岀粨鏋滆褰�");
-                ArrayList<TjPdfVO> listPdf = new ArrayList<>();
-                String[] titles = null;
-                float[] titlesWidth = null;
-                // 缁撴灉淇℃伅
-                if (reportDetails != null && reportDetails.size() > 0) {
-                    for (Object reportDetail : reportDetails) {
-                        JSONObject detail = (JSONObject) reportDetail;
-                        TjPdfVO tjPdfVO = new TjPdfVO();
-                        tjPdfVO.setProName(detail.getStr("JCZBMC"));
-                        tjPdfVO.setProResult(detail.getStr("JCZBJG"));
-                        tjPdfVO.setVal1(detail.getStr("JLDW"));
-                        tjPdfVO.setVal2(detail.getStr("CKZFW"));
-                        listPdf.add(tjPdfVO);
-                    }
-                    titles = new String[]{"浣撴椤圭洰", "浣撴缁撴灉", "鍗曚綅", "鍙傝�冭寖鍥�"};
-                    titlesWidth = new float[]{120, 120, 120, 120};
-                    addTable(document1, titleName, titles, titlesWidth, listPdf);
-                    // 涓绘鍖诲笀
-                    String bgysqm = reportInfo.getStr("BGYSQM");
-                    String doctorName = "涓绘鍖诲笀锛�" + bgysqm;
-                    Font doctorFonts = PdfUtils.setFont(9);
-                    Paragraph df = PdfUtils.setParagraph(doctorFonts, doctorName);
-                    df.setAlignment(Element.ALIGN_RIGHT);
-                    document1.add(df);
-                    //鍒嗗壊绾�
-                    LineSeparator objectName = new LineSeparator();
-                    document1.add(objectName);
-                }
-                // 寰敓鐗╂姤鍛婅褰曚俊鎭�
-                JSONArray labgermrepInfos = jsonObject.getJSONArray("寰敓鐗╂姤鍛婅褰�");
-                if (labgermrepInfos != null && labgermrepInfos.size() > 0) {
-                    listPdf = new ArrayList<>();
-                    for (Object info : labgermrepInfos) {
-                        JSONObject object = (JSONObject) info;
-                        TjPdfVO tjPdfVO = new TjPdfVO();
-                        tjPdfVO.setProName(object.getStr("XJMC"));
-                        tjPdfVO.setProResult(object.getStr("JCJG"));
-                        listPdf.add(tjPdfVO);
-                    }
-                    titles = new String[]{"浣撴椤圭洰", "浣撴缁撴灉"};
-                    titlesWidth = new float[]{120, 120};
-                    addTable(document1, titleName, titles, titlesWidth, listPdf);
-                    //鍒嗗壊绾�
-                    LineSeparator objectName = new LineSeparator();
-                    document1.add(objectName);
-                }
-                // 寰敓鐗╄嵂鏁忎俊鎭�
-                JSONArray labgermdetailinfos = jsonObject.getJSONArray("寰敓鐗╄嵂鏁忎俊鎭�");
-                if (labgermdetailinfos != null && labgermdetailinfos.size() > 0) {
-                    listPdf = new ArrayList<>();
-                    for (Object info : labgermdetailinfos) {
-                        JSONObject object = (JSONObject) info;
-                        TjPdfVO tjPdfVO = new TjPdfVO();
-                        tjPdfVO.setProName(object.getStr("YMMC"));
-                        tjPdfVO.setProResult(object.getStr("JCJG"));
-                        tjPdfVO.setVal1(object.getStr("ZPHYL"));
-                        tjPdfVO.setVal2(object.getStr("YJND"));
-                        tjPdfVO.setVal3(object.getStr("YJHZJ"));
-                        listPdf.add(tjPdfVO);
-                    }
-                    titles = new String[]{"鑽晱鍚嶇О", "妫�鏌ョ粨鏋�", "绾哥墖鍚嵂閲�", "鎶戣弻娴撳害", "鎶戣弻鐜洿寰�"};
-                    titlesWidth = new float[]{90, 90, 90, 90, 90};
-                    addTable(document1, titleName, titles, titlesWidth, listPdf);
-                    //鍒嗗壊绾�
-                    LineSeparator objectName = new LineSeparator();
-                    document1.add(objectName);
-                }
-                // 鍗辨�ュ�间俊鎭�
-                JSONArray laburgentinfos = jsonObject.getJSONArray("鍗辨満鍊间俊鎭�");
-                if (laburgentinfos != null && laburgentinfos.size() > 0) {
-                    listPdf = new ArrayList<>();
-                    for (Object info : laburgentinfos) {
-                        JSONObject object = (JSONObject) info;
-                        TjPdfVO tjPdfVO = new TjPdfVO();
-                        tjPdfVO.setProName(object.getStr("zbmc"));
-                        tjPdfVO.setProResult(object.getStr("jg"));
-                        tjPdfVO.setVal1(object.getStr("clfs"));
-                        tjPdfVO.setVal2(object.getStr("bgcljg"));
-                        listPdf.add(tjPdfVO);
-                    }
-                    titles = new String[]{"鎸囨爣鍚嶇О", "鍗辨�ュ�肩粨鏋�", "澶勭悊鏂瑰紡", "澶勭悊鎰忚"};
-                    titlesWidth = new float[]{120, 120, 120, 120};
-                    addTable(document1, titleName, titles, titlesWidth, listPdf);
-                    //鍒嗗壊绾�
-                    LineSeparator objectName = new LineSeparator();
-                    document1.add(objectName);
-                }
-                JSONArray object = jsonObject.getJSONArray("妫�鏌ユ姤鍛�");
-                if (object != null && object.size() > 0) {
-                    for (Object info : object) {
-                        JSONObject obj = (JSONObject) info;
-                        String xm = obj.getStr("HZXM");
-                        String xb = obj.getStr("HZXB").equals("2") ? "濂�" : "鐢�";
-                        String nl = obj.getStr("HZNL");
-                        if (StrUtil.isNotBlank(nl) && nl.contains(".")) {
-                            String[] split = nl.split("\\.");
-                            nl = split[0];
-                        }
-                        String jcks = obj.getStr("JCKSMC");
-                        String zyh = "";
-                        String sqks = obj.getStr("SQKSMC");
-                        String sjks = obj.getStr("ZDJGMC");
-                        String jcsb = obj.getStr("SBBM");
-                        String jch = obj.getStr("JCH");
-                        String jcxm = obj.getStr("JCXMMC");
-                        String ms = obj.getStr("YXBX");
-                        String ts = obj.getStr("YXZD");
-                        String ch = obj.getStr("BZBCH");
-                        // 鎶ュ憡鍖诲笀绛惧悕
-                        String bgysqm = obj.getStr("BGYSQM");
-                        // 瀹℃牳鍖诲笀绛惧悕
-                        String shysqm = obj.getStr("SHYSQM");
-                        // 鐢宠浜�
-                        String sqrxm = obj.getStr("SQRXM");
-                        String footer = "鐢宠浜猴細"+sqrxm + "     瀹℃牳鍖诲笀锛�"+shysqm+"     "+bgysqm;
-                        ByteArrayOutputStream outputStream = makeJcPDFByteArrayStream(xm, xb, nl, jcks, zyh, ch, sjks, jcsb, jch, jcxm, ms, ts, null,footer);
-                        jianchas.add(outputStream);
-                    }
-                }
-            }
-            document1.close();
-            pdfWriter.close();
-            reader = new PdfReader(byteArrayOutputStream1.toByteArray());
-            int numberOfPages1 = reader.getNumberOfPages();
-            for (int i = 1; i <= numberOfPages1; i++) {
-                PdfImportedPage page = copy.getImportedPage(reader, i);
-                copy.addPage(page);
-            }
-            for (ByteArrayOutputStream jiancha : jianchas) {
-                reader = new PdfReader(jiancha.toByteArray());
-                numberOfPages1 = reader.getNumberOfPages();
-                for (int i = 1; i <= numberOfPages1; i++) {
-                    PdfImportedPage page = copy.getImportedPage(reader, i);
-                    copy.addPage(page);
-                }
-                jiancha.close();
-            }
-            byteArrayOutputStream1.close();
-            document.close();
-            copy.close();
-            reader.close();
-            String outputFileName1 = userId + tjNumber + tjCustomer.getCusName() + "_鎶ュ憡.pdf";
-            // 鏂囦欢閰嶇疆
-//            String outputPath1 = "/Users/chacca/寮�鍙戠浉鍏�/浠g爜/";
-            String outputPath1 = value+"\\";
-            File file = new File(outputPath1 + outputFileName1);
-            BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file));
-            outputStream.write(finalOutPut.toByteArray());
-            outputStream.flush();
-            outputStream.close();
-            finalOutPut.close();
-            reader.close();
-            // 淇濆瓨鏁版嵁
-            TjReport tjReport = new TjReport();
-            tjReport.setTjNumber(String.valueOf(tjNumber));
-            tjReport.setPath(urlValue + outputFileName1);
-            String pdfBinary = getPDFBinary(outputPath1 + outputFileName1);
-            tjReport.setReport(pdfBinary);
-            tjReport.setType("浣撴鎶ュ憡");
-            tjReport.setPrint("pdf");
-            tjReportService.save(tjReport);
-            //淇敼order琛ㄤ腑鐨勬墦鍗版姤鍛婃椂闂翠负褰撳墠鏃堕棿
-            LambdaUpdateWrapper<TjOrder> updateWrapper = new LambdaUpdateWrapper<>();
-            updateWrapper.eq(TjOrder::getTjNumber, tjNumber);
-            updateWrapper.set(TjOrder::getReportTime, new Date());
-            updateWrapper.set(TjOrder::getPrintLastTime, new Date());
-            updateWrapper.set(TjOrder::getDownloadLastTime, new Date());
-            updateWrapper.set(TjOrder::getStatus, TjConstants.TJ_END);
-            tjOrderService.update(updateWrapper);
-        } catch (IOException | DocumentException e) {
-            e.printStackTrace();
-            return false;
-        }
-        return true;
+        return sb.toString();
     }
 
     /**
      * 缁勫悎闈炲寲楠岄」鐩姤鍛婃暟鎹�
+     *
      * @param tjNumber
      * @param printReport
      * @param one
      * @param customer
      */
-    private void notHuaYanData(String tjNumber, Map<TjOrderRemark, List<TjPdfVO>> printReport,TjOrder one,TjCustomer customer) {
-        LambdaQueryWrapper<TjOrderRemark> wqq = new LambdaQueryWrapper<>();
-        wqq.eq(TjOrderRemark::getTjNumber, tjNumber);
-        wqq.ne(TjOrderRemark::getDeptId, "241");
-        wqq.in(TjOrderRemark::getDeptId, "269", "270", "253", "254", "255", "257", "251", "271");
-        wqq.notIn(TjOrderRemark::getProId, projectService.getNneedReprotProId());
-        List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.list(wqq);
+    private void notHuaYanData(String tjNumber, Map<TjOrderRemark, List<TjPdfVO>> printReport, TjOrder one, TjCustomer customer) {
+//        LambdaQueryWrapper<TjOrderRemark> wqq = new LambdaQueryWrapper<>();
+//        wqq.eq(TjOrderRemark::getTjNumber, tjNumber);
+//        wqq.ne(TjOrderRemark::getDeptId, "241");
+//        wqq.in(TjOrderRemark::getDeptId, "269", "270", "253", "254", "255", "257");
+//        wqq.notIn(TjOrderRemark::getProId, projectService.getNneedReprotProId());
+//        List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.list(wqq);
+        List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.notHuaYanData(tjNumber);
         for (TjOrderRemark tjOrderRemark : tjOrderRemarks) {
             printReport.put(tjOrderRemark, null);
         }
         for (Map.Entry<TjOrderRemark, List<TjPdfVO>> entry : printReport.entrySet()) {
             List<TjPdfVO> tjPdfVOS = new ArrayList<>();
             List<TjOrderDetail> tjOrderDetails = tjOrderDetailService.getDetailByOrderIdAndParId(one.getOrderId(), entry.getKey().getProId());
+            tjOrderDetails = tjOrderDetails.stream().filter(i -> StrUtil.isNotBlank(i.getProResult())).collect(Collectors.toList());
+            tjOrderDetails = new ArrayList<>(tjOrderDetails.stream()
+                    .collect(Collectors.toMap(TjOrderDetail::getProId, i -> i, (existing, replacement) -> existing)).values());
             for (TjOrderDetail tjOrderDetail : tjOrderDetails) {
-                TjProject tjProject = projectService.getById(tjOrderDetail.getProId());
-                if (null != tjProject) {
+                TjProject tjProject = projectService.getById(String.valueOf(tjOrderDetail.getProId()));
+                if (null != tjProject && tjProject.getNeedReport().equals("Y")) {
                     tjOrderDetail.setProject(tjProject);
-                }
-                if (tjOrderDetail.getProject().getProParentId().equals(entry.getKey().getProId())) {
-                    LambdaQueryWrapper<TjStandard> wq6 = new LambdaQueryWrapper<>();
-                    wq6.eq(TjStandard::getProId, tjOrderDetail.getProId());
-                    List<TjStandard> list2 = tjStandardService.list(wq6);
-                    if (list2.size() == 0) {
-                        TjStandard s = new TjStandard();
-                        s.setCompany(" ");
-                        s.setTjStandardLtValue(" ");
-                        s.setTjStandardGtValue(" ");
-                        tjOrderDetail.setStandard(s);
-                    } else if (list2.size() == 1) {
-                        tjOrderDetail.setStandard(list2.get(0));
-                    } else {
-                        Long cusSex = customer.getCusSex();
-                        Date cusBrithday = customer.getCusBrithday();
-                        int age = DateUtil.ageOfNow(cusBrithday);
-                        for (TjStandard tjStandard : list2) {
-                            LambdaQueryWrapper<TjStandard> wq8 = new LambdaQueryWrapper<>();
-                            if (tjStandard.getTjSex() != null) {
-                                wq8.eq(TjStandard::getTjSex, cusSex);
-                            }
-                            if (tjStandard.getTjType() != null) {
-                                wq8.eq(TjStandard::getTjType, StringUtils.getAgeType(age));
-                            }
-                            TjStandard standard = tjStandardService.getOne(wq8);
-                            tjOrderDetail.setStandard(standard);
-                        }
-                    }
-                    TjPdfVO tjPdfVO = new TjPdfVO();
-                    tjPdfVO.setProName(tjOrderDetail.getProject().getProName());
-                    tjPdfVO.setProResult(tjOrderDetail.getProResult());
-                    tjPdfVO.setExc(tjOrderDetail.getExceptionDesc());
-                    if (tjOrderDetail.getStandard() != null) {
-                        //鍗曚綅
-                        if (tjOrderDetail.getStandard().getCompany() == null) {
-                            tjPdfVO.setCompany(" ");
+
+                    if (tjOrderDetail.getProject().getProParentId().equals(entry.getKey().getProId()) && entry.getKey().getType() == 1) {
+                        TjPdfVO tjPdfVO = new TjPdfVO();
+                        tjPdfVO.setProName(tjOrderDetail.getProject().getProName());
+                        tjPdfVO.setProResult(tjOrderDetail.getProResult());
+                        tjPdfVO.setExc(tjOrderDetail.getExceptionDesc());
+                        if (null != tjProject.getProMetering()) {
+                            tjPdfVO.setCompany(tjProject.getProMetering());
                         } else {
-                            tjPdfVO.setCompany(tjOrderDetail.getStandard().getCompany());
+                            tjPdfVO.setCompany("/");
                         }
-                        // TODO 璁剧疆鍗曚綅
-                        //鏈�澶у�煎拰鏈�灏忓��
-                        String tjStandardGtValue = tjOrderDetail.getStandard().getTjStandardGtValue();
-                        String tjStandardLtValue = tjOrderDetail.getStandard().getTjStandardLtValue();
-                        if (tjStandardGtValue == null) {
-                            tjStandardGtValue = " ";
-                        }
-                        if (tjStandardLtValue == null) {
-                            tjStandardLtValue = " ";
-                        }
-                        tjPdfVO.setStandardValue(tjStandardLtValue + "-" + tjStandardGtValue);
+                        tjPdfVO.setProId(String.valueOf(tjOrderDetail.getProject().getProId()));
+                        tjPdfVO.setPid(String.valueOf(tjProject.getProParentId()));
+//                        LambdaQueryWrapper<LtkjExamJcbgd> wrapper = new LambdaQueryWrapper<>();
+//                        wrapper.eq(LtkjExamJcbgd::getTjh, tjNumber);
+//                        wrapper.eq(LtkjExamJcbgd::getXmdm, String.valueOf(tjOrderDetail.getProject().getProParentId()));
+                        tjPdfVOS.add(tjPdfVO);
                     }
-                    tjPdfVOS.add(tjPdfVO);
                 }
             }
+            if(!tjPdfVOS.isEmpty()){
+                tjPdfVOS=tjPdfVOS.stream().sorted(Comparator.comparing(TjPdfVO::getProName, Collator.getInstance(Locale.CHINA))).collect(Collectors.toList());
+                tjPdfVOS = tjPdfVOS.stream()
+                        .sorted(Comparator.comparingInt(
+                                tjPdfVO -> tjPdfVO.getProName().length() // 鏍规嵁鍚嶅瓧鐨勯暱搴︽帓搴�
+                        ))
+                        .collect(Collectors.toList());
+            }
+            printReport.put(entry.getKey(), tjPdfVOS);
+        }
+    }
+
+    private void pacsJianChaData(String tjNumber, Map<TjOrderRemark, List<TjPdfVO>> printReport, TjOrder one, TjCustomer customer) {
+//        LambdaQueryWrapper<TjOrderRemark> wqq = new LambdaQueryWrapper<>();
+//        wqq.eq(TjOrderRemark::getTjNumber, tjNumber);
+//        wqq.ne(TjOrderRemark::getDeptId, "241");
+//        wqq.in(TjOrderRemark::getDeptId, "269", "270", "253", "254", "255", "257");
+//        wqq.notIn(TjOrderRemark::getProId, projectService.getNneedReprotProId());
+//        List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.list(wqq);
+        List<TjOrderRemark> tjOrderRemarks = tjOrderRemarkService.pacsJianChaData(tjNumber);
+        for (TjOrderRemark tjOrderRemark : tjOrderRemarks) {
+            printReport.put(tjOrderRemark, null);
+        }
+        String ids = "";
+        for (Map.Entry<TjOrderRemark, List<TjPdfVO>> entry : printReport.entrySet()) {
+            List<TjPdfVO> tjPdfVOS = new ArrayList<>();
+            List<TjOrderDetail> tjOrderDetails = tjOrderDetailService.getDetailByOrderIdAndParId(one.getOrderId(), entry.getKey().getProId());
+            tjOrderDetails = new ArrayList<>(tjOrderDetails.stream().collect(Collectors.toMap(TjOrderDetail::getProId, i -> i, (existing, replacement) -> existing)).values());
+            for (TjOrderDetail tjOrderDetail : tjOrderDetails) {
+                TjProject tjProject = projectService.getById(tjOrderDetail.getProId());
+                if (null != tjProject && tjProject.getNeedReport().equals("Y")) {
+                    tjOrderDetail.setProject(tjProject);
+
+                    if (tjOrderDetail.getProject().getProParentId().equals(entry.getKey().getProId())
+                            && entry.getKey().getType() == 1
+                            && !ids.contains(String.valueOf(tjOrderDetail.getProject().getProParentId()))) {
+                        TjPdfVO tjPdfVO = new TjPdfVO();
+                        tjPdfVO.setProName(tjOrderDetail.getProject().getProName());
+                        tjPdfVO.setProResult(tjOrderDetail.getProResult());
+                        tjPdfVO.setExc(tjOrderDetail.getExceptionDesc());
+                        if (null != tjProject.getProMetering()) {
+                            tjPdfVO.setCompany(tjProject.getProMetering());
+                        } else {
+                            tjPdfVO.setCompany("/");
+                        }
+                        tjPdfVO.setProId(String.valueOf(tjOrderDetail.getProject().getProId()));
+                        LambdaQueryWrapper<LtkjExamJcbgd> wrapper = new LambdaQueryWrapper<>();
+                        wrapper.eq(LtkjExamJcbgd::getTjh, tjNumber);
+                        wrapper.like(LtkjExamJcbgd::getXmdm, String.valueOf(tjOrderDetail.getProject().getProParentId()));
+                        wrapper.orderByDesc(LtkjExamJcbgd::getZdsj);
+                        List<LtkjExamJcbgd> list = jcbgdService.list(wrapper);
+                        if (null != list && !list.isEmpty()) {
+                            LtkjExamJcbgd jcbgd = list.get(0);
+                            if (jcbgd != null) {
+                                tjPdfVO.setTs(jcbgd.getYxbx());
+                                tjPdfVO.setSj(jcbgd.getBgNr());
+                                tjPdfVO.setShys(jcbgd.getShysxm());
+                                tjPdfVO.setProName(jcbgd.getXmmc());
+                                ids += "|" + jcbgd.getXmdm();
+                            }
+                        }
+                        tjPdfVOS.add(tjPdfVO);
+                    }
+                }
+            }
+//            if(!tjPdfVOS.isEmpty()){
+//                tjPdfVOS=tjPdfVOS.stream().sorted(Comparator.comparing(TjPdfVO::getProName, Collator.getInstance(Locale.CHINA))).collect(Collectors.toList());
+//                tjPdfVOS = tjPdfVOS.stream()
+//                        .sorted(Comparator.comparingInt(
+//                                tjPdfVO -> tjPdfVO.getProName().length() // 鏍规嵁鍚嶅瓧鐨勯暱搴︽帓搴�
+//                        ))
+//                        .collect(Collectors.toList());
+//            }
             printReport.put(entry.getKey(), tjPdfVOS);
         }
     }
@@ -1221,7 +3045,6 @@
     }
 
     /**
-     *
      * @param document
      * @param titleName
      * @param titles
@@ -1300,10 +3123,15 @@
         document.add(table);
     }
 
-    private static void addJianYanTable(Document document, String titleName, String[] titles, float[] titlesWidth, ArrayList<List<String >> lists) throws DocumentException {
-        Font titleFont = PdfUtils.setFont(9);
+    private static void addJianYanTable(Document document, String titleName, String[] titles, float[] titlesWidth, ArrayList<List<String>> lists, DictHosp dictHosp, String colorStr) throws DocumentException {
+        // 澶ч」鏍囬
+        Font titleFont = PdfUtils.setFont(DEFAULT_TITLE_FONT_SIZE);
+//        if (dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌")) {
+        if (true) {
+            titleFont.setSize(DEFAULT_TITLE_FONT_SIZE);
+            titleFont.setStyle(Font.BOLD);
+        }
         Paragraph paragraph = new Paragraph(titleName, titleFont);
-        // 璁剧疆鏂囧瓧灞呬腑
         paragraph.setAlignment(Element.ALIGN_LEFT);
         // 琛岄棿璺�
         paragraph.setLeading(5f);
@@ -1311,13 +3139,35 @@
         paragraph.setSpacingBefore(10f);
         // 璁剧疆娈佃惤涓嬬┖鐧�
         paragraph.setSpacingAfter(10f);
-        document.add(paragraph);
+//        if (dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌")) {
+        if (true) {
+            // 琛岄棿璺�
+            paragraph.setLeading(7f);
+            // 璁剧疆娈佃惤涓婄┖鐧�
+            paragraph.setSpacingBefore(12f);
+            // 璁剧疆娈佃惤涓嬬┖鐧�
+            paragraph.setSpacingAfter(12f);
+            // 澶ч」
+            PdfPCell cellTitle = new PdfPCell(paragraph);
+            cellTitle.setBorder(Rectangle.NO_BORDER);
+            Color color = Color.decode(colorStr);
+            cellTitle.setBackgroundColor(new BaseColor(color.getRed(), color.getGreen(), color.getBlue())); // 璁剧疆鑳屾櫙棰滆壊锛堝崄鍏繘鍒� RGB锛�
+            // 鍒涘缓琛ㄦ牸骞舵坊鍔犲崟鍏冩牸
+            PdfPTable tableTitle = new PdfPTable(1);
+            tableTitle.setWidthPercentage(100);
+            tableTitle.addCell(cellTitle);
+
+            // 灏嗚〃鏍兼坊鍔犲埌鏂囨。涓�
+            document.add(tableTitle);
+        } else {
+            document.add(paragraph);
+        }
         // 鍒涘缓涓�涓〃鏍煎苟娣诲姞鍒版枃妗�
-        Font headFont = PdfUtils.setFont(9);
-        Font textFont = PdfUtils.setFont(9);
+        Font headFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+        Font textFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
         PdfPTable table = new PdfPTable(titlesWidth);
-        table.setTotalWidth(PageSize.A4.getWidth() - 100); // 璁剧疆琛ㄦ牸鎬诲搴�
-        table.setLockedWidth(true); // 閿佸畾琛ㄦ牸瀹藉害
+        table.setTotalWidth(PageSize.A4.getWidth() - 10); // 璁剧疆琛ㄦ牸鎬诲搴�
+        //table.setLockedWidth(true); // 閿佸畾琛ㄦ牸瀹藉害
         table.setHorizontalAlignment(Element.ALIGN_LEFT);
         table.getDefaultCell().setBorder(0);
         table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
@@ -1326,16 +3176,42 @@
             cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
             cell.setHorizontalAlignment(Element.ALIGN_LEFT);
             cell.setBorder(Rectangle.NO_BORDER); // 绉婚櫎鍗曞厓鏍艰竟妗�
+
+//            Color color = Color.decode(colorStr);
+//            cell.setBackgroundColor(new BaseColor(color.getRed(), color.getGreen(), color.getBlue())); // 璁剧疆鑳屾櫙棰滆壊锛堝崄鍏繘鍒� RGB锛�
+
             table.addCell(cell);
         }
+
         for (List<String> list : lists) {
+            boolean isYc = false;
+            textFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
+//            if (dictHosp.getHospName().equals("婢勫悎鐭垮姟灞�涓績鍖婚櫌")){
+            if (true) {
+                if (list.contains("鈫�") || list.contains("鈫�")) {
+                    isYc = true;
+                }
+            }
+            int index = 1;
             for (String s : list) {
+                // 璺宠繃椤圭洰id
+                if (index == 6) continue;
                 PdfPCell nameCell = new PdfPCell();
                 nameCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
                 nameCell.setHorizontalAlignment(Element.ALIGN_LEFT);
-                nameCell.setPhrase(new Paragraph(s, textFont));
+
                 nameCell.setBorder(Rectangle.NO_BORDER); // 绉婚櫎鍗曞厓鏍艰竟妗�
+                if (isYc) {
+                    textFont.setStyle(Font.BOLD);
+                    nameCell.setPhrase(new Paragraph(s, textFont));
+                    nameCell.setBorder(Rectangle.NO_BORDER);
+//                    Color color = Color.decode("#0033cc");
+//                    nameCell.setBackgroundColor(new BaseColor(color.getRed(), color.getGreen(), color.getBlue())); // 璁剧疆鑳屾櫙棰滆壊锛堝崄鍏繘鍒� RGB锛�
+                } else {
+                    nameCell.setPhrase(new Paragraph(s, textFont));
+                }
                 table.addCell(nameCell);
+                index++;
             }
         }
         document.add(table);
@@ -1343,6 +3219,7 @@
 
     /**
      * 鍒涘缓妫�鏌df
+     *
      * @param xm
      * @param xb
      * @param nl
@@ -1359,12 +3236,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);
 
@@ -1375,7 +3257,8 @@
             table1.setSpacingAfter(10f);
 
             Font titleFont = PdfUtils.setFont(12);
-            PdfPCell mergedCell = new PdfPCell(new Phrase("娉� 宸� 鍘� 浜� 姘� 鍖� 闄�", titleFont));
+//            PdfPCell mergedCell = new PdfPCell(new Phrase("闄曞仴鍖绘緞鍚堢熆鍔″眬涓績鍖婚櫌", titleFont));
+            PdfPCell mergedCell = new PdfPCell(new Phrase(HOSP_NAME, titleFont));
             mergedCell.setBorder(Rectangle.NO_BORDER);
             mergedCell.setColspan(10);
             mergedCell.setHorizontalAlignment(Element.ALIGN_CENTER);
@@ -1527,7 +3410,7 @@
             float[] columnWidths = {0.8f, 0.8f, 0.8f, 0.8f, 0.1f, 0.1f, 0.8f, 0.8f, 0.8f, 0.8f};
             table2.setWidths(columnWidths);
 
-            if(files != null){
+            if (files != null) {
                 int imageIndex = 0;
                 while (imageIndex < files.length) {
                     // 绗竴寮犲浘鐗囧崰浣嶇
@@ -1617,8 +3500,8 @@
             return baos;
         } catch (DocumentException | IOException e) {
             e.printStackTrace();
+            return null;
         }
-        return null;
     }
 
     private static PdfPCell createImageCell(String path) throws IOException, BadElementException {
@@ -1635,9 +3518,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
@@ -1647,9 +3535,146 @@
             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());
+        }
+    }
 
-            footer.writeSelectedRows(0, -1, 36, 36, writer.getDirectContent());
+    // 鑷畾涔夐〉鑴氬拰椤电湁鐨勭粯鍒�
+    class FooterHeaderPageEvent extends PdfPageEventHelper {
+
+        private String name; // 椤电湁鐨勫悕瀛�
+        private String tjName;
+        private String tjNumber;
+        private String sex;
+        private String age;
+        private Integer page;
+
+        public FooterHeaderPageEvent(String name, String tjName, String tjNumber, String sex, String age, Integer page) {
+            this.name = name;
+            this.tjNumber = tjNumber;
+            this.tjName = tjName;
+            this.sex = sex;
+            this.age = age;
+            this.page = page;
+        }
+
+        // 鍦ㄦ瘡涓�椤电殑椤堕儴缁樺埗椤电湁
+        @Override
+        public void onStartPage(PdfWriter writer, Document document) {
+            // 鑾峰彇椤甸潰瀹藉害鍜岄珮搴�
+            float width = document.getPageSize().getWidth();
+            float margin = document.leftMargin();
+
+            // 鍒涘缓椤电湁琛ㄦ牸锛�2琛岋紝绗竴琛屽寘鍚鍚嶃�佹�у埆銆佸勾榫勫拰浣撴鍙凤紝绗簩琛屾槸鍒嗗壊绾�
+            PdfPTable headerTable = new PdfPTable(2);  // 2鍒楋細绗竴鍒椾负濮撳悕銆佹�у埆銆佸勾榫勶紝绗簩鍒椾负浣撴鍙�
+            headerTable.setWidthPercentage(100); // 璁剧疆瀹藉害涓�100%
+            headerTable.setSpacingAfter(10); // 椤电湁涓庡唴瀹逛箣闂寸殑闂磋窛
+
+            // 璁剧疆鍒楀搴�
+            float[] columnWidths = {0.6f, 0.4f}; // 绗竴鍒楀崰 60%锛岀浜屽垪鍗� 40%
+            try {
+                headerTable.setWidths(columnWidths);
+            } catch (DocumentException e) {
+                e.printStackTrace();
+            }
+
+            // 绗竴琛岋細濮撳悕銆佹�у埆銆佸勾榫勪互鍙婁綋妫�鍙�
+            PdfPCell infoCell = new PdfPCell(new Phrase("濮撳悕锛�" + tjName + " 鎬у埆锛�" + sex + " 骞撮緞锛�" + age, PdfUtils.setFont(8)));
+            infoCell.setBorder(Rectangle.NO_BORDER);
+            infoCell.setHorizontalAlignment(Element.ALIGN_LEFT); // 绗竴鍒楀乏瀵归綈
+            infoCell.setVerticalAlignment(Element.ALIGN_MIDDLE); // 鍨傜洿灞呬腑
+            headerTable.addCell(infoCell);
+
+            PdfPCell idCell = new PdfPCell(new Phrase("浣撴鍙凤細" + tjNumber, PdfUtils.setFont(8)));
+            idCell.setBorder(Rectangle.NO_BORDER);
+            idCell.setHorizontalAlignment(Element.ALIGN_RIGHT); // 绗簩鍒楀彸瀵归綈
+            idCell.setVerticalAlignment(Element.ALIGN_MIDDLE); // 鍨傜洿灞呬腑
+            headerTable.addCell(idCell);
+
+            // 绗簩琛岋細娣$伆鑹插垎鍓茬嚎
+            PdfPCell separatorCell = new PdfPCell();
+            separatorCell.setBorder(Rectangle.TOP);  // 璁剧疆涓婅竟妗�
+            separatorCell.setBorderColor(BaseColor.LIGHT_GRAY); // 璁剧疆涓烘贰鐏拌壊
+            separatorCell.setBorderWidthTop(0.5f); // 璁剧疆涓婅竟妗嗙殑瀹藉害
+            separatorCell.setColspan(2); // 鍚堝苟涓ゅ垪
+            headerTable.addCell(separatorCell);
+
+            // 灏嗛〉鐪夎〃鏍兼坊鍔犲埌鏂囨。
+            try {
+                document.add(headerTable);
+            } catch (DocumentException e) {
+                e.printStackTrace();
+            }
+        }
+
+
+        // 鍦ㄦ瘡涓�椤电殑搴曢儴缁樺埗椤佃剼
+        @SneakyThrows
+        @Override
+        public void onEndPage(PdfWriter writer, Document document) {
+            // 鑾峰彇椤甸潰瀹藉害鍜岄珮搴�
+            float width = document.getPageSize().getWidth();
+            float height = document.getPageSize().getHeight();
+            float margin = document.leftMargin();
+
+            // 椤佃剼璺濈搴曢儴鐨勪綅缃紝纭繚鍏朵綅浜庨〉闈㈠簳閮� 澧炲姞鏄笂绉� 鍑忓皯鏄笅绉�
+            float footerPositionY = document.bottomMargin();
+
+            // 椤佃剼琛ㄦ牸锛�2琛�2鍒楋紝绗竴琛屽尰闄㈠悕鍜岄〉鐮侊紝绗簩琛岀绂忚
+            PdfPTable footerTable = new PdfPTable(2); // 2鍒楋紝绗竴鍒楀尰闄㈠悕锛岀浜屽垪椤电爜
+            footerTable.setWidthPercentage(100); // 璁剧疆瀹藉害涓�100%锛屼娇鍏舵按骞冲眳涓�
+            footerTable.setTotalWidth(width - margin * 2 + 10); // 璁剧疆鎬诲搴︼紝閬垮厤涓庨〉杈硅窛閲嶅彔
+            footerTable.setSpacingBefore(0); // 鍘婚櫎琛ㄦ牸椤堕儴鐨勯棿璺�
+            footerTable.setSpacingAfter(0); // 鍘婚櫎琛ㄦ牸搴曢儴鐨勯棿璺�
+            footerTable.getDefaultCell().setBorder(Rectangle.NO_BORDER); // 鍘婚櫎鎵�鏈夊崟鍏冩牸鐨勮竟妗�
+            float[] columnWidths = {2.5f, 2f};  // 绗竴鍒楀崰 1锛岀浜屽垪鍗� 2
+            footerTable.setWidths(columnWidths); // 璁剧疆鍒楀姣斾緥
+
+            // 绗竴琛岋細鍖婚櫌鍚嶅拰椤电爜
+            PdfPCell hospitalNameCell = new PdfPCell(new Phrase(name, PdfUtils.setFont(8)));
+            hospitalNameCell.setHorizontalAlignment(Element.ALIGN_RIGHT); // 姘村钩灞呬腑
+            hospitalNameCell.setVerticalAlignment(Element.ALIGN_TOP); // 鍨傜洿瀵归綈鍒板簳閮�
+            hospitalNameCell.setMinimumHeight(12f); // 璁剧疆鏈�灏忛珮搴︼紝閬垮厤楂樺害杩囧ぇ
+            hospitalNameCell.setBorder(Rectangle.TOP); // 璁剧疆涓婅竟妗�
+            hospitalNameCell.setBorderColor(BaseColor.LIGHT_GRAY); // 璁剧疆涓婅竟妗嗕负娣$伆鑹�
+            hospitalNameCell.setBorderWidthTop(0.5f); // 璁剧疆涓婅竟妗嗗搴�
+            footerTable.addCell(hospitalNameCell);
+
+            // 鍒涘缓椤电爜鐨勫崟鍏冩牸锛氬彸瀵归綈
+            String pageText;
+//            if (page != null) pageText = "绗� " + writer.getPageNumber() + 1 + " 椤碉紝鍏� " + page + " 椤�"; // 椤电爜
+//            else pageText = "绗� " + (writer.getPageNumber() + 1) + " 椤�"; // 椤电爜
+
+//            if (page == null) {
+//                pageText = "绗� " + (writer.getPageNumber() + 1) + " 椤�"; // 椤电爜
+//            } else {
+//                pageText = "绗� " + (page + 1) + " 椤�"; // 椤电爜
+//            }
+            pageText = "绗� " + (++pdfPage) + " 椤�";
+            PdfPCell pageCell = new PdfPCell(new Phrase(pageText, PdfUtils.setFont(8)));
+            pageCell.setHorizontalAlignment(Element.ALIGN_RIGHT); // 鍙冲榻�
+            pageCell.setVerticalAlignment(Element.ALIGN_TOP); // 鍨傜洿瀵归綈鍒板簳閮�
+            pageCell.setMinimumHeight(12f); // 璁剧疆鏈�灏忛珮搴︼紝閬垮厤楂樺害杩囧ぇ
+            pageCell.setBorder(Rectangle.TOP); // 璁剧疆涓婅竟妗�
+            pageCell.setBorderColor(BaseColor.LIGHT_GRAY); // 璁剧疆涓婅竟妗嗕负娣$伆鑹�
+            pageCell.setBorderWidthTop(0.5f); // 璁剧疆涓婅竟妗嗗搴�
+            footerTable.addCell(pageCell);
+
+            // 绗簩琛岋細绁濈璇紝鍚堝苟涓ゅ垪
+            PdfPCell footerTextCell = new PdfPCell(new Phrase("鏈綋妫�鎶ュ憡浠呬緵涓村簥鍙傝�冿紝涓嶄綔涓轰复搴婁緷鎹紝绁濇偍韬綋鍋ュ悍锛侊紒锛�", PdfUtils.setFont(8)));
+            footerTextCell.setColspan(2); // 鍚堝苟涓ゅ垪
+            footerTextCell.setHorizontalAlignment(Element.ALIGN_CENTER); // 灞呬腑
+            footerTextCell.setVerticalAlignment(Element.ALIGN_TOP); // 鍨傜洿瀵归綈鍒板簳閮�
+            footerTextCell.setMinimumHeight(14f); // 璁剧疆鏈�灏忛珮搴︼紝閬垮厤楂樺害杩囧ぇ
+            footerTextCell.setBorder(Rectangle.NO_BORDER); // 鍘婚櫎鎵�鏈夎竟妗�
+            footerTable.addCell(footerTextCell);
+
+            // 椤佃剼琛ㄦ牸鐨勪綅缃細灏嗚〃鏍煎啓鍏ラ〉鑴氾紝Y 鍧愭爣闇�瑕佽缃负璺濈椤甸潰搴曢儴鎸囧畾鐨勪綅缃�
+            footerTable.writeSelectedRows(0, -1, margin, footerPositionY, writer.getDirectContent());
         }
     }
 }

--
Gitblit v1.8.0