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

 

PDF 문서를 다루는 방법은 iText 등등하여 여럿 있지만

PDFBox는 보다 라이선스에서 자유로운 PDF 도구입니다.

 

몇차례에 걸쳐 PDFBox를 이용하여 PDF 문서를 생성하고 다루는 방법을 소개하고자 합니다.

 

짧은 분량으로, 그러면서도 실전에서 활용 가능하도록 정리를 하려고 합니다.

아마 따라하시면 큰 문제 없이 성공하실 수 있을 것입니다.

 

우선 PDFBox를 다운로드 받기..

https://pdfbox.apache.org/download.cgi 에 접속하여 다운로드를 받습니다.

당연하지만 jar 파일을 다운로드 받고 나서 기존 자바 프로젝트, 혹은 신규 프로젝트에 import 해야 합니다.

참고로 제가 받은 파일은 pdfbox-2.0.7.jar 입니다.

 

간단히 샘플 코드 만들어볼께요.

io.sarc.pdfboxtest 라는 패키지를 만들고 그 안에 PDFBoxTest라는 클래스를 하나 만들었습니다.

메인 메소드를 가진 실행 클래스 하나로 만들었어요.

소스 보시죠..

package io.sarc.pdfboxtest;

import java.io.IOException;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;

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

    private static void createEmptyDocument() {
        try (final PDDocument document = new PDDocument()) {
            final PDPage emptyPage = new PDPage();
            document.addPage(emptyPage);
            document.save("testEmptyPage.pdf");
            System.out.println("Created successfully!");
        } catch (IOException ioe) {
            System.out.println("Fail to create PDF while trying to create blank document - " + ioe);
        }
    }
}

위 코드를 실행하면 testEmptyPage.pdf 라는 빈 PDF 파일을 하나 만들게 됩니다.

 

그런데 실행을 시켰을 때 이런 에러(Exception)가 날 수 있습니다.

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    at org.apache.pdfbox.pdmodel.PDDocument.(PDDocument.java:91)
    at io.sarc.pdfboxtest.PDFBoxTest.createEmptyDocument(PDFBoxTest.java:14)
    at io.sarc.pdfboxtest.PDFBoxTest.main(PDFBoxTest.java:10)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
    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)
    ... 3 more

아파치 커먼 로깅 라이브러리가 연결되어 있지 않아서 그렇습니다.

커먼 로깅을 받아서 역시 import 시켜주면 됩니다. (예: http://apache.mirror.cdnetworks.com//commons/logging/binaries/commons-logging-1.2-bin.zip)