【问题标题】:How to make pdf bookmark with renderx(XSL)如何使用 renderx(XSL) 制作 pdf 书签
【发布时间】:2018-03-24 18:55:52
【问题描述】:

我必须修改文件的 xsl 才能制作 pdf。我们曾经使用 AntennaHouse,但有人决定我们现在应该使用 RenderX。所以我需要找到一个等价于

<fo:block axf:outline-level="{$bookmark-level}" axf:outline-expand="false" axf:outline-title="{$bookmark-title}">
</fo:block>

我尝试将 axf 更改为 rx,它可以编译,但 pdf 上没有显示书签。

我也尝试过使用

<rx:outline>
    <rx:bookmark internal-destination="">
        <rx:bookmark-label>
            section
        </rx:bookmark-label>
    </rx:bookmark>
</rx:outline>

但是这个解决方案也不起作用。

理想情况下,我想偶尔在 xsl 中制作书签(因为它是当前在 xsl 文件中制作的方式)。换句话说,我不想在 xsl 文件的开头做这一切。

有人有灵魂吗?

编辑:

我将代码稍微更改为

<fo:block id="section1">Section 1</fo:block>
    <rx:outline>
        <rx:bookmark internal-destination="section1">
            <rx:bookmark-label>
                section
            </rx:bookmark-label>
       </rx:bookmark>
   </rx:outline>

【问题讨论】:

  • 您的书签无处可去,因为没有目的地 (internal-destination="")
  • @KevinBrown 即使使用内部目的地,它也不能解决我的问题,也不能在我的 pdf 上显示书签。
  • 您可能没有 rx: 命名空间。您必须在您的 XSL 中添加此名称空间。请看下面的答案。我将添加命名空间

标签: xml pdf xslt xsl-fo renderx


【解决方案1】:

首先,您的 XSL 或 FO 必须包含 rx: 命名空间:

 xmlns:rx="http://www.renderx.com/XSL/Extensions"

你没有将书签指向任何东西。您没有内部目的地。如果你有:

<rx:outline>
<rx:bookmark internal-destination="section1">
    <rx:bookmark-label>
        section
    </rx:bookmark-label>
</rx:bookmark>
</rx:outline>

在文档的后面,类似:

<fo:block id="section1">Section 1</fo:block>

那么它应该可以工作。通常这些 id 是使用 generate-id() 之类的函数生成的。

http://www.renderx.com/tutorial.html#PDF_Bookmarks

注意,您也可以避免命名空间并使用 XSL 1.1 大纲结构。

<fo:bookmark-tree> = <rx:outline>
<fo:bookmark> = <rx:bookmark>
<fo:bookmark-title> = <rx:bookmark-label>

【讨论】:

  • 仍然没有书签。我将使用我添加的代码编辑我的帖子。
  • 您不能通过文档偶尔添加它们。您必须将它们添加到 rx:outline 或 fo:bookmark-tree。
  • 哦...我明白了。感谢您的回答。我希望有别的东西,因为它可以用 AntennaHouse 完成。
  • 这些都是自定义 Antennahouse 扩展,不属于 XSL FO 规范。
猜你喜欢
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 2022-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多