|
|
@ -1,10 +1,15 @@ |
|
|
|
package com.palnet.comn.utils; |
|
|
|
package com.palnet.comn.utils; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.io.File; |
|
|
|
import java.io.FileOutputStream; |
|
|
|
import java.io.FileOutputStream; |
|
|
|
import java.io.IOException; |
|
|
|
import java.io.IOException; |
|
|
|
import java.io.InputStream; |
|
|
|
import java.io.InputStream; |
|
|
|
import java.io.StringReader; |
|
|
|
import java.io.StringReader; |
|
|
|
import java.nio.charset.Charset; |
|
|
|
import java.nio.charset.Charset; |
|
|
|
|
|
|
|
import java.nio.file.Files; |
|
|
|
|
|
|
|
import java.nio.file.Path; |
|
|
|
|
|
|
|
import java.nio.file.Paths; |
|
|
|
|
|
|
|
import java.time.Instant; |
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.HashMap; |
|
|
|
|
|
|
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
@ -29,6 +34,8 @@ import com.itextpdf.tool.xml.pipeline.css.CssResolverPipeline; |
|
|
|
import com.itextpdf.tool.xml.pipeline.end.PdfWriterPipeline; |
|
|
|
import com.itextpdf.tool.xml.pipeline.end.PdfWriterPipeline; |
|
|
|
import com.itextpdf.tool.xml.pipeline.html.HtmlPipeline; |
|
|
|
import com.itextpdf.tool.xml.pipeline.html.HtmlPipeline; |
|
|
|
import com.itextpdf.tool.xml.pipeline.html.HtmlPipelineContext; |
|
|
|
import com.itextpdf.tool.xml.pipeline.html.HtmlPipelineContext; |
|
|
|
|
|
|
|
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; |
|
|
|
|
|
|
|
import com.palnet.biz.jpa.entity.ComFileBas; |
|
|
|
|
|
|
|
|
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
|
|
|
|
|
|
|
@ -39,11 +46,36 @@ public class PdfUtils { |
|
|
|
@Autowired |
|
|
|
@Autowired |
|
|
|
private TemplateEngine templateEngine; |
|
|
|
private TemplateEngine templateEngine; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
|
|
|
private JwtTokenUtil jwtTokenUtil; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// @Value("${}") // 기본 경로 지정할 곳
|
|
|
|
private final String BASE_PATH = ""; |
|
|
|
private final String BASE_PATH = ""; |
|
|
|
|
|
|
|
|
|
|
|
private final String FILE_BASE_NAME = "LANNC_PDF.pdf"; |
|
|
|
private final String FILE_BASE_NAME = "LANNC_PDF"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private final String FILE_EXTENSION = ".pdf"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public String getSaveName(String baseName){ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String date = InstantUtils.toDateString(Instant.now()).replace("-", ""); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
StringBuilder result = new StringBuilder(); |
|
|
|
|
|
|
|
result.append(date) |
|
|
|
|
|
|
|
.append("_") |
|
|
|
|
|
|
|
.append(System.currentTimeMillis()) |
|
|
|
|
|
|
|
.append("_") |
|
|
|
|
|
|
|
.append(baseName); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return result.toString(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Thymeleaf HTML 파일을 데이터 바인딩하여 String으로 변환 |
|
|
|
|
|
|
|
* @param <T> |
|
|
|
|
|
|
|
* @param param |
|
|
|
|
|
|
|
* @return |
|
|
|
|
|
|
|
*/ |
|
|
|
public <T extends HashMap<String, Object>> String getHtmlToString(T param){ |
|
|
|
public <T extends HashMap<String, Object>> String getHtmlToString(T param){ |
|
|
|
// Thymeleaf 방식 html에 입힐 데이터 바인딩
|
|
|
|
// Thymeleaf 방식 html에 입힐 데이터 바인딩
|
|
|
|
Context context = new Context(); |
|
|
|
Context context = new Context(); |
|
|
@ -55,18 +87,23 @@ public class PdfUtils { |
|
|
|
// official_document html에 바인딩할 데이터 넣고 돌려서 String형식으로 뽑아옴
|
|
|
|
// official_document html에 바인딩할 데이터 넣고 돌려서 String형식으로 뽑아옴
|
|
|
|
String htmlContent = templateEngine.process("official_document", context); |
|
|
|
String htmlContent = templateEngine.process("official_document", context); |
|
|
|
|
|
|
|
|
|
|
|
log.error("htmlContent -> {}", htmlContent); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return htmlContent; |
|
|
|
return htmlContent; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void generatePDF(String htmlContent){ |
|
|
|
/** |
|
|
|
|
|
|
|
* HTML 태그로 이루어진 String값을 PDF로 변환 |
|
|
|
|
|
|
|
* @param htmlContent |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
public ComFileBas generatePDF(String htmlContent){ |
|
|
|
// PDF 용지 설정하기
|
|
|
|
// PDF 용지 설정하기
|
|
|
|
Document pdfDocument = new Document(); |
|
|
|
Document pdfDocument = new Document(); |
|
|
|
|
|
|
|
ComFileBas result = new ComFileBas(); |
|
|
|
|
|
|
|
|
|
|
|
try { |
|
|
|
try { |
|
|
|
PdfWriter writer = PdfWriter.getInstance(pdfDocument, new FileOutputStream(this.FILE_BASE_NAME)); |
|
|
|
String fileName = getSaveName(this.FILE_BASE_NAME + this.FILE_EXTENSION); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// File 저장 기본경로는 main 아래로 기본으로 잡힘
|
|
|
|
|
|
|
|
PdfWriter writer = PdfWriter.getInstance(pdfDocument, new FileOutputStream(fileName)); |
|
|
|
writer.setInitialLeading(12.5f); |
|
|
|
writer.setInitialLeading(12.5f); |
|
|
|
|
|
|
|
|
|
|
|
pdfDocument.open(); |
|
|
|
pdfDocument.open(); |
|
|
@ -85,9 +122,7 @@ public class PdfUtils { |
|
|
|
fontProvider.register("static/font/NanumGothic.ttf", "NanumGothic"); |
|
|
|
fontProvider.register("static/font/NanumGothic.ttf", "NanumGothic"); |
|
|
|
CssAppliers cssAppliers = new CssAppliersImpl(fontProvider); |
|
|
|
CssAppliers cssAppliers = new CssAppliersImpl(fontProvider); |
|
|
|
|
|
|
|
|
|
|
|
log.info("fontProvider -> {}",fontProvider.getRegisteredFonts()); |
|
|
|
// XML Worker에 넣을 PipeLine객체 생성, CssResolverPipeline 이 객체를 최종적으로 넣어야 Font,Css가 적용됨
|
|
|
|
log.info("cssFile -> {}", cssFile); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HtmlPipelineContext htmlPipelineContext = new HtmlPipelineContext(cssAppliers); |
|
|
|
HtmlPipelineContext htmlPipelineContext = new HtmlPipelineContext(cssAppliers); |
|
|
|
htmlPipelineContext.setTagFactory(Tags.getHtmlTagProcessorFactory()); |
|
|
|
htmlPipelineContext.setTagFactory(Tags.getHtmlTagProcessorFactory()); |
|
|
|
|
|
|
|
|
|
|
@ -101,6 +136,10 @@ public class PdfUtils { |
|
|
|
XMLParser xmlParser = new XMLParser(xmlWorker, Charset.forName("UTF-8")); |
|
|
|
XMLParser xmlParser = new XMLParser(xmlWorker, Charset.forName("UTF-8")); |
|
|
|
|
|
|
|
|
|
|
|
xmlParser.parse(stringReader); |
|
|
|
xmlParser.parse(stringReader); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
result.setFileSaveNm(fileName); |
|
|
|
|
|
|
|
result.setFileOriNm(fileName); |
|
|
|
|
|
|
|
|
|
|
|
} catch (IOException e) { |
|
|
|
} catch (IOException e) { |
|
|
|
e.printStackTrace(); |
|
|
|
e.printStackTrace(); |
|
|
|
} catch (DocumentException e1){ |
|
|
|
} catch (DocumentException e1){ |
|
|
@ -109,10 +148,28 @@ public class PdfUtils { |
|
|
|
e2.printStackTrace(); |
|
|
|
e2.printStackTrace(); |
|
|
|
} |
|
|
|
} |
|
|
|
finally{ |
|
|
|
finally{ |
|
|
|
|
|
|
|
|
|
|
|
pdfDocument.close(); |
|
|
|
pdfDocument.close(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
long fileSize = Files.size(Paths.get(this.BASE_PATH + result.getFileOriNm())) / 1024; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(fileSize > 0) result.setFileSize(String.valueOf(fileSize)); |
|
|
|
|
|
|
|
} catch (IOException e) { |
|
|
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String userId = jwtTokenUtil.getUserIdByToken(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
result.setFileGroupNo(0); |
|
|
|
|
|
|
|
result.setFilePath(this.BASE_PATH); |
|
|
|
|
|
|
|
result.setFileExt(this.FILE_EXTENSION); |
|
|
|
|
|
|
|
result.setCreateDt(Instant.now()); |
|
|
|
|
|
|
|
result.setCreateUserId(userId); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log.error("Entity -> {}", result); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|