如何避免来自Jasper报告JRXML文件的文件路径

时间:2015-12-01 17:26:43

标签: jasper-reports

我有一个模板(.jrxml)文件。在那里,我有下面的代码片段,我曾经包含一个图像,

<image>
    <reportElement mode="Transparent" x="0" y="0" width="280" height="60" backcolor="#FFFFFF" uuid="d312321a854-323232332-223121d12c2d7f"/>
    <imageExpression><![CDATA["/home/name/app/test/reportTemplates/images/company_logo.JPG"]]></imageExpression>
</image>

因此,每次更改部署环境时,我都需要更改此/home/name/app/test/reportTemplates/images/company_logo.JPG路径。

避免这种设计的任何明确方法?

1 个答案:

答案 0 :(得分:1)

“正常”的方法是使用包含基本路径参数

<parameter name="IMAGE_DIR" class="java.lang.String" isForPrompting="false">
    <defaultValueExpression><![CDATA["/home/name/app/test/reportTemplates/images/"]]></defaultValueExpression>
</parameter>

设置defaultValueExpression以便您可以在预览(iReport,JasperSoft工作室)和isForPrompting="false"中使用它,以避免每次预览时都会询问它。

然后在imageExpression中使用参数作为基本路径

<imageExpression><![CDATA[$P{IMAGE_DIR} + "company_logo.JPG"]]></imageExpression>

何时到填充报告(应用程序运行时),将IMAGE_DIR参数设置为在参数映射中传递的正确部署路径。

ES。如果您使用的是java GUI ,那么您希望获得安装位置的相对路径

File imageDir = new File("images");
String imageAbsolutePath = imageDir.getAbsolutePath() + File.separator;

ES。如果您有 Web应用程序(jsp / jsf),您希望找到已部署应用程序的WEB-INF路径

ServletContext context = request.getServletContext(); 
String imageAbsolutePath = context.getRealPath("/WEB-INF/images") + "/";

现在我们有了图像目录的绝对路径,我们将它添加到我们传递给fillManager的参数图中。

Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("IMAGE_DIR",imageAbsolutePath);
//..here goes all the other parameter you may set.

然后只需将参数图传递给fillManager ...

注意:这是一个我不知道你如何填写的例子

JasperPrint print = JasperFillManager.fillReport(report, paramMap, connection);