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