JasperReports ResourceBundle
最后修改日期:2024年2月21日
在本文中,我们在 JasperReports 库中创建了一个多语言报表。示例的源代码可以在作者的 Github 仓库中找到。
JasperReports 是一个开源报告库。它可以创建各种格式的报告,包括 PDF、HTML、XLS 或 CSV。JasperReports 创建面向页面、可直接打印的文档。
一个 资源束 (resource bundle) 是一个包含区域设置特定数据的 Java 属性文件。它是一种使 Java 应用程序国际化(使其代码与区域设置无关)的方法。
JasperReports 中的本地化报表
下面的应用程序创建了一个可以生成三种不同语言的报表。
flags ├── england.png ├── russia.png └── slovakia.png in18 ├── labels.properties ├── labels_ru.properties └── labels_sk.properties report.gvy report.xml
这是项目结构。
message=Tea report flag=flags/england.png
这些是英文属性。
message=Чайный oтчет flag=flags/russia.png
这些是俄文属性。
message=Čajový report flag=flags/slovakia.png
这些是斯洛伐克文属性。
<?xml version = "1.0" encoding = "UTF-8"?> <!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"> <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="report2" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> <style name="title" fontSize="18" fontName="DejaVu Sans" hAlign="Center" /> <background> <band height="802"> <staticText> <reportElement mode="Opaque" x="0" y="0" width="555" height="802" backcolor="#cccccc"/> <textElement/> <text><![CDATA[]]></text> </staticText> </band> </background> <title> <band height="200"> <textField> <reportElement x="0" y="10" width="595" height="25" style="title" /> <textElement /> <textFieldExpression class = "java.lang.String"> <![CDATA[$R{message}]]> </textFieldExpression> </textField> <image> <reportElement x="15" y="50" width="150" height="100" /> <imageExpression><![CDATA[$R{flag}]]></imageExpression> </image> </band> </title> </jasperReport>
这是报表模板文件。它显示了本地化文本和图像。
<background> <band height="802"> <staticText> <reportElement mode="Opaque" x="0" y="0" width="555" height="802" backcolor="#cccccc"/> <textElement/> <text><![CDATA[]]></text> </staticText> </band> </background>
一些国旗有白色条纹;因此,我们使用 backcolor
标签更改报表的背景颜色。
<textFieldExpression class = "java.lang.String"> <![CDATA[$R{message}]]> </textFieldExpression>
报表的消息通过 $R{}
语法从属性文件中检索。
<image> <reportElement x="15" y="50" width="150" height="100" /> <imageExpression><![CDATA[$R{flag}]]></imageExpression> </image>
同样,我们通过 $R{}
语法获取国旗的路径。该路径被传递到 imageExpression
标签。
package com.zetcode @Grab(group='net.sf.jasperreports', module='jasperreports', version='6.21.0') @Grab(group='net.sf.jasperreports', module='jasperreports-fonts', version='6.21.0') @Grab(group='com.github.librepdf', module='openpdf', version='1.3.39') import net.sf.jasperreports.engine.JasperCompileManager import net.sf.jasperreports.engine.JasperFillManager import net.sf.jasperreports.engine.JasperExportManager import net.sf.jasperreports.engine.JREmptyDataSource def xmlFile = "report.xml" def jrReport = JasperCompileManager.compileReport(xmlFile) def bundle = ResourceBundle.getBundle("in18/labels", new Locale("ru", "RU")) def params = ["REPORT_RESOURCE_BUNDLE": bundle] def jrPrint = JasperFillManager.fillReport(jrReport, params, new JREmptyDataSource()) JasperExportManager.exportReportToPdfFile(jrPrint, "report.pdf")
JasperResourceBundle
从数据源和 report.xml
模板创建 JasperPrint
文件。JasperPrint
代表一个面向页面的文档,可以查看、打印或导出为其他格式。
def xmlFile = "report.xml" def jrReport = JasperCompileManager.compileReport(xmlFile)
XML 模板文件被编译成一个 JasperReport
。JasperReport
是一个已编译的模板,可以填充数据。
def bundle = ResourceBundle.getBundle("in18/labels", new Locale("ru", "RU"))
创建了一个 ResourceBundle
。它指定了属性文件的位置和当前使用的区域设置。
def params = ["REPORT_RESOURCE_BUNDLE": bundle]
该资源束作为 REPORT_RESOURCE_BUNDLE
参数传递给报表。
def jrPrint = JasperFillManager.fillReport(jrReport, params, new JREmptyDataSource())
创建了一个 JasperPrint
对象;一个可以查看、打印或导出为其他格式的对象。我们将一个空数据源和参数传递给 JasperFillManager.fillReport
方法。
JasperExportManager.exportReportToPdfFile(jrPrint, "report.pdf")
JasperExportManager.exportReportToPdfFile
方法将 JasperPrint
导出为 PDF 文件。
在本文中,我们已经在 JasperReports 中生成了一个多语言报表。