HTML 至格式化对象(FO)转换指南(8)命名锚点引用
- UID
- 1066743
|
HTML 至格式化对象(FO)转换指南(8)命名锚点引用
<p> 段落将 HTML 段落元素转换成 <fo:block> 元素比较简单。例如,考虑下面这个段落:
1
2
3
4
5
6
7
| <p>When in the Course of human events, it becomes necessary
for one people to dissolve the political bonds which have connected
them with another, and to assume among the powers of the earth,
the separate and equal station to which the Laws of Nature and
of Nature's God entitle them, a decent respect to the opinions
of mankind requires that they should declare the causes which
impel them to the separation.</p>
|
该段落将转换成以下 XSL-FO 标记:
1
2
3
4
5
| <fo:block font-size="12pt" line-height="15pt
space-after="12pt">When in the Course of human events, it becomes
necessary for one people to dissolve the political bonds which
...
</fo:block>
|
下面是进行该转换的简单的 XSLT 模板:
1
2
3
4
5
6
| <xsl:template match="p">
<fo:block font-size="12pt" line-height="15pt"
space-after="12pt">
<xsl:apply-templates select="*|text()"/>
</fo:block>
</xsl:template>
|
我们用 font-size 、 line-height 和 space-after 属性的缺省值实现该模板。显然,如果愿意的话,您可以更改这些值。
<pre> 预先格式化的文本<pre> 元素有几处复杂之处。需要保留它包含的所有空白域,并且需要关闭 XSL-FO 引擎执行的自动换行。依照约定,还要用等宽字体显示 <pre> 元素的内容。下面这段摘录是示例 <pre> 元素:
1
2
3
4
5
6
| <pre>
public static void main(String args[])
{
System.out.println("Hello, world!");
}
</pre>
|
要正确处理这个 <pre> 元素示例,必须将其转换成以下 XSL-FO 标记:
1
2
3
4
5
6
7
8
| <fo:block font-family="monospace"
white-space-collapse="false"
wrap-option="no-wrap">
public static void main(String args[])
{
System.out.println("Hello, world!");
}
</fo:block>
|
进行这一转换的 XSLT 模板比较简单:
1
2
3
4
5
6
7
8
9
| <xsl:template match="pre">
<fo:block
font-family="monospace"
white-space-collapse="false"
wrap-option="no-wrap">
<xsl:apply-templates select="*|text()"/>
</fo:block>
</xsl:template>
|
<samp> 样本文本通常用稍大的等宽字体表示 <samp> 元素。尽管很少使用 <samp> ,但将它转换成格式化对象很容易。以下是一个样本 <samp> 元素:
1
2
| <p>The <samp>DOCTYPE</samp> keyword lets you
refer to a DTD from your XML source document.</p>
|
将其转换成格式化对象的 XSLT 模板简短明了:
1
2
3
4
5
6
7
8
| <xsl:template match="samp">
<fo:inline
font-family="monospace"
font-size="110%">
<xsl:apply-templates select="*|text()"/>
</fo:inline>
</xsl:template>
|
<small> 字体较小的文本转换 <small> 元素也很容易。如您所料,它是用较小的字体表示的。因为 <big> 元素的模板用比正常字体大 20% 的 font-size 表示该元素,所以有理由将 <small> 定义为比正常字体小 20%。以下是简单的 XSLT 模板:
1
2
3
4
5
6
7
| <xsl:template match="small">
<fo:inline
font-size="80%">
<xsl:apply-templates select="*|text()"/>
</fo:inline>
</xsl:template>
|
假如有 <p>The Lakers' chances for a fourth straight title are <small>slim</small>.</p> 这样一个段落,则模板生成这样的标记:
1
2
3
4
| <fo:block font-size="12pt" line-height="15pt" space-after="12pt">
The Lakers' chances for a fourth straight title are
<fo:inline font-size="80%">slim</fo:inline>.
</fo:block>
|
和 <big> 元素一样,在内部相互嵌套多个 <small> 元素会创建逐渐变小的文本。
<strike> 加删除线的文本实现 HTML <strike> 元素比较简单;创建带 text-decoration="line-through" 属性的 <fo:inline> 元素。加删除线的文本可用于突出显示文档中的删除部分。以下是示例:
1
2
3
| <p>The underline property
<strike>is not currently supported by FOP.</strike>
is now supported by FOP.</p>
|
在显示时,该段落清楚地表明文本是如何变化的。 <strike> 的 XSLT 模板比较简短:
1
2
3
4
5
6
7
| <xsl:template match="strike">
<fo:inline
text-decoration="line-through">
<xsl:apply-templates select="*|text()"/>
</fo:inline>
</xsl:template>
|
注: text-decoration 属性的关键字可以是负值也可以是正值。如果出于某种原因而希望在启用 line-through 的一长段文本中关闭其中一小段具有 line-through 的文本,可以创建一个带 text-decoration="no-line-through" 属性的 <fo:inline> 元素。也可以指定多个值;属性 text-decoration="line-through underline" 同时对文本加删除线和下划线。
<strong> 突出显示的文本通常以粗体字显示 <strong> 元素。以下是进行该转换的简单模板:
1
2
3
4
5
6
7
| <xsl:template match="strong">
<fo:inline
font-weight="bold">
<xsl:apply-templates select="*|text()"/>
</fo:inline>
</xsl:template>
|
<sub> 下标文本要处理下标文本,可使用 XSL-FO vertical-align 属性更改文本的基线。通常还需要缩小字体。以下是一个 HTML 样本:
1
2
| <p>When I'm thirsty, nothing beats a cold
glass of H<sub>2</sub>O.</p>
|
以下是我们的 XSLT 模板:
1
2
3
4
5
6
7
8
| <xsl:template match="sub">
<fo:inline
vertical-align="sub"
font-size="75%">
<xsl:apply-templates select="*|text()"/>
</fo:inline>
</xsl:template>
|
|
|
|
|
|
|