我使用 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图形编辑器(以厘米为单位的块容器大小(。