[java] Java Apache FOP를 이용한 고급 문서 생성 기법

Java Apache FOP는 고급 문서 생성을 위한 강력한 도구입니다. FOP는 XSL-FO (XSL Formatting Objects) 언어를 사용하여 XML 기반의 문서를 PDF, PostScript, AFP, PCL, RTF 등 다양한 형식으로 변환할 수 있습니다. 이 글에서는 Java Apache FOP를 사용하여 고급 문서 생성 기법을 알아보겠습니다.

1. FOP 라이브러리 추가하기

먼저, 프로젝트에 FOP 라이브러리를 추가해야 합니다. Maven을 사용하는 경우 pom.xml 파일에 아래 의존성을 추가합니다.

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

Maven을 사용하지 않는 경우, FOP 라이브러리를 Apache FOP 공식 웹사이트에서 직접 다운로드하여 프로젝트에 추가해야 합니다.

2. XML과 XSL-FO 파일 작성하기

FOP를 사용하기 위해서는 XML 파일과 이를 기반으로한 XSL-FO 파일이 필요합니다. XML 파일은 문서의 내용을 기술하고, XSL-FO 파일은 문서의 형식과 레이아웃을 기술합니다.

XML 파일 예시:

<document>
    <title>Hello, FOP!</title>
    <section>
        <title>Introduction</title>
        <paragraph>This is a sample document created using Apache FOP.</paragraph>
    </section>
</document>

XSL-FO 파일 예시:

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
        <fo:simple-page-master master-name="A4" page-height="29.7cm" page-width="21cm">
            <fo:region-body margin="2cm" />
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="A4">
        <fo:flow flow-name="xsl-region-body">
            <fo:block font-weight="bold" font-size="20pt">
                <xsl:value-of select="//title" />
            </fo:block>
            <fo:block font-size="12pt">
                <xsl:value-of select="//paragraph" />
            </fo:block>
        </fo:flow>
    </fo:page-sequence>
</fo:root>

3. FOP를 이용한 문서 생성하기

문서를 생성하기 위해 FOP를 사용할 수 있습니다. 아래 코드는 Java에서 FOP를 이용하여 XML과 XSL-FO 파일을 읽고, PDF로 변환하는 예시입니다.

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

import javax.xml.transform.Result;
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;
import java.io.File;
import java.io.FileOutputStream;

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

            // 출력 파일 생성
            File pdfFile = new File("output.pdf");
            FileOutputStream outputStream = new FileOutputStream(pdfFile);

            // FOP 프로세서 생성
            Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, outputStream);

            // XML 파일 및 XSL-FO 파일 로드
            File xmlFile = new File("input.xml");
            Source xslFoFile = new StreamSource(new File("template.xsl"));

            // 변환할 문서 설정
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer(xslFoFile);

            // FOP를 이용하여 PDF 생성
            Source source = new StreamSource(xmlFile);
            Result result = new SAXResult(fop.getDefaultHandler());
            transformer.transform(source, result);

            // 출력 파일 저장
            outputStream.close();

            System.out.println("PDF 생성 완료!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

결론

Java Apache FOP는 고급 문서 생성 기법을 구현하는 데 유용한 도구입니다. XML과 XSL-FO 파일을 만들고, FOP를 사용하여 다양한 형식의 문서로 변환할 수 있습니다. 이를 통해 프로젝트에서 문서 생성의 자동화와 유연성을 쉽게 구현할 수 있습니다. 추가적인 정보는 Apache FOP 공식 웹사이트에서 확인할 수 있습니다.