<fo:external-graphic src="../graphics/bullet.png" content-height="0.5cm" />
我在每次尝试通过Windows的命令提示符处理文件时收到此错误。
org.apache.fop.events.LoggingEventListener processEvent
SEVERE: Image not found. URI: bullet.png. (See position 26:80)
org.apache.fop.events.LoggingEventListener processEvent
SEVERE: Image not found. URI: bullet.png. (No context info available)
org.apache.fop.events.LoggingEventListener processEvent
源路径是APACHE的FOP图像示例提供的确切格式。我甚至执行了他们的&#34; image.fo&#34;文件在渲染外部图形时,仍然遇到上面的错误(使用不同的图像文件)。
是否有其他解决方案?
答案 0 :(得分:3)
相对URI相对于基URI(https://xmlgraphics.apache.org/fop/fo.html#external-resources)。
如果您没有在FOP配置中设置基本URI,则基本URI是当前目录(https://xmlgraphics.apache.org/fop/1.1/configuration.html)。
相对于运行FOP的目录的图像文件在哪里?
使用时是否有效:
<fo:external-graphic src="examples/fo/graphics/bullet.png" content-height="0.5cm" />
答案 1 :(得分:1)
我的外部图片标签如下所示:
<fo:external-graphic content-height="15.73mm" src="url('logo.png')"/>
我必须将logo.png文件放在与xsl文件相同的目录中。
也就是说,我的fop命令看起来像这样:
$TOOLS/fop-2.0/fop -d -x -xml xmlfiles/xmlfile.xml -xsl xslfiles/xslfile.xsl -pdf pdffiles/pdffile.pdf
我必须将.png文件放在xmlfiles目录中。
我提出这个问题是因为接受的答案说URI是“当前目录”。
答案 2 :(得分:0)
正如Micheal Potter在https://stackoverflow.com/a/36521536/12227050中指出的那样,该路径相对于xml文件的URI(如果没有其他基本路径配置)。如果不能确保xml文件和图形文件之间的关系,则必须使用技巧:
图像路径是相对于主要xml输入文件的。因此,诀窍是一方面在图像附近具有一个准空的虚拟xml文件作为主文件,另一方面从辅助文件访问所有数据。
示例:
convert.bat
请注意,data.xml相对于dummy.xml也已解析,因此它是../data.xml
call %dir%/fop -xml script/dummy.xml -xsl script/small.xsl -pdf small.pdf -param doc3node ../data.xml
data.xml
<?xml version="1.0" encoding="UTF-8"?>
<C attr="Attribute here.">
<d>Hello!</d>
<DDDD>Dadadadam</DDDD>
</C>
script / dummy.xml
此文件可能甚至更空了
<?xml version="1.0" encoding="UTF-8"?>
<a><B></B></a>
script / logo.gif
[not shown here]
脚本/small.xsl
请注意,logo.gif相对于dummy.xml(均位于同一目录中)。主要技巧是基本上使用document('../data.xml')//element
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:func="http://exslt.org/functions" extension-element-prefixes="func">
<xsl:param name="doc3node" select="''"/>
<xsl:variable name="d3" select="document($doc3node)" />
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="DIN-A4" page-height="29.7cm" page-width="21cm">
<fo:region-body margin-top="1.5cm" margin-bottom="1.5cm" margin-left="2cm" margin-right="2cm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="DIN-A4">
<fo:flow flow-name="xsl-region-body">
<xsl:variable name="doc2node" select="'../data.xml'" />
<xsl:for-each select="document($doc2node)//*">
<xsl:call-template name="ListThemAll" />
</xsl:for-each>
<fo:block><xsl:text>... again ...</xsl:text></fo:block>
<xsl:for-each select="$d3//*">
<xsl:call-template name="ListThemAll" />
</xsl:for-each>
<xsl:call-template name="End"/>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template name="ListThemAll" match="*">
<fo:block><xsl:text>Element: </xsl:text><xsl:value-of select="name()"/></fo:block>
</xsl:template>
<xsl:template name="End">
<fo:block text-align="center">
<fo:external-graphic src="logo.gif" content-width="2.5cm"/>
</fo:block>
</xsl:template>
</xsl:stylesheet>
结果pdf文件输出
Element: C
Element: d
Element: DDDD
... again ...
Element: C
Element: d
Element: DDDD
[Centered image]