[java] PDF 파일에 부가정보(북마크, 책갈피 등) 추가하기(Java Apache PDFBox 사용)

PDF 파일에 부가정보를 추가할 수 있는 방법은 여러 가지가 있습니다. 이번에는 Java Apache PDFBox 라이브러리를 사용하여 PDF 파일에 북마크와 책갈피를 추가하는 방법에 대해 알아보겠습니다.

1. Apache PDFBox 라이브러리 추가

PDFBox 라이브러리를 사용하기 위해 먼저 해당 라이브러리를 프로젝트에 추가해야 합니다. Maven 프로젝트를 사용한다면, pom.xml 파일에 다음 의존성을 추가하세요.

<dependencies>
    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
        <version>2.0.24</version>
    </dependency>
</dependencies>

2. PDF에 북마크 추가하기

PDF 파일에 북마크를 추가하려면 PDOutlineItem 객체를 만들고 트리 구조로 연결해야 합니다. 다음은 예시 코드입니다.

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineNode;

public class AddBookmarkExample {

    public static void main(String[] args) {
        try {
            PDDocument document = new PDDocument();
            PDPage page = new PDPage();
            document.addPage(page);

            PDOutlineItem root = new PDOutlineItem();
            root.setTitle("Root");

            PDOutlineItem child1 = new PDOutlineItem();
            child1.setTitle("Child 1");
            PDOutlineItem child2 = new PDOutlineItem();
            child2.setTitle("Child 2");

            root.addLast(child1);
            root.addLast(child2);

            document.getDocumentCatalog().setDocumentOutline(root);

            document.save("output.pdf");
            document.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 예시 코드에서는 빈 PDF 문서를 생성하고 root라는 루트 북마크를 만들었습니다. 두 개의 자식 북마크인 child1child2를 생성하고, root에 추가했습니다. 마지막으로 북마크를 문서의 개요 정보로 설정하고, PDF 문서를 저장합니다.

3. PDF에 책갈피 추가하기

PDF 파일에 책갈피를 추가하려면 해당 책갈피의 위치를 지정해야 합니다. 다음은 예시 코드입니다.

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

public class AddBookmarkExample {

    public static void main(String[] args) {
        try {
            PDDocument document = PDDocument.load(new File("input.pdf"));
            PDPage page = document.getPage(0);

            PDPageFitWidthDestination destination = new PDPageFitWidthDestination();
            destination.setPage(page);
            PDOutlineItem bookmark = new PDOutlineItem();
            bookmark.setTitle("Bookmark Title");
            bookmark.setDestination(destination);

            PDDocumentOutline outline = document.getDocumentCatalog().getDocumentOutline();
            if (outline == null) {
                outline = new PDDocumentOutline();
                document.getDocumentCatalog().setDocumentOutline(outline);
            }

            outline.addLast(bookmark);

            document.save("output.pdf");
            document.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 예시 코드에서는 input.pdf 파일을 로드하고 첫 번째 페이지를 가져옵니다. 그리고 PDPageFitWidthDestination을 사용하여 책갈피의 목적지를 설정하고, 책갈피를 생성한 후 문서의 책갈피 목록에 추가합니다. 마지막으로 PDF 문서를 저장합니다.

참고 자료