什么是 XSL-FO 文件?
XSL-FO(XSL 格式化对象)是一种用于格式化 XML 文档的强大样式表语言。当尺寸固定时,纸和印刷的有界形式的语义由 XSL-FO 表示。与 HTML 不同,它表示具有可变尺寸的浏览器窗口的无界形式的语义。 XSL-FO 格式化的 XML 文档主要用于生成 PDF 文件。 XSL(可扩展样式表语言)是一组功能完整的 W3C 技术,旨在设计用于格式化和交换 XML 文档和该语言的 XSL-FO 部分。 XSLT 和 XPath 也是 XSL 的其他部分。
建议首先将 XML 文档转换为 XSL-FO,PDF 就是这个标准的一个例子。在 PDF 中,首先使用 XSLT,然后使用 XSL-FO 格式化程序呈现结果。以这种方式,可以随机格式化 XML 文档。尽管 XSL-FO 利用了级联样式表 (CSS) 属性的优势,并在实际格式需要的地方扩展它们,但它提供了在 XSL-FO 术语中称为页面主控的页面模板。 XSL-FO 还为相当复杂的文档提供格式并支持索引生成。
历史和基本概念##
2012 年 1 月,XSL-FO 的工作草案上一次更新,2013 年 11 月,其工作组已经关闭。 XSL 样式表通过描述如何将类的实例转换为使用格式化词汇表的 XML 文档来指定 XML 文档类的表示。 XSL-FO 是一种集成的表示语言,没有 HTML 中使用的语义标记。此外,这种语言将所有文档数据存储在其自身中,这与 CSS 会改变外部 HTML 或 XML 文档的默认设置相反。
使用 XSL-FO 的一般标准是用户使用 XML 语言而不是 FO 编写文档。之后,发生 XSLT 转换。此 XSLT 转换负责将 XML 转换为 XSL-FO。一旦生成了 XSL-FO 文档,它就会被移交给一个称为 FO 处理器的应用程序。 FO 处理器负责将此文档转换为可读和可打印的文档。 PDF 文件或 PS 是 XSL-FO 最常见的输出示例。但这并不意味着 FO 处理器只能产生这两种格式作为输出。一些 FO 处理器可以在 RTF 文件中输出,甚至可以在用户的 GUI 中出现一个窗口,该窗口显示页面的序列及其内容。
XSL-FO 文档在某种意义上不同于 PDF 或 PS,它最终不会定义不同页面上的文本布局。也许,它为页面设置样式并确定显示内容的位置。此外,FO 处理器在 FO 文档指定的边界内组织文本。该规范甚至允许不同的 FO 处理器根据结果创建的页面进行相应的行为。这种行为的一个例子是连字符,很少有 FO 处理器可以在换行时对单词进行连字符以节省空间,而一些处理器不选择此选项。这取决于处理器来选择符合其要求的不同断字算法。这些断字算法可能非常简单,也可能更复杂。在某些情况下,XSL-FO 规范明确规定了 FO 处理器,这是在布局上下文中的某种程度的选择。
FO 处理器之间的这种差异会产生不同的结果,而处理器通常对此并不关心。因为 XSL-FO 的总体重点是生成分页/打印文档。 XSL-FO 文档本身通常充当中介,它们的主要功能是生成 PDF 文件或可以打印的文档作为要分发的输出。在 HTML/CSS 或 XSL-FO 中,将 PDF 作为最终结果分发而不是输入格式化语言表明接收者不会受到由于格式化语言解释器之间的差异而产生的多功能性的影响。另一方面,很明显没有简单的方法可以满足接收者的不同需求,例如可变的页面大小或所需的字体大小,或为页面或打印定制。
XSLFO 文件格式
SL-FO 文档基本上是 XML 文档,但它们不遵循任何模式。取而代之的是,SL-FO 文档遵循其自身语言规范中定义的语法。每个 XSL-FO 文档都需要两个部分:
- 指定标签页面布局列表的部分。
- 包含文档数据的所有详细信息的部分,带有标记,通过各种页面布局确定不同页面上的内容显示。
页面布局中提到了页面的属性,可以定义文本的组织,以符合特定语言的约定。此外,页面的大小、页边距和页面序列(允许奇数页和偶数页的不同属性)也由页面布局定义。
文档的数据部分分为一系列流,其中每个流都连接到一个页面布局。流程中包含一个块列表。此块列表可能包含内联标记功能或文本数据列表,或者可能同时包含两者。文档的页边距也可以显示页码或章节标题。块和内联元素的功能与 CSS 中的相同,但 FO 和 CSS 之间的一些填充和边距规则不同。
页面方向方向完全为块和内联的扩展指定,从而使 FO 文档在不同于英语的语言下执行。 FO 规范的语言使用单词 start 和 end 而不是 left 和 right 来描述方向。 XSL-FO 的基本内容标记和级联规则取自 CSS。 XSL-FO 的语言符合以下规范。
多列##
一个页面可以有多个列和块,并且默认情况下可以从一列扩展到另一列。允许多个页面具有不同的宽度和列数。所有 FO 特征都遵循多列页面的限制。
列表###
XSL-FO 列表由相邻排列的两组块建立。从概念上讲,在列表中,左侧的块表示数字、项目符号或文本字符串,而右侧的块可以按预期工作。 XSL-FO 列表的编号通常由 XSLT 完成。
表###
FO 表类似于 HTML/CSS 表。用户可以为每个单独的单元格选择数据行、样式信息、背景颜色。使用不同的样式信息,用户有权选择第一行作为表标题行。 FO 处理器可以被明确告知每列的空间规范,或者自动适应表格中的文本。
索引###
XSL-FO 1.1 具有通过引用正确标记的元素来帮助生成索引的特性。
### 好处 ###
- 适用于基于内容的发布
- 使用方便
- 低成本