Java 如何在jasper report上显示图像?
我想在jasper报告上显示一个图像。我在.jrxml上有以下内容:Java 如何在jasper report上显示图像?,java,jasper-reports,Java,Jasper Reports,我想在jasper报告上显示一个图像。我在.jrxml上有以下内容: <image> <reportElement x="181" y="0" width="209" height="74"/> <imageExpression class="java.lang.String"><![CDATA["logo.jpg"]]></imageExpression> </image> 我做错了什么 谢谢 我通过传递一个指定
<image>
<reportElement x="181" y="0" width="209" height="74"/>
<imageExpression class="java.lang.String"><![CDATA["logo.jpg"]]></imageExpression>
</image>
我做错了什么
谢谢 我通过传递一个指定文件绝对位置的参数来实现这一点:
<imageExpression class="java.lang.String">
<![CDATA[$P{REPORTS_DIR} + "/images/logo.jpg"]]>
</imageExpression>
问题出在这里:
如前所述,我在同一目录中有.jrxml、logo.jpg和使用.jrxml的.java
问题是文件解析程序
FileResolver fileResolver = new FileResolver() {
@Override
public File resolveFile(String fileName) {
return new File(fileName);
}
};
没有返回图像文件。我发现它映射到了另一个目录,而不是我期望的那个目录。所以,我把它改成:
FileResolver fileResolver = new FileResolver() {
@Override
public File resolveFile(String fileName) {
URI uri;
try {
uri = new URI(this.getClass().getResource(fileName).getPath());
return new File(uri.getPath());
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
};
这就成功了。我忘记了这样一个事实:
相反,相对路径名,
必须从以下方面进行解释:
从其他方面获得的信息
路径名。默认情况下,中的类
java.io包始终解析
相对于当前路径的相对路径名
用户目录。这个目录是
由系统属性user.dir命名,
并且通常是中的目录
Java虚拟机是哪个
调用
(摘自JavaAPI-)
调用JVM的目录不是我拥有所有这些数据的目录
谢谢 尝试在报告页面中声明
类型为InputStream
的myImg等参数。为第页上的参数和图像占位符声明此类型。然后,使用以下内容从类路径获取图像(假设图像名称为'imgName.ext',并且它位于名为'your.package'的包中)
我这样做-图像通过路径传递:
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("logo", ClassLoader.getSystemResource("logo.jpg").getPath());
.jrxml
<parameter name="logo" class="java.lang.String"/>
...
<image>
<reportElement x="0" y="1" width="100" height="37"/>
<imageExpression><![CDATA[$P{logo}]]></imageExpression>
</image>
<parameter name="logo" class="java.io.InputStream"/>
...
<image onErrorType="Blank">
<reportElement x="0" y="1" width="100" height="37"/>
<imageExpression><![CDATA[$P{logo}]]></imageExpression>
</image>
...
请参见:
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("logo", ClassLoader.getSystemResource("logo.jpg").getPath());
<parameter name="logo" class="java.lang.String"/>
...
<image>
<reportElement x="0" y="1" width="100" height="37"/>
<imageExpression><![CDATA[$P{logo}]]></imageExpression>
</image>
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("logo", ClassLoader.getSystemResourceAsStream("logo.jpg"));
<parameter name="logo" class="java.io.InputStream"/>
...
<image onErrorType="Blank">
<reportElement x="0" y="1" width="100" height="37"/>
<imageExpression><![CDATA[$P{logo}]]></imageExpression>
</image>