使用Exist-db中的XSL-FO从XQuery生成PDF

时间:2014-03-08 20:56:38

标签: xslt pdf xquery dynamically-generated exist-db

我有一点问题......

但首先:

这是我的XML文件:

    <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE akweny SYSTEM "akweny.dtd">
<akweny>
    <akwen>
        <nazwa>Atlantycki</nazwa>
        <typ>ocean</typ>
        <powierzchnia>106450</powierzchnia>
        <akweny>
            <akwen>
                <nazwa>Północne</nazwa>
                <typ>morze</typ>
                <powierzchnia>750</powierzchnia>
            </akwen>
            <akwen>
                <nazwa>Batyckie</nazwa>
                <typ>morze</typ>
                <powierzchnia>386</powierzchnia>
                <akweny>
                    <akwen>
                        <nazwa>Botnicka</nazwa>
                        <typ>zatoka</typ>
                        <powierzchnia>117</powierzchnia>
                    </akwen>
                </akweny>
            </akwen>
        </akweny>
    </akwen>
    <akwen>
        <nazwa>Spokojny</nazwa>
        <typ>ocean</typ>
        <powierzchnia>179700</powierzchnia>
    </akwen>
</akweny>

如何使用Xquery生成PDF文件?

我有这样的:

<table border="1" width="100%">
    <th>Podrzędne</th><th>Nazwa</th><th>Typ</th><th>Powierzchnia</th><th>Edycja</th>
        { 
       let $nodes := doc('/db/Dane/akweny.xml')//akweny[ancestor::*/nazwa="Atlantycki"]
        for $x in $nodes/*
        let $nazwa := $x/nazwa/text()
        let $typ := $x/typ/text()
        let $powierzchnia := $x/powierzchnia/text()
            return 
            <tr>
    <th><img src="/exist/apps/Obrazki/lupa.jpg" alt="Podrzedny" /></a></th>
                <th bgcolor="#F46978">{$nazwa}</th>
                <th>{$typ}</th>
                <th>{$powierzchnia}</th>
<th>Edytuj</th>
            </tr>

所以在单击PRINT按钮后必须生成不太好的文件...

任何消化?我正在研究它已经有一个多星期了,我无法解决这个问题......

1 个答案:

答案 0 :(得分:2)

eXist-db可以使用XSL-FO模块生成PDF,默认情况下,该模块配置为使用Apache FOP。我们的想法是,如果您可以将XML转换为XSL-FO,那么您可以将XSL-FO传递给XSL-FO模块,然后XSL-FO模块将为您生成PDF。该模块的功能记录在http://exist-db.org/exist/apps/fundocs/view.html?uri=http://exist-db.org/xquery/xslfo。默认情况下不启用此模块,因此您需要执行以下操作:

  1. 退出eXist-db,如果它正在运行。

  2. 修改$EXIST_HOME/extensions/local.build.properties(如果您没有此文件,请复制该目录中的build.properties文件,并重命名重复的local.build.properties)以转换行{{ 1}}到include.module.xslfo = false

  3. 使用include.module.xslfo = true(或Windows上的build.sh rebuild)重建eXist-db

  4. 取消注释conf.xml中的XSL-FO模块,该块以build.bat rebuild开头

  5. 重启eXist-db

  6. 现在您可以使用<module uri="http://exist-db.org/xquery/xslfo" class="org.exist.xquery.modules.xslfo.XSLFOModule">功能。