Apache FOP는 XML 형식의 데이터를 사용하여 PDF, PostScript, AFP 등의 문서 형식으로 변환하는 데 사용되는 Java 기반의 오픈 소스 라이브러리입니다. 이 글에서는 Java Apache FOP와 웹 기반 문서 뷰어를 연동하는 방법에 대해 알아보겠습니다.
1. Apache FOP 설치하기
먼저, Apache FOP를 다운로드하고 설치해야 합니다. Apache FOP의 공식 웹사이트에서 소스 파일을 다운로드하거나, Maven을 사용하여 의존성을 추가할 수 있습니다.
2. XML로부터 PDF 생성하기
Apache FOP를 사용하여 XML 데이터로부터 PDF 문서를 생성하는 예제를 살펴보겠습니다. 아래는 XML 데이터와 XSLT 스타일시트를 사용하여 PDF를 생성하는 Java 코드입니다.
import java.io.File;
import java.io.FileOutputStream;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.stream.StreamSource;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory;
import org.apache.xmlgraphics.util.MimeConstants;
public class XMLToPDFConverter {
public static void main(String[] args) {
try {
// XML 및 XSLT 파일 경로 설정
File xmlFile = new File("data.xml");
File xsltFile = new File("stylesheet.xsl");
// FOP 팩토리 및 FOP 생성
FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, new FileOutputStream("output.pdf"));
// XSLT 트랜스포머 생성
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer(new StreamSource(xsltFile));
// FOP에 대한 결과 설정
Result result = new SAXResult(fop.getDefaultHandler());
// XML에서 PDF로 변환
Source source = new StreamSource(xmlFile);
transformer.transform(source, result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
위의 코드에서는 data.xml
파일과 stylesheet.xsl
파일을 사용하여 XML 데이터에서 PDF 문서를 생성합니다. FopFactory
를 사용하여 Fop
객체를 생성하고, TransformerFactory
를 사용하여 XSLT 트랜스포머를 생성합니다. 그리고 SAXResult
를 사용하여 FOP에 대한 결과를 설정하고, StreamSource
를 사용하여 XML 데이터를 읽어들입니다. 마지막으로 transform()
메서드를 호출하여 XML을 PDF로 변환합니다.
3. 웹 기반 문서 뷰어 연동하기
Apache FOP를 사용하여 생성된 PDF 문서를 웹 기반 문서 뷰어에 연동하여 사용자에게 보여줄 수 있습니다. 여기서는 PDF.js를 예로 들겠습니다. PDF.js는 웹 브라우저에서 PDF 파일을 렌더링하는 JavaScript 라이브러리입니다.
3.1. PDF.js 다운로드하기
PDF.js를 사용하기 위해 먼저 다운로드해야 합니다. PDF.js의 공식 GitHub 저장소에서 소스 파일을 다운로드하거나, npm을 사용하여 패키지를 설치할 수 있습니다.
3.2. HTML에 PDF.js 추가
다음은 PDF.js를 사용하여 PDF 파일을 보여주는 간단한 HTML 예제입니다. 아래 코드를 웹 페이지에 추가하면 PDF.js를 사용하여 문서 뷰어를 연동할 수 있습니다.
<!DOCTYPE html>
<html>
<head>
<title>PDF Viewer</title>
<style>
#pdfviewer {
width: 100%;
height: 100vh;
}
</style>
</head>
<body>
<div id="pdfviewer"></div>
<script src="pdf.js"></script>
<script src="pdf.worker.js"></script>
<script>
// PDF.js를 사용하여 PDF 보기
var pdfViewer = document.getElementById('pdfviewer');
var pdfjsLib = window['pdfjs-dist/build/pdf'];
pdfjsLib.GlobalWorkerOptions.workerSrc = 'pdf.worker.js';
var loadingTask = pdfjsLib.getDocument('output.pdf');
loadingTask.promise.then(function(pdf) {
pdf.getPage(1).then(function(page) {
var canvas = document.createElement('canvas');
pdfViewer.appendChild(canvas);
var context = canvas.getContext('2d');
var viewport = page.getViewport({ scale: 1.5 });
canvas.width = viewport.width;
canvas.height = viewport.height;
var renderContext = {
canvasContext: context,
viewport: viewport
};
page.render(renderContext);
});
});
</script>
</body>
</html>
위의 코드에서는 PDF.js 스크립트 파일을 포함하고, pdf.viewer
엘리먼트를 만들어 PDF를 렌더링하는 JavaScript 코드를 작성하였습니다. pdfjsLib.getDocument('output.pdf')
을 사용하여 PDF를 로드하고, getPage(1)
을 사용하여 첫 번째 페이지를 가져옵니다. 그리고 canvas
엘리먼트를 생성하여 페이지를 렌더링합니다.
4. 결론
이번 글에서는 Java Apache FOP와 웹 기반 문서 뷰어를 연동하는 방법을 알아보았습니다. Apache FOP를 사용하여 XML 데이터에서 PDF 문서를 생성하고, 그 결과를 웹 기반 문서 뷰어에 연동하여 사용자에게 보여줄 수 있습니다. PDF.js를 사용한 예제를 통해 실제로 PDF 파일을 브라우저에서 렌더링하는 방법을 확인할 수 있었습니다.