[java] Apache FOP의 사용 방법

Apache FOP는 XML 기반의 포맷팅 객체를 사용하여 PDF와 기타 출력 형식을 생성하는 Java 프로그램이다. 이 기술 블로그에서는 Apache FOP를 사용하여 XML 파일을 이용하여 PDF를 생성하는 방법을 다루고 있다.

1. Apache FOP 다운로드 및 설치

Apache FOP는 공식 웹사이트에서 다운로드할 수 있다. 압축을 해제하고 환경변수를 설정하여 설치를 마무리한다.

2. XML 파일 작성

PDF로 변환하고자 하는 내용을 XML 포맷으로 작성해야 한다. 예를 들어, 아래와 같이 간단한 XML 파일을 작성할 수 있다.

<content>
    <title>Hello, World!</title>
    <body>This is a sample PDF generated using Apache FOP.</body>
</content>

3. XSL-FO 템플릿 작성

XML 파일을 PDF로 변환하기 위해 XSL-FO(Extensible Stylesheet Language Formatting Objects) 템플릿을 작성해야 한다. 아래는 간단한 예시이다.

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
        <fo:simple-page-master master-name="A4">
            <fo:region-body margin="1in"/>
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="A4">
        <fo:flow flow-name="xsl-region-body">
            <fo:block font-size="16pt" font-weight="bold">
                <xsl:value-of select="content/title"/>
            </fo:block>
            <fo:block font-size="12pt" padding-top="12pt">
                <xsl:value-of select="content/body"/>
            </fo:block>
        </fo:flow>
    </fo:page-sequence>
</fo:root>

4. Apache FOP 사용하여 PDF 생성

Apache FOP를 사용하여 XML과 XSL-FO를 이용하여 PDF를 생성할 수 있다. 아래 코드는 Java로 작성된 예시이다.

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

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.File;
import java.io.OutputStream;

public class ApacheFOPExample {
    public static void main(String[] args) {
        try {
            FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());
            OutputStream out = new java.io.FileOutputStream("output.pdf");
            Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
            TransformerFactory factory = TransformerFactory.newInstance();
            Transformer transformer = factory.newTransformer(new StreamSource(new File("template.xsl")));
            transformer.transform(new StreamSource(new File("input.xml")), new StreamResult(fop.getDefaultHandler()));
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

위의 예시 코드는 Apache FOP를 사용하여 XML과 XSL-FO를 이용하여 input.xml 파일을 template.xsl 템플릿에 따라 output.pdf라는 이름의 PDF 파일로 생성하는 방법을 보여준다.

Apache FOP를 사용하여 XML 파일을 PDF로 변환하는 방법을 이해했다면, 이제 본인의 프로젝트에 적용해 보는 것을 고려해 볼 수 있다.