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로 처리하여 보고서나 문서를 생성하고, 필요에 따라 다양한 출력 형식으로 변환할 수 있습니다.
참고 자료: