XSL-FO is part of XSL (Extensible Stylesheet Language), a set of W3C technologies designed for the transformation and formatting of XML data.
The general idea behind XSL-FO's use is that the user writes a document, not in FO, but in an XML language.
Then, the user obtains an XSLT transform, either by writing one themselves or by finding one for the document type in question.
Once the XSL-FO document is generated, it is then passed to an application called an FO processor.
The XSLT language itself was originally conceived only for this purpose; it is now in widespread use for more general XML transformations.
Even tutorials on XSL-FO tend to be written with XSLT commands around the FO processing instructions.
It allows for the automatic generation of a table of contents, linked references, an index, and various other possibilities.
The XSL-FO specification even allows different FO processors to have varying responses with regard to the resultant generated pages.
For example, some FO processors can hyphenate words to minimize space when breaking a line, while others choose not to.
There are other cases where the XSL-FO specification explicitly allows FO processors some degree of choice with regard to layout.
Distributing the final PDF rather than the formatting language input (whether HTML/CSS or XSL-FO) means on the one hand that recipients aren't affected by the unpredictability resulting from differences among formatting language interpreters, while on the other hand means that the document cannot easily adapt to different recipient needs, such as different page size or preferred font size, or tailoring for on-screen versus on-paper versus audio presentation.
It involves a single flowing span of fairly contiguous text, with various repeating information built into the margins of a page.
The direction, relative to the page orientation, for the progression of blocks and inlines can be fully specified, thus allowing FO documents to function under languages that are read different from English.
The language of the FO specification, unlike that of CSS 2.1, uses direction-neutral terms like start and end rather than left and right when describing these directions.
Individual blocks can be set to span all columns, creating a textual break in the page.
The FO processor will do its best to adhere to these commands, even if it requires creating a great deal of empty space on a page.
The footnote is written, in the FO document, in the regular flow of text at the point where it is referenced.
Version 1.1 loosens these restrictions significantly, allowing flowing text to be mapped into multiple explicit regions on a page.
These allow the format to specify a string of text in a separate window that can be selected by the user.
The last page can be generated without providing an explicit in-document reference to a specific anchor in the FO document.
In addition, the resulting scaling factor can be referenced for display (for example, to say in a figure caption, "image shown is 50% actual size").
When trying to decide whether or not XSL-FO will work for a given document, the following typographic and layout requirements usually indicate that XSL-FO will not work (although some of these may be satisfied by proprietary extensions): XML and HTML standards, with the CSS standard, since CSS2 (paged media module) starts to supply basic features to printed media.
With the CSS Paged Media Module Level 3, W3C is completing the formulation of an integrated standard for document formatting and to generate PDFs.
Design notes for a Version 2.0 of XSL Formatting Objects were first published in 2009 and last updated in 2012.