2016-01-27 24 views
0

在我以前的问题中,我碰到了一个更广泛的路径问题,并在eXist-db应用程序中识别了它们。eXist-db中的XSL-FO中的图像

目前,我无法将图像导入PDF文件。我尝试过2次安装eXist(2.2和3RC)以及许多可能的场景。当然,我测试过这些图片可以通过浏览器访问。

在源文件中,我曾尝试:

1. <graphic url="img/tealover.jpg"/> 
2. <graphic url="/db/apps/karolinum-apps/data/mono/2015080/img/tealover.jpg"/> 
3. <graphic url="http://46.28.111.241:8081/exist/rest/db/apps/karolinum-apps/data/mono/2015080/img/tealover.jpg"/> 

4. <graphic url="url(img/tealover.jpg)"/> 
5. <graphic url="url(/db/apps/karolinum-apps/data/mono/2015080/img/tealover.jpg)"/> 
6. <graphic url="url(http://46.28.111.241:8081/exist/rest/db/apps/karolinum-apps/data/mono/2015080/img/tealover.jpg)"/> 

7. <graphic url="url('img/tealover.jpg')"/> 
8. <graphic url="url('/db/apps/karolinum-apps/data/mono/2015080/img/tealover.jpg')"/> 
9. <graphic url="url('http://46.28.111.241:8081/exist/rest/db/apps/karolinum-apps/data/mono/2015080/img/tealover.jpg')"/> 

正如预期的那样,样品3,6和9个工作只有当我让他们在源硬编码链接的形式。如果我在XSLT样式表中建立链接,它们在FO文件中完全相同,但生成的PDF中没有任何内容。

当量的FO文件制作:

1. <fo:external-graphic src="img/tealover.jpg"/> 
2. <fo:external-graphic src="/db/apps/karolinum-apps/data/mono/2015080/img/tealover.jpg"/> 
3. <fo:external-graphic src="http://46.28.111.241:8081/exist/rest/db/apps/karolinum-apps/data/mono/2015080/img/tealover.jpg"/> 

4. <fo:external-graphic src="url(img/tealover.jpg)"/> 
5. <fo:external-graphic src="url(/db/apps/karolinum-apps/data/2015080/img/tealover.jpg)"/> 
6. <fo:external-graphic src="url(http://46.28.111.241:8081/exist/rest/db/apps/karolinum-apps/data/mono/2015080/img/tealover.jpg)"/> 

7. <fo:external-graphic src="url('img/tealover.jpg')"/> 
8. <fo:external-graphic src="url('/db/apps/karolinum-apps/data/mono/2015080/img/tealover.jpg')"/> 
9. <fo:external-graphic src="url('http://46.28.111.241:8081/exist/rest/db/apps/karolinum-apps/data/mono/2015080/img/tealover.jpg')"/> 

当我硬编码这些链接到源,在样式表中工作src="{@url}"。当我使用网址无处不(url="img/tealover.jpg")的短版,在属性样式表我在

src="concat('http://46.28.111.241:8081/exist/rest', $imgPath, @url)" 

$imgPath变量作为从应用程序设置了一个param通过模板使用

<xsl:value-of select="concat('http://46.28.111.241:8081/exist/rest', $imgPath, @url)"/> 

或直接:

let $bookUri := base-uri($resource) 
let $imgPath := replace($bookUri, '[^/]*?$', '') 

有了这个,链接1,4和7应该工作,其余的是一团糟。我可以在eXide中复制这些链接,他们仍然可以在浏览器中工作。

当我测试时,一切都看起来很好。在PDF中,仍然没有图片。我想现在应该有一个小小的细节。

+0

我的建议是在将代码传递给FO处理器之前查看由代码生成的XSL-FO。这可能会以您构建网址的方式显示问题。我的FO类似于你的方法#9。 – joewiz

+0

是的,这是我不明白的 - 我正在测试它并在右窗格中看到这些链接。他们是正确的,我已经把它们粘贴在上面(这些样本来自fo文件) –

+0

Right pane?我真的很难理解你想描述的确切情况。 – joewiz

回答

0

得到了解决方案。意想不到的是,最好的办法是让网址保持原样,并专注于解决根路径问题。有了这个FOP处理器能够解决相对路径,一切都按预期工作。就我而言,我为动态配置文件提供了xslfo:render()函数。最重要的部分是:

<hyphenation-base>{replace(request:get-url(), '/apps(.*?)$', '/rest')}/db/apps/karolinum-apps/modules/resources/hyph/</hyphenation-base> 
<hyphenation-pattern lang="cs" country="CZ">cs</hyphenation-pattern> 
<base>{replace(request:get-url(), '/apps(.*?)$', '/rest') || replace(base-uri($doc), '[^/]*?$', '')}</base> 
<font-base>{replace(request:get-url(), '/apps(.*?)$', '/rest')}/db/apps/karolinum-apps/modules/resources/fonts/</font-base> 

现在我能够存储项目中的所有内容,并在源文件中使用相对路径。希望这个解决方案能在下次测试中幸存如果你知道更优雅的方式如何做到这一点,请让我知道(好吧,首先我可以把那些笨拙的路径操作放入变量中)。