[java] Java Apache FOP의 API 및 사용 예제

Apache FOP는 Java로 작성된 오픈 소스 프로젝트로, XSL-FO를 사용하여 XML 데이터를 PDF, PNG, AFP 등의 포맷으로 변환할 수 있습니다. 이번 포스트에서는 Apache FOP의 API와 몇 가지 사용 예제에 대해 알아보겠습니다.

1. Apache FOP 라이브러리 추가

먼저, Apache FOP를 사용하기 위해서는 프로젝트에 해당 라이브러리를 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음과 같이 의존성을 추가합니다:

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

Gradle을 사용하는 경우, build.gradle 파일에 다음과 같이 의존성을 추가합니다:

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

2. Apache FOP 사용 예제

2.1. XML 및 XSL-FO 파일 준비

먼저, 변환할 XML 파일과 XSL-FO 파일을 준비해야 합니다. 예를 들어, 다음과 같이 input.xmltemplate.xslfo 파일을 생성합니다:

input.xml:

<root>
    <name>John Doe</name>
    <age>30</age>
</root>

template.xslfo:

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
        <fo:simple-page-master master-name="A4" page-height="297mm" page-width="210mm">
            <fo:region-body margin="20mm"/>
        </fo:simple-page-master>
    </fo:layout-master-set>
    
    <fo:page-sequence master-reference="A4">
        <fo:flow flow-name="xsl-region-body">
            <fo:block>
                Hello, <xsl:value-of select="/root/name"/>!
                Your age is <xsl:value-of select="/root/age"/> years old.
            </fo:block>
        </fo:flow>
    </fo:page-sequence>
</fo:root>

2.2. XML과 XSL-FO 파일을 사용하여 PDF로 변환

이제, Java 코드를 작성하여 XML과 XSL-FO 파일을 사용하여 PDF로 변환해 봅시다. 아래 코드 예제를 참고해 주세요:

import java.io.File;
import java.io.FileOutputStream;

import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory;
import org.apache.fop.apps.MimeConstants;

import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.stream.StreamSource;

public class FOPExample {

    public static void main(String[] args) {
        try {
            // FopFactory 생성
            FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());

            // Fop 생성
            File outputFile = new File("output.pdf");
            FileOutputStream fos = new FileOutputStream(outputFile);
            Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, fos);

            // XSL-FO 파일 로드
            Source xslFoFile = new StreamSource(new File("template.xslfo"));

            // XML 파일 로드
            Source xmlFile = new StreamSource(new File("input.xml"));

            // 변환기 생성
            TransformerFactory factory = TransformerFactory.newInstance();
            Transformer transformer = factory.newTransformer(xslFoFile);

            // 변환 수행
            transformer.transform(xmlFile, new SAXResult(fop.getDefaultHandler()));

            // 출력 파일 닫기
            fos.close();
            System.out.println("PDF 변환 완료: " + outputFile.getAbsolutePath());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

위 코드에서 input.xmltemplate.xslfo 파일의 경로를 적절히 수정해 주세요. 코드를 실행하면 output.pdf 파일이 생성되고, 해당 파일을 열면 PDF로 변환된 결과를 확인할 수 있습니다.

결론

Java Apache FOP를 사용하여 XML 데이터를 다양한 형식으로 변환할 수 있습니다. 이 포스트에서는 Apache FOP의 API와 간단한 사용 예제에 대해 알아보았습니다. 관련 자세한 정보는 Apache FOP 공식 웹사이트를 참고하시기 바랍니다.