XSL- FO

XSL- FOXSL-FO 用于格式化供输出的 XML 数据,是带有输出信息的 XML 文件,它们包含着有关输出布局以及输出内容的信息。
XSL-FO 文档存储在以 .fo 或 .fob 为后缀的文件中。以 .xml 为后缀存储的 XSL-FO 文档也很常见,这样做的话可以使 XSL-FO 文档更易被 XML 编辑器存取。
么是 XSL-FO?
·  XSL-FO 是用于格式化 XML 数据的语言
·  XSL-FO 指可扩展样式表语言格式化对象(Extensible Stylesheet Language Formatting Objects)
·  XSL-FO 是一个 W3C 推荐标准
·  XSL-FO 目前通常被称为 XSL
XSL-FO 目前通常被称为 XSL
XSL 工作组把这个原始的草案分为独立的标准:
·  XSLT,用于转换 XML 文档的语言
·  XSL 和 XSL-FO,用于格式化 XML 文档的语言
·  XPath,是通过元素和属性在 XML 文档中进行导航的语言
1 XSL-FO 文档的结构:
<?xml version="1.0" encoding="ISO-8859-1"?>  //XSL-FO 文档属于 XML 文档
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> //XSL-FO 文档的根元素
<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>
2 XSL-FO 区域
XSL-FO 使用矩形框(区域)来显示输出。XSL 格式化模型定义了一系列的矩形(区域)框来显示输出。所有的输出都会被格式化到这些框中,然后会被显示或打印到某个目标媒介。
让我们研究一下下面这些区域:
·  Pages(页面)
·  Regions(区)
·  Block areas(块区域)
·  Line areas(行区域)
·  Inline areas(行内区域)
XSL-FO 输出会被格式化到页面中。打印输出通常会进入分为许多分割的页面。浏览器输出经常会成为一个长的页面。
XSL-FO 页面包含区域(Region)。
每个 XSL-FO 页面均包含一系列的 Regions(区):
·  region-body (页面的主体)
·  region-before (页面的页眉)
·  region-after (页面的页脚)
·  region-start (左侧栏)
·  region-end (右侧栏)
XSL-FO Regions 包含块区域(Block Area)。
XSL-FO 块区域可包含其他的块区域,不过大多数时候它们包含的是行区域(Line Area)。
XSL-FO 行区域包含行内区域(Inline Area)。
XSL-FO 行内区域定了行内部的文本(着重号、单字符以及图像等等)。
3 XSL-FO 输出
XSL-FO 在 <fo:flow> 元素内部定义输出。
内容“块”会“流”入“页面”中,然后输出到媒介。XSL-FO 输出通常被嵌套在 <fo:block> 元素中,<fo:block> 嵌套于 <fo:flow> 元素中,<fo:flow> 嵌套于<fo:page-sequence> 元素中:
<fo:page-sequence>
  <fo:flow flow-name="xsl-region-body">
    <fo:block>
      <!-- Output goes here -->
    </fo:block>
  </fo:flow>
</fo:page-sequence>
XSL-FO 实例:
<?xml version="1.0" encoding="ISO-8859-1"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>

  <fo:simple-page-master master-name="A4">
  </fo:simple-page-master>
</fo:layout-master-set>

<fo:page-sequence master-reference="A4">
  <fo:flow flow-name="xsl-region-body">
    <fo:block>Hello W3School</fo:block>
  </fo:flow>
</fo:page-sequence>
</fo:root>
输出结果:


4 XSL-FO
XSL-FO 页面使用来自 <fo:flow> 元素的数据进行填充。
XSL-FO 页面顺序:
XSL-FO 使用 <fo:page-sequence> 元素来定义输出页面。
每个输出页面都会引用一个定义布局的 page master。
每个输出页面均有一个定义输出的 <fo:flow>元素。
每个输出页面均会按顺序(序列)被打印或显示。
XSL-FO Flow(流):
XSL-FO 页面使用来自 <fo:flow> 元素的数据进行填充,<fo:flow> 包含所有被打印到页面的元素,当页面被印满以后,相同的 page master 会被一遍又一遍地被使用,直到所有页面的页面被打印为止。
<fo:flow> 元素有一个名为 "flow-name" 的属性。flow-name 属性的值定义 <fo:flow> 元素的内容会去往何处:
·  xsl-region-body (进入 region-body)
·  xsl-region-before (进入 region-before)
·  xsl-region-after (进入 region-after)
·  xsl-region-start (进入 region-start)
·  xsl-region-end (进入 region-end)
5 XSL-FO 页面模板
XSL-FO 使用名为 "Page Masters" 的页面模板来定义页面的布局。
XSL-FO 使用下面的属性来定义页面尺寸:
     page-width 定义页面的宽度
page-height 定义页面的高度
XSL-FO 使用下面的属性定义页面边距:
margin-top 定义顶边距
margin-bottom 定义底边距
margin-left 定义左边距
margin-right 定义右边距
margin 定义所有边的边距
XSL-FO 使用下面的元素来定义页面的区:
region-body 定义主体区
region-before 定义顶部区 (页眉)
region-after 定义底部区 (页脚)
region-start 定义左侧区 (左侧栏)
region-end 定义右侧区 (右侧栏)


例:
<fo:simple-page-master master-name="A4"
page-width="297mm" page-height="210mm"
margin-top="1cm"   margin-bottom="1cm"
margin-left="1cm"  margin-right="1cm">
  <fo:region-body   margin="3cm"/>
  <fo:region-before extent="2cm"/>
  <fo:region-after  extent="2cm"/>
  <fo:region-start  extent="2cm"/>
  <fo:region-end    extent="2cm"/>
</fo:simple-page-master>
6 XSL-FO Blocks(块)
XSL-FO 的输出位于块区域中
<fo:page-sequence>
  <fo:flow flow-name="xsl-region-body">
    <fo:block>
      <!-- Output goes here -->
    </fo:block>
  </fo:flow>
</fo:page-sequence>
例:
<fo:block
    font-size="14pt" font-family="verdana" color="red"
    space-before="5mm" space-after="5mm">
W3School
</fo:block>

<fo:block
    text-indent="5mm"
    font-family="verdana" font-size="12pt"
    space-before="5mm" space-after="5mm">
At W3School you will find all the Web-building tutorials you
need, from basic HTML and XHTML to advanced XML, XSL, Multimedia
and WAP.
</fo:block>
结果:


7 XSL-FO 列表
XSL-FO 使用列表块(List Block)来定义列表:
fo:list-block 包含整个列表
fo:list-item 包含列表中的每个项目
fo:list-item-label 包含用于 list-item 的标记 - 典型地,包含一个数字或者字符的 <fo:block>
fo:list-item-body 包含 list-item 的主体或内容 - 典型地,一个或多个 <fo:block> 对象
例:
<fo:list-block>
<fo:list-item>
<fo:list-item-label>
   <fo:block>*</fo:block>
</fo:list-item-label>
<fo:list-item-body>
   <fo:block>Volvo</fo:block>
</fo:list-item-body>
</fo:list-item>

<fo:list-item>
<fo:list-item-label>
   <fo:block>*</fo:block>
</fo:list-item-label>
<fo:list-item-body>
   <fo:block>Saab</fo:block>
</fo:list-item-body>
</fo:list-item>
</fo:list-block>
结果:


8 XSL-FO 表格
XSL-FO 表格模型与 HTML 表格模型是非常不同的。
有九种 XSL-FO 对象可用来创建表格:
·  fo:table-and-caption
·  fo:table
·  fo:table-caption
·  fo:table-column
·  fo:table-header
·  fo:table-footer
·  fo:table-body
·  fo:table-row
·  fo:table-cell
<fo:table> 元素包含:
·  可选的 <fo:table-column> 元素
·  可选的 <fo:table-header> 元素
·  <fo:table-body> 元素
·  可选的 <fo:table-footer> 元素
这些元素中的每一个都可能拥有一个或多个 <fo:table-row> 元素,而 <fo:table-row> 同时会带有一个或多个 <fo:table-cell> 元素:
<fo:table-and-caption>
<fo:table>
<fo:table-column column-width="25mm"/>
<fo:table-column column-width="25mm"/>

<fo:table-header>
  <fo:table-row>
    <fo:table-cell>
      <fo:block font-weight="bold">Car</fo:block>
    </fo:table-cell>
    <fo:table-cell>
      <fo:block font-weight="bold">Price</fo:block>
    </fo:table-cell>
  </fo:table-row>
</fo:table-header>

<fo:table-body>
  <fo:table-row>
    <fo:table-cell>
      <fo:block>Volvo</fo:block>
    </fo:table-cell>
    <fo:table-cell>
      <fo:block>$50000</fo:block>
    </fo:table-cell>
  </fo:table-row>
  <fo:table-row>
    <fo:table-cell>
      <fo:block>SAAB</fo:block>
    </fo:table-cell>
    <fo:table-cell>
      <fo:block>$48000</fo:block>
    </fo:table-cell>
  </fo:table-row>
</fo:table-body>

</fo:table>
</fo:table-and-caption>
以上代码的输出:

9 XSL-FO XSLT
6中的代码改写 : 来自 XSLT 的帮助
从文档移除 XSL-FO 信息:
<header>
W3School
</header>
<paragraph>
At W3School you will find all the Web-building tutorials you
need, from basic HTML and XHTML to advanced XML, XSL, Multimedia
and WAP.
</paragraph>
添加 XSLT 转换:
<xsl:template match="header">
<fo:block
    font-size="14pt" font-family="verdana" color="red"
    space-before="5mm" space-after="5mm">
    <xsl:apply-templates/>
</fo:block>
</xsl:template>

<xsl:template match="paragraph">
<fo:block
    text-indent="5mm"
    font-family="verdana" font-size="12pt"
    space-before="5mm" space-after="5mm">
    <xsl:apply-templates/>
</fo:block>
</xsl:template>
产生的结果是相同的:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值