lkd9125
1 year ago
7 changed files with 152 additions and 2 deletions
@ -0,0 +1,110 @@
|
||||
package com.palnet.comn.utils; |
||||
|
||||
import java.io.FileOutputStream; |
||||
import java.io.IOException; |
||||
import java.io.InputStream; |
||||
import java.io.StringReader; |
||||
import java.nio.charset.Charset; |
||||
import java.util.HashMap; |
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.stereotype.Component; |
||||
import org.thymeleaf.TemplateEngine; |
||||
import org.thymeleaf.context.Context; |
||||
|
||||
import com.itextpdf.text.Document; |
||||
import com.itextpdf.text.DocumentException; |
||||
import com.itextpdf.text.pdf.PdfWriter; |
||||
import com.itextpdf.tool.xml.XMLWorker; |
||||
import com.itextpdf.tool.xml.XMLWorkerFontProvider; |
||||
import com.itextpdf.tool.xml.XMLWorkerHelper; |
||||
import com.itextpdf.tool.xml.css.CssFile; |
||||
import com.itextpdf.tool.xml.css.StyleAttrCSSResolver; |
||||
import com.itextpdf.tool.xml.html.CssAppliers; |
||||
import com.itextpdf.tool.xml.html.CssAppliersImpl; |
||||
import com.itextpdf.tool.xml.html.Tags; |
||||
import com.itextpdf.tool.xml.parser.XMLParser; |
||||
import com.itextpdf.tool.xml.pipeline.css.CSSResolver; |
||||
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 lombok.extern.slf4j.Slf4j; |
||||
|
||||
@Component |
||||
@Slf4j |
||||
public class PdfUtils { |
||||
|
||||
@Autowired |
||||
private TemplateEngine templateEngine; |
||||
|
||||
private final String BASE_PATH = ""; |
||||
|
||||
private final String FILE_BASE_NAME = "LANNC_PDF.pdf"; |
||||
|
||||
public <T extends HashMap<String, Object>> void generatePDF(T param){ |
||||
|
||||
// Thymeleaf 방식 html에 입힐 데이터 바인딩
|
||||
Context context = new Context(); |
||||
context.setVariable("userName", param.get("userName")); |
||||
context.setVariable("userAge", param.get("userAge")); |
||||
context.setVariable("userGender", param.get("userGender")); |
||||
|
||||
// official_document은 html이름임 , 앞 뒤 prefix, suffix는 yml에 정의해놓음
|
||||
// official_document html에 바인딩할 데이터 넣고 돌려서 String형식으로 뽑아옴
|
||||
String htmlContent = templateEngine.process("official_document", context); |
||||
|
||||
log.error("htmlContent -> {}", htmlContent); |
||||
|
||||
// PDF 용지 설정하기
|
||||
Document pdfDocument = new Document(); |
||||
|
||||
try { |
||||
PdfWriter writer = PdfWriter.getInstance(pdfDocument, new FileOutputStream(this.FILE_BASE_NAME)); |
||||
writer.setInitialLeading(12.5f); |
||||
|
||||
pdfDocument.open(); |
||||
|
||||
CSSResolver cssResolver = new StyleAttrCSSResolver(); |
||||
// jar변환 시 CSS파일을 못 찾을수도 있어서 InputStream 사용
|
||||
InputStream cssStream = getClass().getClassLoader().getResourceAsStream("static/css/pdf.css"); |
||||
CssFile cssFile = XMLWorkerHelper.getCSS(cssStream); |
||||
cssResolver.addCss(cssFile); |
||||
|
||||
// 폰트
|
||||
XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS); |
||||
fontProvider.register("static/font/NanumGothic.ttf", "NanumGothic"); |
||||
CssAppliers cssAppliers = new CssAppliersImpl(fontProvider); |
||||
|
||||
log.info("fontProvider -> {}",fontProvider.getRegisteredFonts()); |
||||
log.info("cssFile -> {}", cssFile); |
||||
|
||||
HtmlPipelineContext htmlPipelineContext = new HtmlPipelineContext(cssAppliers); |
||||
htmlPipelineContext.setTagFactory(Tags.getHtmlTagProcessorFactory()); |
||||
|
||||
PdfWriterPipeline pdfWriterPipeline = new PdfWriterPipeline(pdfDocument, writer); |
||||
HtmlPipeline htmlPipeline = new HtmlPipeline(htmlPipelineContext, pdfWriterPipeline); |
||||
CssResolverPipeline cssResolverPipeline = new CssResolverPipeline(cssResolver, htmlPipeline); |
||||
|
||||
StringReader stringReader = new StringReader(htmlContent); |
||||
|
||||
XMLWorker xmlWorker = new XMLWorker(cssResolverPipeline, true); |
||||
XMLParser xmlParser = new XMLParser(xmlWorker, Charset.forName("UTF-8")); |
||||
|
||||
xmlParser.parse(stringReader); |
||||
|
||||
} catch (IOException e) { |
||||
e.printStackTrace(); |
||||
} catch (DocumentException e1){ |
||||
e1.printStackTrace(); |
||||
} catch (Exception e2){ |
||||
e2.printStackTrace(); |
||||
} |
||||
finally{ |
||||
pdfDocument.close(); |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
@ -0,0 +1,8 @@
|
||||
|
||||
body{ |
||||
font-family: NanumGothic; |
||||
} |
||||
|
||||
p{ |
||||
background-color: aquamarine; |
||||
} |
Binary file not shown.
Loading…
Reference in new issue