[java] Java Apache FOP를 사용하여 문서 출력하기

Java Apache FOP (Formatting Objects Processor)는 XML 기반의 데이터를 사용하여 PDF, AFP, PCL, PS, 표시 목록 등 다양한 형식의 문서를 생성하기 위한 오픈 소스 라이브러리입니다. FOP는 XSL-FO(Extensible Stylesheet Language - Formatting Objects)를 사용하여 문서의 레이아웃과 서식을 정의하고, 변환을 통해 실제 문서를 생성합니다. 이번 블로그 포스트에서는 Java Apache FOP를 사용하여 문서 출력하는 방법에 대해 알아보겠습니다.

FOP 설치

먼저, FOP를 사용하기 위해서는 Apache FOP를 다운로드하고 설치해야 합니다. 아래의 링크를 통해 Apache FOP의 공식 웹사이트로 접속하여 필요한 파일을 다운로드합니다.

Apache FOP 공식 웹사이트

Maven 설정

Maven 프로젝트를 사용하는 경우, pom.xml 파일에 FOP의 의존성을 추가해야 합니다. 아래의 코드를 pom.xml 파일에 추가합니다.

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

의존성을 추가한 후에는 Maven을 통해 프로젝트를 업데이트해야 합니다.

mvn clean install

FOP 사용 예제

이제 FOP를 사용하여 XML 데이터로부터 PDF 문서를 생성해보겠습니다.

import java.io.File;
import java.io.OutputStream;
import java.io.FileOutputStream;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.Source;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.sax.SAXResult;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory;
import org.apache.fop.apps.MimeConstants;

public class FOPExample {
    private static final String XSLT_FILE = "path/to/stylesheet.xsl";
    private static final String XML_FILE = "path/to/data.xml";
    private static final String OUTPUT_FILE = "path/to/output.pdf";

    public static void main(String[] args) throws Exception {
        FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());
        TransformerFactory transformerFactory = TransformerFactory.newInstance();

        File xsltFile = new File(XSLT_FILE);
        Source xsltSource = new StreamSource(xsltFile);

        File xmlFile = new File(XML_FILE);
        Source xmlSource = new StreamSource(xmlFile);

        OutputStream out = new FileOutputStream(OUTPUT_FILE);
        try {
            Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);

            Transformer transformer = transformerFactory.newTransformer(xsltSource);

            Result res = new SAXResult(fop.getDefaultHandler());

            transformer.transform(xmlSource, res);
        } finally {
            out.close();
        }
    }
}

위의 예제 코드에서는 XSLT_FILE 변수에 XSL 템플릿 파일의 경로, XML_FILE 변수에 XML 데이터 파일의 경로, OUTPUT_FILE 변수에 생성될 PDF 파일의 경로를 설정해야 합니다. Main 메서드에서는 FOP 및 Transformer 인스턴스를 생성하고, 입력 파일과 출력 파일을 설정한 후에 transform() 메서드를 호출하여 XML 데이터를 PDF로 변환합니다.

실행결과 확인

위 예제 코드를 실행하면 지정한 출력 경로에 PDF 파일이 생성됩니다. 이제 생성된 PDF 파일을 열어서 결과를 확인할 수 있습니다.

결론

Java Apache FOP를 사용하여 문서를 출력하는 방법에 대해 알아보았습니다. FOP를 사용하면 XML 데이터로부터 다양한 형식의 문서를 생성할 수 있으며, 이를 통해 화려하고 깔끔한 문서를 자동으로 생성할 수 있습니다. Java Apache FOP의 자세한 사용 방법에 대해서는 공식 문서를 참고하시기 바랍니다.

참고 자료