[java] Java Apache FOP와 CSS(스타일시트) 적용 방법

Java Apache FOP는 XML 기반의 문서를 PDF, PNG, PS 등의 포맷으로 변환해주는 오픈 소스 라이브러리입니다. 이 라이브러리를 사용하여 PDF 문서를 생성할 때, 스타일시트(CSS)를 적용하여 문서의 디자인을 지정할 수 있습니다.

1. FOP 라이브러리 설치

먼저, Java Apache FOP 라이브러리를 다운로드하고 설치해야 합니다. 다음의 단계를 따르세요:

  1. Apache FOP 웹사이트에 접속하여 라이브러리 파일을 다운로드합니다.
  2. 다운로드한 압축 파일을 원하는 위치에 해제합니다.

2. 프로젝트 설정

이제 Java 프로젝트에서 Apache FOP를 사용할 수 있도록 설정해야 합니다. 다음의 단계를 따르세요:

  1. Java 프로젝트의 build path에 Apache FOP 라이브러리를 추가합니다.
  2. 필요한 의존성을 정의하기 위해 프로젝트의 pom.xml(Maven)이나 build.gradle(Gradle) 파일에 Apache FOP를 추가합니다.

3. XML 및 XSL-FO 파일 작성

Apache FOP를 사용하여 PDF를 생성하려면, 변환할 XML 파일과 그에 대한 XSL-FO 파일이 필요합니다. XSL-FO는 XML 기반의 문서를 PDF, PS 등의 형식으로 변환하기 위한 마크업 언어입니다.

아래는 간단한 XML과 XSL-FO 예제입니다. 이 예제는 XML 문서를 PDF로 변환하고, CSS 파일을 적용하여 디자인을 지정합니다.

<!-- data.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<person>
    <name>John Doe</name>
    <age>30</age>
</person>
<!-- stylesheet.xsl -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
            <fo:layout-master-set>
                <fo:simple-page-master master-name="A4" page-height="297mm" page-width="210mm">
                    <fo:region-body margin="20mm" padding="10mm" background-color="#F0F0F0" />
                </fo:simple-page-master>
            </fo:layout-master-set>
            <fo:page-sequence master-reference="A4">
                <fo:flow flow-name="xsl-region-body">
                    <fo:block font-size="14pt">
                        <xsl:value-of select="/person/name" />
                    </fo:block>
                    <fo:block font-size="12pt">
                        <xsl:value-of select="/person/age" />
                    </fo:block>
                </fo:flow>
            </fo:page-sequence>
        </fo:root>
    </xsl:template>
</xsl:stylesheet>

4. 스타일시트(CSS) 작성

PDF 문서의 디자인을 지정하기 위해 CSS 파일을 작성해야 합니다. 스타일시트를 다음과 같이 작성하세요:

/* style.css */
fo|root {
    font-family: Arial, sans-serif;
}

fo|block {
    margin-bottom: 10pt;
}

5. Java 코드로 PDF 생성

이제 Java 코드에서 Apache FOP를 사용하여 XML과 XSL-FO를 로드하고 PDF를 생성할 수 있습니다.

아래의 코드를 사용하여 스타일시트(CSS)를 적용하여 XML을 PDF로 변환하세요:

import org.apache.fop.apps.*;

public class FopExample {
    public static void main(String[] args) {
        try {
            FopFactory fopFactory = FopFactory.newInstance(new File("path/to/fop.xconf"));
            FOUserAgent foUserAgent = fopFactory.newFOUserAgent();

            // XML 및 XSL-FO 파일 로드
            File xmlFile = new File("path/to/data.xml");
            StreamSource xmlSource = new StreamSource(xmlFile);
            File xsltFile = new File("path/to/stylesheet.xsl");
            StreamSource xsltSource = new StreamSource(xsltFile);

            // PDF 파일 생성
            File pdfFile = new File("path/to/output.pdf");
            OutputStream outputStream = new java.io.FileOutputStream(pdfFile);
            Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, outputStream);
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer(xsltSource);
            transformer.transform(xmlSource, new SAXResult(fop.getDefaultHandler()));
            outputStream.close();

            System.out.println("PDF 생성 완료: " + pdfFile.getAbsolutePath());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

위의 코드에서 path/to/fop.xconf, path/to/data.xml, path/to/stylesheet.xsl, path/to/output.pdf는 실제 파일 경로로 변경해야 합니다.

이제 Java 프로그램을 실행하면 XML과 XSL-FO를 사용하여 스타일시트를 적용한 PDF 파일이 생성됩니다.

위의 단계를 따라하면 Java Apache FOP와 CSS를 사용하여 XML을 PDF로 변환하는 것이 가능합니다. 자세한 내용은 Apache FOP 공식 웹사이트를 참조하세요.