package com.gkhy.safePlatform.specialWork.util;
|
|
import com.itextpdf.text.Document;
|
import com.itextpdf.text.DocumentException;
|
import com.itextpdf.text.pdf.PdfWriter;
|
import com.itextpdf.tool.xml.XMLWorkerFontProvider;
|
import com.itextpdf.tool.xml.XMLWorkerHelper;
|
import jodd.util.StringUtil;
|
import org.springframework.core.io.ClassPathResource;
|
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.*;
|
import java.net.URLEncoder;
|
import java.nio.charset.Charset;
|
import java.nio.charset.StandardCharsets;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
public class WorkExportPdfUtil {
|
private String tempLocalFilePath;
|
private String htmlStr;
|
//定义字体
|
private String FONT = "/fonts/simsun.ttf";
|
//初始化
|
public void init(){
|
String fontPath = System.getProperty("user.dir")+ FONT;
|
|
//判断字体是否存在
|
File file = new File(fontPath);
|
if (!file.exists()) {
|
//如果文件夹不存在就创建一个文件夹
|
File folder = new File(System.getProperty("user.dir")+"/fonts");
|
if(!folder.exists() && !folder.isDirectory()){
|
folder.mkdir();
|
}
|
try {
|
OutputStream outputStream = new FileOutputStream(fontPath);
|
ClassPathResource classPathResource = new ClassPathResource(FONT);
|
InputStream inputStream = classPathResource.getInputStream();
|
int b = 0;
|
byte[] buffer = new byte[512];
|
while (b != -1) {
|
b = inputStream.read(buffer);
|
if (b != -1) {
|
outputStream.write(buffer, 0, b);// 4.写到输出流(out)中
|
}
|
|
}
|
inputStream.close();
|
outputStream.flush();
|
outputStream.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
//构造方法
|
public WorkExportPdfUtil(){
|
|
}
|
//设置模板路径
|
public void setTempLocalPath(String filePath){
|
this.tempLocalFilePath = filePath;
|
}
|
|
//生成完整html
|
public void generateComPleteHtml(Map<String, Object> dataMap) throws IOException {
|
InputStream inputStream = null;
|
try{
|
//1.获取html
|
ClassPathResource classPathResource = new ClassPathResource(this.tempLocalFilePath);
|
inputStream = classPathResource.getInputStream();
|
StringBuilder stringBuilder = new StringBuilder();
|
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"utf8"));
|
String line = null;
|
while((line = bufferedReader.readLine()) != null) {
|
// 文字换行显示 stringBuilder.append(System.getProperty("line.separator"));
|
stringBuilder.append(line);
|
}
|
//2. 替换html中的关键字
|
htmlStr = stringBuilder.toString();
|
htmlStr = htmlStr.replaceAll("#conpanyName#", "新疆国泰新华化工有限责任公司");
|
|
|
//2.获取数据
|
//Map<String, Object> dataMap = data();
|
//基础数据
|
Map<String,String> baseDataMap = (Map)dataMap.get("baseData");
|
if(baseDataMap != null){
|
//动火
|
if(baseDataMap.containsKey("applydepName")){
|
htmlStr = htmlStr.replaceAll("#applydepName#", baseDataMap.get("applydepName") != null ? baseDataMap.get("applydepName") : "");
|
}
|
if(baseDataMap.containsKey("applyUname")){
|
htmlStr = htmlStr.replaceAll("#applyUname#", baseDataMap.get("applyUname") != null ? baseDataMap.get("applyUname") : "");
|
}
|
if(baseDataMap.containsKey("workCode")){
|
htmlStr = htmlStr.replaceAll("#workCode#", baseDataMap.get("workCode") != null ? baseDataMap.get("workCode") : "");
|
}
|
if(baseDataMap.containsKey("workLevel")){
|
htmlStr = htmlStr.replaceAll("#workLevel#", baseDataMap.get("workLevel") != null ? baseDataMap.get("workLevel") : "");
|
}
|
if(baseDataMap.containsKey("workMethod")){
|
htmlStr = htmlStr.replaceAll("#workMethod#", baseDataMap.get("workMethod") != null ? baseDataMap.get("workMethod") : "");
|
}
|
if(baseDataMap.containsKey("addressAndContent")){
|
htmlStr = htmlStr.replaceAll("#addressAndContent#", baseDataMap.get("addressAndContent") != null ? baseDataMap.get("addressAndContent") : "");
|
}
|
if(baseDataMap.containsKey("workTime")){
|
htmlStr = htmlStr.replaceAll("#workTime#", baseDataMap.get("workTime") != null ? baseDataMap.get("workTime") : "");
|
}
|
if(baseDataMap.containsKey("operatorNames")){
|
htmlStr = htmlStr.replaceAll("#operatorNames#", baseDataMap.get("operatorNames") != null ? baseDataMap.get("operatorNames") : "");
|
}
|
if(baseDataMap.containsKey("otherSpeicialWork")){
|
htmlStr = htmlStr.replaceAll("#otherSpeicialWork#", baseDataMap.get("otherSpeicialWork") != null ? baseDataMap.get("otherSpeicialWork") : "");
|
}
|
if(baseDataMap.containsKey("harm")){
|
htmlStr = htmlStr.replaceAll("#harm#", baseDataMap.get("harm") != null ? baseDataMap.get("harm") : "");
|
}
|
//吊装
|
|
if(baseDataMap.containsKey("hoistingToolName")){
|
htmlStr = htmlStr.replaceAll("#hoistingToolName#", baseDataMap.get("hoistingToolName") != null ? baseDataMap.get("hoistingToolName") : "");
|
}
|
if(baseDataMap.containsKey("workLocation")){
|
htmlStr = htmlStr.replaceAll("#workLocation#", baseDataMap.get("workLocation") != null ? baseDataMap.get("workLocation") : "");
|
}
|
if(baseDataMap.containsKey("workContent")){
|
htmlStr = htmlStr.replaceAll("#workContent#", baseDataMap.get("workContent") != null ? baseDataMap.get("workContent") : "");
|
}
|
if(baseDataMap.containsKey("weightMass")){
|
htmlStr = htmlStr.replaceAll("#weightMass#", baseDataMap.get("weightMass") != null ? baseDataMap.get("weightMass") : "");
|
}
|
//受限空间
|
if(baseDataMap.containsKey("workDepName")){
|
htmlStr = htmlStr.replaceAll("#workDepName#", baseDataMap.get("workDepName") != null ? baseDataMap.get("workDepName") : "");
|
}
|
if(baseDataMap.containsKey("csName")){
|
htmlStr = htmlStr.replaceAll("#csName#", baseDataMap.get("csName") != null ? baseDataMap.get("csName") : "");
|
}
|
if(baseDataMap.containsKey("csOriginalName")){
|
htmlStr = htmlStr.replaceAll("#csOriginalName#", baseDataMap.get("csOriginalName") != null ? baseDataMap.get("csOriginalName") : "");
|
}
|
//断路
|
if(baseDataMap.containsKey("involvedDeptNames")){
|
htmlStr = htmlStr.replaceAll("#involvedDeptNames#", baseDataMap.get("involvedDeptNames") != null ? baseDataMap.get("involvedDeptNames") : "");
|
}
|
if(baseDataMap.containsKey("bcReason")){
|
htmlStr = htmlStr.replaceAll("#bcReason#", baseDataMap.get("bcReason") != null ? baseDataMap.get("bcReason") : "");
|
}
|
if(baseDataMap.containsKey("bcExplain")){
|
htmlStr = htmlStr.replaceAll("#bcExplain#", baseDataMap.get("bcExplain") != null ? baseDataMap.get("bcExplain") : "");
|
}
|
//高处作业
|
if(baseDataMap.containsKey("workHight")){
|
htmlStr = htmlStr.replaceAll("#workHight#", baseDataMap.get("workHight") != null ? baseDataMap.get("workHight") : "");
|
}
|
if(baseDataMap.containsKey("workType")){
|
htmlStr = htmlStr.replaceAll("#workType#", baseDataMap.get("workType") != null ? baseDataMap.get("workType") : "");
|
}
|
//临时用电
|
if(baseDataMap.containsKey("powerAccessPoint")){
|
htmlStr = htmlStr.replaceAll("#powerAccessPoint#", baseDataMap.get("powerAccessPoint") != null ? baseDataMap.get("powerAccessPoint") : "");
|
}
|
if(baseDataMap.containsKey("workVoltage")){
|
htmlStr = htmlStr.replaceAll("#workVoltage#", baseDataMap.get("workVoltage") != null ? baseDataMap.get("workVoltage") : "");
|
}
|
if(baseDataMap.containsKey("equipmentAndPower")){
|
htmlStr = htmlStr.replaceAll("#equipmentAndPower#", baseDataMap.get("equipmentAndPower") != null ? baseDataMap.get("equipmentAndPower") : "");
|
}
|
//盲板抽堵
|
if(baseDataMap.containsKey("mainMedia")){
|
htmlStr = htmlStr.replaceAll("#mainMedia#", baseDataMap.get("mainMedia") != null ? baseDataMap.get("mainMedia") : "");
|
}
|
if(baseDataMap.containsKey("temperature")){
|
htmlStr = htmlStr.replaceAll("#temperature#", baseDataMap.get("temperature") != null ? baseDataMap.get("temperature") : "");
|
}
|
if(baseDataMap.containsKey("pressure")){
|
htmlStr = htmlStr.replaceAll("#pressure#", baseDataMap.get("pressure") != null ? baseDataMap.get("pressure") : "");
|
}
|
if(baseDataMap.containsKey("bpMq")){
|
htmlStr = htmlStr.replaceAll("#bpMq#", baseDataMap.get("bpMq") != null ? baseDataMap.get("bpMq") : "");
|
}
|
if(baseDataMap.containsKey("bpSp")){
|
htmlStr = htmlStr.replaceAll("#bpSp#", baseDataMap.get("bpSp") != null ? baseDataMap.get("bpSp") : "");
|
}
|
if(baseDataMap.containsKey("bpCode")){
|
htmlStr = htmlStr.replaceAll("#bpCode#", baseDataMap.get("bpCode") != null ? baseDataMap.get("bpCode") : "");
|
}
|
if(baseDataMap.containsKey("workScm")){
|
htmlStr = htmlStr.replaceAll("#workScm#", baseDataMap.get("workScm") != null ? baseDataMap.get("workScm") : "");
|
}
|
}
|
//分析数据
|
String anasiList = "";
|
if(dataMap.containsKey("analysis") && null != dataMap.get("analysis")){
|
List<Map<String,String>> anList = (List<Map<String, String>>) dataMap.get("analysis");
|
for (Map<String,String> map : anList){
|
|
if(map.containsKey("anaStand")){
|
anasiList += "\n"+
|
"<tr> \t\t\t\t\t\n" +
|
" <td colspan='4' class='td1'>"+ (map.containsKey("anaAddress") ? map.get("anaAddress") : "") +"</td>\n" +
|
" <td colspan='4' class='td1'>"+ (map.containsKey("anaItemName") ? map.get("anaItemName") :"")+"</td>\n" +
|
" <td colspan='3' class='td5'>"+ (map.containsKey("anaStand") ? map.get("anaStand") : "") +"</td>\n" +
|
" <td colspan='3' class='td5'>"+ (map.containsKey("anaData") ? map.get("anaData") : "") +"</td>\n" +
|
" <td colspan='3' class='td5'>"+ (map.containsKey("anaResult") ? map.get("anaResult") : "") +"</td>\n" +
|
" <td colspan='3' class='td5'>"+ (map.containsKey("anaUname") ? map.get("anaUname") : "") +"</td>\n" +
|
" <td colspan='4' class='td1 tdRit'>"+ (map.containsKey("anaTime") ? map.get("anaTime") : "") +"</td>\n" +
|
" </tr>";
|
}else {//区分是否含标准
|
anasiList += "\n"+
|
"<tr> \t\t\t\t\t\n" +
|
" <td colspan='4' class='td1'>"+ (map.containsKey("anaAddress") ? map.get("anaAddress") : "") +"</td>\n" +
|
" <td colspan='5' class='td4'>"+ (map.containsKey("anaItemName") ? map.get("anaItemName") :"")+"</td>\n" +
|
" <td colspan='4' class='td1'>"+ (map.containsKey("anaData") ? map.get("anaData") : "") +"</td>\n" +
|
" <td colspan='3' class='td5'>"+ (map.containsKey("anaResult") ? map.get("anaResult") : "") +"</td>\n" +
|
" <td colspan='3' class='td5'>"+ (map.containsKey("anaUname") ? map.get("anaUname") : "") +"</td>\n" +
|
" <td colspan='5' class='td4 tdRit'>"+ (map.containsKey("anaTime") ? map.get("anaTime") : "") +"</td>\n" +
|
" </tr>";
|
}
|
|
|
}
|
}
|
|
//安全措施
|
String measureList = "";
|
if(dataMap.containsKey("measure") && null != dataMap.get("measure")){
|
List<Map<String,String>> meList = (List<Map<String, String>>) dataMap.get("measure");
|
for(Map<String,String> map : meList){
|
measureList += "\n"+
|
" <tr> \t\t\t\n" +
|
" <td colspan='2'>"+ (map.containsKey("index") ? map.get("index") : "") +"</td>\n" +
|
" <td colspan='16' class='td6 pos'>"+ (map.containsKey("measure") ? map.get("measure") : "") +"</td>\n" +
|
" <td colspan='3' class='td1'>"+ (map.containsKey("mResult") ? map.get("mResult") : "") +"</td>\n" +
|
" <td colspan='3' class='td5 tdRit'>"+ (map.containsKey("mUname") ? map.get("mUname") : "") +"</td>\n" +
|
" </tr>";
|
}
|
}
|
//审批层数据
|
String approvalList = "";
|
if(dataMap.containsKey("approval") && null != dataMap.get("approval")){
|
List<Map<String,String>> apList = (List<Map<String, String>>) dataMap.get("approval");
|
for(Map<String,String> map : apList){
|
approvalList += "\n"+
|
"<tr>\n" +
|
" <td colspan='4' class='td1'>"+ (map.containsKey("apprStepName") ? map.get("apprStepName") : "") +"</td>\n" +
|
" <td colspan='7' class='pos'>"+ (map.containsKey("apprOpinion") ? map.get("apprOpinion") : "") +"</td>\n" +
|
" <td colspan='3' class='td5'>"+ (map.containsKey("apprUname") ? map.get("apprUname") : "") +"</td>\n" +
|
" <td colspan='3' class='td5'>"+ (map.containsKey("apResult") ? map.get("apResult") : "") +"</td>\n" +
|
" <td colspan='3' class='td5'>"+ (map.containsKey("apprSign") ? map.get("apprSign") : "") +"</td>\n" +
|
" <td colspan='4' class='td1 tdRit'>"+ (map.containsKey("apprTime") ? map.get("apprTime") : "") +"</td>\n" +
|
" </tr>";
|
}
|
}
|
|
// 4. 将list中的数据替换到html中
|
htmlStr = htmlStr.replaceAll("#anasiList#", anasiList);
|
htmlStr = htmlStr.replaceAll("#measureList#", measureList);
|
htmlStr = htmlStr.replaceAll("#approvalList#", approvalList);
|
}catch (Exception e){
|
e.printStackTrace();
|
System.out.println("生成html文档失败!");
|
}finally {
|
inputStream.close();
|
}
|
}
|
//转换pdf
|
public void htmlToPdf(HttpServletResponse response,String text) throws IOException, DocumentException {
|
Document document = new Document();
|
PdfWriter writer = PdfWriter.getInstance(document, response.getOutputStream());
|
PdfBuilderUtils builderUtils = new PdfBuilderUtils();
|
builderUtils.setFooderText(text);
|
builderUtils.setFontPath(FONT);
|
writer.setPageEvent(builderUtils);
|
document.open();
|
XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
|
fontImp.register(FONT);
|
XMLWorkerHelper.getInstance().parseXHtml(writer, document, new ByteArrayInputStream(this.htmlStr.getBytes(StandardCharsets.UTF_8)), null, Charset.forName("UTF-8"), fontImp);
|
document.close();
|
|
}
|
public void generate(HttpServletResponse response, Map<String,Object> dataMap) throws IOException, DocumentException {
|
|
String text = dataMap.containsKey("workCode") ? (String)dataMap.get("workCode") : "";
|
WorkExportPdfUtil workExportPdfUtil = new WorkExportPdfUtil();
|
workExportPdfUtil.init();
|
workExportPdfUtil.setTempLocalPath((String)dataMap.get("filePath"));
|
workExportPdfUtil.generateComPleteHtml(dataMap);
|
workExportPdfUtil.htmlToPdf(response,text);
|
String fileName = (dataMap.containsKey("fileName") ? (String)dataMap.get("fileName") : "") + (dataMap.containsKey("workCode") ? (String)dataMap.get("workCode") :"");
|
if(StringUtil.isBlank(fileName)){
|
fileName = "特殊作业证";
|
}
|
fileName = URLEncoder.encode(fileName,"UTF-8");
|
response.setContentType("application/pdf;charset=UTF-8");
|
response.addHeader("Content-Disposition","attachment;filename="+fileName+".pdf");
|
}
|
public static void main(String[] args) throws DocumentException, IOException {
|
/* WorkExportPdfUtil222 workExportPdfUtil = new WorkExportPdfUtil222();
|
workExportPdfUtil.setTempLocalPath("/templates/workhot.html");
|
workExportPdfUtil.generateComPleteHtml();
|
workExportPdfUtil.htmlToPdf();*/
|
}
|
|
//创建模拟数据
|
public Map<String,Object> data(){
|
//基础数据
|
Map<String,String> baseDataMap=new HashMap<>();
|
baseDataMap.put("applydepName","测试名称");
|
baseDataMap.put("applyUname","张三");
|
baseDataMap.put("workCode","GTXH-100001");
|
baseDataMap.put("workLevel","一级动火作业");
|
baseDataMap.put("workMethod","作业方式");
|
baseDataMap.put("addressAndContent","江苏苏州市" + " " + "动火作业");
|
baseDataMap.put("workTime","自" + "2022-10-23 12:30:00" + "至" + "2022-10-23 16:30:00" + "止");
|
baseDataMap.put("operatorNames","李四,王五");
|
baseDataMap.put("otherSpeicialWork","吊装作业");
|
baseDataMap.put("harm","危害辨识");
|
//分析数据
|
List<Map<String,String>> anList = new ArrayList<>();
|
for (int i = 0;i < 4;i++){
|
Map<String,String> map = new HashMap<>();
|
map.put("anaAddress", "地址" + i);
|
map.put("anaItemName", "名称" + i);
|
map.put("anaData", 50 + i +"%");
|
map.put("anaResult", "通过");
|
map.put("anaUname", "张三"+i);
|
map.put("anaTime", "2022年10月23日 13时00分00秒");
|
anList.add(map);
|
}
|
//安全措施数据
|
List<Map<String, String>> meList = new ArrayList<>();
|
for (int j = 0;j < 18;j++){
|
Map<String,String> map = new HashMap<>();
|
map.put("index", String.valueOf(j));
|
map.put("measure", "测试测试测试测试测试测试测试测试测试测试");
|
map.put("mResult", "通过");
|
map.put("mUname", "张三");
|
meList.add(map);
|
}
|
//审批层数据
|
List<Map<String, String>> apList = new ArrayList<>();
|
for (int k = 0;k < 60;k++) {
|
|
Map<String,String> map = new HashMap<>();
|
map.put("apprStepName", "第"+k+"层级别");
|
map.put("apprOpinion", "意见意见意见意见意见意见意见意见意见意见意见意见");
|
map.put("apprUname", "张三");
|
map.put("apResult", "审批通过");
|
map.put("apprSign", "张三");
|
map.put("apprTime","2022年10月23日 13时00分00秒");
|
apList.add(map);
|
|
}
|
// 模板文件输入输出地址
|
String filePath = "/pdfHtmlTemplate/workhot.html";
|
//综合数据
|
Map<String,Object> dataMap = new HashMap<>();
|
dataMap.put("baseData",baseDataMap);
|
dataMap.put("approval",apList);
|
dataMap.put("measure",meList);
|
dataMap.put("analysis",anList);
|
dataMap.put("workCode","GTXH-100001");
|
dataMap.put("filePath",filePath);
|
return dataMap;
|
}
|
}
|