[java] Java Apache FOP를 이용한 PDF 생성 방법

Java Apache FOP (Formatting Objects Processor)는 XML 기반의 포맷팅 객체를 사용하여 PDF 및 다른 출력 형식을 생성하는 데 사용되는 오픈 소스 프레임워크입니다. 이 블로그 포스트에서는 Java Apache FOP를 사용하여 PDF를 생성하는 방법에 대해 알아보겠습니다.

1. Apache FOP 설치

먼저, Apache FOP를 설치해야 합니다. Apache FOP는 Apache 웹 사이트에서 다운로드할 수 있습니다. 다음은 설치 단계입니다:

  1. Apache FOP 다운로드 페이지로 이동합니다.
  2. 원하는 버전의 Apache FOP를 선택하고 다운로드합니다.
  3. 압축 파일을 원하는 디렉토리로 추출합니다.

2. 프로젝트 설정

Apache FOP를 사용하기 위해 프로젝트에 라이브러리를 추가해야 합니다. 프로젝트의 의존성 관리 도구, 예를 들어 Maven이나 Gradle을 사용하는 경우, 다음과 같이 의존성을 추가할 수 있습니다:

Maven 사용 시

<dependency>
    <groupId>org.apache.xmlgraphics</groupId>
    <artifactId>fop</artifactId>
    <version>2.6</version>
</dependency>

Gradle 사용 시

implementation 'org.apache.xmlgraphics:fop:2.6'

3. XML 및 XSL 파일 작성

PDF로 변환할 XML 파일과 XML 데이터를 스타일링할 XSL 파일을 작성해야 합니다. 이 예제에서는 다음과 같은 XML과 XSL 파일을 사용합니다:

sample.xml

<?xml version="1.0" encoding="UTF-8"?>
<person>
    <name>John Doe</name>
    <age>30</age>
    <email>john.doe@example.com</email>
</person>

sample.xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/">
        <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
            <fo:layout-master-set>
                <fo:simple-page-master master-name="my-page">
                    <fo:region-body/>
                </fo:simple-page-master>
            </fo:layout-master-set>
            <fo:page-sequence master-reference="my-page">
                <fo:flow flow-name="xsl-region-body">
                    <fo:block>
                        <xsl:value-of select="person/name"/> is <xsl:value-of select="person/age"/> years old.
                        Email: <xsl:value-of select="person/email"/>
                    </fo:block>
                </fo:flow>
            </fo:page-sequence>
        </fo:root>
    </xsl:template>
</xsl:stylesheet>

4. Java 코드 작성

이제 PDF 파일을 생성하는 Java 코드를 작성해보겠습니다. 다음은 Java Apache FOP를 사용하여 PDF를 생성하는 코드입니다:

import org.apache.fop.apps.*;

public class PDFGenerator {

    public static void main(String[] args) {
        try {
            // Apache FOP 설정
            FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());

            // PDF 생성을 위한 OutputStream 생성
            OutputStream out = new BufferedOutputStream(new FileOutputStream("output.pdf"));

            // Apache FOP 사용하여 PDF 생성
            Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);

            // XML 및 XSL 파일을 사용하여 FO (Formatting Objects) 생성
            File xmlFile = new File("sample.xml");
            File xslFile = new File("sample.xsl");
            StreamSource xmlSource = new StreamSource(xmlFile);
            StreamSource xslSource = new StreamSource(xslFile);
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer(xslSource);
            Result result = new SAXResult(fop.getDefaultHandler());

            // XML 및 XSL 파일을 사용하여 PDF 생성
            transformer.transform(xmlSource, result);

            // PDF 생성 완료
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

위의 코드에서는 Apache FOP를 사용하여 sample.xml과 sample.xsl 파일을 사용하여 FO (Formatting Objects)를 생성하고, 이를 PDF로 변환하여 output.pdf 파일로 저장합니다.

5. PDF 생성 및 확인

Java 코드를 실행하여 PDF를 생성합니다. 코드 실행 후 output.pdf 파일이 생성되었는지 확인합니다. 생성된 PDF를 열어보면 XML 및 XSL 파일에 정의된 형식을 따라 포맷팅된 데이터를 확인할 수 있습니다.

결론

Java Apache FOP를 사용하면 XML 및 XSL 파일을 사용하여 PDF를 생성할 수 있습니다. 위의 단계를 따라가면 Java Apache FOP를 사용하여 PDF 생성을 손쉽게 구현할 수 있습니다. 추가적인 세부 설정 및 기능에 대해 알아보려면 Apache FOP 공식 문서를 참조하시기 바랍니다.

참고 자료