Java 如何在jasper report上显示图像?

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> 我做错了什么 谢谢 我通过传递一个指定

我想在jasper报告上显示一个图像。我在.jrxml上有以下内容:

<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>