虽然有很多可用的格式,比如PDF和PostScript, 但却仍然存在着以这样一种方式将其转换成其他格式的描述信息的问题。为了解决这个问题,W3C开发了XSL格式化对象(XSL-FO)推荐。一些商家,包括IBM和Apache都跟着执行了。
从很多方面看来,XSL-FO和XSLT是同属一类的,讨论XSL是通常着重于类型转换语言。XSLT通常用于描述怎样转换XML元素,而XSL-FO通常用来描述怎样通过XML文档来表示。XSL-FO文档将指定的布局应用于XML文档。
XSL-FO允许你指定你想呈递的页的特性。这包括普通特性比如页四周空白地带的宽和高。你可以用<fo: simple-page-master>元素定义每个页,你还可以把若干<fo: simple-page-master>元素组合成一个<fo: layout-master-set>。
使用<fo: page-sequence>元素来从物理上定义一组页面。<fo: page-sequence>元素通过名字查到正确的主页要比作为<fo: simple-page-master>元素的子元素的方式要好。
在每个页内部有5块独立的区域你可以用来展示信息。把这些区域当成页头、页脚、左面、正面和主体。
在页头和页脚区域(分别称为xsl-region-before和xsl-region-after)里,你能指定在每个页面将要显示的信息。当你用<fo: static-content>元素时,信息就依次传递到每个页面。
每个页面的实际内容通常应属于xsl-region-body区域的。不像页头和页脚那样典型地使用<fo: static-content>来描述它们的数据,内容数据在<fo: flow>中描述。在流程内部,你可以提供多个<fo: block>元素来描述原文的独立块。你可以用适当的字型、风格和色彩来安排每个块的布局。
当然,好的描述语言会没有一些微瑕吗?XSL-FO用<fo: external-graphic>元素来提供对图形的支持。你可以指定任何你要的图形形式,然而你的格式化引擎必须能理解你想要呈递的图片格式。使用像JPEG和GIF这样的互联网常用格式可以令操作运行的平稳一些
XSL-FO允许你超出简单文本。使用<fo: table>元素类似于使用HTML<table>元素。在每个表中,你可以定义一个表头、一个主体、一个页脚。
每个表头和主体由多个排组成,并且每排由独立的单元组成。在每个单元内部,你用
<fo: block>能指定独立的文本块, 为布局中的单元内部提供显示信息。你也可以指定表的详细特性(像列宽)。