JasperReports 格式化货币
最后修改日期:2024 年 2 月 12 日
JasperReports 货币格式化教程展示了如何使用 JasperReports 库创建的报告中格式化货币。
JasperReports 是一个开源报告库。它可以创建各种格式的报告,包括 PDF、HTML、XLS 或 CSV。JasperReports 创建面向页面、可直接打印的文档。
不同的文化使用不同的方式来表示数字。例如,世界各国货币的格式化方式大相径庭。
JasperReports 格式化货币
下面的应用程序从 CSV 文件加载数据并格式化价格值。
jasperreports.properties
net.sf.jasperreports.default.locale=sk_SK
我们可以使用 net.sf.jasperreports.default.locale
属性设置默认的本地化设置。
report.xml
<?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="currency" vAlign="Middle" hAlign="Center" fontName="DejaVu Sans"/> <field name="id" class="java.lang.Long"/> <field name="name"/> <field name="price" class="java.lang.Integer"/> <detail> <band height="15"> <textField> <reportElement x="10" y="0" width="50" height="15" /> <textElement textAlignment="Left" verticalAlignment="Middle"/> <textFieldExpression class="java.lang.Long"> <![CDATA[$F{id}]]> </textFieldExpression> </textField> <textField> <reportElement x="60" y="0" width="100" height="15" /> <textElement textAlignment="Left" verticalAlignment="Middle"/> <textFieldExpression> <![CDATA[$F{name}]]> </textFieldExpression> </textField> <textField> <reportElement x="170" y="0" width="100" height="15" style="currency"/> <textElement textAlignment="Right" verticalAlignment="Middle"/> <textFieldExpression class="java.lang.Integer"> <![CDATA[ NumberFormat.getCurrencyInstance($P{REPORT_LOCALE}).format($F{price}) ]]> </textFieldExpression> </textField> </band> </detail> </jasperReport>
这是报告模板。
<![CDATA[ NumberFormat.getCurrencyInstance($P{REPORT_LOCALE}).format($F{price}) ]]>
我们使用 NumberFormat
格式化汽车的价格;我们使用 $P{REPORT_LOCALE}
检索当前本地化设置。
report.gvy
@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.data.JRBeanCollectionDataSource import groovy.transform.Immutable @Immutable class Car { Long id; String name; int price; } def cars = [ new Car(1L, 'Audi', 52642), new Car(2L, 'Mercedes', 57127), new Car(3L, 'Skoda', 9000), new Car(4L, 'Volvo', 29000), new Car(5L, 'Bentley', 350000), new Car(6L, 'Citroen', 21000), new Car(7L, 'Hummer', 41400), new Car(8L, 'Volkswagen', 21600), ] def xmlFile = "report.xml" def jrReport = JasperCompileManager.compileReport(xmlFile) def ds = new JRBeanCollectionDataSource(cars) def params = [REPORT_LOCALE: new Locale("sk", "SK")] def jrPrint = JasperFillManager.fillReport(jrReport, params, ds) JasperExportManager.exportReportToPdfFile(jrPrint, "report.pdf")
在示例中,我们从 JRBeanCollectionDataSource
获取数据。
def params = [REPORT_LOCALE: new Locale("sk", "SK")] def jrPrint = JasperFillManager.fillReport(jrReport, params, ds)
选择当前本地化设置的一种方法是设置 REPORT_LOCALE
参数。此设置优先于 jasperreports.properties
文件中的属性。
在本文中,我们创建了一个 PDF 文件报告,并在其中格式化了货币值。