我使用xslt从XML构建PDF。在pdf文件中,我需要在某些区域创建超链接,如整个表或某个区域(带有背景颜色的块容器)。我尝试使用< fo:basic-link external-destination =" http://...">,但没有成功。它适用于文本,但不适用于块容器和表。如果有人知道该怎么做,请帮忙。我使用Saxon和Apache FOP,以防万一。
答案 0 :(得分:2)
fo:basic-link
(https://www.w3.org/TR/xsl11/#fo_basic-link)是您制作链接的唯一选择。正如您所发现的那样,fo:basic-link
是一个' inline' FO。在https://www.w3.org/TR/xsl11/#d0e6532
%block;
和%inline;
FO的分类
但是,fo:basic-link
定义为允许%block;
内容,因此您应该能够在fo:table
内放置fo:basic-link
。即,使用嵌套,如:
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
格式化程序是否会做正确的事情是一个不同的问题,但两种方式都应该有效。
答案 1 :(得分:0)
@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图形编辑器(块 - 容器大小,以厘米为单位)。