[java] Java Apache FOP와 표 생성
Apache FOP는 Java 기반의 오픈 소스 프로젝트로, XML 기반의 포맷을 사용하여 PDF 파일을 생성할 수 있는 도구입니다. 이번 포스트에서는 Apache FOP를 사용하여 Java에서 표를 생성하는 방법에 대해 알아보겠습니다.
Apache FOP 설치
먼저 Apache FOP를 사용하기 위해서는 다음과 같이 Apache FOP를 다운로드하고 설치해야 합니다.
- Apache FOP의 공식 웹사이트(https://xmlgraphics.apache.org/fop/download.html)에서 최신 버전의 Apache FOP를 다운로드합니다.
- 압축 파일을 원하는 디렉토리에 추출합니다.
XML 파일과 XSL-FO 파일 작성
Apache FOP를 사용하여 표를 생성하기 위해서는 XML 파일과 XSL-FO 파일이 필요합니다. 먼저 XML 파일을 작성해보겠습니다. 다음은 예시 XML 파일입니다.
<?xml version="1.0" encoding="UTF-8"?>
<employees>
<employee>
<name>John Doe</name>
<position>Software Engineer</position>
<salary>5000</salary>
</employee>
<employee>
<name>Jane Smith</name>
<position>Project Manager</position>
<salary>6000</salary>
</employee>
</employees>
다음으로 XSL-FO 파일을 작성해보겠습니다. XSL-FO는 XML 기반의 포맷으로, PDF 파일 생성을 지원하는데 사용됩니다. 다음은 예시 XSL-FO 파일입니다.
<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="simple" page-height="29.7cm" page-width="21cm" margin-top="1cm" margin-bottom="1cm" margin-left="2cm" margin-right="2cm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="simple">
<fo:flow flow-name="xsl-region-body">
<fo:table>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block>Name</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>Position</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>Salary</fo:block>
</fo:table-cell>
</fo:table-row>
<xsl:for-each select="employees/employee">
<fo:table-row>
<fo:table-cell>
<fo:block><xsl:value-of select="name"/></fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block><xsl:value-of select="position"/></fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block><xsl:value-of select="salary"/></fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>
</fo:table-body>
</fo:table>
</fo:flow>
</fo:page-sequence>
</fo:root>
Java 코드 작성
이제 Java 코드를 작성하여 Apache FOP를 사용하여 표를 생성해보겠습니다. 다음은 예시 Java 코드입니다.
import java.io.File;
import java.io.FileOutputStream;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory;
import org.apache.fop.apps.MimeConstants;
public class TableExample {
public static void main(String[] args) {
try {
// XML 파일과 XSL-FO 파일 경로 설정
File xmlFile = new File("employees.xml");
File xslfoFile = new File("table.xsl");
// FopFactory 생성
FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());
// 출력 파일 생성
File pdfFile = new File("table.pdf");
FileOutputStream outputStream = new FileOutputStream(pdfFile);
// Fop 생성 및 설정
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, outputStream);
// XSL-FO 파일 불러오기
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer(new StreamSource(xslfoFile));
// XML 파일을 Source로 변환
Source source = new StreamSource(xmlFile);
// PDF 생성
transformer.transform(source, fop.getDefaultHandler());
// 자원 해제
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
이 코드를 실행하면 employees.xml과 table.xsl 파일을 사용하여 table.pdf로 표가 생성됩니다.
마무리
이번 포스트에서는 Java Apache FOP를 사용하여 표를 생성하는 방법을 알아보았습니다. Apache FOP를 사용하면 XML 데이터와 XSL-FO 스타일시트를 이용하여 간단하게 표를 생성할 수 있습니다. 더 많은 기능을 사용하려면 Apache FOP의 공식 문서를 참조해보세요.