XSL-FO 学习笔记  |
先来看一段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"> <!-- 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>
下面来解释一下个部分的含义:
1,因为 xsl-fo 文件本身是 xml 文档,所以开头必须有 xml 声明:
<?xml version="1.0" encoding="ISO-8859-1"?>
2,<fo:foot> 标签是 FO 的根标签,所有内容必须包含这个标签内,并且同时声明命名空间<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
3,<fo:layout-master-set> 装载文档模板
4,<fo:simple-page-master> 装载单页模板,每个模板必须有唯一的名字,例:
<fo:simple-page-master master-name="A4">
5,<fo:page-sequence> 转载文档的内容,它的属性 master-reference 来指定输出样式与上面<fo:simple-page-master> 模板的 master-name 属性相对应,例:
<fo:page-sequence master-reference="A4"> 注: master-reference 和 master-name 的属性不是预设的,你可以任意取值。
FO 将打印页面分成若干矩形盒(areas)来表达显示输出:
矩形盒包括
Pages > Regions > Block > (Block)Line > Inline
">" 代表包括关系
1,Pages
Pages 控制页面样式,因为打印时文档要分成好几页,浏览时是一大长页,所以页面样式有Pages 控制,
2,Regions
Regions 包括以下属性
region-body (the body of the page) (文本内容)
region-before (the header of the page) (表头)
region-after (the footer of the page) (页角)
region-start (the left sidebar) (左边界)
region-end (the right sidebar) (右边届)
3,Block
Block 包含一些小的元素,比如段落,表格,列表==
4,Line
定义文本行
5,Inline
定义文本行中的文字(如 bullets, 单个文字, 图片==)
Pages 内的嵌套规则
<fo:block>嵌套于<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>
Pages 中的内容是由<fo:flow>元素组成的
XSL-fo 通过 <fo:page-sequence> 来定义输出页
每个输出页以 master 属性来定义输出样式
每个输出页都有<fo:flow>定义输出内容
每个输出页都在一个 sequence 中
<fo:flow> 包括一切需要打印在 page 内的内容
如果一页填不下,相同的 page master 会用得到下一页,直到打印为止
<fo:flow> 有 flow-name 属性,它的值决定内容的显示位置
合法的值
xsl-region-body (into the region-body) (文本内容)
xsl-region-before (into the region-before) (表头)
xsl-region-after (into the region-after) (页角)
xsl-region-start (into the region-start) (左边界)
xsl-region-end (into the region-end) (右边届)
XSL-fo 的页面模板
XSL-fo 用页面模板(“page-master”)来定义输出,每个模板都必须有唯一的名字。
------------------------------------------------------------<fo:simple-page-master master-name="intro">
<fo:region-body margin="5in" />
</fo:simple-page-master><fo:simple-page-master master-name="left">
<fo:region-body margin-left="2in" margin-right="3in" />
</fo:simple-page-master><fo:simple-page-master master-name="right">
<fo:region-body margin-left="3in" margin-right="2in" />
</fo:simple-page-master>
-----------------------------------------------------------------------------------------------
在以上的代码中有三个<fo:simple-page-master> 标签,定义了三个模板,每个模板(“pagemaster”)都有不同的名字。
第一个用于介绍,第二个和第三个,用于奇数页和偶数页。
模板(<fo:simple-page-master>)属性
Margin Top
Margin
Left
REGION BEFORE
REGIONSTART
REGION BODY
REGION
END
REGION AFTER
MarginRight
Margin Bottom
页面大小
page-width 定义页宽
page-height 定义页高
页边空白
margin-top 定义上边空白
margin-bottom 定义下边空白
margin-left 定义左边空白
margin-right 定义右边空白
margin 定义所有四边空白
页面区域标签
<fo:region-body> 定义主体区域
<fo:region-before> 顶一定不区域(页眉)
<fo:region-after> 定义底部区域(页角)
<fo:region-start> 定义左部区域(左选项条)
<fo:region-end> 定义右部区域(优选项条)
注:
region-before, region-after, region-start, region-end 是 region-body 的一部分,为了防止 body 的内容溢出到这些部分,你必须设置 body 的 margin 最少是他们的大小。
例子:<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>
上面定义了一个名为 A4 的模板,宽297mm,高210mm, 四个页边空白未1mm,body 离页边的距离是3cm, 页的四边(页眉、页角、左边栏、右边栏)都为2cm
可以计算 body 的大小,例
body 宽=297mm-2*(30mm)-2*10mm=217mm
Block 标签,直接装载内容
文档内容 < Block < Flow < Page<fo:page-sequence>
<fo:flow flow-name="xsl-region-body">
<fo:block>
<!-- Output goes here -->
</fo:block>
</fo:flow>
</fo:page-sequence>Block 的属性
space before
margin
border
padding
content
space after
Block 的 Area 属性
space before and space after(Block 之间的距离)
margin (Block 边缘的空白)
border (Block 外部边框,可以设置大小和颜色)
padding (内容和边框之间的填充)
Block 的 Margin 属性
margin
margin-top
margin-bottom
margin-left
margin-right
Block 的 Border 属性
Border 样式属性:
border-style
border-before-style
border-after-style
border-start-style
border-end-style
border-top-style (same as border-before)
border-bottom-style (same as border-after)
border-left-style (same as border-start)
border-right-style (same as border-end)
Border 颜色属性:
border-color
border-before-color
border-after-color
border-start-color
border-end-color
border-top-color (same as border-before)
border-bottom-color (same as border-after)
border-left-color (same as border-start)
border-right-color (same as border-end)
Border 宽度属性:
border-width
border-before-width
border-after-width
border-start-width
border-end-width
border-top-width (same as border-before)
border-bottom-width (same as border-after)
border-left-width (same as border-start)
border-right-width (same as border-end)
Block 的 Padding 属性
padding
padding-before
padding-after
padding-start
padding-end
padding-top (same as padding-before)
padding-bottom (same as padding-after)
padding-left (same as padding-start)
padding-right (same as padding-end)
Block 的 Background 属性
background-color
background-image
background-repeat
background-attachment (滚动或固定)
*Block 内容样式 属性
<fo:block font-size="12pt" font-family="sans-serif">This block of output will be written in a 12pt sans-serif font.</fo:block>
字体属性:
font-family
font-weight
font-style
font-size
font-variant
文字格式:
text-align
text-align-last
text-indent
start-indent
end-indent
wrap-option (defines word wrap)
break-before (defines page breaks)
break-after (defines page breaks)
reference-orientation (defines text rotation in 90" increments)
例:
<fo:block
font-size="14pt" font-family="verdana" font-color="red"
space-before="5mm" space-after="5mm">
W3Schools
</fo:block><fo:block
text-indent="5mm"
font-family="verdana" font-size="12pt"
space-before="5mm" space-after="5mm">
At W3Schools you will find all the Web-building tutorials you
need, from basic HTML and XHTML to advanced XML, XSL, Multimedia
and WAP.
</fo:block>你可以看到,生成简单的文档需要很很复杂的代码。一般 xsl-fo 文档不需要这么复杂的代码,我们可以通过 xslt 将格式化信息写入模板里,这样文档就会更整洁。稍后我们会学怎样组合 xsl-fo 和 xslt.XSL-FO 通过 List Blocks 来定义列表
fo:list-block (包含整个列表)
fo:list-item (包含每个项)
fo:list-item-label (包括列表项的标签,比如数字、字符等等。)
fo:list-item-body (包括列表的内容。比如 <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> XSL-FO 通过 <fo:table-and-caption> 来定义表格 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-and-caption> 用来定义表格,它有 <fo:table> 和 <fo:caption> 两个元素
<fo:table> 所包含的可选元素有<fo:table-column> 、<fo:table-header>、<fo:table-body>、<fo:table-footer>元素。上面每个元素包含一个或多个<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>XSL-FO 和 XSLT 合作<xsl:template match="header">
<fo:block
font-size="14pt" font-family="verdana" font-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>XSK-FO 参考http://www.w3schools.com/xslfo/xslfo_reference.asp
|
阅读全文(3080) | 回复(1) | 编辑 | 精华 |
| 回复:XSL-FO 学习笔记 |
蜂蜜加醋发表评论于2008/5/21 14:29:44 | 您对xsl-fo很有研究么?
我刚开始学,可以请教请教您么?
|
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 | » 1 »
|
|
| « | November 2025 | » | | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | | | |
|
| Blog信息 |
|
blog名称: 日志总数:3 评论数量:3 留言数量:0 访问次数:32338 建立时间:2005年8月24日 | |

|