我使用fop 2.1,我需要加载带有绝对路径的外部图形。我试过这个:
<fo:root xsl:use-attribute-sets="text-attributes">
<fo:layout-master-set>
...
<fo:page-sequence master-reference="master">
<xsl:call-template name="pageHeader"/>
<xsl:call-template name="pageFooter"/>
<fo:flow flow-name="xsl-region-body">
...
</fo:flow>
</fo:page-sequence>
...
<xsl:template name="pageHeader">
<fo:static-content flow-name="region-before-first">
<fo:block>
<fo:external-graphic src="url({concat('file:/',$logo-image)})" height="15mm" content-height="15mm"/>
</fo:block>
</fo:static-content>
</xsl:template>
$ logo-image包含绝对路径,如C:/ users /.../ application / logo.gif
我收到以下错误:
PM org.apache.fop.events.LoggingEventListener processEvent
SEVERE: Invalid property value encountered in src="url(file:/C:/users/.../application/logo.gif)" .... Invalid URI specified
有什么想法吗?
我还试着把'&#39;喜欢&#34; url(&#39;文件:/ C:/ users /.../ application / logo.gif&#39;)&#34;而在潜水的地方。没有成功......: - (
与其他一些样式表一样,我确实有外部图形,我试过的功能也将标题带入正常流程(=&gt;非静态)。不是真正的标题,但尝试...:
<fo:root xsl:use-attribute-sets="text-attributes">
<fo:layout-master-set>
...
<fo:page-sequence master-reference="master">
<!--<xsl:call-template name="pageHeader"/>-->
<xsl:call-template name="pageFooter"/>
<fo:flow flow-name="xsl-region-body">
<xsl:call-template name="pageHeader"/>
...
</fo:flow>
</fo:page-sequence>
...
<xsl:template name="pageHeader">
<fo:block-container position="absolute" top="10mm" left="10mm">
<fo:block>
<fo:external-graphic src="url({concat('file:/',$logo-image)})" height="15mm" content-height="15mm"/>
</fo:block>
</fo:block-container>
</xsl:template>
但是:如果我把
独立<fo:external-graphic src="url({concat('file:/',$logo-image)})" height="15mm" content-height="15mm"/>
或
<fo:external-graphic src="url({concat('file:///',$logo-image)})" height="15mm" content-height="15mm"/>
我得到同样的愚蠢错误:
.... Invalid URI specified
答案 0 :(得分:1)
首先,通过使其作为静态FO文件工作来简化问题,独立于XSLT。一旦静态目标FO文件正常工作,您就可以双击回XSLT。
将其视为@rene commented,您必须使用完整的URI语法,这实际上可能需要另一个/
进行本地访问。 (想想protocol://host/path
协议是'文件',主机在这里是空的,连续产生三个斜杠):
file:///c:/users
如果您仍然遇到此问题,请执行browser walk up the directory tree以确保文件及其祖先目录都存在。
最后,请注意...
无效,如果是..
的拼写错误,而不是有关省略路径组件的元符号。
答案 1 :(得分:0)
Oups,我知道了!
这是一个愚蠢的Windows斜杠/反斜杠......!
获取图像路径时,我只需要转换斜杠:
<script>
$.noConflict();
$('.grid-stack').gridstack({
animate: true,
auto: true,
width: 12,
float: true,
vertical_margin: 0,
always_show_resize_handle: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),
resizable: {
handles: 'e, se, s, sw, w'
}
});
在样式表(xsl)中,您甚至可以在“file:”之后使用单斜杠版本(!):
string logoImg = BackslashToSlash(Path.GetFullPath(imageFile));
xsltArgumentList.Add("logo-image", logoImg);
...
public static String BackslashToSlash(String inStr)
{
try
{
return inStr.Replace("\\", "/");
}
catch (Exception)
{
return "";
}
}
尽管如此,我认为它实际上应该是三个斜线:
<fo:external-graphic src="url({concat('file:/',$logo-image)})" />