如何在 fo:block-container 和 fo:table 中创建超链接



我使用 xslt 从 XML 构建 PDF。在pdf文件中,我需要在某些区域创建超链接,例如整个表格或某些区域(带有背景颜色的块容器(。我尝试使用<fo:basic-link>,但没有成功。它适用于文本,但不适用于块容器和表格。如果有人知道该怎么做,请帮忙。我使用撒克逊和阿帕奇FOP,以防万一。

fo:basic-link(

https://www.w3.org/TR/xsl11/#fo_basic-link(是建立链接的唯一选择。 如您所发现的,fo:basic-link是"内联"FO。 请参阅%block;%inline; FO的分类,请访问 https://www.w3.org/TR/xsl11/#d0e6532

但是,fo:basic-link被定义为允许%block;内容,因此您应该能够在fo:basic-link中放置fo:table。 即,像这样使用嵌套:

fo:block
  fo:basic-link
    fo:table

但是,如果这不起作用,您可以将fo:table放在fo:inline-container内,因为这是一个"内联"FO,也允许在fo:basic-link内使用。 你最终会得到一个嵌套结构,如下所示:

fo:block
  fo:basic-link
    fo:inline-container
      fo:table

您的格式化程序是否会做正确的事情是一个不同的问题,但这两种方式都应该有效。

@TonyGraham的答案适用于表格。至少对于我的大部分页面。有些表仍然存在问题,但我认为可以通过某种方式解决。推荐的解决方案是:

fo:block
  fo:basic-link
    fo:inline-container
      fo:table

对于绝对定位的块容器,我想出了另一种解决方案。就在块容器之前,我在空的 SVG 对象中创建了另一个相同大小的块容器(也具有绝对位置(:

<fo:block-container position="absolute" left="6.15cm" top="1.31cm" height="6cm" width="9.32cm" overflow="hidden">
    <fo:block> 
        <fo:basic-link>
            <xsl:attribute name="external-destination">
                <xsl:text>url(</xsl:text>
                <xsl:value-of select="$my-url"/>
                <xsl:text>)</xsl:text>
            </xsl:attribute>
            <fo:instream-foreign-object>
                <svg xmlns="http://www.w3.org/2000/svg" height="130" width="260" viewBox="0 0 260 130">
                    <text></text>
                </svg>
            </fo:instream-foreign-object>
        </fo:basic-link>
    </fo:block>
</fo:block-container>

在这种情况下有一些不便。为了获得以磅为单位的SVG视框大小,我使用了Inkscape图形编辑器(以厘米为单位的块容器大小(。

最新更新