[java] Java Apache FOP와 데이터베이스 통합

Apache FOP(Formatting Objects Processor)은 XSL-FO(XML Stylesheet Language - Formatting Objects) 문서를 포맷하여 PDF, PNG, TIFF 등의 출력 형식으로 변환하는 Java 기반의 오픈 소스 라이브러리입니다. 데이터베이스에서 가져온 동적 데이터를 FOP와 통합하여 PDF 또는 다른 형식의 문서로 생성할 수 있는데, 이를 통해 보고서, 청구서, 이메일 등의 문서 자동 생성에 유용하게 사용할 수 있습니다.

FOP 설정

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

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

데이터베이스 연동

FOP와 데이터베이스를 연동하기 위해서는 데이터베이스에서 필요한 데이터를 가져와야 합니다. Java에서는 JDBC(Java Database Connectivity) API를 사용하여 데이터베이스에 연결하고 쿼리를 실행할 수 있습니다. JDBC 드라이버를 추가하고, 연결 설정 및 쿼리 실행을 위한 코드를 작성합니다.

import java.sql.*;

public class DatabaseExample {
    public static void main(String[] args) {
        try {
            // JDBC 드라이버 로드
            Class.forName("com.mysql.jdbc.Driver");

            // 데이터베이스 연결
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password");

            // 쿼리 실행
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery("SELECT * FROM mytable");

            // 결과 처리
            while (resultSet.next()) {
                String column1 = resultSet.getString("column1");
                int column2 = resultSet.getInt("column2");

                // FOP와 통합하여 문서 생성
                generatePDF(column1, column2);
            }

            // 연결 종료
            resultSet.close();
            statement.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void generatePDF(String data1, int data2) {
        // FOP를 사용하여 PDF 문서 생성
        // ...
    }
}

FOP를 사용한 문서 생성

FOP를 사용하여 데이터베이스에서 가져온 데이터로 문서를 생성하는 방법은 크게 두 가지입니다. 첫 번째 방법은 XSL-FO 문서를 직접 작성하고 데이터를 동적으로 삽입하는 것이고, 두 번째 방법은 프로그래밍 방식으로 FOP를 구성하고 데이터를 주입하는 것입니다.

XSL-FO 문서에 데이터 삽입 예시:

<fo:block>
    <xsl:value-of select="column1"/>
</fo:block>
<fo:block>
    <xsl:value-of select="column2"/>
</fo:block>

프로그래밍 방식으로 FOP를 구성하는 예시:

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

import org.apache.fop.apps.*;

public class FOPExample {
    public static void main(String[] args) {
        try {
            FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());
            FOUserAgent userAgent = fopFactory.newFOUserAgent();

            // 출력 형식 지정 (PDF)
            File outFile = new File("output.pdf");
            FileOutputStream outputStream = new FileOutputStream(outFile);

            // FOP 인스턴스 생성
            Fop fop = fopFactory.newFop(org.apache.xmlgraphics.util.MimeConstants.MIME_PDF, userAgent, outputStream);

            // XML 입력 스트림 생성
            // ...

            // XSLT 변환
            // ...

            // FOP를 사용하여 PDF 생성
            // ...

            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

이렇게 FOP와 데이터베이스를 통합하여 자동 문서 생성을 구현할 수 있습니다. 데이터베이스에서 가져온 동적 데이터를 FOP로 처리하여 보고서나 문서를 생성하고, 필요에 따라 다양한 출력 형식으로 변환할 수 있습니다.


참고 자료: