使用XSL-FO(Apache FOP)从XML文件发布PDF文件中的动态链接

时间:2016-12-06 16:27:21

标签: xml pdf xsl-fo apache-fop

使用XSL-FO我想发布PDF文件的动态链接。我在StackOverflow上找到了这个,并且谷歌的许多例子都带有静态网址,但没有动态网址的示例。这就是我发布这个问题的原因。我想从xml文件生成链接(链接是元素'topicref'中属性'href'的值):

    <script src='https://code.jquery.com/jquery-3.1.0.js'></script>

    <table width='200' border='0'>
        <tr>
            <td><input id='a' class='radioOption' type='radio' name='RadioGroup0' value='a' />A</td>
            <td><input id='b' class='radioOption' type='radio' name='RadioGroup0' value='b' />B</td>
            <td><input id='c' class='radioOption' type='radio' name='RadioGroup0' value='c' />C</td>
            <td><input id='d' class='radioOption' type='radio' name='RadioGroup0' value='d' />D</td>
        </tr>
        <tr>
            <td class='other'>
                <input type='radio' class='radioMore hasChild' name='RadioGroup1' id='a28' value='Other' />
                <label for='a28'>Other</label>
                <div class='text'>
                    <input type='text' id='other1' value='Other' class='hasParent'>
                </div>
            </td>
            <td></td>
            <td>
                <input name='RadioGroup1' class='radioMore hasChild' type='radio' value='search' />Search
                <input id='adjectiveSearch' type='search' name='search' placeholder='Search...' class='hasParent'>
            </td>
            <td>
                <input name='RadioGroup1' class='radioMore' type='radio' value='d' />D
            </td>
        </tr>
    </table>

    <div id='result'>
    </div>

我用过xsl-fo:

<?xml version="1.0" encoding="utf-8"?>
<map outputclass="DTVMap">
<title>Testdocument DTVmap</title>
<topicref format="dita" scope="local" href="ObjSt/bla/DTV/Testdocument_14.06.dita" navtitle="Testdocument 14.06" />
</map>

我收到一条消息: “与元素类型”null“关联的属性”external-destination“的值不得包含'&lt;'字符“。

我试图通过在xsl-fo中添加以下代码来获取链接,而不是从上面添加“basic-link external-destination”。

<fo:basic-link external-destination="url(<xsl:value-of select="map/topicref/@href"/>)" color="blue" text-
decoration="underline"><xsl:value-of select="map/topicref/@href"/></fo:basic-link>

现在生成的PDF中有一个链接,但链接是:'file:///C/ws/fo_xslt/ObjSt/bla/DTV/Testdocument_14.06.dita'而不是:'ObjSt / bla /DTV/Testdocument_14.06.dita”。

问题是;我怎样才能获得如下链接:'ObjSt / bla / DTV / Testdocument 14.06.dita'所以,没有'file:/// C / ws / fo_xslt'? 'C:/ ws / fo_xslt'是我放置生成的PDF的目录。 或者:如何获取仅包含href属性值的链接? 感谢

PS: 我用来生成pdf的Java类是(只是为了提供更多背景):

<xsl:value-of select="map/topicref/@href"/>
<xsl:param name="link" select="map/topicref/@href" />
<fo:basic-link color="blue" text-decoration="underline">
<xsl:attribute name="external-destination">
<xsl:value-of select="$link" />
</xsl:attribute>
<xsl:value-of select="$link" />
</fo:basic-link>

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用属性值模板。在要评估的表达式周围使用{}

<fo:basic-link external-destination="url({map/topicref/@href})"
    color="blue" text-decoration="underline">
  <xsl:value-of select="map/topicref/@href"/>
</fo:basic-link>

有关XSLT 1.0定义,请参阅https://www.w3.org/TR/xslt#attribute-value-templates