XSL-FO – Extensible Stylesheet Language
XSL-FO (Extensible Stylesheet Language – Formatting Objects) is an XML application which describes how text, images, lines and other graphical elements are arranged on a page.
XSL-FO makes it possible to format documents both for display on monitors and for high-quality printing on paper. XSL FO is a page description language with roots in DSSSL which was temporarily developed in parallel with CSS. The key differences between XSL-FO and CSS are the page model (regions in XSL-FO versus the box model in CSS) and the process model (two-tier processing using XSLT followed by laying-out using XSL-FO formatting, versus ad-hoc formatting using CSS renderers).
XSL was developed for professional printing rather than word processing, which is why it is difficult to compare the functionality of these two techniques. If XSLT is added to XSL FO as a transformation language, however, the two languages can reproduce many functions common to modern word processing systems. In this case, we therefore have one language each for display and processing logic (XSLT), whereas word processing systems generally combine both tasks together in one language and in one place.
So-called FO processors exist to generate PDF, RTF, ASCII text and other print media from an XSL FO file. One commonly-used program is the Apache Project’s (see link) FOP, which stands for Formatting Objects Processor. This is a Java application which converts XSL-FO data into PDF documents and also partially supports PostScript and PCL.