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

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

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

<ul> 无序列表无序列表比有序列表和定义列表简单,因为                 <fo:list-item-label> 是所有项的项目符号。以下是用作样本的 HTML 列表:            
1
2
3
4
5
6
7
8
<p>A few of my favorite albums</p>
<ul>
  <li>A Love Supreme</li>
  <li>Remain in Light</li>
  <li>London Calling</li>
  <li>The Indestructible Beat of Soweto</li>
  <li>The Joshua Tree</li>
</ul>




要用到的 XSL-FO 列表元素有:                 <fo:list-block> 、                 <fo:list-item> 、                 <fo:list-item-label> 和                 <fo:list-item-body> 。以下是如何将 HTML 列表转换为 XSL-FO:            
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<fo:block>A few of my favorite albums</fo:block>
<fo:list-block provisional-distance-between-starts="0.2cm"
  provisional-label-separation="0.5cm"
  space-after="12pt" start-indent="1cm">
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
      <fo:block>•</fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      A Love Supreme
    </fo:list-item-body>
  </fo:list-item>
  ...
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
      <fo:block>•</fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      The Joshua Tree
    </fo:list-item-body>
  </fo:list-item>
</fo:list-block>




该模板使用 Unicode 实体                 • 作为项目符号。            
将                 <ul> 和                 <li> 项转换成格式化对象的 XSLT 模板在处理                 <ul> 元素时遵循以下规则:            
  • 如果该列表出现在另一列表中,则不在其后插入任何空白。
  • 如果该列表不在任何其它列表中,则将其缩进                     1 cm 。否则,它缩进的距离为                     1 cm 加上其它每个列表缩进的                     1.25 cm 。例如,如果该列表是第三级列表,则将该列表缩进                     3.5 cm 。
以下是 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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<xsl:template match="ul">
  <fo:list-block provisional-distance-between-starts="1cm"
    provisional-label-separation="0.5cm">
    <xsl:attribute name="space-after">
      <xsl:choose>
         
         
        <xsl:when test="ancestor::ul or ancestor:l">
          <xsl:text>0pt</xsl:text>
        </xsl:when>
        <xsltherwise>
          <xsl:text>12pt</xsl:text>
        </xsltherwise>
      </xsl:choose>
    </xsl:attribute>
    <xsl:attribute name="start-indent">
      <xsl:variable name="ancestors">
        <xsl:choose>
           
         
        <xsl:when test="count(ancestor:l) or count(ancestor::ul)">
            <xsl:value-of select="1 +
                                  (count(ancestor:l) +
                                   count(ancestor::ul)) *
                                  1.25"/>
          </xsl:when>
          <xsltherwise>
            <xsl:text>1</xsl:text>
          </xsltherwise>
        </xsl:choose>
      </xsl:variable>
      <xsl:value-of select="concat($ancestors, 'cm')"/>
    </xsl:attribute>
    <xsl:apply-templates select="*"/>
  </fo:list-block>
</xsl:template>
<xsl:template match="ul/li">
  <fo:list-item>
     
         
        <fo:list-item-label end-indent="label-end()">
      <fo:block>•</fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>
        <xsl:apply-templates select="*|text()"/>
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
</xsl:template>




<var> 变量名通常以斜体等宽字体来显示变量名。使用 XSL-FO                 font-family 和                 font-style 属性。以下是一个简短的样本:            
1
2
3
<p>To run the FOP program, you must make sure
  your <var>classpath</var> variable
  is set correctly.</p>




以下是进行该转换的 XSLT 模板:
1
2
3
4
5
6
7
8
<xsl:template match="var">
  <fo:inline
         
        font-style="italic"
      font-family="monospace">
    <xsl:apply-templates select="*|text()"/>
  </fo:inline>
</xsl:template>

返回列表