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.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.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.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 jodd.util.StringUtil;
|
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.nio.file.Files;
|
import java.nio.file.Path;
|
import java.nio.file.Paths;
|
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.common.utils.pdfutils.PdfUtils.createTable;
|
|
/**
|
* 检查 检验报告pdf生成
|
*/
|
@Slf4j
|
@Component
|
public class HisPDFUtil {
|
@Autowired
|
private HisApiGetMethodService apiGetMethodService;
|
@Autowired
|
private ITjOrderService tjOrderService;
|
@Autowired
|
private ITjCustomerService tjCustomerService;
|
@Autowired
|
private ITjReportService tjReportService;
|
@Autowired
|
private ITjProjectService projectService;
|
@Autowired
|
private ITjOrderRemarkService tjOrderRemarkService;
|
@Autowired
|
private ITjOrderDetailService tjOrderDetailService;
|
@Autowired
|
private ITjStandardService tjStandardService;
|
@Autowired
|
private ISysUserService userService;
|
@Autowired
|
private IDictCompService dictCompService;
|
@Autowired
|
private ITjBigPositiveService tjBigPositiveService;
|
@Autowired
|
private LtkjHybgdService ltkjHybgdService;
|
@Autowired
|
private LtkjHysqdService ltkjHysqdService;
|
@Autowired
|
private LtkjGetexamreportinfoService ltkjGetexamreportinfoService;
|
@Value("${path.filePath}")
|
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;
|
@Resource
|
private TjXdtgmdjgService xdtgmdjgService;
|
@Autowired
|
private TjReportSpecialProjectService tjReportSpecialProjectService;
|
|
private Integer pdfPage = 0;
|
|
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;
|
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 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);
|
// 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) {
|
log.error(String.valueOf(e));
|
return AjaxResult.error();
|
}
|
document1.setMargins(70, 70, 40, 40);
|
document1.open();
|
|
// 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 {
|
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("本报告仅对本次检查负责,临床医生依据病情如有疑问,请及时复查或进一步检查", "");
|
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 = " 本报告仅对本次检查负责,临床医生依据病情如有疑问,请及时复查或进一步检查";
|
|
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本报告仅对本次检查负责,临床医生依据病情如有疑问,请及时复查或进一步检查", "");
|
// result = "\n " + result.replaceAll("\n", "\n ");
|
int index1 = 1;
|
String[] split = result.split("\n");
|
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("本报告仅对本次检查负责,临床医生依据病情如有疑问,请及时复查或进一步检查");
|
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 = " 本报告仅对本次检查负责,临床医生依据病情如有疑问,请及时复查或进一步检查";
|
|
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("非化验项目填充表格异常");
|
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<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();
|
// 将修改后的PDF内容写入
|
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<>();
|
|
|
|
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);
|
boolean isBr = false;
|
if (null != ycxms && !ycxms.isEmpty()) {
|
|
paragraph = PdfUtils.setParagraph(defaultTitleFont, "检查综述:");
|
paragraph.setSpacingBefore(3f);
|
paragraph.setSpacingAfter(2f);
|
document2.add(paragraph);
|
isBr = true;
|
|
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("本报告仅对本次检查负责,临床医生依据病情如有疑问,请及时复查或进一步检查", "");
|
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++;
|
}
|
}
|
}
|
|
if(isBr) {
|
paragraph = PdfUtils.setParagraph(defaultFont, "");
|
paragraph.setLeading(0f);
|
paragraph.setSpacingBefore(10f);
|
paragraph.setSpacingAfter(10f);
|
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()) {
|
|
paragraph = PdfUtils.setParagraph(defaultTitleFont, "医生建议:");
|
paragraph.setSpacingBefore(3f);
|
paragraph.setSpacingAfter(2f);
|
document2.add(paragraph);
|
|
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 (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();
|
}
|
|
|
LambdaQueryWrapper<TjXdtgmdjg> wqq=new LambdaQueryWrapper<>();
|
wqq.eq(TjXdtgmdjg::getTjh,tjOrder.getTjNumber());
|
wqq.isNotNull(TjXdtgmdjg::getUrl);
|
List<TjXdtgmdjg> xdtgmdjgList = xdtgmdjgService.list(wqq);
|
|
int index=1;
|
for (TjXdtgmdjg xdtgmdjg : xdtgmdjgList) {
|
document.newPage();
|
cell = new PdfPCell();
|
PdfPTable tablefj = new PdfPTable(new float[]{100f});
|
tablefj.setTotalWidth(PageSize.A4.getWidth() - 100);
|
tablefj.setLockedWidth(true);
|
tablefj.setHorizontalAlignment(Element.ALIGN_LEFT);
|
tablefj.getDefaultCell().setBorder(0);
|
tablefj.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
|
|
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("附件"+index+": "+ xdtgmdjg.getProName(), zongJianFont));
|
Path path = Paths.get(xdtgmdjg.getUrl());
|
byte[] bytesfj = null;
|
try {
|
bytesfj = Files.readAllBytes(path);
|
} catch (IOException e) {
|
throw new RuntimeException(e);
|
}
|
Image image = Image.getInstance(bytesfj);
|
image.scaleToFit(500, 2500);
|
tablefj.addCell(cell);
|
cell = new PdfPCell();
|
cell.addElement(image);
|
tablefj.addCell(cell);
|
document.add(tablefj);
|
index++;
|
}
|
|
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();
|
// 将修改后的PDF内容写入
|
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) throws Exception {
|
LambdaQueryWrapper<LtkjGetexamreportinfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
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") ? "女" : "男";
|
String nl = getexamreportinfo.getHznl();
|
if (StrUtil.isNotBlank(nl) && nl.contains(".")) {
|
String[] split = nl.split("\\.");
|
nl = split[0];
|
}
|
String jcks = getexamreportinfo.getJcksmc();
|
String sqks = getexamreportinfo.getSqksmc();
|
String sjks = getexamreportinfo.getZdjgmc();
|
String jcsb = getexamreportinfo.getSbbm();
|
String jch = getexamreportinfo.getJch();
|
String jcxm = getexamreportinfo.getJcxmmc();
|
String ms = getexamreportinfo.getYxbx();
|
String ts = getexamreportinfo.getYxzd();
|
String bgysqm = getexamreportinfo.getBgysqm();
|
String shysqm = getexamreportinfo.getShysqm();
|
String sqrxm = getexamreportinfo.getSqrxm();
|
String zyh = "";
|
String ch = "";
|
String sqrbh = getexamreportinfo.getSqrbh();
|
String shysbh = getexamreportinfo.getShysbh();
|
String bgysbh = getexamreportinfo.getBgysbh();
|
String jcysqm = getexamreportinfo.getJcysqm();
|
String jcysbh = getexamreportinfo.getJcysbh();
|
StringBuilder builder;
|
String footer;
|
// 检查返回的医师编码不属于his医师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;
|
}
|
|
/**
|
* 医师信息行
|
*
|
* @param phrase
|
* @param doctorFonts
|
* @param sqrxm
|
* @param sqrbh
|
* @throws BadElementException
|
*/
|
private void makeYiShiInfoLine(Phrase phrase, Font doctorFonts, String sqrxm, String sqrbh, String title) throws BadElementException {
|
String qmImg = dictUserInfoMapper.selectQmImgInnerJoinUserByHisDictCode(sqrbh);
|
// String qmImg = dictUserInfoMapper.selectQmImgInnerJoinUserByUserId(sqrbh);
|
if (null != qmImg && StrUtil.isNotBlank(qmImg)) {
|
byte[] decode = Base64.getDecoder().decode(qmImg);
|
Image image = null;
|
try {
|
image = Image.getInstance(decode);
|
image.scaleToFit(60, 25);
|
phrase.add(new Chunk(title, doctorFonts));
|
phrase.add(new Chunk(image, 0, -10, true));
|
} catch (IOException e) {
|
phrase.add(new Chunk(title + sqrxm, doctorFonts));
|
}
|
} else {
|
phrase.add(new Chunk(title + sqrxm, doctorFonts));
|
}
|
}
|
|
/**
|
* 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 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");
|
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);
|
}
|
}
|
//分割线
|
// 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, DictHosp dictHosp, String colorStr, boolean isPacs) throws DocumentException {
|
List<TjReportSpecialProject> tjReportSpecialProjects = tjReportSpecialProjectService.list();
|
for (Map.Entry<TjOrderRemark, List<TjPdfVO>> entry : printReport.entrySet()) {
|
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 && "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 titleName = null;
|
if ("1".equals(one11.getResultType())) {
|
titleName = one11.getProName();
|
// 设置标题字体样式
|
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);
|
}
|
|
|
// 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) {
|
Long pid = Long.valueOf(value.get(0).getPid());
|
Optional<TjReportSpecialProject> match = tjReportSpecialProjects.stream()
|
.filter(item -> item.getProId().equals(pid))
|
.findFirst();
|
if (match.isPresent()) {
|
reportSpecialProject(document1, entry, paragraph, value,match.get());
|
} 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;
|
Paragraph ppp;
|
if (StrUtil.isNotBlank(value.get(0).getSj())) {
|
pp = PdfUtils.setParagraph(remarkFonts, "检查所见:");
|
document1.add(pp);
|
ppp = new Paragraph(value.get(0).getSj(), remarkFonts);
|
paragraph.setAlignment(Element.ALIGN_LEFT);
|
paragraph.setLeading(5f);
|
document1.add(ppp);
|
}
|
pp = PdfUtils.setParagraph(remarkFonts, "检查提示:"+value.get(0).getTs());
|
document1.add(pp);
|
// ppp = new Paragraph(value.get(0).getTs(), remarkFonts);
|
// paragraph.setAlignment(Element.ALIGN_LEFT);
|
// paragraph.setLeading(5f);
|
// document1.add(ppp);
|
} else {
|
Long pid = Long.valueOf(value.get(0).getPid());
|
Optional<TjReportSpecialProject> match = tjReportSpecialProjects.stream()
|
.filter(item -> item.getProId().equals(pid))
|
.findFirst();
|
if (match.isPresent()) {
|
reportSpecialProject(document1, entry, paragraph, value,match.get());
|
} 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);
|
}
|
//判断备注是否为空 空不能显示null
|
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);
|
}
|
}
|
//判断主检医师是否为空 空不能显示null
|
zhuJianYiShi(document1, entry, orderRemark.getCreateTime(), dictHosp);
|
//分割线
|
// if (!dictHosp.getHospName().equals("澄合矿务局中心医院")) {
|
if (false) {
|
LineSeparator objectName = new LineSeparator();
|
document1.add(objectName);
|
}
|
} else {
|
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) {
|
Long pid = Long.valueOf(value.get(0).getPid());
|
Optional<TjReportSpecialProject> match = tjReportSpecialProjects.stream()
|
.filter(item -> item.getProId().equals(pid))
|
.findFirst();
|
if (match.isPresent()) {
|
reportSpecialProject(document1, entry, paragraph, value,match.get());
|
} 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;
|
Paragraph ppp;
|
// String key = sysConfigService.selectConfigByKey("makepdfuseorderdetailproresult");
|
// if (StrUtil.isNotBlank(key) && !key.equals("Y")){
|
// if (StrUtil.isNotBlank(value.get(0).getSj())) {
|
// pp = PdfUtils.setParagraph(remarkFonts, "检查所见:");
|
// document1.add(pp);
|
// ppp = new Paragraph(value.get(0).getSj(), remarkFonts);
|
// paragraph.setAlignment(Element.ALIGN_LEFT);
|
// paragraph.setLeading(5f);
|
// document1.add(ppp);
|
// }
|
// }else {
|
// if (StrUtil.isNotBlank(value.get(0).getSj()) || StrUtil.isNotBlank(value.get(0).getProResult())) {
|
// pp = PdfUtils.setParagraph(remarkFonts, "检查所见:");
|
// document1.add(pp);
|
// 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);
|
// }
|
// }
|
|
if (StrUtil.isNotBlank(value.get(0).getSj()) || StrUtil.isNotBlank(value.get(0).getProResult())) {
|
pp = PdfUtils.setParagraph(remarkFonts, "检查所见:");
|
document1.add(pp);
|
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);
|
// 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 {
|
Long pid = Long.valueOf(value.get(0).getPid());
|
Optional<TjReportSpecialProject> match = tjReportSpecialProjects.stream()
|
.filter(item -> item.getProId().equals(pid))
|
.findFirst();
|
if (match.isPresent()) {
|
reportSpecialProject(document1, entry, paragraph, value,match.get());
|
} 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);
|
}
|
|
|
//判断备注是否为空 空不能显示null
|
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);
|
}
|
}
|
//判断主检医师是否为空 空不能显示null
|
zhuJianYiShi(document1, entry, orderRemark.getCreateTime(), dictHosp);
|
// if (!dictHosp.getHospName().equals("澄合矿务局中心医院")) {
|
if (!true) {
|
//分割线
|
LineSeparator objectName = new LineSeparator();
|
document1.add(objectName);
|
}
|
}
|
}
|
}
|
}
|
|
/**
|
* 目前写死 只有碳13、14 模板都是一样的只不过参考值不同
|
* 凌云:{"dy":"4.0","xy":"4.0","title":"阳性参考值:","dystr":"DOB值: ≥ ${dy} HP-阳性","xystr":" < ${xy} 正常","en":"DOB"}
|
* 泾川县医院:{"dy":"100","xy":"100","title":"参考值(DPM):","dystr":"DPM值: ≥ ${dy} 阳性","xystr":" < ${xy} 阴性","en":"DPM"}
|
* @param document1
|
* @param entry
|
* @param paragraph
|
* @param value
|
* @param tjReportSpecialProject
|
* @throws DocumentException
|
*/
|
private static void reportSpecialProject(Document document1, Map.Entry<TjOrderRemark, List<TjPdfVO>> entry, Paragraph paragraph, List<TjPdfVO> value,TjReportSpecialProject tjReportSpecialProject) throws DocumentException {
|
JSONObject entries = JSONUtil.parseObj(tjReportSpecialProject.getParams());
|
Font remarkFonts = PdfUtils.setFont(DEFAULT_FONT_SIZE);
|
Paragraph ppp = new Paragraph(entries.getStr("title"), remarkFonts);
|
paragraph.setAlignment(Element.ALIGN_LEFT);
|
paragraph.setLeading(5f);
|
document1.add(ppp);
|
|
ppp = new Paragraph(entries.getStr("dystr").replace("${dy}",entries.getStr("dy")), remarkFonts);
|
paragraph.setAlignment(Element.ALIGN_LEFT);
|
paragraph.setLeading(5f);
|
document1.add(ppp);
|
|
ppp = new Paragraph(entries.getStr("xystr").replace("${xy}",entries.getStr("xy")), remarkFonts);
|
paragraph.setAlignment(Element.ALIGN_LEFT);
|
paragraph.setLeading(5f);
|
document1.add(ppp);
|
|
|
ppp = new Paragraph("检测结果: "+entries.getStr("en")+"=" + 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().replaceAll("null",""), remarkFonts);
|
paragraph.setAlignment(Element.ALIGN_LEFT);
|
paragraph.setLeading(5f);
|
document1.add(ppp);
|
}
|
}
|
|
/**
|
* 主见医师行显示设置
|
*
|
* @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());
|
List<LtkjHysqd> list = ltkjHysqdService.list(ltkjHysqdLambdaQueryWrapper);
|
HashMap<String, Object> data = new HashMap<>();
|
for (LtkjHysqd hysqd : list) {
|
// LambdaQueryWrapper<LtkjHybgd> ltkjHybgdLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
// ltkjHybgdLambdaQueryWrapper.eq(LtkjHybgd::getTmh, hysqd.getTmh());
|
// List<LtkjHybgd> hybgds = ltkjHybgdService.list(ltkjHybgdLambdaQueryWrapper);
|
List<LtkjHybgd> hybgds = ltkjHybgdService.getReportJianYanBaoGaoDanList(hysqd.getTmh());
|
if(null !=hybgds && !hybgds.isEmpty()){
|
|
hybgds = new ArrayList<>(hybgds.stream()
|
.collect(Collectors.toMap(LtkjHybgd::getJcxm, p -> p, (existing, replacement) -> existing))
|
.values());
|
|
// 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() != 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) {
|
}
|
}
|
// 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());
|
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;
|
}
|
|
/**
|
* 生成PDF模版以及用户信息部分
|
*
|
* @param tjOrder
|
* @param 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<>();
|
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);
|
}
|
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
PdfReader reader = null;
|
PdfStamper pdfStamper = null;
|
try {
|
reader = new PdfReader(new ByteArrayInputStream(Base64.getDecoder().decode(template)));
|
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();
|
// 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");
|
}
|
}
|
//拼接异常项目
|
str.append("【异常情况项目】\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 {
|
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 给pdf表单表格赋值
|
for (String key : data.keySet()) {
|
acroFields.setField(key, data.get(key).toString());
|
}
|
//设置为无法编辑
|
pdfStamper.setFormFlattening(true);
|
pdfStamper.close();
|
reader.close();
|
// 将修改后的PDF内容写入
|
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();
|
HashMap<String, Object> map = new HashMap<>();
|
map.put("document", document);
|
map.put("copy", copy);
|
map.put("stream", finalOutPut);
|
map.put("form", pdfStamper);
|
return map;
|
} catch (IOException | DocumentException e) {
|
e.printStackTrace();
|
return null;
|
}
|
}
|
|
public static String padRight(String str, int length) {
|
StringBuilder sb = new StringBuilder(str);
|
while (sb.length() < length) {
|
sb.append(" ");
|
}
|
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");
|
// 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(String.valueOf(tjOrderDetail.getProId()));
|
if (null != tjProject && tjProject.getNeedReport().equals("Y")) {
|
tjOrderDetail.setProject(tjProject);
|
|
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("/");
|
}
|
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);
|
}
|
}
|
}
|
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()))) {
|
|
TjProject tjProjectq = projectService.getById(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, one.getCardId());
|
// wrapper.like(LtkjExamJcbgd::getXmdm, String.valueOf(tjOrderDetail.getProject().getProParentId()))
|
// .or().eq(LtkjExamJcbgd::getXmdm, String.valueOf(tjProjectq.getHisXmbm()));
|
// wrapper.orderByDesc(LtkjExamJcbgd::getZdsj);
|
LambdaQueryWrapper<LtkjExamJcbgd> wrapper = new LambdaQueryWrapper<>();
|
wrapper.eq(LtkjExamJcbgd::getTjh, one.getCardId())
|
.and(w -> w.like(LtkjExamJcbgd::getXmdm, String.valueOf(tjOrderDetail.getProject().getProParentId()))
|
.or()
|
.eq(LtkjExamJcbgd::getXmdm, String.valueOf(tjProjectq.getHisXmbm()))).orderByDesc(LtkjExamJcbgd::getZdsj);
|
|
List<LtkjExamJcbgd> list = jcbgdService.list(wrapper);
|
if (null != list && !list.isEmpty()) {
|
LtkjExamJcbgd jcbgd = list.get(0);
|
if (jcbgd != null) {
|
String yxbx = jcbgd.getYxbx();
|
String bgNr = jcbgd.getBgNr();
|
// 正则表达式:匹配数字后跟 '.' 或 '、'
|
String regex = "\\d+[\\.,、]";
|
// 使用正则替换,匹配的数字后添加换行符
|
if(StringUtil.isNotBlank(yxbx)) yxbx = yxbx.replaceAll(regex, "\n$0");
|
if(StringUtil.isBlank(bgNr)) bgNr = "";
|
if(StringUtil.isBlank(yxbx)) yxbx = "";
|
tjPdfVO.setTs(yxbx);
|
tjPdfVO.setSj(bgNr);
|
tjPdfVO.setShys(jcbgd.getShysxm());
|
tjPdfVO.setProName(jcbgd.getXmmc());
|
ids += "|" + jcbgd.getXmdm();
|
}
|
}
|
tjPdfVOS.add(tjPdfVO);
|
}
|
}
|
}
|
printReport.put(entry.getKey(), tjPdfVOS);
|
}
|
}
|
|
/**
|
* 设置用户信息
|
*
|
* @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);
|
}
|
|
/**
|
* @param document
|
* @param titleName
|
* @param titles
|
* @param titlesWidth
|
* @param list
|
* @throws DocumentException
|
* @deprecated 数据从数据库查有具体的实体类
|
*/
|
@Deprecated
|
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); // 锁定表格宽度
|
table.setHorizontalAlignment(Element.ALIGN_LEFT);
|
table.getDefaultCell().setBorder(0);
|
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
|
for (String title : titles) {
|
PdfPCell cell = new PdfPCell(new Paragraph(title, headFont));
|
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
|
cell.setHorizontalAlignment(Element.ALIGN_LEFT);
|
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();
|
nameCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
|
nameCell.setHorizontalAlignment(Element.ALIGN_LEFT);
|
nameCell.setPhrase(elements);
|
nameCell.setBorder(Rectangle.NO_BORDER); // 移除单元格边框
|
table.addCell(nameCell);
|
}
|
}
|
// 将表格添加到文档
|
document.add(table);
|
}
|
|
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);
|
// 设置段落上空白
|
paragraph.setSpacingBefore(10f);
|
// 设置段落下空白
|
paragraph.setSpacingAfter(10f);
|
// 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(DEFAULT_FONT_SIZE);
|
Font textFont = PdfUtils.setFont(DEFAULT_FONT_SIZE);
|
PdfPTable table = new PdfPTable(titlesWidth);
|
table.setTotalWidth(PageSize.A4.getWidth() - 10); // 设置表格总宽度
|
//table.setLockedWidth(true); // 锁定表格宽度
|
table.setHorizontalAlignment(Element.ALIGN_LEFT);
|
table.getDefaultCell().setBorder(0);
|
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
|
for (String title : titles) {
|
PdfPCell cell = new PdfPCell(new Paragraph(title, headFont));
|
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.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);
|
}
|
|
/**
|
* 创建检查pdf
|
*
|
* @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, Paragraph elements) {
|
try {
|
Document document = new Document(PageSize.A4);
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
PdfWriter writer = PdfWriter.getInstance(document, baos);
|
if (footer != null) {
|
writer.setPageEvent(new Footer(footer));
|
} else {
|
writer.setPageEvent(new Footer(elements));
|
}
|
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));
|
PdfPCell mergedCell = new PdfPCell(new Phrase(HOSP_NAME, 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);
|
private Paragraph paragraph;
|
|
public Footer(String footerText) {
|
this.footerText = footerText;
|
}
|
|
public Footer(Paragraph paragraph) {
|
this.paragraph = paragraph;
|
}
|
|
@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);
|
if (footerText != null)
|
footer.addCell(new Phrase(footerText, footerFont));
|
if (paragraph != null)
|
footer.addCell(paragraph);
|
footer.writeSelectedRows(0, -1, 36, 50, 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());
|
}
|
}
|
}
|