首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

HTML 至格式化对象(FO)转换指南(4)命名锚点引用

HTML 至格式化对象(FO)转换指南(4)命名锚点引用

<center> 居中文本要处理居中文本,可使用                 <fo:block> 元素的                 text-align="center" 属性。假如有以下标记:            
1
2
3
<center>
  Table of Contents
</center>




您可以将它转换成以下 XSL-FO 元素:
1
2
3
<fo:block text-align="center">
  Table of Contents
</fo:block>




以下是按您所期望的执行转换的 XSLT 模板:
1
2
3
4
5
6
7
<xsl:template match="center">
   
         
        <fo:block text-align="center">
    <xsl:apply-templates select="*|text()"/>
  </fo:block>
</xsl:template>




<cite> 引用通常以斜体字文本显示                 <cite> 元素。为了稍稍增加一点难度,可以这样编写 XSLT 模板:将                 <i> 元素中包含的                 <cite> 元素作为正常文本表示,以便将其与周围的斜体字文本区分开。以下是一些样本标记:            
1
2
3
4
5
6
<p>
  When she was little, my daughter loved it when I read
  <cite>Goodnight Moon</cite> to her.
  <i>But <cite>Harold and the Purple Crayon</cite>
  was her favorite.</i>
</p>




要处理该标记,可使用 XSL-FO                 <fo:inline> 元素:            
1
2
3
4
5
6
7
8
<fo:block>
  When she was little, my daughter loved it when I read
  <fo:inline font-style="italic">Goodnight Moon</fo:inline> to her.
  <fo:inline font-style="italic">But
    <fo:inline font-style="normal">Harold and the Purple Crayon</fo:inline>
    was her favorite.
  </fo:inline>
</fo:block>




为了处理斜体字段落中的任何                 <cite> 元素,应在转换它之前检查其                 parent :            
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<xsl:template match="cite">
  <xsl:choose>
         
            <xsl:when test="parent::i">
      <fo:inline font-style="normal">
        <xsl:apply-templates select="*|text()"/>
      </fo:inline>
    </xsl:when>
    <xsltherwise>
      <fo:inline font-style="italic">
        <xsl:apply-templates select="*|text()"/>
      </fo:inline>
    </xsltherwise>
  </xsl:choose>
</xsl:template>




如果                 <cite> 元素的父元素是                 <i> 元素,则将                 font-style 更改为                 normal ;否则,将其更改为                 italic 。当                 <cite> 和                 <i> 元素相互嵌套时,这一技术可以正确地处理它们的组合。            
<code> 代码样本显示                 <code> 元素需要使用等宽字体。如您所料,可以使用                 <fo:inline> 元素。下面是一些样本标记:            
1
2
<p>If you're a Java programmer, an easy way to break a string apart
is with the <code>java.util.StringTokenizer</code> class.</p>




要正确地显示这段文本,可使用带                 font-family="monospace" 属性的                 <fo:inline> 元素:            
1
2
3
4
5
<fo:block>If you're a Java programmer, an easy way to
  break a string apart is with the
  <fo:inline font-family="monospace">java.util.StringTokenizer</fo:inline>
  class.
</fo:block>




以下是转换                 <code> 元素的 XSLT 模板:            
1
2
3
4
5
6
7
<xsl:template match="code">
  <fo:inline
         
        font-family="monospace">
    <xsl:apply-templates select="*|text()"/>
  </fo:inline>
</xsl:template>




<dl>、<dt> 和 <dd> 定义列表尽管定义列表不及有序列表(                 <ol> )和无序列表(                 <ul> )那么常用,但它们在定义术语或选项列表时非常有用。以下是一个定义列表,它定义了某个参数的一些选项:            
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<p>There are four valid values for the
  <code>text-align</code> parameter:</p>
<dl>
  <dt>start</dt>
  <dd>
    The text is aligned at the start of the paragraph, normally
    the left side.  
  </dd>
  <dt>middle</dt>
  <dd>The text is aligned at the middle of the paragraph.</dd>
  <dt>end</dt>
  <dd>
    The text is aligned at the end of the paragraph, normally
    the right side.
  </dd>
  <dt>justify</dt>
  <dd>The text is aligned at both the start and end of
    the paragraph.</dd>
</dl>




定义列表的典型格式是:在一行上以粗体显示术语(                 <dt> 元素),在接下来的一行上以缩进格式在术语下显示定义。以下是                 <dl> 、                 <dt> 和                 <dd> 的模板:            
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
31
32
<xsl:template match="dl">
  <xsl:apply-templates select="*"/>
</xsl:template>
<xsl:template match="dt">
  <fo:block
         
        font-weight="bold" space-after="2pt"
      
         
        keep-with-next="always">
    <xsl:apply-templates select="*|text()"/>
  </fo:block>
</xsl:template>
<xsl:template match="dd">
  <fo:block
         
        start-indent="1cm">
    <xsl:attribute name="space-after">
      <xsl:choose>
         
         
        <xsl:when test="name(following::*[1]) = 'dd'">
          <xsl:text>3pt</xsl:text>
        </xsl:when>
        <xsltherwise>
          <xsl:text>12pt</xsl:text>
        </xsltherwise>
      </xsl:choose>
    </xsl:attribute>
    <xsl:apply-templates select="*|text()"/>
  </fo:block>
</xsl:template>




在                 <dd> 元素的模板中,处理器检查下一个元素是否也是                 <dd> 元素。如果是的话,则当前                 <dt> 元素对同一术语一定有多个定义,因此处理器在当前定义之后留出距离为 3 点的垂直空间。否则的话,处理器会留出距离为 12 点的垂直空间。另请注意:即使 FOP 并不总是能够正确地处理它,该模板仍使用了                 <fo:block> 元素的                 keep-with-next 属性。
返回列表