FOP XSL-FO 锚定在外部目的地

Posted

技术标签:

【中文标题】FOP XSL-FO 锚定在外部目的地【英文标题】:FOP XSL-FO Anchor in an external destination 【发布时间】:2013-01-20 03:28:23 【问题描述】:

使用 XSL-FO (Fop),我成功地创建了指向外部 PDF 的链接:

<fo:basic-link show-destination="new">
<xsl:attribute name="external-destination">foo.pdf</xsl:attribute>
</fo:basic-link>

但是现在,我想在这个外部 PDF 中找到一个锚点。所以我尝试构建类似的东西:

<fo:basic-link show-destination="new">
<xsl:attribute name="external-destination">foo.pdf#anchorId</xsl:attribute>
</fo:basic-link>

不幸的是,当我单击生成的链接时,我收到了错误消息。它尝试打开文档 foo.pdf%23anchorId

在我的 .fo 文件中,带有 # 的链接是正确的,但在 PDF 转换过程中,这个 # 被误解了。

你有解决这个问题的想法吗?

谢谢,

约翰

【问题讨论】:

【参考方案1】:

对于 FOP,我们有两个链接:内部和外部。

对于外部您可以使用:

   <fo:basic-link 
    external-destination="url('http://www.paulmccartney.com')" 
    color="blue" text-decoration="underline">
     Paul McCartney
   </fo:basic-link>

和内部链接是从文档中的一个位置到同一文档中的另一个位置的链接。创建内部链接有两个步骤:

首先,为所链接的位置提供一个唯一 ID。 ID 使用 id 属性指定。该值可以是硬编码或生成的。在下面的示例中,我们使用 generate-id() XSLT 函数来生成 ID:

<fo:block font-weight="bold" font-size="larger" 
 id="generate-id(.)" break-before="page">
  <xsl:value-of select="."/>
 </fo:block>

其次,创建指向该位置的链接。与外部链接一样,内部链接是使用标签创建的。 internal-destination 属性应设置为文档中其他位置的 ID 值。

<fo:basic-link internal-destination="generate-id(.)">
 <xsl:value-of select="."/>
</fo:basic-link>

我认为您错过了在“external-destination”属性中包含“url”关键字

【讨论】:

感谢您的回复纳文。看来我无法创建混合链接(外部和内部)。此外,我认为我不需要在属性中包含“url”,因为我想创建指向位于同一文件夹中的 PDF 文件的链接。

以上是关于FOP XSL-FO 锚定在外部目的地的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 XSL-FO(和 Apache FOP)计算从应用模板返回的元素

如何在使用 FOP 的 XSL-FO 中保留带有标题的表格但允许在表格主体内分页符

如何使用 xsl-fo 和 apache fop 0.95 显示固定的图像高度和宽度

pdfbox / XSL + FOP 转换 PDF文档

pdfbox / XSL + FOP 转换 PDF文档

使用 iOS 外部附件协议在外部附件上支持多个应用程序