### XSL 对象格式使用指南（一）

World Wide Web 联盟的规范书将可扩展样式语言(XSL)规划成两个部分：
■XSLT 用来转换 XML 文件
■XSL 对象格式(XSL FO) 用来详细说明格式语句的 XML 函数库。
XSLT 非常容易学习和使用。只需要花费很少的时间，开发者就能将 XML 文档转换成可以在用户自己浏览器上看到的 HTML 文档。这也是开发者喜欢使用 XSLT 的原因。
XSL 对象格式是一个以 XML 为基础的扩展函数库，能详细定义标记页数、版面和字体等网页内容信息。XSL FO 扩展语言非常复杂，也很冗长；但只有通过 XSL FO 才能快速把 XSLT 转换成文档源文件。
除了完全介绍 XSL FO，这篇文章还将提供足够的信息和例子来说明怎样使用 XSL FO。我们将通过 XSL FO 学习制作一个西班牙语的评论手册并将它打印出来。我们将使用 Apache Software Foundation 的 FOP 工具软件使 FO 文件转换成 PDF 文件。
初始化
把 XSL FO 文件转换成 XML 文档，先需要基本的 XML 处理指令和 FO 根元素：
<?xml version="1.0" encoding="utf-8"?>
<fo:root>
文档的结构为:
●主要的版面设计，由以下组成
○文档可能出现的各种页面
○安排这些页面的格式序列
●页面和它们的内容
页面规划
在 FO 文档的开始<fo:root> 标签后，我们必须描述文档所拥有的页面类型。文档拥有下面图表中的三种页面。按照空白区域分类为封面、左边页和右边页。封面和左边页在左面有较多的空白区域。每个页面都有页眉和页脚。
让我们从定位页面长度、宽度及空白空间开始。在文章里单位都使用厘米，也可以使用任何 CSS 单位，如象素 (pixel)、毫米、英寸等。这些规格被命名为 simple-page-master 并用 master-name 语句指定。请看代码示例。需要注意的是页面空白区域不能有任何需要印刷出来的内容。
内容区
在所有的印刷品的图表中都会有零星的线条。那是页面的内容区(正式上被称作页面参照区)， 在下面可以看出内容区被分成五个区域。
说明
我们必须先了解一些术语。当我们设定页面边的空白时，我们会使用 top, bottom, left, and right 这样的词汇。因为每个人都认为纸张的一块边缘就是纸张的左边、顶部、底部和右边。当我们谈到内容区域时会使用不同的词汇，因为不是所有的语言都能描述左到右或顶部到底部。
FO 认为一个页面由两种元素构成: block elements (例如文章的段落)它由新的一行起头。inline elements (例如字体的粗体和斜体)。FO 的 block-progress-direction 决定了段落在页面的位置。before-edge 表示在段落之前，after-edge 表示在段落之后。
inline-progress-direction 决定了在一行话中每个字符的位置。start-edge 表示位置在一行话之前， end-edge 表示位置在一行话之后。
对于希伯莱语来说，象以下所示：开头和结尾中文字位置与英语习惯是互相对应的。(阿拉伯语的写法也相似)
日语写法有时象下面一样写，下面是 XSL 规范手册中的图片：
这种新函数库最大的优势是它使用的语言不受约束。如果你希望页面的标题出现在和普通文本相对应的位置，你可以象下面一样设定 text-align="end"
一个有趣的标题
标题一般在最上方，这样才能吸引读者的注意
如果文档最后要翻译成阿拉伯语或日语，你仍然能确定标题仍然出现在文本相对应的位置。就不需要来回调整文档的左右和上下。
指定区域的尺寸
封面页不需要页眉和页脚，所以我们只需要象以下所示的用粗体指定 region-body 信息。
<fo:simple-page-master master-name="cover"
page-height="12cm"
page-width="12cm"
margin-top="0.5cm"
margin-bottom="0.5cm"
margin-left="1cm"
margin-right="0.5cm">
<fo:region-body
margin-top="3cm" />
</fo:simple-page-master>
左边页和右边页拥有页眉和页脚，所以我们需要指定 region-before 和 region-after 的范围。
要点:你得给 region-body 指定范围，相当于指定 region-before 和 region-after 的范围 (FOP 现在不支持 region-start 和 region-end)。如果你象下面这样做 ：
<fo:region-before extent="1cm"/>
<fo:region-after extent="1cm"/>
<fo:region-body
margin-top="0.20cm"
margin-bottom="0.20cm" />
结果会是：