XSL-FO 对象学习笔记

简介

XSL-FO(Extensible Stylesheet Language Formatting Objects)是一个XML应用程序语言,用于格式化和布局XML文档的可视化呈现。XSL-FO文件是一种与设备无关的中间格式,可以通过使用XSL-FO处理器将其转换为PDF、PostScript等输出格式。

XSL-FO 对象

XSL-FO定义了一些对象来描述文档的结构和格式。下面是一些常用的XSL-FO对象:

区域对象(Region objects)

区域对象用于定义页面布局,包括页眉、页脚、正文区等。

xmlCopy Code
<fo:simple-page-master master-name="A4" page-height="29.7cm" page-width="21cm"> <fo:region-body margin-top="3cm" margin-bottom="2cm"/> <fo:region-before extent="3cm"/> <fo:region-after extent="2cm"/> </fo:simple-page-master>

在上面的例子中,fo:simple-page-master定义了一个名为“A4”的页面模板,页面高度为29.7厘米,宽度为21厘米。fo:region-body定义了正文区域,顶部有3厘米的边距,底部有2厘米的边距。fo:region-before定义了页眉区域,高度为3厘米。fo:region-after定义了页脚区域,高度为2厘米。

区块对象(Block objects)

区块对象用于表示文本块或其他内容块。如fo:blockfo:list-blockfo:table-and-caption等。

xmlCopy Code
<fo:block font-size="12pt" font-weight="bold" text-align="center">标题</fo:block>

在上面的例子中,fo:block定义了一个粗体、居中对齐的标题块。

行内对象(Inline objects)

行内对象用于表示具有不同格式的小段文本,如加粗、斜体等。如fo:inlinefo:leader等。

xmlCopy Code
<fo:inline font-weight="bold">这是加粗文本</fo:inline>

在上面的例子中,fo:inline定义了一段加粗的文本。

表格对象(Table objects)

表格对象用于创建表格,包括表格头部、表格行、单元格等。如fo:tablefo:table-headerfo:table-body等。

xmlCopy Code
<fo:table table-layout="fixed" width="100%" border-collapse="separate" border-spacing="0.5mm"> <fo:table-column column-width="proportional-column-width(1)"/> <fo:table-column column-width="proportional-column-width(2)"/> <fo:table-header> <fo:table-row> <fo:table-cell><fo:block>表头1</fo:block></fo:table-cell> <fo:table-cell><fo:block>表头2</fo:block></fo:table-cell> </fo:table-row> </fo:table-header> <fo:table-body> <fo:table-row> <fo:table-cell><fo:block>单元格1-1</fo:block></fo:table-cell> <fo:table-cell><fo:block>单元格1-2</fo:block></fo:table-cell> </fo:table-row> <fo:table-row> <fo:table-cell><fo:block>单元格2-1</fo:block></fo:table-cell> <fo:table-cell><fo:block>单元格2-2</fo:block></fo:table-cell> </fo:table-row> </fo:table-body> </fo:table>

在上面的例子中,fo:table定义了一个表格,宽度为100%。fo:table-column定义了两列,分别占比1:2。fo:table-header定义了一个表格头部,包括两个表头单元格。fo:table-body定义了两行数据,每行包括两个单元格。

实例

以下是一个使用XSL-FO创建简历的示例:

xmlCopy Code
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simple-page-master master-name="resume" page-height="11in" page-width="8.5in" margin-top="0.5in" margin-bottom="0.5in" margin-left="1in" margin-right="1in"> <fo:region-body margin-top="1in" margin-bottom="0.5in"/> <fo:region-after extent="0.5in"/> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="resume"> <fo:flow flow-name="xsl-region-body"> <fo:block font-size="24pt" font-weight="bold" text-align="center" space-after="18pt">简历</fo:block> <fo:block font-size="20pt" font-weight="bold" space-after="6pt">个人信息</fo:block> <fo:block font-size="12pt" space-after="6pt"> <fo:inline font-weight="bold">姓名:</fo:inline>John Smith </fo:block> <fo:block font-size="12pt" space-after="6pt"> <fo:inline font-weight="bold">地址:</fo:inline>123 Main Street,Anytown,CA 12345 </fo:block> <fo:block font-size="12pt" space-after="6pt"> <fo:inline font-weight="bold">电话:</fo:inline>555-555-5555 </fo:block> <fo:block font-size="12pt" space-after="6pt"> <fo:inline font-weight="bold">电子邮件:</fo:inline>john.smith@example.com </fo:block> <fo:block font-size="20pt" font-weight="bold" space-after="6pt">工作经验</fo:block> <fo:block font-size="18pt" font-weight="bold" space-after="6pt">公司A</fo:block> <fo:block font-size="16pt" font-weight="bold" space-after="6pt">职位:软件工程师</fo:block> <fo:block font-size="14pt" space-after="6pt">工作描述:</fo:block> <fo:block font-size="12pt" space-after="6pt">该公司软件开发部门负责人,领导一组5名成员,负责开发和维护公司重要的核心业务系统。</fo:block> <fo:block font-size="18pt" font-weight="bold">公司B</fo:block> <fo:block font-size="16pt" font-weight="bold" space-after="6pt">职位:Java开发工程师</fo:block> <fo:block font-size="14pt" space-after="6pt">工作描述:</fo:block> <fo:block font-size="12pt" space-after="6pt">在该公司负责开发和维护多个Java Web应用程序,独立设计和开发了一个高性能的购物网站。</fo:block> </fo:flow> </fo:page-sequence> </fo:root>

在上面的例子中,使用了不同的XSL-FO对象来定义简历文档的结构和格式。fo:simple-page-master定义了页面布局,有页眉和正文区域。fo:block定义了标题、小标题、正文和加粗文本。此外,还包括表格(未显示)等其他XSL-FO对象。

生成的输出可以使用XSL-FO处理器转换为PDF文件,以便打印或在线阅读。