Apache PDFBox® - A Java PDF Library 입문 (2)

 

지난 글을 통해 빈 PDF 문서를 만드는 방법을 알아보았지요.

오늘은 PDF 문서 안에 글자를 넣어보는 작업을 해보려고 합니다.

 

그러기 위해서는 추가적으로 폰트 라이브러리를 import 해야 합니다. 바로 fontbox 인데요.

Apache PDFBox 페이지에서 찾을 수 있습니다.

저는 fontbox-2.0.7.jar 라는 파일로 받아서 import 했구요.

 

만약 fontbox를 import 하지 않으면..

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/fontbox/type1/DamagedFontException
    at io.sarc.pdfboxtest.PDFBoxTest.createDocument(PDFBoxTest.java:21)
    at io.sarc.pdfboxtest.PDFBoxTest.main(PDFBoxTest.java:12)
Caused by: java.lang.ClassNotFoundException: org.apache.fontbox.type1.DamagedFontException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 2 more

이런 무시무시한 에려가 납니다.

 

그리고 나서 아래와 같이 코딩을 하면,

package io.sarc.pdfboxtest;

import java.io.IOException;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;

public class PDFBoxTest {
    public static void main(String[] args) {
        createDocument();
    }

    private static void createDocument() {
        try (final PDDocument document = new PDDocument()) {
            final PDPage newDocument = new PDPage();
            document.addPage(newDocument);
            final PDPageContentStream contentStream = new PDPageContentStream(document, newDocument);
            contentStream.beginText();
            contentStream.setFont(PDType1Font.COURIER_BOLD, 12);
            contentStream.newLineAtOffset(150, 750);
            contentStream.showText("Hello World");
            contentStream.endText();
            contentStream.close();
            document.save("HelloWorld.pdf");
            System.out.println("Created successfully!");
        } catch (IOException ioe) {
            System.out.println("Fail to create PDF while trying to create blank document - " + ioe);
        }
    }
}

Hello World라는 내용을 가진 HelloWorld.pdf 라는 파일이 생성됩니다.