【问题标题】:How to get the ReportDesign class of some subreport on the server for scriptlet-based modifications?如何在服务器上获取某些子报表的 ReportDesign 类以进行基于脚本的修改?
【发布时间】:2016-06-22 06:36:51
【问题描述】:

我在本地有一个master.jrxml 报告和一些subreport.jrxml,可以通过Scriptlet 代码中的ReportDesign design = JRXmlLoader.load( "/local-file-dir/path/to/subreport.jrxml" ) 加载和操作子报告。

在服务器上,上述加载方法(由我的master.jrxml触发)显然无法处理repo路径,无论我尝试什么(基本上是net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: ...

(subreport.jrxml 上传为 JRXML 文件资源 - 而不是 报告 具有不可见的文件夹结构; subreport-attached.jrxml 作为我的 master.jrxml 报告的文件资源上传 )

  • apwop) 没有协议前缀的绝对 repo 路径,例如/repo/path/subreport.jrxml
  • apwp) 带有协议前缀的绝对 repo 路径,例如repo:/repo/path/subreport.jrxml
  • rpwop) 没有协议前缀的相对 repo 路径,例如subreport-attached.jrxml
  • rpwp) 带有协议前缀的相对 repo 路径,例如repo:subreport-attached.jrxml

我还尝试了以下 uri 变体,如在网络其他地方发现的 没有成功

  • JRXmlLoader

    JRXmlLoader.load(
      new DefaultRepositoryService( 
        DefaultJasperReportsContext.getInstance() 
      ).getInputStream( subrepPath )
    
  • RepositoryUtil

    RepositoryUtil.getInstance( 
      DefaultJasperReportsContext.getInstance() 
    ).getInputStreamFromLocation( subrepPath )
    
  • JasperServerUtil:类似于 this 我仍在尝试并会报告(到目前为止,正确的 Maven jasperserver 库支持存在问题 - 我可能会在 another question 中解决其他问题)
    • 更新:成功了:请参阅下面的答案

【问题讨论】:

    标签: java jasper-reports jasperserver


    【解决方案1】:

    哇哦! :) com.jaspersoft.jasperserver.api.metadata.common.service.RepositoryService 的最后一种方法是这样工作的:

    JasperDesign design = JRXmlLoader.load(
       ( (RepositoryService) StaticApplicationContext.getApplicationContext()
         .getBean( "repositoryService" ) 
       )
       .getResourceData( JasperServerUtil.getExecutionContext() , 
         "repo:/some/where/subreport.jrxml" )
       .getDataStream()
    

    呸!难产。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-20
      • 2020-09-17
      • 2021-08-11
      • 1970-01-01
      • 2014-01-23
      • 2017-03-18
      • 2019-10-25
      • 2011-12-28
      相关资源
      最近更新 更多