From e854cddbd400f9304f233fd2f23894bf636e7e89 Mon Sep 17 00:00:00 2001
From: 赵文轩 <1652863494@qq.com>
Date: 星期一, 17 六月 2024 14:39:49 +0800
Subject: [PATCH] 打印pdf报告工具类

---
 ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java |  784 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 784 insertions(+), 0 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
new file mode 100644
index 0000000..3a8e3c8
--- /dev/null
+++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/his/HisPDFUtil.java
@@ -0,0 +1,784 @@
+package com.ltkj.web.controller.his;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.itextpdf.text.*;
+import com.itextpdf.text.pdf.*;
+import com.itextpdf.text.pdf.draw.LineSeparator;
+import com.ltkj.common.core.domain.AjaxResult;
+import com.ltkj.common.core.domain.entity.SysDictData;
+import com.ltkj.common.utils.DateUtils;
+import com.ltkj.framework.config.MatchUtils;
+import com.ltkj.hosp.domain.*;
+import com.ltkj.hosp.service.ITjCustomerService;
+import com.ltkj.hosp.service.ITjOrderService;
+import com.ltkj.hosp.service.ITjReportService;
+import com.ltkj.hosp.service.ITjReportTemplateService;
+import com.ltkj.mall.mallOrderUtils.TjConstants;
+import com.ltkj.system.service.ISysDictDataService;
+import com.ltkj.web.config.pdfutils.PdfUtils;
+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 java.io.*;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.*;
+import java.util.List;
+
+import static com.ltkj.web.config.pdfutils.PDFBinaryUtil.getPDFBinary;
+
+/**
+ * 妫�鏌� 妫�楠屾姤鍛妏df鐢熸垚
+ */
+@Slf4j
+@Component
+public class HisPDFUtil {
+    @Autowired
+    private HisApiGetMethodService apiGetMethodService;
+    @Autowired
+    private ITjOrderService tjOrderService;
+    @Autowired
+    private ITjCustomerService tjCustomerService;
+    @Autowired
+    private ITjReportService tjReportService;
+    @Value("${path.filePath}")
+    private String value;
+    @Value("${path.reportServer}")
+    private String urlValue;
+
+    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))
+                return AjaxResult.success("宸茬敓鎴愭姤鍛婏紒鍙洿鎺ョ偣鍑婚瑙堬紒");
+            else return AjaxResult.error();
+        } else {
+            return AjaxResult.error("鏈幏鍙栧埌妫�楠屾姤鍛婅褰曚俊鎭�");
+        }
+    }
+
+    private List<Map<String, Object>> makePDFInfo(HashMap<String, Object> map, AjaxResult ajaxResult, String key) {
+        List<Map<String, Object>> data = null;
+        if (Integer.parseInt(ajaxResult.get("code").toString()) == 200) {
+            data = (List<Map<String, Object>>) ajaxResult.get("data");
+            List<Map<String, Object>> parent = (List<Map<String, Object>>) map.get(key);
+            if (parent != null) {
+                parent.addAll(data);
+            } else {
+                map.put(key, data);
+            }
+        }
+        return data;
+    }
+
+    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 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();
+        // 鐢熸垚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);
+            //寮傚父椤圭洰
+            // 閬嶅巻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();
+            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> list = 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"));
+                        list.add(tjPdfVO);
+                    }
+                    titles = new String[]{"浣撴椤圭洰", "浣撴缁撴灉", "鍗曚綅", "鍙傝�冭寖鍥�"};
+                    titlesWidth = new float[]{120, 120, 120, 120};
+                    addTable(document1, titleName, titles, titlesWidth, list);
+                    // 涓绘鍖诲笀
+                    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) {
+                    list = new ArrayList<>();
+                    for (Object info : labgermrepInfos) {
+                        JSONObject object = (JSONObject) info;
+                        TjPdfVO tjPdfVO = new TjPdfVO();
+                        tjPdfVO.setProName(object.getStr("XJMC"));
+                        tjPdfVO.setProResult(object.getStr("JCJG"));
+                        list.add(tjPdfVO);
+                    }
+                    titles = new String[]{"浣撴椤圭洰", "浣撴缁撴灉"};
+                    titlesWidth = new float[]{120, 120};
+                    addTable(document1, titleName, titles, titlesWidth, list);
+                    //鍒嗗壊绾�
+                    LineSeparator objectName = new LineSeparator();
+                    document1.add(objectName);
+                }
+                // 寰敓鐗╄嵂鏁忎俊鎭�
+                JSONArray labgermdetailinfos = jsonObject.getJSONArray("寰敓鐗╄嵂鏁忎俊鎭�");
+                if (labgermdetailinfos != null && labgermdetailinfos.size() > 0) {
+                    list = 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"));
+                        list.add(tjPdfVO);
+                    }
+                    titles = new String[]{"鑽晱鍚嶇О", "妫�鏌ョ粨鏋�", "绾哥墖鍚嵂閲�", "鎶戣弻娴撳害", "鎶戣弻鐜洿寰�"};
+                    titlesWidth = new float[]{90, 90, 90, 90, 90};
+                    addTable(document1, titleName, titles, titlesWidth, list);
+                    //鍒嗗壊绾�
+                    LineSeparator objectName = new LineSeparator();
+                    document1.add(objectName);
+                }
+                // 鍗辨�ュ�间俊鎭�
+                JSONArray laburgentinfos = jsonObject.getJSONArray("鍗辨満鍊间俊鎭�");
+                if (laburgentinfos != null && laburgentinfos.size() > 0) {
+                    list = 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"));
+                        list.add(tjPdfVO);
+                    }
+                    titles = new String[]{"鎸囨爣鍚嶇О", "鍗辨�ュ�肩粨鏋�", "澶勭悊鏂瑰紡", "澶勭悊鎰忚"};
+                    titlesWidth = new float[]{120, 120, 120, 120};
+                    addTable(document1, titleName, titles, titlesWidth, list);
+                    //鍒嗗壊绾�
+                    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 outputPath1 = "/Users/chacca/寮�鍙戠浉鍏�/浠g爜/";
+            String outputPath1 = value+"\\";
+            String outputFileName1 = userId + tjNumber + tjCustomer.getCusName() + "_鎶ュ憡.pdf";
+            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;
+    }
+
+    /**
+     * 璁剧疆鐢ㄦ埛淇℃伅
+     *
+     * @param tjNumber
+     * @param tjOrder
+     * @param tjCustomer
+     * @param data
+     */
+    private void setUserInfo(String tjNumber, TjOrder tjOrder, TjCustomer tjCustomer, Map<String, Object> data) {
+        //濉厖鎬у埆锛氬垽鏂敺濂�
+        Long cusSex = tjCustomer.getCusSex();
+        String sex;
+        String name1;
+        String tjtype;
+        if (cusSex == 0) {
+            sex = "鐢�";
+            name1 = tjCustomer.getCusName() + "鍏堢敓";
+        } else {
+            sex = "濂�";
+            name1 = tjCustomer.getCusName() + "濂冲+";
+        }
+        data.put("name", tjCustomer.getCusName());
+        data.put("cusId", tjCustomer.getCusId());
+        data.put("name1", name1);
+        if ("1".equals(tjOrder.getTjType())) {
+            tjtype = "鍥㈤槦";
+            data.put("tjtype", tjtype);
+        } else {
+            tjtype = "涓汉";
+            data.put("tjtype", tjtype);
+        }
+        data.put("dstype", "缁熶竴");
+        data.put("sex", sex);
+        data.put("age", DateUtil.ageOfNow(tjCustomer.getCusBrithday()));
+        data.put("tjnumber", tjNumber);
+        data.put("tjdate", DateUtils.parseDateToStr("yyyy/MM/dd", tjOrder.getCreateTime()));
+        data.put("phone", tjCustomer.getCusPhone());
+        data.put("idcard", MatchUtils.hideIdCardNum(tjCustomer.getCusIdcard()));
+        data.put("num2", 0);
+        data.put("num3", 4);
+    }
+
+    private static void addTable(Document document, String titleName, String[] titles, float[] titlesWidth, ArrayList<TjPdfVO> list) throws DocumentException {
+        Font titleFont = PdfUtils.setFont(9);
+        Paragraph paragraph = new Paragraph(titleName, titleFont);
+        // 璁剧疆鏂囧瓧灞呬腑
+        paragraph.setAlignment(Element.ALIGN_LEFT);
+        // 琛岄棿璺�
+//        paragraph.setLeading(5f);
+        // 璁剧疆娈佃惤涓婄┖鐧�
+        paragraph.setSpacingBefore(10f);
+        // 璁剧疆娈佃惤涓嬬┖鐧�
+        paragraph.setSpacingAfter(10f);
+        document.add(paragraph);
+        // 鍒涘缓涓�涓〃鏍煎苟娣诲姞鍒版枃妗�
+        Font headFont = PdfUtils.setFont(9);
+        Font textFont = PdfUtils.setFont(9);
+        PdfPTable table = new PdfPTable(titlesWidth);
+        table.setTotalWidth(PageSize.A4.getWidth() - 100); // 璁剧疆琛ㄦ牸鎬诲搴�
+        table.setLockedWidth(true); // 閿佸畾琛ㄦ牸瀹藉害
+        for (String title : titles) {
+            PdfPCell cell = new PdfPCell(new Paragraph(title, headFont));
+            cell.setBorder(Rectangle.NO_BORDER); // 绉婚櫎鍗曞厓鏍艰竟妗�
+            table.addCell(cell);
+        }
+        for (TjPdfVO item : list) {
+            Class<? extends TjPdfVO> aClass = item.getClass();
+            Field[] fields = aClass.getDeclaredFields();
+            ArrayList<String> values = new ArrayList<>();
+            for (Field field : fields) {
+                String fieldName = field.getName();
+                String getterName = "get" + Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1);
+                try {
+                    Method method = aClass.getDeclaredMethod(getterName);
+                    if (method != null) {
+                        Object invoke = method.invoke(item);
+                        if (invoke != null) {
+                            values.add(String.valueOf(invoke));
+                        }
+                    }
+                } catch (NoSuchMethodException e) {
+                    log.error("鏍规嵁瀛楁鑾峰彇get鏂规硶寮傚父 ->{}", e.getMessage());
+                } catch (InvocationTargetException | IllegalAccessException e) {
+                    log.error("鍙嶅皠鑾峰彇绫诲瓧娈靛紓甯� ->{}", e.getMessage());
+                }
+            }
+            for (int i = 0; i < values.size(); i++) {
+                String value = String.valueOf(values.get(i));
+                Paragraph elements = null;
+                if (StrUtil.isBlank(value) || value.equals("null")) {
+                    elements = new Paragraph("", textFont);
+                } else {
+                    elements = new Paragraph(value, textFont);
+                }
+                PdfPCell nameCell = new PdfPCell(elements);
+                nameCell.setBorder(Rectangle.NO_BORDER); // 绉婚櫎鍗曞厓鏍艰竟妗�
+                table.addCell(nameCell);
+            }
+        }
+        // 灏嗚〃鏍兼坊鍔犲埌鏂囨。
+        document.add(table);
+    }
+
+    /**
+     * 鍒涘缓妫�鏌df
+     * @param xm
+     * @param xb
+     * @param nl
+     * @param jcks
+     * @param zyh
+     * @param ch
+     * @param sjks
+     * @param jcsb
+     * @param jch
+     * @param jcxm
+     * @param ms
+     * @param ts
+     * @param files
+     * @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) {
+        try {
+            Document document = new Document(PageSize.A4);
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            PdfWriter writer = PdfWriter.getInstance(document, baos);
+            writer.setPageEvent(new Footer(footer));
+            document.open();
+            document.setMargins(70, 70, 40, 40);
+
+            // 鍒涘缓绗竴涓〃鏍硷細鍥剧墖涔嬪墠鐨勫唴瀹�
+            PdfPTable table1 = new PdfPTable(10);
+            table1.setWidthPercentage(100);
+            table1.setSpacingBefore(10f);
+            table1.setSpacingAfter(10f);
+
+            Font titleFont = PdfUtils.setFont(12);
+            PdfPCell mergedCell = new PdfPCell(new Phrase("娉� 宸� 鍘� 浜� 姘� 鍖� 闄�", titleFont));
+            mergedCell.setBorder(Rectangle.NO_BORDER);
+            mergedCell.setColspan(10);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_CENTER);
+            table1.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase(" "));
+            mergedCell.setBorder(Rectangle.NO_BORDER);
+            mergedCell.setColspan(10);
+            mergedCell.setFixedHeight(1f);
+            table1.addCell(mergedCell);
+
+            titleFont = PdfUtils.setFont(15);
+            mergedCell = new PdfPCell(new Phrase("妫�鏌ユ姤鍛婂崟", titleFont));
+            mergedCell.setBorder(Rectangle.NO_BORDER);
+            mergedCell.setColspan(10);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_CENTER);
+            table1.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase(" "));
+            mergedCell.setBorder(Rectangle.NO_BORDER);
+            mergedCell.setColspan(10);
+            table1.addCell(mergedCell);
+
+            titleFont = PdfUtils.setFont(10);
+            PdfPCell textFieldCell = new PdfPCell();
+
+            mergedCell = new PdfPCell(new Phrase("濮�  鍚�:", titleFont));
+            mergedCell.setBorder(Rectangle.TOP);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setColspan(1);
+            table1.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase(xm, titleFont));
+            mergedCell.setBorder(Rectangle.TOP);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setColspan(1);
+            table1.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase("鎬�   鍒�:", titleFont));
+            mergedCell.setBorder(Rectangle.TOP);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setColspan(1);
+            table1.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase(xb, titleFont));
+            mergedCell.setBorder(Rectangle.TOP);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setColspan(1);
+            table1.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase("骞�   榫�:", titleFont));
+            mergedCell.setBorder(Rectangle.TOP);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setColspan(1);
+            table1.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase(nl, titleFont));
+            mergedCell.setBorder(Rectangle.TOP);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setColspan(1);
+            table1.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase("妫�鏌ョ瀹�:", titleFont));
+            mergedCell.setBorder(Rectangle.TOP);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setColspan(1);
+            table1.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase(jcks, titleFont));
+            mergedCell.setBorder(Rectangle.TOP);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setColspan(3);
+            table1.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase("浣� 闄� 鍙�:", titleFont));
+            mergedCell.setBorder(Rectangle.NO_BORDER);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setColspan(1);
+            table1.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase(zyh, titleFont));
+            mergedCell.setBorder(Rectangle.NO_BORDER);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setColspan(1);
+            table1.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase("搴�   鍙�:", titleFont));
+            mergedCell.setBorder(Rectangle.NO_BORDER);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setColspan(1);
+            table1.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase(ch, titleFont));
+            mergedCell.setBorder(Rectangle.NO_BORDER);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setColspan(1);
+            table1.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase("閫佹绉戝:", titleFont));
+            mergedCell.setBorder(Rectangle.NO_BORDER);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setColspan(1);
+            table1.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase(sjks, titleFont));
+            mergedCell.setBorder(Rectangle.NO_BORDER);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setColspan(2);
+            table1.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase("妫�鏌ヨ澶�:", titleFont));
+            mergedCell.setBorder(Rectangle.NO_BORDER);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setColspan(1);
+            table1.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase(jcsb, titleFont));
+            mergedCell.setBorder(Rectangle.NO_BORDER);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setColspan(2);
+            table1.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase("妫�鏌ュ彿:", titleFont));
+            mergedCell.setBorder(Rectangle.BOTTOM);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setColspan(1);
+            table1.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase(jch, titleFont));
+            mergedCell.setBorder(Rectangle.BOTTOM);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setColspan(2);
+            table1.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase("妫�鏌ラ」鐩�:", titleFont));
+            mergedCell.setBorder(Rectangle.BOTTOM);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setColspan(1);
+            table1.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase(jcxm, titleFont));
+            mergedCell.setBorder(Rectangle.BOTTOM);
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setColspan(6);
+            table1.addCell(mergedCell);
+
+            // 鍒涘缓绗簩涓〃鏍硷細鏄剧ず鍥剧墖閮ㄥ垎
+            PdfPTable table2 = new PdfPTable(10);
+            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){
+                int imageIndex = 0;
+                while (imageIndex < files.length) {
+                    // 绗竴寮犲浘鐗囧崰浣嶇
+                    if (imageIndex < files.length) {
+                        PdfPCell imageCell = createImageCell(files[imageIndex].getPath());
+                        imageCell.setColspan(4);
+                        table2.addCell(imageCell);
+                        imageIndex++;
+                    }
+                    // 璋冩暣杩欎釜鍗曞厓鏍煎崰鐢ㄧ殑瀹藉害 涓嶅奖鍝嶅叾浠栬
+                    PdfPCell middleBlankCell = new PdfPCell(new Phrase(""));
+                    middleBlankCell.setColspan(2);
+                    middleBlankCell.setBorder(Rectangle.NO_BORDER);
+                    table2.addCell(middleBlankCell);
+                    // 绗簩寮犲浘鐗囧崰浣嶇
+                    if (imageIndex < files.length) {
+                        PdfPCell imageCell = createImageCell(files[imageIndex].getPath());
+                        imageCell.setColspan(4);
+                        table2.addCell(imageCell);
+                        imageIndex++;
+                    }
+                    // 瀹屾垚褰撳墠琛�
+                    table2.completeRow();
+                }
+            }
+            // 鍒涘缓绗笁涓〃鏍硷細鍥剧墖涔嬪悗鐨勫唴瀹�
+            PdfPTable table3 = new PdfPTable(10);
+            table3.setWidthPercentage(100);
+            table3.setSpacingBefore(10f);
+            table3.setSpacingAfter(10f);
+
+            mergedCell = new PdfPCell(new Phrase("鎻忚堪:", titleFont));
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setBorder(Rectangle.NO_BORDER);
+            table3.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase(""));
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setBorder(Rectangle.NO_BORDER);
+            mergedCell.setColspan(9);
+            table3.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase("", titleFont));
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setBorder(Rectangle.NO_BORDER);
+            table3.addCell(mergedCell);
+
+            Phrase phrase = new Phrase(ms, titleFont);
+            PdfPCell textCell = new PdfPCell(phrase);
+            textCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            textCell.setBorder(Rectangle.NO_BORDER);
+            textCell.setColspan(10);
+            table3.addCell(textCell);
+
+            mergedCell = new PdfPCell(new Phrase("鎻愮ず:", titleFont));
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setBorder(Rectangle.NO_BORDER);
+            table3.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase(""));
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setBorder(Rectangle.NO_BORDER);
+            mergedCell.setColspan(9);
+            table3.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase("", titleFont));
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setBorder(Rectangle.NO_BORDER);
+            table3.addCell(mergedCell);
+
+            mergedCell = new PdfPCell(new Phrase(ts, titleFont));
+            mergedCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+            mergedCell.setBorder(Rectangle.NO_BORDER);
+            mergedCell.setColspan(9);
+            table3.addCell(mergedCell);
+
+            // 娣诲姞琛ㄦ牸鍒版枃妗�
+            document.add(table1);
+            document.add(table2);
+            // 鍦ㄦ坊鍔犺〃鏍煎墠锛屾鏌ュ綋鍓嶉〉鏄惁鏈夎冻澶熺┖闂达紝濡傛灉娌℃湁鍒欐坊鍔犳柊椤点��
+            if (writer.getVerticalPosition(true) - table3.getTotalHeight() < document.bottomMargin()) {
+                document.newPage();
+            }
+            document.add(table3);
+            document.close();
+            writer.close();
+            return baos;
+        } catch (DocumentException | IOException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    private static PdfPCell createImageCell(String path) throws IOException, BadElementException {
+        Image image = Image.getInstance(path);
+        image.scaleToFit(150, 150);
+        PdfPCell cell = new PdfPCell(image);
+        cell.setBorder(Rectangle.NO_BORDER);
+        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+//        cell.setPadding(5);
+        return cell;
+    }
+
+    static class Footer extends PdfPageEventHelper {
+        private String footerText;
+        private Font footerFont = PdfUtils.setFont(10);
+
+        public Footer(String footerText) {
+            this.footerText = footerText;
+        }
+
+        @Override
+        public void onEndPage(PdfWriter writer, Document document) {
+            PdfPTable footer = new PdfPTable(1);
+            footer.setTotalWidth(523);
+            footer.setWidthPercentage(100);
+            footer.getDefaultCell().setBorder(Rectangle.NO_BORDER);
+            footer.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
+            footer.addCell(new Phrase(footerText, footerFont));
+
+            footer.writeSelectedRows(0, -1, 36, 36, writer.getDirectContent());
+        }
+    }
+}

--
Gitblit v1.8.0