Developing XSL-FO Stylesheets

How to Develop Stylesheets for XML to XSL-FO Transformation

The 80 page XSL-FO tutorial 2nd Edition developed by Antenna House for customers of AH Formatter is made public adding the contents of indexes, functions for PDF creation, reference to appendix and much more substantial contents. This is not only useful for better understanding of XSL and XSLT but also this may be used as a practical sample of XML and XSLT stylesheet.

  1. This is the source file of the XSL-FO tutorial.
  2. The source file is an XML document based on “SimpleDoc.dtd“.
  3. This is the XSLT Stylesheet to transform the source XML file to XSL (XSL-FO) formatting objects tree.
  4. You may download source files from here: ZIP file (about 270KB) Then you can format xml/Howtodevelop-en-2.xml and SimpleDoc/SD2FO-DOC.xsl using AH Formatter by yourself.
  5. The PDF format is available. PDF file (about 648KB)

Sample Files of Formatting Objects (XSL- FO)

Antenna House has a comprehensive collection of FO samples. The samples provide examples of functions available in the XSL-FO Standard Specification and extensions only available through Antenna House.

Formatting World Languages with XSL-FO Formatter

AH Formatter can format world languages that are written using Unicode. Besides western languages, major Asian languages such as Japanese, Simplified Chinese, Traditional Chinese, Korean and Thai are supported. Languages which are written from right to left, such as Arabic, Hebrew, are also supported.

This is a brief summary of problems in multilingual formatting, and explains how Unicode and XSL is applicable to the multilingual formatting. This paper was written in XML and formatted by AH XSL Formatter to PDF:

Unicode BIDI algorithm and bidi-override function of XSL (XSL-FO) specification is supported, document that consists of mixed writing mode phrases in a paragraph can be formatted right.

  1. Formatting example of multiple languages with Unicode: FO | PDF
  2. Sample with English, Japanese, Thai, Hebrew, Arabic, Simplified Chinese, Traditional Chinese, Korean: FO | PDF
  3. Arabic example with varying fonts, letterforms and justifications: FO | PDF

AH Formatter is your global multilingual formatting solution.

Stylesheet for XHTML to XSL-FO transformation

One method to generate PDF dynamic from your web page is to generate XHTML page, then transforms the XHTML to XSL-FO by using XHTML to XSL-FO stylesheet, and XSL-FO to PDF by using XSL-FO formatting software.

Stylesheets for XHTML

Followings are the list of stylesheets for XHTML document to XSL-FO transformation includes in the download file.

Default XHTML stylesheet. The other styleheets are made by importing this stylesheet and changing their styles.
Default setting is text-align=”justify”. In addition, the space between blocks has a range from minimum to maximum and makes the text in the bottom justified after page breaks and column brakes.
An example of a layout in two columns. h1 and h2 become the headline spanning all columns.

Chocolate.xsl, Midnight.xsl, Modernist.xsl, Oldstyle.xsl, Steely.xsl, Swiss.xsl, Traditional.xsl, Ultramarine.xsl

XSL-FO version of the following CSS stylesheet:
W3C Core Styles <http: />
It's made by transforming Traditional in W3C Core Styles into Japanese tb-rl writing mode.
This is an XSL-FO version of W3C-REC.css (W3C Recommendation stylesheet).

 Download all stylesheet files.

Sample XHTML files

Some samples of table and list are added to original Sampler.html.
Sample of ruby. Mixture of writing mode in vertical and horizontal. Horizontal in vertical test. (Ruby is a part of XHTML1.1 Recommendation. It is supported with xhtml2fo.xsl.)
Example of specifying CSS-based styles to the element of XHTML using the style attribute. Specifying the writing mode ‘rl-tb' and ‘lr-tb', table style and absolute position.

 Download all sample xhtml files.


Various styles can be customized by changing the following parameters and the settings using the attribute-set.

<!-- page size -->

<xsl:param name="page-width">auto</xsl:param>
<xsl:param name="page-height">auto</xsl:param>
<xsl:param name="page-margin-top">1in</xsl:param>
<xsl:param name="page-margin-bottom">1in</xsl:param>
<xsl:param name="page-margin-left">1in</xsl:param>
<xsl:param name="page-margin-right">1in</xsl:param>

Example of specifying the size and the margin of the page. When page-width and page-height is aut-setting, it follows the setting of AH Formatter.

<!-- page header and footer -->

<xsl:param name="page-header-margin">0.5in</xsl:param>
<xsl:param name="page-footer-margin">0.5in</xsl:param>
<xsl:param name="title-print-in-header">true</xsl:param>
<xsl:param name="page-number-print-in-footer">true</xsl:param>

Example of specifying the margin of page header, the margin of page footer, whether to place the contents of XHTML title to the page header, and whether to place page numbers to page footer.

The value of true/false is set as strings, not as Boolean type supposing that you may specify it from UI.

<!-- multi column -->

<xsl:param name="column-count">1</xsl:param>
<xsl:param name="column-gap">12pt</xsl:param>

Example of setting columns. Specify the column number and the space between columns.

<!-- writing-mode: lr-tb | rl-tb | tb-rl -->

<xsl:param name="writing-mode">lr-tb</xsl:param>

Example of setting writing-mode. When the writing mode ‘vertical (tb-rl)' is specified, the text in the body is written in vertical mode, the text in the page header is written in horizontal mode and placed at the top of the page (region-start), the text in the page footer is written in horizontal mode and placed at the bottom of the page (region-end).

<!-- text-align: justify | start -->

<xsl:param name="text-align">start</xsl:param>

Example of specifying the default text-align setting. When ‘justify' is specified, the end of the line is justified.

<!-- hyphenate: true | false -->

<xsl:param name="hyphenate">false</xsl:param>

Example of specifying whether to hyphenate or not.

Main functions

  • Transforming the width, height and border attributes of the XHTML elements into XSL-FO properties. It support the attributes defined in HTML4(xhtml1) strict.dtd.
  • Interpret CSS-based style attributes specified to XHTML elements and transform them into XSL-FO properties.
  • Generating fo:block-container or fo:inline-container if necessary when writing-mode, width, height and absolute position are specified to the style attributes of div/span elements. Sample xhtml files:
    • style-test.html
    • ruby-test.html
  • Supports ruby. It is possible to write rubies on both alongside of the line. Sample xhtml files:
    • ruby-test.html
  • Deletes the line-feed placing right after the pre tag. Otherwise, line-feed characters are retained and unnecessary white space is created according to the XSL-FO Specification.

XHTML, written in XML, is a reformulated version of HTML. For details please refer to W3C HTML Home Page.

If you wish to convert HTML to XHTML, HTML Tidy is a very strong and useful tool for the purpose.

Stylesheet for XBRL to XSL-FO transformation and sample XBRL file

XBRL (eXtensible Business Reporting Language) is a specification for describing XML-based business documents and it aims to exchange the data of financial statements and accounts.

APRA (Australian Prudential Regulation Authority) integrated XBRL into their management business. Also, JFMIP (The Joint Financial Management Improvement Program) recommends for all the Federal Government Agencies of the US to use XBRL.

Visit XBRL Japan or XBRL USA for more information.

We provide a stylesheet that transforms XBRL for a statement of account to FO here.

A balance sheet and a statement of profits and losses are created by downloading the above 2 files and formatting with AH Formatter.