From 30a9f2dd2fcb573bb97145ce0e17bf9c837c7af5 Mon Sep 17 00:00:00 2001 From: lkd9125 Date: Wed, 20 Sep 2023 15:37:09 +0900 Subject: [PATCH] =?UTF-8?q?DB=20Table=20Insert=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BasFlightController.java | 13 +-- .../com/palnet/biz/jpa/entity/ComFileBas.java | 2 +- .../java/com/palnet/comn/utils/PdfUtils.java | 87 +++++++++++++++---- 3 files changed, 81 insertions(+), 21 deletions(-) diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java b/pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java index f7832a02..cdd6f684 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java @@ -36,6 +36,7 @@ import com.palnet.biz.api.comn.model.ComnPagingRs; import com.palnet.biz.api.comn.response.BasicResponse; import com.palnet.biz.api.comn.response.ErrorResponse; import com.palnet.biz.api.comn.response.SuccessResponse; +import com.palnet.biz.jpa.entity.ComFileBas; import com.palnet.biz.jpa.repository.com.ComFileBasRepository; import com.palnet.biz.scheduler.ctr.service.CtrTrnsLctnService; import com.palnet.comn.exception.CustomException; @@ -396,17 +397,19 @@ public class BasFlightController { @GetMapping("/test/createLancePDF") public void createLancePDF() { - log.warn("안뇽"); + HashMap param = new HashMap<>(); param.put("userName", "이경도"); param.put("userAge", 25); - param.put("userGender", "M"); + param.put("userGender", "M"); + pdfUtils.getSaveName("LanncPDF.pdf"); + String htmlContent = pdfUtils.getHtmlToString(param); - - pdfUtils.generatePDF(htmlContent); - + + ComFileBas comFileBas = pdfUtils.generatePDF(htmlContent); + comFileBasRepository.save(comFileBas); } diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/entity/ComFileBas.java b/pav-server/src/main/java/com/palnet/biz/jpa/entity/ComFileBas.java index b36ad304..146f7bf9 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/entity/ComFileBas.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/entity/ComFileBas.java @@ -43,7 +43,7 @@ public class ComFileBas implements Serializable { // @Temporal(TemporalType.TIMESTAMP) @Column(name="DEL_YN", columnDefinition = "TIMESTAMP") - private Instant delYn; + private String delYn = "N"; @Column(name="DEL_USER_ID") private String delUserId; diff --git a/pav-server/src/main/java/com/palnet/comn/utils/PdfUtils.java b/pav-server/src/main/java/com/palnet/comn/utils/PdfUtils.java index 536d8ee0..403aaf56 100644 --- a/pav-server/src/main/java/com/palnet/comn/utils/PdfUtils.java +++ b/pav-server/src/main/java/com/palnet/comn/utils/PdfUtils.java @@ -1,10 +1,15 @@ package com.palnet.comn.utils; +import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.StringReader; 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 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.html.HtmlPipeline; 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; @@ -37,13 +44,38 @@ import lombok.extern.slf4j.Slf4j; public class PdfUtils { @Autowired - private TemplateEngine templateEngine; + private TemplateEngine templateEngine; + + @Autowired + private JwtTokenUtil jwtTokenUtil; + // @Value("${}") // 기본 경로 지정할 곳 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 + * @param param + * @return + */ public > String getHtmlToString(T param){ // Thymeleaf 방식 html에 입힐 데이터 바인딩 Context context = new Context(); @@ -55,18 +87,23 @@ public class PdfUtils { // official_document html에 바인딩할 데이터 넣고 돌려서 String형식으로 뽑아옴 String htmlContent = templateEngine.process("official_document", context); - log.error("htmlContent -> {}", htmlContent); - return htmlContent; } - public void generatePDF(String htmlContent){ - + /** + * HTML 태그로 이루어진 String값을 PDF로 변환 + * @param htmlContent + */ + public ComFileBas generatePDF(String htmlContent){ // PDF 용지 설정하기 Document pdfDocument = new Document(); + ComFileBas result = new ComFileBas(); - try { - PdfWriter writer = PdfWriter.getInstance(pdfDocument, new FileOutputStream(this.FILE_BASE_NAME)); + try { + String fileName = getSaveName(this.FILE_BASE_NAME + this.FILE_EXTENSION); + + // File 저장 기본경로는 main 아래로 기본으로 잡힘 + PdfWriter writer = PdfWriter.getInstance(pdfDocument, new FileOutputStream(fileName)); writer.setInitialLeading(12.5f); pdfDocument.open(); @@ -85,9 +122,7 @@ public class PdfUtils { fontProvider.register("static/font/NanumGothic.ttf", "NanumGothic"); CssAppliers cssAppliers = new CssAppliersImpl(fontProvider); - log.info("fontProvider -> {}",fontProvider.getRegisteredFonts()); - log.info("cssFile -> {}", cssFile); - + // XML Worker에 넣을 PipeLine객체 생성, CssResolverPipeline 이 객체를 최종적으로 넣어야 Font,Css가 적용됨 HtmlPipelineContext htmlPipelineContext = new HtmlPipelineContext(cssAppliers); htmlPipelineContext.setTagFactory(Tags.getHtmlTagProcessorFactory()); @@ -100,7 +135,11 @@ public class PdfUtils { XMLWorker xmlWorker = new XMLWorker(cssResolverPipeline, true); XMLParser xmlParser = new XMLParser(xmlWorker, Charset.forName("UTF-8")); - xmlParser.parse(stringReader); + xmlParser.parse(stringReader); + + result.setFileSaveNm(fileName); + result.setFileOriNm(fileName); + } catch (IOException e) { e.printStackTrace(); } catch (DocumentException e1){ @@ -108,11 +147,29 @@ public class PdfUtils { } catch (Exception e2){ e2.printStackTrace(); } - finally{ - + finally{ 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; } }