XSL-FO 学习笔记(2)
这次主要学习列表(list)、表格(table)、多页布局、页脚页眉、页编码、链接(link)等在FO的定义。
1、列表
主体结构如下:
<fo:list-block> |
主结构 |
<fo:list-item> |
列表项定义 |
<fo:list-item-label> |
Label定义 |
<fo:block/> |
|
</fo:list-item-label> |
|
<fo:list-item-body> |
Label说明信息定义 |
<fo:block/> |
|
</fo:list-item-body> |
|
</fo:list-item> |
|
<>
... 更多 <fo:list-item>项 ... |
|
</fo:list-block> |
|
<fo-listblock>元素的provisional-distance-between-starts 特性定义 <fo:list-item-label> 的开始部分与 <fo:list-item-body> 的开始部分之间的距离。provisional-label-separation 特性定义 <fo:list-item-label> 的结束部分与 <fo:list-item-block> 的开始部分之间的距离。
<fo:list-item-label> 和 <fo:list-item-block> 元素的 start-indent 特性分别定义了从正常的起始页边距(列表之上段落的起始位置)到 <fo:list-item-label> 或 <fo:list-item-body> 的开始部分的距离。
<fo:list-item-label> 和 <fo:list-item-body> 元素的end-indent 特性定义从正常的结束页边距(列表之上段落的结束位置)和 <fo:list-item-body> 元素的结束之间的距离。
编号列表<OL>
<fo:list-item-label end-indent="label-end()>
<fo:block>
<xsl:number value="position()" format="1."/>
</fo:block>
</fo:list-item-label>
符号列表<UL>,用UTF-8定义字符
<fo:list-item-label end-indent="label-end()>
<fo:block>•</block>
</fo:list-item-label>
对自定义列表,最简单的办法是将术语(label)放在单个行上并以黑体字显示它,接着在下一行开始该术语(label)的定义.
2、表格(table)
xsl-fo与html对照
XSL-FO 元素 |
HTML 元素 |
<fo:table> |
<table> |
<fo:table-body> |
<tbody> (未普遍使用) |
<fo:table-column> |
该信息在 HTML <table> 元素的 cols 属性中。 |
<fo:table-row> |
<tr> |
<fo:table-cell> |
<td> |
<fo:table-caption> |
<caption>,虽然 XSL-FO 对标题和表必须出现在源文档中的方式施加了更多限制。 |
有例如下:
<fo:table table-layout="fixed">
<fo:table-column column-width="150pt"/>
<fo:table-column column-width="150pt"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell border-style="solid"
border-color="black" border-width="1pt"
padding-before="3pt" padding-after="3pt"
padding-start="3pt" padding-end="3pt">
<fo:block>Some text</fo:block>
</fo:table-cell>
<fo:table-cell border-style="solid"
border-color="black" border-width="1pt"
padding-before="3pt" padding-after="3pt"
padding-start="3pt" padding-end="3pt">
<fo:block>Some more text</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell border-style="solid"
border-color="black" border-width="1pt"
padding-before="3pt" padding-after="3pt"
padding-start="3pt" padding-end="3pt">
<fo:block>First cell, last row</fo:block>
</fo:table-cell>
<fo:table-cell border-style="solid"
border-color="black" border-width="1pt"
padding-before="3pt" padding-after="3pt"
padding-start="3pt" padding-end="3pt">
<fo:block>Last cell, last row</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
合并单元格
<fo:table-cell>的 number-columns-spanned 和 number-rows-spanned属性可以将单元格合并起来,其值集是数值。
表头
<fo:table-head>可含有几个<table-row>,下面一级就是<table-cell>了。
表标题,使用如下:
<fo:table-and-caption>
<fo:table-caption>
...
</fo:table-caption>
<fo:table>
...
</fo:table>
</fo:table-and-caption>
3、多页布局序列
通过利用<fo:conditional-page-master-reference>并借助其master-reference指明布局名,page-position或odd-or-even指明页面条件。
<fo:page-sequence-master master-name="standard">
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference
master-reference="first" page-position="first"/>
<fo:conditional-page-master-reference
master-reference="left" odd-or-even="even"/>
<fo:conditional-page-master-reference
master-reference="right" odd-or-even="odd"/>
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
4、页脚页眉
要在页面上创建浮于文本主体上下的页眉和页脚,可以使用
元素,其属性flow-name 分别为 xsl-region-before 和xsl-region-after。常见的是,<fo:simple-page-master>中定义了区域名其属性,在此只引用区域名(region-name)即可。
5、页码编号
用<fo:page-number/>获得,用<fo:page-sequence master-reference="standard" initial-page-number="57" format="i" />来设定显示格式(罗马)和开始编号(57)
6、链接
将id属性加入任何一元素,都可以生成锚点(anchor)。利用fo:basic-link 元素的 internal-destination属性指定锚点即可建立链接。在这fo:basic-link元素与其结束标签之间是链接文本。
特殊的页号引用
<fo:page-number-citation >元素的ref-id属性指定的锚点,在显示时可以转换为锚点所在页面的页码显示。
对于链接到web的链接,可以用fo:basic-link的external-destination属性来指定,如例:
< fo:basic-link color="blue" external-destination= "http://hedong.3322.org" > 竹笋炒肉 </fo:basic-link>
7、fop对xsl-fo进行了扩展,提供了定义pdf文件的“书签”的功能。
8、汉字文档
显示汉字需要特别处理。
1)建立font metrics文件,对ttc或ttf有不同的方法。
java org.apache.fop.fonts.apps.TTFReader C:\WINNT\Fonts\simkai.ttf simkai.xml
java org.apache.fop.fonts.apps.TTFReader -ttcname "SimSun" C:\WINNT\Fonts\simsun.ttc simsun.xml
-ttcname后面指定需要从ttc文件中提取的字体名称,两个命令中都要注意大小写。
2)修改$FOPHOME/confi/userconfig.xml,在</fonts>前面增加
<font metrics-file="simsun.xml" kerning="yes" embed-file="c:\WINNT\fonts\simsun.ttc">
<font-triplet name="mysimsun" style="normal" weight="normal"/>
</font>
<font metrics-file="simkai.xml" kerning="yes" embed-file="c:\WINNT\fonts\simkai.ttf">
<font-triplet name="mysimkai" style="normal" weight="normal"/>
</font>
3)将simkai.xml, simsun.xml放在$FOPHOME目录下,因为fop.sh或fop.bat就在这个目录下。运行
fop -c conf/userconfig.xml 1.fo 1.pdf
生成1.pdf.
4)1.fo可以从这儿下载。1.fo是根据参考文献2修改而来。
参考文献:
1、XSL-FO高级技术
http://www-900.ibm.com/developerWorks/cn/education/xml/x-xslfo2/tutorial/index.html
2、如何在程序中嵌入FOP
http://www-900.ibm.com/developerWorks/cn/xml/x-fop/index.shtml
3、FOP相关技术
http://www.javaresearch.org/article/showarticle.jsp?column=46&thread=2042
5、页码编号
用<fo:page-number/>获得,用<fo:page-sequence master-reference="standard" initial-page-number="57" format="i" />来设定显示格式(罗马)和开始编号(57)
6、链接
将id属性加入任何一元素,都可以生成锚点(anchor)。利用fo:basic-link 元素的 internal-destination属性指定锚点即可建立链接。在这fo:basic-link元素与其结束标签之间是链接文本。
特殊的页号引用
<fo:page-number-citation >元素的ref-id属性指定的锚点,在显示时可以转换为锚点所在页面的页码显示。
对于链接到web的链接,可以用fo:basic-link的external-destination属性来指定,如例:
< fo:basic-link color="blue" external-destination= "http://hedong.3322.org" > 竹笋炒肉 </fo:basic-link>
7、fop对xsl-fo进行了扩展,提供了定义pdf文件的“书签”的功能。
8、汉字文档
显示汉字需要特别处理。
1)建立font metrics文件,对ttc或ttf有不同的方法。
java org.apache.fop.fonts.apps.TTFReader C:\WINNT\Fonts\simkai.ttf simkai.xml
java org.apache.fop.fonts.apps.TTFReader -ttcname "SimSun" C:\WINNT\Fonts\simsun.ttc simsun.xml
-ttcname后面指定需要从ttc文件中提取的字体名称,两个命令中都要注意大小写。
2)修改$FOPHOME/confi/userconfig.xml,在</fonts>前面增加
<font metrics-file="simsun.xml" kerning="yes" embed-file="c:\WINNT\fonts\simsun.ttc">
<font-triplet name="mysimsun" style="normal" weight="normal"/>
</font>
<font metrics-file="simkai.xml" kerning="yes" embed-file="c:\WINNT\fonts\simkai.ttf">
<font-triplet name="mysimkai" style="normal" weight="normal"/>
</font>
3)将simkai.xml, simsun.xml放在$FOPHOME目录下,因为fop.sh或fop.bat就在这个目录下。运行
fop -c conf/userconfig.xml 1.fo 1.pdf
生成1.pdf.
4)1.fo可以从这儿下载。1.fo是根据参考文献2修改而来。
参考文献:
1、XSL-FO高级技术
http://www-900.ibm.com/developerWorks/cn/education/xml/x-xslfo2/tutorial/index.html
2、如何在程序中嵌入FOP
http://www-900.ibm.com/developerWorks/cn/xml/x-fop/index.shtml
3、FOP相关技术
http://www.javaresearch.org/article/showarticle.jsp?column=46&thread=2042