我有一个Spring Boot应用程序,我正在使用Jasper Reports Library。在开发机器上,我可以获得子报表和路径为
的图像src/main/resources/static/[subreport.jasper | image.svg]
但是,当打包为WAR并部署到Tomcat服务器时,该路径不再有效。
允许报告在开发和生产机器上工作的一种方法是什么?
答案 0 :(得分:2)
经过大量的搜索和反复试验,我终于有了一些有用的东西。
子报告并不太难。
$P{SUBREPORT_DIR}+"SubreportName.jasper"
。如果子报表位于另一个文件夹中,只需将其添加到SubreportName前面。图像有点棘手。如果您的图像位于主报告中,则可能会有所不同。我在子报表中有图像,图像文件与子报表位于同一目录中。我认为应该使用像./image.svg
这样的相对路径,但这些行中的任何内容都不起作用。
我在尝试引用主报告时遇到了同样的问题。见Can't access static file from Spring Boot application running in Tomcat servlet
从那里的工作开始,它给了我一个尝试图像的想法,这确实有效。以下是我需要做的步骤:
org.springframework.core.io.ClassPathResource;
添加到导入列表中。在jrxml中,这看起来像是:<import value="org.springframework.core.io.ClassPathResource"/>
。net.sf.jasperreports.renderers.BatikRenderer.getInstance(new ClassPathResource($P{SUBREPORT_DIR}+"image.svg").getFile())
。我不得不认为以相对的方式引用文件会有一种更直接的方式,但至少我知道这有用。