【问题标题】:Proper way to reference files for subreports and images in jasper report [duplicate]在碧玉报告中引用子报告和图像文件的正确方法[重复]
【发布时间】:2018-07-15 17:34:37
【问题描述】:

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

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

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

有什么方法可以让报表同时在开发和生产机器上工作?

【问题讨论】:

    标签: spring-boot jasper-reports


    【解决方案1】:

    经过大量搜索和反复试验,我终于找到了可行的方法。

    子报表并不太难。

    1. 创建一个 SUBREPORT_DIR 参数。
    2. 将默认值设置为“static/”。
    3. 在主报表中调用子报表时,使用表达式$P{SUBREPORT_DIR}+"SubreportName.jasper"。如果子报表位于另一个文件夹中,只需将其添加到 SubreportName 前面即可。

    图片有点棘手。如果您的图像在主报告中,可能会有所不同。我在子报表中有图像,并且图像文件与子报表位于同一目录中。我认为使用像 ./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. 添加默认值为“static/”的 SUBREPORT_DIR 参数。
    4. 在图片上,将表达式设置为:net.sf.jasperreports.renderers.BatikRenderer.getInstance(new ClassPathResource($P{SUBREPORT_DIR}+"image.svg").getFile())

    我不得不认为会有一种更直接的方式以相对方式引用文件,但至少我知道这是可行的。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多