xsl fo内部链接确实可以在不同页面序列之间工作

时间:2018-08-30 12:54:48

标签: xslt xsl-fo apache-fop

我有多个页面序列,这是必要的,因为显示的数据具有不同的参数(某些风景和某些肖像)。我努力建立带有链接的目录:

<fo:page-sequence id="toc">
<fo:page-sequence id="data1">
<fo:page-sequence id="data2">

<xsl:template name="toc">
  <fo:flow>
   <fo:block>
        <fo:basic-link internal-destination="data1">
          data 1
          <fo:leader leader-pattern="dots"/>
          <fo:page-number-citation ref-id="data1"/>
        </fo:basic-link>
      </fo:block>
   </fo:flow>
</xsl:template>

我收到以下警告:

1 link target could not be fully resolved and now point to the top of the page or is dysfunctional

因此,内部目标无法解析ID,它始终链接到文档的开头,但是我希望它链接到data1页序列的第一页的顶部。

如果我在内部目标文档中放置了一个不存在的ID,则该链接将完全断开,并且会出现预期的错误。 data1序列显示的页码正确。不能仅链接到某个页面吗?这样可以避免这个问题。

我必须使用XSL 2.0和Xalan。

更新: 现在问题变得很奇怪了。我在这样的“后继区域”中找到了页脚:

<fo:static-content flow-name="xsl-region-after">
  <fo:block>
    <fo:inline>
      <fo:page-number/>
      /
      <fo:page-number-citation-last ref-id="data5"/>
    </fo:inline>
  </fo:block>
</fo:static-content>

data5是最后一个页面序列。如果我输入data4,则指向data5的链接有效,但对其他链接无效。如果我完全将其删除,所有链接都将起作用!因此,这个<fo:page-number-citation-last ref-id="data5"/>来获取最后一个页码放入页脚实际上是问题所在。这是为什么?我还如何获得最后的页码?

在页脚中调用page-number-citation-last似乎阻止了链接!

1 个答案:

答案 0 :(得分:0)

您可以尝试使用在fo:page-sequence内生成第一个区域的元素的ID。如果没有ID,请使用generate-id()(请参见https://www.w3.org/TR/xslt20/#function-generate-id)给它一个ID。