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

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

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

<em> 强调文本大多数浏览器以斜体字表示强调文本,因此只需将                 <em> 元素转换为带 <font-style="italic"> 属性的                 <fo:inline> 元素即可。我们从以下标记着手:            
1
2
<p>You <em>must<> disconnect the power supply before
you open the product housing.  </p>




在 FO 中,您可以如下处理它:
1
2
3
4
<fo:block>
  You <fo:inline font-style="italic">must</fo:inline> disconnect
  the power supply before you open the product housing.
</fo:block>




以下是 XSLT 模板:
1
2
3
4
5
6
7
<xsl:template match="em">
  <fo:inline
         
        font-style="italic">
    <xsl:apply-templates select="*|text()"/>
  </fo:inline>
</xsl:template>




<font color="..."> 更改文本颜色我将使用                 <font> 元素的三个属性来演示如何向 XSL-FO 元素进行转换:                 color 、                 face 和                 size 。对于                 color 属性,可以使用十六进制 RGB 值(如                 x33cc99 )或由 XSL-FO 规范定义的 16 种颜色名称之一:            
aquablackbluefuchsiagraygreenlimemaroonnavyolivepurpleredsilvertealwhiteyellow
如果存在某种颜色,XSLT 模板便假定 FOP 可以处理该颜色值。缺省颜色是                 black :            
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<xsl:template match="font">
  <xsl:variable name="color">
    <xsl:choose>
         
              <xsl:when test="@color">
        <xsl:value-of select="@color"/>
      </xsl:when>
      <xsltherwise>
        <xsl:text>black</xsl:text>
      </xsltherwise>
    </xsl:choose>
  </xsl:variable>
  ...
  <fo:inline font-size="{$size}" font-family="{$face}"
    color="{$color}">
    <xsl:apply-templates select="*|text()"/>
  </fo:inline>
</xsl:template>




注意:该 XSLT 模板创建一个变量以保存                 color 属性的值。该模板创建                 color 、                 face 和                 size 的变量,然后用这些值构建                 <fo:inline> 元素。            
<font face="..."> 更改文本字体<font> 元素的                 face 属性映射至 XSL-FO                 font-family 属性,但有一个问题:FOP 工具只支持数量有限的字体。                 font-family 的有效值为:            
  • serif
  • sans-serif
  • monospace
  • Courier 、                     Courier-Bold 、                     Courier-BoldOblique 或                     Courier-Oblique
  • Helvetica 、                     Helvetica-Bold 、                     Helvetica-BoldOblique 或                     Helvetica-Oblique
  • Symbol
  • Times-Roman 、                     Times-Bold 、                     Times-BoldItalic 或                     Times-Italic
如同处理颜色一样,XSLT 模板创建一个字体变量。它将缺省字体设置为                 sans-serif :            
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<xsl:template match="font">
  <xsl:variable name="face">
    <xsl:choose>
         
              <xsl:when test="@face">
        <xsl:value-of select="@face"/>
      </xsl:when>
      <xsltherwise>
        <xsl:text>sans-serif</xsl:text>
      </xsltherwise>
    </xsl:choose>
  </xsl:variable>
  ...
  <fo:inline font-size="{$size}" font-family="{$face}"
    color="{$color}">
    <xsl:apply-templates select="*|text()"/>
  </fo:inline>
</xsl:template>




另外,FOP 工具提供了一些方法将 Adobe Type 1 字体和 Truetype 字体转换为 XML font-metric 文件。FOP 用这些文件并以与上面所列字体不同的字体来显示文本。请参阅 FOP 文档以了解详细信息。
<font size="..."> 更改文本大小<font> 元素的                 size 属性映射至 XSL-FO                 font-size 属性。下面是用于处理 HTML                 size 属性的逻辑:            
  • 如果                     size 属性包含字符串                     pt (例如                     size="24pt" ),则按原样使用值。
  • 如果                     size 属性以一个加号或减号开头(如                     size="+2" 或                     size="-1" ),则使用字体的相对大小;例如,将                     +1 映射为                     110% 的相对字体大小。(我随便选了这些值,您可以自由地更改它们。)
  • 如果                     size 属性是 1 到 7 之间的数字,则将字体设置为任意大小。(同样,如果愿意,可以更改这些属性值。)
  • 作为最后手段,将字体设置为                     12pt 。
以下是                 <font> 元素完整的 XSLT 模板。在结尾处,它使用在前面初始化的变量来创建                 <fo:inline> 元素:            
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<xsl:template match="font">
  <xsl:variable name="color">
    <xsl:choose>
      <xsl:when test="@color">
        <xsl:value-of select="@color"/>
      </xsl:when>
      <xsltherwise>
        <xsl:text>black</xsl:text>
      </xsltherwise>
    </xsl:choose>
  </xsl:variable>
  <xsl:variable name="face">
    <xsl:choose>
      <xsl:when test="@face">
        <xsl:value-of select="@face"/>
      </xsl:when>
      <xsltherwise>
        <xsl:text>sans-serif</xsl:text>
      </xsltherwise>
    </xsl:choose>
  </xsl:variable>
  <xsl:variable name="size">
    <xsl:choose>
      <xsl:when test="@size">
        <xsl:choose>
          <xsl:when test="contains(@size, 'pt')">
            <xsl:text>@size</xsl:text>
          </xsl:when>
          <xsl:when test="@size = '+1'">
            <xsl:text>110%</xsl:text>
          </xsl:when>
          <xsl:when test="@size = '+2'">
            <xsl:text>120%</xsl:text>
          </xsl:when>
          <xsl:when test="@size = '+3'">
            <xsl:text>130%</xsl:text>
          </xsl:when>
          <xsl:when test="@size = '+4'">
            <xsl:text>140%</xsl:text>
          </xsl:when>
          <xsl:when test="@size = '+5'">
            <xsl:text>150%</xsl:text>
          </xsl:when>
          <xsl:when test="@size = '+6'">
            <xsl:text>175%</xsl:text>
          </xsl:when>
          <xsl:when test="@size = '+7'">
            <xsl:text>200%</xsl:text>
          </xsl:when>
          <xsl:when test="@size = '-1'">
            <xsl:text>90%</xsl:text>
          </xsl:when>
          <xsl:when test="@size = '-2'">
            <xsl:text>80%</xsl:text>
          </xsl:when>
          <xsl:when test="@size = '-3'">
            <xsl:text>70%</xsl:text>
          </xsl:when>
          <xsl:when test="@size = '-4'">
            <xsl:text>60%</xsl:text>
          </xsl:when>
          <xsl:when test="@size = '-5'">
            <xsl:text>50%</xsl:text>
          </xsl:when>
          <xsl:when test="@size = '-6'">
            <xsl:text>40%</xsl:text>
          </xsl:when>
          <xsl:when test="@size = '-7'">
            <xsl:text>30%</xsl:text>
          </xsl:when>
          <xsl:when test="@size = '1'">
            <xsl:text>8pt</xsl:text>
          </xsl:when>
          <xsl:when test="@size = '2'">
            <xsl:text>10pt</xsl:text>
          </xsl:when>
          <xsl:when test="@size = '3'">
            <xsl:text>12pt</xsl:text>
          </xsl:when>
          <xsl:when test="@size = '4'">
            <xsl:text>14pt</xsl:text>
          </xsl:when>
          <xsl:when test="@size = '5'">
            <xsl:text>18pt</xsl:text>
          </xsl:when>
          <xsl:when test="@size = '6'">
            <xsl:text>24pt</xsl:text>
          </xsl:when>
          <xsl:when test="@size = '7'">
            <xsl:text>36pt</xsl:text>
          </xsl:when>
          <xsltherwise>
            <xsl:text>12pt</xsl:text>
          </xsltherwise>
        </xsl:choose>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text>12pt</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:variable>
   
         
        <fo:inline font-size="{$size}" font-family="{$face}"
    color="{$color}">
    <xsl:apply-templates select="*|text()"/>
  </fo:inline>
</xsl:template>

返回列表