jasper-reports - 如何设置 REPORT_TIME_ZONE 参数的值?
问题描述
如何使用REPORT_TIME_ZONE
内置参数设置报表的时区?
解决方案
TimeZone可以在代码的帮助下轻松传递给报告。例如,使用 Java:
Map<String, Object> params = new HashMap<>();
params.put(JRParameter.REPORT_TIME_ZONE, TimeZone.getTimeZone("Europe/London"));
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, new JREmptyDataSource());
如果您尝试像这样直接在jrxml更改REPORT_TIME_ZONE:
<parameter name="REPORT_TIME_ZONE" class="java.util.TimeZone">
<defaultValueExpression><![CDATA[java.util.TimeZone.getTimeZone("Europe/Copenhagen");]]></defaultValueExpression>
</parameter>
你会得到这个错误:
Caused by: net.sf.jasperreports.engine.JRException: org.xml.sax.SAXParseException; lineNumber: 10; columnNumber: 14; Error at line 10 char 14: Duplicate declaration of parameter: REPORT_TIME_ZONE
如果你真的需要在模板上设置参数,你可以使用这个技巧:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="TimeZone sample" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
<variable name="fake" class="java.util.TimeZone">
<variableExpression><![CDATA[java.util.TimeZone.getDefault()]]></variableExpression>
<initialValueExpression><![CDATA[$P{REPORT_PARAMETERS_MAP}.put("REPORT_TIME_ZONE", java.util.TimeZone.getTimeZone("Europe/Moscow"))]]> </initialValueExpression>
</variable>
<title>
<band height="60">
<textField>
<reportElement x="0" y="30" width="100" height="30"/>
<textFieldExpression><![CDATA[new Date()]]></textFieldExpression>
</textField>
</band>
</title>
</jasperReport>
在此示例中,我借助伪变量通过参数 Map 更改了参数的值:
$P{REPORT_PARAMETERS_MAP}.put("REPORT_TIME_ZONE", java.util.TimeZone.getTimeZone("Europe/Moscow"))
推荐阅读
- php - 泊坞窗中的 Apache+php。无法访问 ENV 变量
- here-api - 重新路由中没有永久 ID(HERE Android Premium SDK)
- java - 是否有任何算法可以打印出来以用正方形控制数组?
- r - 如何在R中提取数据框的第一列和最后3列
- c# - 如何在 MVC 应用程序中使用单个上传控件上传多个文件
- javascript - 子组件加载时在父组件中加载 React 侧边栏
- express - 如何让 next() 在返回 Bluebird Promise 的 Express 回调中发生?
- excel - 用另一个工作表做这个宏说要做的事情
- r - 标记行,基于其他行的值
- c# - 应用程序未从 user.config 读取