XSL-FO

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. 작동 흐름

  1. XML 데이터 → XSL‑T(또는 XSL‑Stylesheet) 로 변환 → XSL‑FO 문서 생성
  2. 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 RecommendationExtensible 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 기반 워크플로우와 결합하면 자동화된 출판 파이프라인을 효과적으로 구축할 수 있다.

둘러보기

더 찾아볼 만한 주제