当前位置: 首页 > 面试题库 >

如何在碧玉报告中显示图像?

訾稳
2023-03-14
问题内容

我想在碧玉报告中显示图像。我在.jrxml上具有以下内容:

<image>
  <reportElement x="181" y="0" width="209" height="74"/>
  <imageExpression class="java.lang.String"><![CDATA["logo.jpg"]]></imageExpression>
</image>

图像logo.jpg与.jrxml位于同一目录中。只是说这对我不起作用。我在Google上搜索了一下,发现jasper报告将我放在.jrxml中的内容视为到JVM目录的相对路径,并且要更改此设置,我需要将返回文件的FileResolver作为“
REPORT_FILE_RESOLVER”参数传递。因此,我在.java中进行了以下操作(与.jrxml和图像位于同一位置)

FileResolver fileResolver = new FileResolver() {

 @Override
 public File resolveFile(String fileName) {
  return new File(fileName);
 }
};
HashMap<String, Object> parameters = new HashMap<String, Object>();

parameters.put("REPORT_FILE_RESOLVER", fileResolver);
...

哪个应该返回预期的文件,但我仍然得到

net.sf.jasperreports.engine.JRException: Error loading byte data : logo.jpg
    at net.sf.jasperreports.engine.util.JRLoader.loadBytes(JRLoader.java:301)
    at net.sf.jasperreports.engine.util.JRLoader.loadBytesFromLocation(JRLoader.java:479)
    at net.sf.jasperreports.engine.JRImageRenderer.getInstance(JRImageRenderer.java:180)
...

我究竟做错了什么?

谢谢!


问题答案:

这是问题所在:

如前所述,我在同一目录中有.jrxml,logo.jpg和使用.jrxml的.java。

事实是,fileResolver

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虚拟机的目录。

(摘自Java api- 文件(Java Platform SE
6)

JVM所在的目录不是我拥有所有这些数据的目录。

谢谢!



 类似资料:
  • 使用 iReport 3.7.5,我预览了 Jasper Report,我想将其另存为 PDF 文件。PDF 文件已创建,但 PDF 文件上缺少粗体和斜体格式。 请告诉我如何保存正确的PDF文件。

  • 如何从jar文件中加载已编译的jasper报告,而不是通过硬盘驱动器上的特定路径? 我的报告在我的机器上运行良好,因为我已经设置了报告的路径: 但是当在另一台计算机上从完成的jar中工作时,报告没有被加载。所以我尝试使用输入流并将其传递给JasperFillManager,但是没有任何效果——输入流没有找到文件。我走错路了吗? 我最初的工作代码: 现在,更改后的代码不起作用: 任何帮助非常感谢!

  • 我的数据库中有1000000.00,但由于逗号的缘故,我不知道如何合计这些数字。。有人能帮我吗?im使用jasper reports和netbeans

  • 问题内容: 我在寻找解决此问题的方法时遇到问题。运行它后,我的代码可以正常工作。它假定将我的sql数据库中的数据显示到jtable上,并且有一个按钮将触发显示jasper报告,但存在一点问题,它始终向我显示消息“文档无页面”。这是为什么?有人可以帮我解决我的问题吗?我做错什么了? 这是我的代码: 这是XML报告: 问题答案: 首先,资源管理… 如果可以,您应该只打开与数据库的单个连接。确保在关闭应

  • 我有这个对象结构,像 mi jasper 报告中的 Java Bean 一样使用, 具有相应和的所有类 当我在jasper报告中创建列表时,我这样定义“作业列表”: 现在我要创建另一个列表,“职责列表”放在“工作列表”上,问题是: 我如何定义数据源以获得要传递到中的相应作业? 我想象这样的事情: 但我不能让它工作

  • 我有一颗春豆: 在jrxml中: 但这抛出了一个 NullPointerException,因为 customerWrapperCache 是空的。 正确的做法是什么?