[java] PDF 파일에 폰트 임베딩하기(Java Apache PDFBox 사용)

PDF 파일에 한글 텍스트를 포함시킬 때, 폰트가 제대로 표시되지 않을 수 있습니다. 이는 PDF 파일에 사용된 폰트가 해당 폰트를 사용할 수 없는 컴퓨터에서 열릴 때 발생합니다. 이를 해결하기 위해 폰트를 PDF 파일에 임베딩해야 합니다.

이 블로그 포스트에서는 Java Apache PDFBox 라이브러리를 사용하여 PDF 파일에 폰트를 임베딩하는 방법을 알아보겠습니다.

1. Apache PDFBox 라이브러리 추가하기

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>{PDFBox 버전}</version>
</dependency>

Maven 프로젝트에서 위의 내용을 pom.xml 파일에 추가하여 Apache PDFBox 라이브러리를 추가합니다. {PDFBox 버전}은 사용하는 버전으로 변경해야 합니다.

2. 폰트 파일 가져오기

임베딩할 폰트 파일을 준비해야 합니다. 이 예제에서는 .ttf 파일 형식을 사용하겠습니다. 원하는 폰트 파일을 인터넷에서 다운로드하거나, 시스템에 이미 설치된 폰트 파일을 사용할 수도 있습니다.

3. 폰트 임베딩 코드 작성하기

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import java.io.IOException;

public class EmbedFontExample {
    public static void main(String[] args) {
        try {
            // 1. PDF 문서 생성
            PDDocument document = new PDDocument();
            PDPage page = new PDPage(PDRectangle.A4);
            document.addPage(page);
            
            // 2. 폰트 파일 로드
            PDType0Font font = PDType0Font.load(document, new File("폰트 파일 경로.ttf"));
            
            // 3. 폰트 설정
            PDFontSetting setting = new PDFontSetting();
            setting.setFont(font);
            
            // 4. 텍스트 추가
            PDPageContentStream contentStream = new PDPageContentStream(document, page);
            contentStream.setFont(font, 12);
            contentStream.beginText();
            contentStream.newLineAtOffset(100, 700);
            contentStream.showText("안녕하세요, PDF에 임베딩된 폰트로 작성된 한글 텍스트입니다.");
            contentStream.endText();
            contentStream.close();
            
            // 5. PDF 파일 저장
            document.save("저장할 PDF 파일 경로.pdf");
            document.close();
            
            System.out.println("PDF 파일에 폰트가 임베딩되었습니다.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위의 예제 코드에서는 PDFBox 라이브러리의 PDType0Font 클래스를 사용하여 폰트 파일을 로드합니다. PDType0Font.load() 메서드를 호출할 때, 첫 번째 인자로 사용할 PDDocument 객체를 전달하고, 두 번째 인자로 폰트 파일의 File 객체를 전달합니다.

폰트를 설정할 때에는 PDFontSetting 클래스를 사용하여 사용할 폰트를 설정합니다. 이 예제에서는 setFont() 메서드를 호출하여 폰트를 설정하고, setFont() 메서드를 통해 폰트 크기도 설정합니다.

텍스트를 추가할 때에는 PDPageContentStream 클래스를 사용하여 페이지에 텍스트를 작성합니다. setFont() 메서드를 통해 폰트를 설정한 후, beginText() 메서드를 호출하여 텍스트 작성을 시작하고, showText() 메서드로 텍스트를 표시한 뒤, endText() 메서드로 텍스트 작성을 종료합니다.

마지막으로, PDF 파일을 저장할 때 document.save() 메서드로 파일을 저장하고, document.close() 메서드로 문서를 닫습니다.

4. 실행 결과 확인하기

위의 코드를 실행하면, 선택한 폰트 파일이 임베딩된 PDF 파일이 생성됩니다. 생성된 PDF 파일을 열어보면 한글 텍스트가 제대로 표시되는 것을 확인할 수 있습니다.

이제 Java Apache PDFBox를 사용하여 PDF 파일에 폰트를 임베딩하는 방법을 알게 되었습니다. 이를 통해 한글 텍스트가 정확하게 표시되는 PDF 파일을 생성할 수 있습니다.

참고 자료