【问题标题】:Error in loading object from InputStream in java while trying to open a jasper report尝试打开碧玉报告时从 java 中的 InputStream 加载对象时出错
【发布时间】:2016-12-27 15:51:31
【问题描述】:

我有一个在我的主要 jasper 报告中使用的子报告,我正在使用 InputStream 从 Java 表单发送子报告,这是代码:

InputStream suprepo = getClass().getResourceAsStream("LinuxTest_subreport1.jasper");

在主报告中,我创建了一个参数,其类为InputStream,并接受我使用哈希映射传递的 java 表单中的值。 我的问题是,当只有 1 页时一切正常,但一旦超过一页,我就会收到此错误:

error in loading object from input stream

这是我的碧玉代码

<parameter name="subrepopath" class="java.io.InputStream" isForPrompting="false"/>

【问题讨论】:

  • 错误是否发生在您调试时显示的行上?
  • 那个子报表是碧玉书的一部分?
  • @Milaci 是的,它是我的主要碧玉的一部分
  • @serge 此行出现错误
  • 我现在出去了,我不能尝试,但我认为你应该只调用一个主报告并在 jasper 上放置子报告的相对路径。

标签: java jasper-reports


【解决方案1】:

我遇到了同样的问题,它是由使用其他版本的 Jasper 报告编译的子报告 (.jasper) 引起的。

【讨论】:

    【解决方案2】:

    由于this post,我也遇到了这个问题,最近才找到解决方案。

    您需要做的是将子报表类型更改为对象:

    <parameter name="subrepopath" class="java.lang.Object" isForPrompting="false"/>
    

    在您的 SubReport 属性中,将 Expression 类设置为:

    net.sf.jasperreports.engine.JasperReport
    

    在您的代码中,您需要将对象加载到 JasperReport 对象中,这就是我与链接页面的不同之处,即methods used are deprecated

    所以你会这样做:

    InputStream suprepo = getClass().getResourceAsStream("LinuxTest_subreport1.jasper");
    JasperReport subJasperReport = (JasperReport)JRLoader.loadObject(suprepo);
    

    然后在您的参数映射中添加对象subJasperReportsubrepopath,您会发现您的多页报告现在将正确生成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多