在我以前的问题中,我触及了一个更广泛的路径问题及其在eXist-db应用程序中的识别。
目前,我无法将图像输入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(url="img/tealover.jpg"
)时,在属性样式表中我使用
<xsl:value-of select="concat('http://46.28.111.241:8081/exist/rest', $imgPath, @url)"/>
或直接在模板中
src="concat('http://46.28.111.241:8081/exist/rest', $imgPath, @url)"
$imgPath
变量作为参数传递给应用程序:
let $bookUri := base-uri($resource)
let $imgPath := replace($bookUri, '[^/]*?$', '')
有了这个,链接1,4和7应该工作,其余的是一团糟。我可以在eXide中复制这些链接,但它们仍可在浏览器中使用。
当我测试时,一切看起来都很好。在PDF中,仍然没有图片。我想现在必须要有一个小细节。
答案 0 :(得分: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>
现在我可以将所有内容存储在项目中,并在源文件中使用相对路径。希望这个解决方案能够在下一次测如果您知道更优雅的方式,请告诉我(好吧,首先我可以把那些笨拙的路径操作变成变量)。