在jasper报告中引用子报告和图像的文件的正确方法

时间:2018-02-05 19:07:00

标签: spring-boot jasper-reports

我有一个Spring Boot应用程序,我正在使用Jasper Reports Library。在开发机器上,我可以获得子报表和路径为

的图像
src/main/resources/static/[subreport.jasper | image.svg]

但是,当打包为WAR并部署到Tomcat服务器时,该路径不再有效。

允许报告在开发和生产机器上工作的一种方法是什么?

1 个答案:

答案 0 :(得分:2)

经过大量的搜索和反复试验,我终于有了一些有用的东西。

子报告并不太难。

  1. 创建SUBREPORT_DIR参数。
  2. 将默认值设置为" static /"。
  3. 在主报表中调用子报表时,请使用表达式$P{SUBREPORT_DIR}+"SubreportName.jasper"。如果子报表位于另一个文件夹中,只需将其添加到SubreportName前面。
  4. 图像有点棘手。如果您的图像位于主报告中,则可能会有所不同。我在子报表中有图像,图像文件与子报表位于同一目录中。我认为应该使用像./image.svg这样的相对路径,但这些行中的任何内容都不起作用。

    我在尝试引用主报告时遇到了同样的问题。见Can't access static file from Spring Boot application running in Tomcat servlet

    从那里的工作开始,它给了我一个尝试图像的想法,这确实有效。以下是我需要做的步骤:

    1. 在Jaspersoft Studio中,将spring-core-5.0.2.RELEASE.jar添加到构建路径。
    2. 在子报表上,将org.springframework.core.io.ClassPathResource;添加到导入列表中。在jrxml中,这看起来像是:<import value="org.springframework.core.io.ClassPathResource"/>
    3. 添加一个SUBREPORT_DIR参数,默认值为&#34; static /&#34;。
    4. 在图像上,将表达式设置为:net.sf.jasperreports.renderers.BatikRenderer.getInstance(new ClassPathResource($P{SUBREPORT_DIR}+"image.svg").getFile())
    5. 我不得不认为以相对的方式引用文件会有一种更直接的方式,但至少我知道这有用。