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

HTML 至格式化对象(FO)转换指南(2)转换 HTML 元素指南

HTML 至格式化对象(FO)转换指南(2)转换 HTML 元素指南

本指南向您演示如何将大多数 HTML 元素转换成 XSL 格式化对象。如果您正在在线查看本文,可以单击以下的任何链接,直接查看对某个特定元素的讨论。对于每个 HTML 元素,您将看到对该元素的简要描述、对应的格式化对象和将 HTML 转换成 XSL-FO 的 XSLT 模板。同其要处理的 HTML 元素一样,有些格式化对象和模板很简单,有些则非常棘手。         
我必须针对手边的案例做出一些特定选择,这在采用示例代码时不可避免。这里的所有示例都假定您最终将使用格式化对象作为实现至 PDF 转换的中间产物。我所选择的几个值是随意的,但我所做的大多数选择都参照为 PDF 文件(它是整个转换操作的最终结果)定义的布局。这个布局和我已经为                developerWorks完成的两篇教程中所用的相同。当然,为了使示例适应您自己的需要,可以替换成能生成您想要外观的值;您不必遵照我们 PDF 文件的外观。            
请记住,字母顺序尽管非常适合于引用,但不适合直接阅读。例如,尽管用于构建表格的大多数 HTML 标记都一起排在                T 下,但                 title 元素却搅乱了它们的字母顺序。            
  • <a name="..."> 命名锚点
  • <a href="#..."> 命名锚点引用
  • <a href="#..."> 锚点引用
  • <address> 地址
  • <b> 粗体字文本
  • <big> 较大的文本
  • <blockquote> 块引用
  • <body> 文档主体
  • <br> 换行符
  • <caption> 表的标题文本
  • <center> 居中文本
  • <cite> 引用
  • <code> 代码样本
  • <dl>、<dt> 和 <dd> 定义列表
  • <em> 强调的文本
  • <font color="..."> 更改文本颜色
  • <font face="..."> 更改文本字体
  • <font size="..."> 更改文本大小
  • <h1> 至 <h6> 标题
  • <hr> 水平线
  • <i> 斜体字文本
  • <img> 嵌入的图像
  • <kbd> 键盘输入
  • <li> 列表项
  • <nobr> 无换行的文本
  • <ol> 有序列表
  • <p> 段落
  • <pre> 预先格式化的文本
  • <samp> 样本文本
  • <small> 字体较小的文本
  • <strike> 加删除线的文本
  • <strong> 突出显示文本
  • <sub> 下标文本
  • <sup> 上标文本
  • <table> 表标记
  • <td> 表单元
  • <tfoot> 表页脚
  • <th> 表头单元
  • <thead> 表头
  • <title> 文档标题
  • <tr> 表行
  • <tt> 电报体文本
  • <u> 加下划线的文本
  • <ul> 无序列表
  • <var> 变量名
<a name="..."> 命名锚点本指南讨论转换三种不同锚点元素:本项讨论的命名锚点以及在这篇指南中按字母排列接下来的两项要讨论的                命名锚点引用和                锚点引用。第三项包括                一个 XSLT 模板样本,它演示了这三种锚点元素的转换。            
命名锚点类似于                 <a name="xyz" /> 。它通常被转换为带                 id 的                 <fo:block> 元素。通常情况下,会生成下面这个结果:            
1
<fo:block id="xyz"/>




这看起来很简单,但可能出现问题,这取决于文档的组织。例如,在教程的这个示例中,样式要求在标题文本                插入水平线和分页符来显示 HTML                 <h1> 元素。在该位置的分页符对于如下所示的命名锚点会引起问题:            
1
2
3
<a name="xslt"/>
<!-- A page break will be inserted here -->
<h1>Using XSLT style sheets</h1>




如果                 <h1> 从新的一页开始,则创建命名锚点的链接将会把用户带到上一页的末尾,这不是我们所期望的。要处理这种情况,可以让处理器查看 HTML 文档中命名锚点                之后的元素。如果之后的元素是                 <h1> ,则忽略该命名锚点;                 <h1> 元素的 XSLT 模板会处理这一情况下的命名锚点。以下是处理命名锚点的 XSLT 逻辑(即使标题前有分页符也可以处理):            
1
2
3
4
5
6
7
8
9
<xsl:template match="a">
  <xsl:choose>
         
            <xsl:when test="@name">
      <xsl:if test="not(name(following-sibling::*[1]) = 'h1')">
        <fo:block line-height="0pt" space-after="0pt"
          font-size="0pt" id="{@name}"/>
      </xsl:if>
    </xsl:when>




指定                 following-sibling 轴可确保样式表处理器检查紧随命名锚点之后的元素。如果该元素之后首个元素的名称                是                 h1 ,则处理器创建带                 id 的                 <fo:block> 。另注:                 <fo:block> 元素将                 line-height 、                 font-size 和                 space-after 属性设为零;您不会希望把任何垂直方向上的空间浪费在显示不可见的锚点上。
返回列表