HTML 至格式化对象(FO)转换指南(11)命名锚点引用
- UID
- 1066743
|
HTML 至格式化对象(FO)转换指南(11)命名锚点引用
<tfoot> 表页脚很少用到 <tfoot> 元素,它可以创建表页脚。它包含若干表行( <tr> )元素,每个表行元素包含若干表单元。要处理它,只需调用用于 <tfoot> 元素所包含的 <tr> 元素的 XSLT 模板:
1
2
3
4
5
| <xsl:template match="tfoot">
<xsl:apply-templates select="tr"/>
</xsl:template>
|
<th> 表头单元HTML <th> 元素包含一个表头单元。要处理它,可创建一个四周边界宽度为 3 点的 <fo:table-cell> (如前面在 <td> 元素的缺省值中指定的那样)。 <fo:table-cell> 元素包含一个文本为粗体且居中的 <fo:block> 元素。该模板查找此元素有 border="1" 属性的祖先元素;如果其中任何一个有这样的边界属性,则该模板相应地设置 XSL-FO 边界属性。以下是完整的 XSLT 模板:
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
| <xsl:template match="th">
<fo:table-cell
padding-start="3pt" padding-end="3pt"
padding-before="3pt" padding-after="3pt">
<xsl:if test="@border='1' or
ancestor::tr[@border='1'] or
ancestor::table[@border='1']">
<xsl:attribute name="border-style">
<xsl:text>solid</xsl:text>
</xsl:attribute>
<xsl:attribute name="border-color">
<xsl:text>black</xsl:text>
</xsl:attribute>
<xsl:attribute name="border-width">
<xsl:text>1pt</xsl:text>
</xsl:attribute>
</xsl:if>
<fo:block
font-weight="bold" text-align="center">
<xsl:apply-templates select="*|text()"/>
</fo:block>
</fo:table-cell>
</xsl:template>
|
<thead> 表头处理极少使用的 <thead> 元素和处理 <tfoot> 元素相似。以下是一个简单的 XSLT 模板:
1
2
3
4
5
| <xsl:template match="thead">
<xsl:apply-templates select="tr"/>
</xsl:template>
|
<title> 文档标题我们假定所有这些指令都是为了将 FO 文档最终转换成 PDF 文件,后者有需要遵循的布局。为完成教程示例中所要求的 PDF 布局,需要将文档的标题( <html> 元素中 <head> 元素中的 <title> 元素)设置为大字体、粗体并且位于页面顶部中央。以下是 XSLT 模板:
1
2
3
4
5
6
7
8
| <xsl:template match="title">
<fo:block space-after="18pt" line-height="27pt"
font-size="24pt" font-weight="bold" text-align="center">
<xsl:apply-templates select="*|text()"/>
</fo:block>
</xsl:template>
|
<tr> 表行HTML <tr> 元素直接映射成 XSL-FO <fo:table-row> 元素。因为处理表的绝大部分工作都在 <td> 元素的模板中,所以现在必须要做的就是创建 <fo:table-row> 并调用 HTML <tr> 元素中所包含的每个元素的 XSLT 模板。以下是一个简单的模板:
1
2
3
4
5
6
7
| <xsl:template match="tr">
<fo:table-row>
<xsl:apply-templates select="*|text()"/>
</fo:table-row>
</xsl:template>
|
<tt> 电报体文本电报体文本是以等宽字体显示的。以下是 XSLT 模板:
1
2
3
4
5
6
7
| <xsl:template match="tt">
<fo:inline
font-family="monospace">
<xsl:apply-templates select="*|text()"/>
</fo:inline>
</xsl:template>
|
<u> 加下划线的文本要显示加下划线的文本,可使用 XSL-FO text-decoration 属性。以下是简短的 HTML 样本:
1
2
3
| <p>When typewriters ruled the earth,
<u>underlining</u> was the most
common way to highlight text.</p>
|
当将其转换成 XSL-FO 时,要使用带 text-decoration="underline" 属性的 <fo:inline> 元素:
1
2
3
4
5
6
7
| <xsl:template match="u">
<fo:inline
text-decoration="underline">
<xsl:apply-templates select="*|text()"/>
</fo:inline>
</xsl:template>
|
注: text-decoration 属性的关键字可以是负值也可以是正值。如果出于某种原因而希望在启用 underline 的一长段文本中关闭其中一小段具有 underline 属性的文本,则可以创建一个带 text-decoration="no-underline" 属性的 <fo:inline> 元素。也可以指定多个值;属性 text-decoration="underline line-through" 同时对文本加删除线和下划线。 |
|
|
|
|
|