我需要抓取几张图片并将它们放入通过Apache FOP生成的pdf中。在eXist之外,我没有问题。使用eXist,模板无法正常工作,输出中没有图像 - 可能是路径有问题。
“文件”的结构是:
project/data/file.xml
project/data/img/*pictures.jpg
测试来源:
<figure>
<graphic url="img/tealover.jpg"/>
</figure>
<figure>
<graphic url="./img/tealover.jpg"/>
</figure>
<figure>
<graphic url="/db/apps/karolinum-apps/data/img/tealover.jpg"/>
</figure>
模板:
<xsl:template match="tei:figure/tei:graphic">
<fo:block>
<fo:external-graphic src="{@url}" xsl:use-attribute-sets="images"/>
</fo:block>
<xsl:apply-templates/>
</xsl:template>
哪里可能是问题?我错过了一些eXist的设置吗?在ePub制作期间收集图像时,没有问题。
更新
XSL-FO输出:
<fo:block>
<fo:external-graphic width="50%" content-height="100%" content-width="scale-to-fit" scaling="uniform" src="img/tealover.jpg"/>
</fo:block>
<fo:block>
<fo:external-graphic width="50%" content-height="100%" content-width="scale-to-fit" scaling="uniform" src="./img/tealover.jpg"/>
</fo:block>
<fo:block>
<fo:external-graphic width="50%" content-height="100%" content-width="scale-to-fit" scaling="uniform" src="/db/apps/karolinum-apps/data/img/tealover.jpg"/>
</fo:block>
答案 0 :(得分:1)
XSL-FO处理器不知道如何从这些URL中检索图像,因为它不知道在哪里解析这些路径。
您应该使用XSL-FO处理器可以取消引用的绝对URL,例如,如果您的图像以此路径存储在eXist中:
/db/apps/karolinum-apps/data/img/tealover.jpg
您应该使用网址:
http://localhost:8080/exist/rest/db/apps/karolinum-apps/data/img/tealover.jpg
。
我假设eXist正在localhost
端口8080
上运行,如果没有,那么只需调整上面的网址即可反映您的设置。
答案 1 :(得分:0)
看来这就是诀窍:
<xsl:template match="tei:figure/tei:graphic">
<fo:block>
<fo:external-graphic src="url('{resolve-uri(@url, base-uri(.))}')" xsl:use-attribute-sets="images"/>
</fo:block>
<xsl:apply-templates/>
</xsl:template>
<强>更新强>
有趣!起初它的工作就像一个魅力。后来,我稍微重新安排了项目的结构(但文档附近的环境实际上是相同的),现在它不起作用。它记录:
exerr:ERROR Exception while transforming node: Base URI {} is not an absolute URI [at line 11, column 19] In function:
fop:render-pdf(node()*) [12:5:/db/apps/karolinum-apps/modules/create-pdf.xqm]
但问题显然是在这行代码中。
即使我尝试<xsl:value-of select="resolve-uri(@url, base-uri(.))"/>
,也会抱怨
exerr:ERROR Exception while transforming node: Base URI {} is not an absolute URI [at line 16, column 9]
目前无法理解这些微小的细节。