티스토리 뷰
회사에서 HTML 을 -> PDF 로 출력하는 업무가 주어졌다.
그래서 구글링을 통해 찾은것이 ITEXT였다. 바로 실행함.
첫번째로 ITEXT 라이브러리를 사용하기위해서는 pom.xml에 dependency를 추가해줘야한다.
<!-- pdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-pdfa</artifactId>
<version>5.5.9</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-xtra</artifactId>
<version>5.5.9</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.9</version>
</dependency>
추가를 해준뒤에는 PDF로 변경해줄 HTML 을 작성해준다.
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<html>
<head>
<link rel="stylesheet" href="/resources/css/sub.css">
<link rel="stylesheet" href="/resources/css/index.css">
<link rel="stylesheet" href="/resources/css/plugin/slick.css">
<link rel="stylesheet" href="/resources/css/pdf/contents.css">
<meta charset="UTF-8">
<title>convertpdf</title>
</head>
<body>
<div id="wrap">
<div>
<div>
<table>
<tr>
<td class="h1">라떼야의 개발일기</td>
</tr>
<tr>
<td>
<table class="table_inner">
<tr class="certi_info">
<th>성<span class="interval"></span>명</th>
<td>라떼야</td>
</tr>
</table>
</td>
<!-- <div class="img">
<img src="이미지경로입력"/>
</div> -->
</div>
</div>
</div>
<form id="pdf" action="/URL 경로입력" method="post">
<input type="hidden" id="pdf_value" name="pdf_value" value="">
<input type="button" id="button_pdf" value="pdf보기">
</form>
</body>
<script type="text/javascript">
$('#button_pdf').click(function(){
$("#pdf_value").val($('#wrap').html());
$("#pdf").submit();
})
</script>
</html>
HTML을 작성했으면 Controller 작성
public void convertpdf(HttpServletRequest request, HttpServletResponse response,@RequestParam(required = false, value = "pdf_value") String pdf_value) {
Document document = new Document(PageSize.A4, 50, 50, 50, 50);
PdfWriter writer;
try {
//인스턴스를 가져온후
writer = PdfWriter.getInstance(document, response.getOutputStream());
writer.setInitialLeading(12.5f);
response.setContentType("application/pdf");
String fileName = URLEncoder.encode("PDF 제목", "UTF-8");
response.setHeader("Content-Transper-Encoding", "binary");
response.setHeader("Content-Disposition", "inline; filename=" + fileName + ".pdf");
//문서를 연다.
document.open();
//XMLWorkerHelper helper = XMLWorkerHelper.getInstance();
// CSS
//css 규칙을 해석한다.
CSSResolver cssResolver = new StyleAttrCSSResolver();
//css 파일을 나타낸다. css 흐름을 pdf로 구문 분석하기 위한 클래스
CssFile cssFile = XMLWorkerHelper.getCSS(new FileInputStream("CSS 경로"));
cssResolver.addCss(cssFile);
// HTML, 폰트 설정
XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
//글꼴 파일을 적고 별칭을 정해줌
fontProvider.register("FONT 경로"); // MalgunGothic은 alias,
CssAppliers cssAppliers = new CssAppliersImpl(fontProvider);
//HtmlPipeline의 CustomContext 객체 , 이것을 사용하여 htmlPipeline을 구성한다.
HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers);
//사용할 TagProcessorFactory를 설정하십시오. HTML의 경우 Tags.getHtmlTagProcessorFactory()
htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
Image image1 = Image.getInstance("//파일//경로//입력");
image1.scaleToFit(1200, 800);
image1.setAbsolutePosition(10, 60);
Image image2 = Image.getInstance("//파일//경로//입력");
image2.scaleToFit(50,50);
image2.setAbsolutePosition(400, 200);
document.add(image1);
document.add(image2);
// Pipelines
PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer);
HtmlPipeline html = new HtmlPipeline(htmlContext, pdf);
CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);
//XMLParserListener의 구현입니다.
//중요 : XMLWorker가 WorkerContext (WorkerContextImpl 인)를 ThreadLocalvariable에 저장하는이 클래스는 WorkerContext가 여기 스레드로 제한됩니다.
XMLWorker worker = new XMLWorker(css, true);
//XML 파일을 읽습니다. 이벤트 수신 용 XMLParserListener를 연결하십시오.
XMLParser xmlParser = new XMLParser(worker, Charset.forName("UTF-8"));
// 폰트 설정에서 별칭으로 줬던 "MalgunGothic"을 html 안에 폰트로 지정한다.
String htmlStr = "<html><head><body style='font-family: MalgunGothic;'>" + pdf_value+ "</body></head></html>";
StringReader strReader = new StringReader(htmlStr);
xmlParser.parse(strReader);
document.close();
writer.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
이렇게 해주면 HTML 이 PDF로 변환이된다. 그런데 ITEXT의 문제점은 HTML 에서 <br> 태그나 <img> 태그등등... 이 안먹힌다. CSS 도 몇개만 먹히는걸로 알고있다.... 그래도 이미지는 컨트롤러에서 제어가 가능했지만 결국 못쓰게 되었다...
'FULL STACK > SPRING &EGOV' 카테고리의 다른 글
스프링에서의 트랜잭션 (0) | 2018.12.10 |
---|---|
웹페이지 에러 처리 (0) | 2018.12.06 |
MyBatis(마이바티스) 설정하기 (0) | 2018.12.05 |
Maven (0) | 2018.12.05 |
Spring MVC 프로젝트를 생성하여 톰캣에서 실행하기 (0) | 2018.12.05 |
- Total
- Today
- Yesterday
- getBoundingClientRect
- sliding scroll
- scroll
- defer
- 반응형
- jQuery
- Javscript
- js scroll
- css
- html
- fontawesome 4.7
- JS
- Sliding
- Slick
- fontawesome 4.7 cdn
- FontAwesome
- JavaScript
- jQuery CDN
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |