概述 | 第 1 页(共6 页) |
先让我们看一下链接在 XSL-FO 中是如何工作的。本章讨论下列主题:
- 创建锚点
- 创建交叉引用
- 创建 Web 链接
锚点 | 第 2 页(共6 页) |
创建锚点相当简单;只需将 id
属性添加到 XSL-FO 元素。几乎可以将该属性添加到任何格式化对象。下面是 id
为 lcr
的文档标题:
<fo:block id="lcr" font-size="18pt" line-height="21pt"
font-weight="bold">
Links and cross-references
</fo:block>
该标识在 XSL-FO 文件中创建名为 lcr
的锚点。如果 XSL-FO 文件包含另一个 id
为 lcr
的元素,将得到一个错误。
交叉引用 | 第 3 页(共6 页) |
一旦创建了锚点,就可以创建对它的引用。引用类似于:
<fo:block>
For more information, see <fo:basic-link color="blue"
internal-destination="lcr">Links and
cross-references</fo:basic-link>.
</fo:block>
在 PDF 文件中,单词 Links and cross-references 显示为兰色,如果用户单击这些单词,他们将查看文档中的 Links and cross-references 一节。
该链接工作得很好,但如何生成链接文本呢?要从 XML 源文档生成链接,使用 XSLT 的 key()
函数。假设 XML 源代码类似于:
<h1 id="lcr">
Links and cross-references
</h1>
...
<p>
For more information, see <xref refid="lcr"/>.
</p>
请注意:这里的 <xref>
元素不包含被引用标题的文本。这很重要;如果文档中那一节的标题更改了,您不需要遍历整个文档搜索所有对它的引用。现在您只需要找到 id
为 lcr
的元素文本。下面是处理 <xref>
元素的 XSLT 模板:
<xsl:template match="xref">
<fo:basic-link color="blue"
internal-destination="{@refid}">
<xsl:value-of select="key('headings', @refid)"/>
</fo:basic-link>
</xsl:template>
这里的 key()
函数的工作原理类似于数据库索引;您让 XSLT 处理器来查找名为 headings
的索引,并查找 id
等于 <xref>
元素中 refid
属性的元素。<xsl:value-of>
元素插入该元素的值,它是标题文本。(这里,我不会深入讨论 key()
函数;您可以在 developerWorks XML 专区找到有关 XSLT 的大量信息;请参考参考资料,以获取一些建议。)
页号引用 | 第 4 页(共6 页) |
那么现在,您已经知道如何创建基本的交叉引用,但交叉引用仅在联机状态下工作。有许多 PDF 文档用户会将它们打印出来,然后脱机阅读它们。如何创建可以帮助他们的交叉引用呢?如果他们没有快速简便的方法来查找 XYZ
,则告诉他们“For more information, see XYZ”
是没有任何帮助的。在传统打印文档中,除了被引用章节的标题外,还用页号引用来完成好的交叉引用。
幸运的是,XSL-FO 为页号引用定义了一个元素。页号引用类似于:
<fo:page-number-citation ref-id="lcr"/>
当 FOP 处理该元素时,<fo:page-number-citation>
元素被 id
为 lcr
的格式化对象的页号替换。要知道:现在该特性的 FOP 实现中仍有一些错误;虽然页号将是正确的,但 FOP 很少会在页面上留下足够空间来显示页号。
最后,让我们看一下如何创建 Web 引用。这里的主要差异是您正在链接的内容不是 PDF 文件的一部分。XSL-FO 为此定义了 当开始设计 XML 源文档时,必须解决如何格式化 Web 引用这一关键设计问题。如果用户在线查看链接,那么他们只要单击它,就可转至 developerWorks 站点。如果读者在 PDF 文档的印刷版本中遇到链接时,他们如何知道链接到哪里呢?请考虑与下面类似的 XML 元素: 您可能要按如下将引用格式化: 该编码向在线用户提供了一个可点击的链接,同时如果打印文档的用户要查看被引用站点上内容的话,也为他们提供了可以输入到浏览器中的 Web 地址。另一方面,如果 URL 值的长度超过 150 个字符,那么打印该 URL 是无用的;当然,如何实现它的决定取决于您。
结束本章时,您可能想学习完整的示例文件和产生的 PDF 文件。格式化对象文件 包括本章中讨论的所有链接类型。您可以进行查看 以了解输出。下面是部分抓屏: 在该示例中,页号引用被正确格式化,但这只是因为我在 XSL-FO 文件中手工插入了额外的空格。原始标记类似于: 在 |