[Java] PDF를 출력하는 방법(itextpdf)
안녕하세요. 명월입니다.
이 글은 자바에서 PDF를 출력하는 방법에 대한 글입니다.
제가 예전에 C#으로 iTextSharp라이브러리를 이용해서 pdf를 출력하는 방법에 대해 글을 작성한 적이 있습니다.
링크 - [C#] iTextSharp을 이용한 PDF 만들기
PDF는 이제 포탈 시스템에서 결과 레포트를 출력하는데 거의 기본이 되는 형식의 문서입니다. 이미지라고 하기에는 좀 문서처럼 보이니깐요..
이걸 자바 언어 환경에서 출력할 수 있게 사용하는 방법에 대해 알아보겠습니다.
먼저 프로젝트를 생성하고 maven을 사용할 수 있는 상태로 만듭니다.
링크 - [Java강좌 - 38] Maven 설치 및 eclipse에 연동하기
그리고 maven을 연결합니다.
레포지토리 - https://mvnrepository.com/artifact/com.itextpdf/itextpdf/5.5.13.1
레포지토리 - https://mvnrepository.com/artifact/com.itextpdf.tool/xmlworker/5.5.13.1
...
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf.tool/xmlworker -->
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.13.1</version>
</dependency>
...
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.StringReader;
import java.net.URL;
import java.nio.charset.Charset;
import com.itextpdf.text.Document;
import com.itextpdf.text.PageSize;
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.StyleAttrCSSResolver;
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.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;
public class Main {
// 실행 함수
public static void main(String[] args) {
// PDF를 작성하는 html
String html = "<html>" +
"<head></head>" +
"<body>" +
"<div>Hello world</div>" +
"<div>명월입니다.</div>" +
"</body>" +
"</html>";
// 파일 IO 스트림을 취득한다.
try (FileOutputStream os = new FileOutputStream("d:\\work\\test.pdf")) {
// Pdf형식의 document를 생성한다.
Document document = new Document(PageSize.A4, 10, 10, 10, 10);
// PdfWriter를 취득한다.
PdfWriter writer = PdfWriter.getInstance(document, os);
// document Open한다.
document.open();
// css를 설정할 resolver 인스턴스 생성
StyleAttrCSSResolver cssResolver = new StyleAttrCSSResolver();
// Css 파일 설정 (css1.css 파일 설정)
try (FileInputStream cssStream = new FileInputStream("d:\\work\\css1.css")) {
cssResolver.addCss(XMLWorkerHelper.getCSS(cssStream));
}
// Css 파일 설정 (css2.css 파일 설정)
try (FileInputStream cssStream = new FileInputStream("d:\\work\\css2.css")) {
cssResolver.addCss(XMLWorkerHelper.getCSS(cssStream));
}
// 폰트 설정
XMLWorkerFontProvider font = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
// window 폰트 설정
font.register("c:/windows/fonts/malgun.ttf", "MalgunGothic");
// 폰트 인스턴스를 생성한다.
CssAppliersImpl cssAppliers = new CssAppliersImpl(font);
//htmlContext의 pipeline 생성. (폰트 인스턴스 생성)
HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers);
htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
// pdf의 pipeline 생성.
PdfWriterPipeline pdfPipeline = new PdfWriterPipeline(document, writer);
// Html의pipeline을 생성 (html 태그, pdf의 pipeline설정)
HtmlPipeline htmlPipeline = new HtmlPipeline(htmlContext, pdfPipeline);
// css의pipeline을 합친다.
CssResolverPipeline cssResolverPipeline = new CssResolverPipeline(cssResolver, htmlPipeline);
//Work 생성 pipeline 연결
XMLWorker worker = new XMLWorker(cssResolverPipeline, true);
//Xml 파서 생성(Html를 pdf로 변환)
XMLParser xmlParser = new XMLParser(true, worker, Charset.forName("UTF-8"));
// 출력한다.
try (StringReader strReader = new StringReader(html)) {
xmlParser.parse(strReader);
}
// document의 리소스 반환
document.close();
} catch (Throwable e) {
e.printStackTrace();
}
}
}
위의 소스에서 css를 읽어드립니다.
body {
/* 폰트 설정 */
font-family: MalgunGothic;
}
div {
/* 요소의 배경색 설정, 빨간색 */
background-color: red;
/* 글씨색 설정, 파란색 */
color: blue;
}
위 css파일을 아래의 디렉토리에 설정합니다.
설정이 완료되었습니다.
프로그램을 실행해서 결과를 확인하겠습니다.
작성하면서 보니깐 놀라울 정도로 C#과 비슷하네요. 막상 작성해 놓고 보니 포스팅하기도 민망 할 정도로 비슷합니다. 그래도 필요하실 분이 있을 듯 싶어서 첨부파일까지 남깁니다.
청부 파일 - PdfExample.zip
여기까지 자바에서 PDF를 출력하는 방법에 대한 설명이었습니다.
궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.