Apache PDFBox 라이브러리를 사용해서 PDF 파일을 생성하는 방법을 알아보겠습니다. 간단히 이미지 그리기, 글 쓰기, 라인 그리기 기능을 알아 봅니다. 예제는 스프링 프레임웍을 사용하는 웹프로그램으로 작성했습니다. PDFBox 는 Java 라이브러리이므로 Java 애플리케이션에서 사용할 수 있습니다.
Apache PDFBox 공식 사이트는 https://pdfbox.apache.org/ 입니다. 현재 최신 버전은 2.0.8 입니다.
1. PDFBox를 사용하기 위해서 pom.xml 파일에 의존성을 추가합니다.
<!-- PDFBox -->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.8</version>
</dependency>
2. 문서를 생성하고, 다운로드하기
- PDDcoument 객체의 save() 메소드에 출력 스트림을 인자로 주어 출력합니다.
// 문서 만들기
PDDocument doc = new PDDocument();
...
// 파일 다운로드 설정
response.setContentType("application/pdf");
String fileName = URLEncoder.encode("샘플PDF", "UTF-8");
response.setHeader("Content-Disposition", "inline; filename=" + fileName + ".pdf");
// PDF 파일 출력
doc.save(response.getOutputStream());
doc.close();
3. 페이지 만들고 가져오기
- 새 페이지는 PDPage 객체를 생성하여 doc.addPage(); 메소드를 사용하여 문서에 추가합니다.
- 페이지에 글을 쓰기위해서 가져올 때는 doc.getPage(0); 메소드를 사용합니다.
- 첫 번째 페이지의 인덱스는 0입니다.
PDPage blankPage = new PDPage(PDRectangle.A4);
doc.addPage(blankPage);
// 작업 페이지 설정
PDPage page = doc.getPage(0);
4. 이미지 그리기
- PDImageXObject 객체의 정적 메소드인 createFromFile(); 메소드를 사용하여 이미지를 로드합니다.
- 첫 번째 인자는 이미지의 디스크상의 전체 위치 입니다.
- 두 번째 인자는 문서 객체입니다.
- 페이지에 어떤 작업을 하기 위해서는 PDPageContentStream 객체를 생성합니다. 그리기, 쓰기 모두 이 객체를 통해서 합니다.
- PDPageContentStream 객체의 drawImage(); 메소드로 그림을 그립니다. 이미지 객체, x 좌표, y 좌표, 너비, 높이를 인자로 줍니다.
// 배경이미지 로드
PDImageXObject pdImage = PDImageXObject.createFromFile(webroot + "resources/back.jpg", doc);
// 컨텐츠 스트림 열기
PDPageContentStream contentStream = new PDPageContentStream(doc, page);
// 배경 이미지 그리기
contentStream.drawImage(pdImage, 0, 0, 595, 842);
5. 폰트 로드하기
- ttf 폰트 파일을 로드하기 위해서 PDType0Font 객체의 load(); 메소드를 사용합니다.
// ttf 폰트 사용하기
InputStream fontStream = new FileInputStream("C:/fonts/gulim.ttf");
PDType0Font fontGulim = PDType0Font.load(doc, fontStream);
- ttc 폰트 파일을 로드하기 위해서는 TrueTypeCollection 객체를 생성하고, 거기에서 getFontByName() 메소드를 이용하여 폰트의 이름으로 폰트를 로드합니다.
// ttc 폰트 사용하기
File fontFile = new File("C:/Windows/fonts/gulim.ttc");
PDType0Font fontGulim = PDType0Font.load(doc, new TrueTypeCollection(fontFile).getFontByName("Gulim"), true);
6. 글 쓰기
- 페이지에 글을 쓰기 위해서는 PDPageContentStream 객체의 메소드를 사용합니다.
- 폰트는 한번 지정하면 계속 유효합니다.
// 글쓰기 시작
contentStream.beginText();
// 폰트 설정
contentStream.setFont(font, fontSize);
// 글이 쓰여질 위치 지정
contentStream.newLineAtOffset(left, bottom);
// 글쓰기
contentStream.showText(text);
// 글쓰기 종료
contentStream.endText();
7. 선그리기
- 선 그리기도 PDPageContentStream 객체의 메소드를 사용합니다.
// 선 그리기 시작 위치로 이동합니다.
contentStream.moveTo(xStart,yStart);
// 끝 위치를 지정합니다.
contentStream.lineTo(xEnd,yEnd);
// 선을 그립니다.
contentStream.stroke();
8. 출력된 결과 입니다.
이것으로 Apache PDFBox 라이브러리를 사용해서 PDF 파일을 만드는 방법을 알아보았습니다.
※ 전체예제
'프로그래밍 > 스프링프레임워크' 카테고리의 다른 글
스프링프레임워크 에러페이지 만들기 (4) | 2018.04.21 |
---|---|
도메인 이전시 기존 도메인의 모든 URL을 새 도메인으로 리다이렉트하기 (0) | 2018.04.21 |
Servlet/jsp, PHP, Javascript로 리다이렉트하기(HTTP 응답코드 지정) (0) | 2018.04.20 |
유틸리티 클래스의 정적 메소드로 커스텀 EL 함수 만들기 (0) | 2018.04.20 |
JSTL - jsp 페이지에서 jstl을 사용하여 HTML tag 제거하기 (4) | 2018.04.20 |