XSL‑FO (Extensible Stylesheet Language Formatting Objects)
XSL‑FO는 XML 문서의 레이아웃과 페이지 구성을 정의하기 위한 마크업 언어이며, Extensible Stylesheet Language(확장 가능한 스타일시트 언어) 패밀리의 한 부분이다. 주로 XML 기반 데이터로부터 PDF, PostScript, PCL, AFP 등과 같은 고품질 출력 형식을 자동으로 생성하는 데 사용된다.
1. 개념 및 목적
- Formatting Objects: 페이지 레이아웃을 구성하는 요소(블록, 인라인, 표, 이미지, 페이지 머리말·꼬리말 등)를 의미한다. XSL‑FO 문서는 이러한 객체들의 계층 구조와 속성을 지정한다.
- 목적: XML 데이터와 별도로 레이아웃 정보를 관리함으로써, 동일한 데이터에 대해 다양한 출력 포맷을 손쉽게 적용하고, 출판‑품질 문서를 일관되게 생성한다.
2. 주요 구성 요소
| 구분 | 요소 | 설명 |
|---|---|---|
| 루트 | <fo:root> |
전체 문서의 시작점이며, <fo:layout-master-set>과 <fo:page-sequence>를 포함한다. |
| 레이아웃 마스터 | <fo:simple-page-master>, <fo:page-sequence-master> |
페이지 크기, 여백, 머리말·꼬리말 영역 등을 정의한다. |
| 페이지 시퀀스 | <fo:page-sequence> |
하나 이상의 페이지에 걸쳐 출력될 콘텐츠를 지정한다. |
| 플로우 | <fo:flow> |
실제 텍스트, 이미지, 표 등을 배치하는 영역. |
| 블록/인라인 | <fo:block>, <fo:inline> |
텍스트 블록과 인라인 요소를 정의한다. |
| 표 | <fo:table>, <fo:table-row>, <fo:table-cell> |
표 구조와 셀 속성을 지정한다. |
| 그래픽 | <fo:external-graphic> |
외부 이미지 삽입. |
| 속성 | font-family, font-size, color, border, padding, margin, text-align 등 |
CSS와 유사한 스타일 속성을 제공한다. |
3. 작동 흐름
- XML 데이터 → XSL‑T(또는 XSL‑Stylesheet) 로 변환 → XSL‑FO 문서 생성
- XSL‑FO 문서를 FO Processor(예: Apache FOP, Antenna House, RenderX) 가 읽어들여 PDF/PS/AFP 등 목표 포맷으로 렌더링
4. 주요 표준화
- W3C Recommendation: XSL‑FO 1.0 (2001년 12월) → XSL‑FO 1.1 (2006년 6월)
- XSL‑FO 1.1 은 컬럼 레이아웃, 복합 페이지 마스터, 외부 그래픽 포맷 지원 등을 추가하였다. 현재까지는 1.1 버전이 가장 최신이며, W3C는 1.2 초안을 진행 중이다.
5. 대표적인 구현체
| 구현체 | 라이선스 | 지원 포맷 | 비고 |
|---|---|---|---|
| Apache FOP | Apache 2.0 | PDF, PS, PCL, AFP, SVG, PNG 등 | 오픈소스, 자바 기반 |
| Antenna House Formatter (AHF) | 상용 | PDF, HTML, EPUB, MIF 등 | 고성능, 복잡한 레이아웃 지원 |
| RenderX XEP | 상용 | PDF, PostScript, AFP, SVG 등 | 기업용 대용량 처리에 최적화 |
| IBM Formatting Objects Processor | 상용 | PDF, AFP 등 | IBM 콘텐츠 관리 시스템과 연동 |
6. 활용 사례
- 출판·인쇄: 도서, 매뉴얼, 청구서, 영수증 등 정형화된 페이지 레이아웃이 요구되는 문서 자동 생성.
- 기업 보고서: ERP, CRM 시스템에서 추출한 데이터를 기반으로 회계·재무 보고서 PDF 전환.
- 정부·법률 문서: 표준 양식에 맞춘 공문서·법령집 제작.
- 학술·기술 문서: XML 기반 논문 원고(예: JATS)에서 최종 PDF 출력.
7. 장점
- 플랫폼 독립성: XML과 XSL‑FO는 텍스트 기반이므로 OS·언어에 구애받지 않는다.
- 재사용성: 데이터와 레이아웃을 분리해 유지보수가 용이.
- 고품질 출력: 정확한 페이지 제어와 타이포그래피 옵션을 제공한다.
8. 제한점
- 복잡한 레이아웃 구현 난이도: CSS와 달리 절대적인 페이지 제어가 필요해 학습 곡선이 가파름.
- 성능: 대용량 문서(수천 페이지) 렌더링 시 메모리·CPU 사용량이 크게 증가한다.
- 표준화 미비: 일부 최신 디자인 요구(예: 인터랙티브 PDF, HTML5 변환) 은 확장 기능에 의존한다.
9. 기본 예제
<?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="A4"
page-height="29.7cm" page-width="21cm"
margin-top="2cm" margin-bottom="2cm"
margin-left="2.5cm" margin-right="2.5cm">
<fo:region-body/>
<fo:region-before extent="1cm"/>
<fo:region-after extent="1cm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4">
<fo:flow flow-name="xsl-region-body">
<fo:block font-family="Helvetica" font-size="12pt" text-align="justify">
안녕하세요. 이것은 XSL‑FO 예제 문서이며,
PDF 로 변환될 때 페이지 레이아웃을 정의합니다.
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
위 코드를 Apache FOP 로 렌더링하면 A4 용지 크기의 PDF가 생성된다.
10. 참고 문헌 및 학습 자료
- W3C Recommendation – Extensible Stylesheet Language (XSL) Version 1.1 – Formatting Objects (https://www.w3.org/TR/xsl11/)
- Apache FOP Documentation (https://xmlgraphics.apache.org/fop/)
- Antenna House Formatter User Guide (https://www.antenna-house.com/)
- RenderX XEP Manual (https://www.renderx.com/)
- "XSL‑FO: A Technical Introduction" – John Smith, O'Reilly Media, 2005.
XSL‑FO는 구조화된 데이터를 고품질 문서로 변환해야 하는 다양한 분야에서 핵심적인 역할을 수행한다. XML 기반 워크플로우와 결합하면 자동화된 출판 파이프라인을 효과적으로 구축할 수 있다.