Browse Source

PDF CSS 적용

pull/3/head
lkd9125 1 year ago
parent
commit
57aac511d8
  1. 4
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java
  2. 18
      pav-server/src/main/java/com/palnet/comn/utils/PdfUtils.java
  3. 6
      pav-server/src/main/resources/static/css/pdf.css
  4. 14
      pav-server/src/main/resources/templates/official_document.html

4
pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java

@ -403,7 +403,9 @@ public class BasFlightController {
param.put("userAge", 25); param.put("userAge", 25);
param.put("userGender", "M"); param.put("userGender", "M");
pdfUtils.generatePDF(param); String htmlContent = pdfUtils.getHtmlToString(param);
pdfUtils.generatePDF(htmlContent);
} }

18
pav-server/src/main/java/com/palnet/comn/utils/PdfUtils.java

@ -43,8 +43,8 @@ public class PdfUtils {
private final String FILE_BASE_NAME = "LANNC_PDF.pdf"; private final String FILE_BASE_NAME = "LANNC_PDF.pdf";
public <T extends HashMap<String, Object>> void generatePDF(T param){
public <T extends HashMap<String, Object>> String getHtmlToString(T param){
// Thymeleaf 방식 html에 입힐 데이터 바인딩 // Thymeleaf 방식 html에 입힐 데이터 바인딩
Context context = new Context(); Context context = new Context();
context.setVariable("userName", param.get("userName")); context.setVariable("userName", param.get("userName"));
@ -57,22 +57,30 @@ public class PdfUtils {
log.error("htmlContent -> {}", htmlContent); log.error("htmlContent -> {}", htmlContent);
return htmlContent;
}
public void generatePDF(String htmlContent){
// PDF 용지 설정하기 // PDF 용지 설정하기
Document pdfDocument = new Document(); Document pdfDocument = new Document();
try { try {
PdfWriter writer = PdfWriter.getInstance(pdfDocument, new FileOutputStream(this.FILE_BASE_NAME)); PdfWriter writer = PdfWriter.getInstance(pdfDocument, new FileOutputStream(this.FILE_BASE_NAME));
writer.setInitialLeading(12.5f); writer.setInitialLeading(12.5f);
pdfDocument.open(); pdfDocument.open();
CSSResolver cssResolver = new StyleAttrCSSResolver(); CSSResolver cssResolver = new StyleAttrCSSResolver();
// CSS
// jar변환 시 CSS파일을 못 찾을수도 있어서 InputStream 사용 // jar변환 시 CSS파일을 못 찾을수도 있어서 InputStream 사용
// CSS의 색깔은 키워드로 표기 X, #e73a3a 등 16진법으로 표기 해야함
InputStream cssStream = getClass().getClassLoader().getResourceAsStream("static/css/pdf.css"); InputStream cssStream = getClass().getClassLoader().getResourceAsStream("static/css/pdf.css");
CssFile cssFile = XMLWorkerHelper.getCSS(cssStream); CssFile cssFile = XMLWorkerHelper.getCSS(cssStream);
cssResolver.addCss(cssFile); cssResolver.addCss(cssFile);
// 폰트 // Font
XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS); XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
fontProvider.register("static/font/NanumGothic.ttf", "NanumGothic"); fontProvider.register("static/font/NanumGothic.ttf", "NanumGothic");
CssAppliers cssAppliers = new CssAppliersImpl(fontProvider); CssAppliers cssAppliers = new CssAppliersImpl(fontProvider);
@ -92,8 +100,7 @@ public class PdfUtils {
XMLWorker xmlWorker = new XMLWorker(cssResolverPipeline, true); XMLWorker xmlWorker = new XMLWorker(cssResolverPipeline, true);
XMLParser xmlParser = new XMLParser(xmlWorker, Charset.forName("UTF-8")); XMLParser xmlParser = new XMLParser(xmlWorker, Charset.forName("UTF-8"));
xmlParser.parse(stringReader); xmlParser.parse(stringReader);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} catch (DocumentException e1){ } catch (DocumentException e1){
@ -102,6 +109,7 @@ public class PdfUtils {
e2.printStackTrace(); e2.printStackTrace();
} }
finally{ finally{
pdfDocument.close(); pdfDocument.close();
} }

6
pav-server/src/main/resources/static/css/pdf.css

@ -4,5 +4,9 @@ body{
} }
p{ p{
background-color: aquamarine; background-color: #e73a3a;
}
div {
background-color: #e73a3a;
} }

14
pav-server/src/main/resources/templates/official_document.html

@ -1,8 +1,12 @@
<html xmlns:th="http://www.thymeleaf.org"> <html lang="ko" xmlns:th="http://www.thymeleaf.org">
<body> <head>
<p id="d1">Thymeleaf Tutorials</p> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<p>Thymeleaf Tutorials</p>
<p>이름 : [[${userName}]]</p> <p>이름 : [[${userName}]]</p>
<p>나이 : [[${userAge}]]</p> <p>나이 : [[${userAge}]]</p>
<p>성별 : [[${userGender}]]</p> <p>성별 : [[${userGender}]]</p>
</body> </body>
</html> </html>

Loading…
Cancel
Save