标题：XSL-FO
简介
XSL-FO是用于格式化XML数据的语言，全称为Extensible Stylesheet Language Formatting Objects（格式化对象的可扩展样式表语言），是W3C参考标准，现在通常叫做XSL。
什么是 XSL-FO?XSL-FO 是用于格式化 XML 数据的语言
XSL-FO 指可扩展样式表语言格式化对象（Extensible Stylesheet Language Formatting Objects）
XSL-FO 是一个 W3C 推荐标准
XSL-FO 目前通常被称为 XSL
通常被称为 XSL为什么会存在这样的混淆呢？XSL-FO 和 XSL 是一回事吗？
可以这么说，不过我们需要向您作一个解释：
样式化（Styling）是关于转换信息和格式化信息两方面的信息。在万维网联盟编写他们的首个 XSL 工作草案的时候，这个草案包括了有关转换和格式化 XML 文档的语言语法。
后来，XSL 工作组把这个原始的草案分为独立的标准：
XSLT，用于转换 XML 文档的语言
XSL 和 XSL-FO，用于格式化 XML 文档的语言
XPath，是通过元素和属性在 XML 文档中进行导航的语言
XSL-FO 文档
XSL-FO 文档是带有输出信息的 XML 文件。
XSL-FO 文档是带有输出信息的 XML 文件。它们包含着有关输出布局以及输出内容的信息。
XSL-FO 文档存储在以 .fo 或 .fob 为后缀的文件中。以 .xml 为后缀存储的 XSL-FO 文档也很常见，这样做的话可以使 XSL-FO 文档更易被 XML 编辑器存取。
XSL-FO 文档的结构
XSL-FO 的文档结构类似这样：
<?xml version="1.0" encoding="ISO-8859-1"?>
<fo:root xmlns:fo="/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="A4">
<!-- Page template goes here -->
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4">
<!-- Page content goes here -->
</fo:page-sequence>
</fo:root>结构解释
XSL-FO 文档属于 XML 文档，因为也需要以 XML 声明来起始：
<?xml version="1.0" encoding="ISO-8859-1"?><fo:root> 元素是 XSL-FO 文档的根元素。这个根元素也要声明 XSL-FO 的命名空间：
<fo:root xmlns:fo=org/1999/XSL/Format">
<!-- 此处是 XSL-FO 文档的内容 -->
</fo:root><fo:layout-master-set> 元素含有一个或多个页面模板：
<fo:layout-master-set>
<!-- 此处是所有的页面模板 -->
</fo:layout-master-set><fo:simple-page-master> 元素包含一个单一的页面模板。每个模板须有一个唯一的名称(master-name)：
<fo:simple-page-master master-name="A4">
<!-- 此处是某一个页面模板 -->
</fo:simple-page-master>一个或多个 <fo:page-sequence> 元素可描述页面的内容。master-reference 属性使用相同的名称来引用 simple-page-master 模板：
<fo:page-sequence master-reference="A4">
<!-- 此处是页面内容 -->
</fo:page-sequence>注释：master-reference 的值 "A4" 实际上并没有描述某个预定义的页面格式。它仅仅是一个名称。您可以使用任何名称，比如 "MyPage"、"MyTemplate" 等等。
XSLFO 对象
对象描述basic-link定义一个链接的起始资源bidi-overrideOverrides the default Unicode BIDI directionblock定义一个输出块（比如段落和标题）block-container定义一个块级的引用区域（reference-area）character定义一个字符，该字符会被映射为供呈现的字形color-profile定义样式表的一个颜色配置文件conditional-page-master-reference规定一个当所定义的条件成立时使用的page-masterdeclarations组合针对某个样式表的全局声明external-graphic用于图像数据位于XML结果树之外的某个图形float典型的用法是，在页面起始位置的某个单独的区域放置一幅图片，或者把一幅图片放置到一侧，而内容则流动至图片的旁边。flow包含所有被输出到页面的元素footnote定义在页面的region-body内部的一个脚注footnote-body定义脚注的内容initial-property-set格式化<fo:block>的第一行inline通过背景或者将其包围在一个边框中，来格式化文本的某个部分inline-container定义一个行内的引用区域（inline reference-area）instream-foreign-object用于行内图形（inline graphics）或用于普通对象，其中对象的数据作为<fo:instream-foreign-object>的后代存在。layout-master-set存有所有用在文档中的masterleader用来生成"."由内容表格中的页码来分隔标题，或者创建表单中的输入域，或者创建水平线list-block定义列表list-item包含列表中的每个项目list-item-body包含列表项的内容或主体list-item-label包含列表项的标号（有代表性的是数据、字符等等）marker与fo:retrieve-marker使用来创建连续的页面或页脚multi-case包含 XSL-FO对象的每个供选择的子树（在<fo:multi-switch>内部）。父元素<fo:multi-switch>会选择显示那个选项并隐藏其余的选项。multi-properties用来在两个或更多的属性集（property-sets）间转换multi-property-set规定一个可供选择的属性集，这个属性集会被根据用户代理的状态来进行应用。multi-switch存有一个或多个<fo:multi-case>对象，并控制它们之间的切换（通过<fo:multi-toggle>激活）multi-toggle用来切换到另一个<fo:multi-case>page-number表示当前的页面page-number-citation为页面引用页码，此页面包含首个由被引用对象返回的标准区域。page-sequence一个针对页面输出元素的容器。在其中一个<fo:page-sequence>对象针对每个页面布局。page-sequence-master规定使用哪个simple-page-master，以及使用次序。region-after定义页脚region-before定义页眉region-body定义页面主体region-end定义页面的右侧栏region-start定义页面的左侧栏repeatable-page-master-alternatives定义一套simple-page-master的副本repeatable-page-master-reference规定一个简单的simple-page-master的副本retrieve-marker与<fo:marker>一同使用来创建连续页眉或者页脚rootXSL-FO文档的根（顶）节点simple-page-master定义页面的尺寸和形状single-page-master-reference规定用在页面序列的某个给定的点的一个static-content包含在许多页面上重复的静态内容（比如页眉和页脚）table格式化一个表格的表格式的材料table-and-caption格式化一个表格及其标题table-body表格行和表格单元的容器table-caption包含一个表格的标题table-cell定义表格单元table-column格式化表格的列table-footer定义表格的页脚table-header定义表格的页眉table-row定义表格的行title为页面序列定义一个标题wrapper为一组XSL-FO对象规定继承属性
[1]