ZetCode

JasperReports 饼图

最后修改日期:2024 年 2 月 12 日

JasperReports 饼图教程展示了如何在 JasperReports 库中创建饼图。

JasperReports 是一个开源的报表库。它可以创建多种格式的报表,包括 PDF、HTML、XLS 或 CSV。

饼图是一种将数据以圆形显示的图表,该圆形被分成多个扇形。每个扇形代表其数值占总大小的比例。

JasperReports 饼图示例

在下面的示例中,我们将一个饼图放入报表中;该图表显示了各种水果及其数量。

report.xml
<?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="report" pageWidth="595" pageHeight="842" columnWidth="555" 
    leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">

    <field name="name"/>
    <field name="quantity" class="java.lang.Integer"/>

    <summary>
        <band height="450" splitType="Stretch">
            <pieChart>

                <chart evaluationTime="Report">
                    <reportElement x="0" y="0" width="350" height="300"/>
                    <chartTitle position="Top">
                        <titleExpression><![CDATA["Fruits"]]></titleExpression>
                    </chartTitle>
                    <chartSubtitle/>
                    <chartLegend/>
                </chart>

                <pieDataset>
                    <dataset resetType="Report"/>
                    <keyExpression><![CDATA[$F{name}]]></keyExpression>
                    <valueExpression><![CDATA[$F{quantity}]]></valueExpression>
                </pieDataset>

                <piePlot labelFormat="{2}">
                    <plot/>
                    <itemLabel/>
                </piePlot>

            </pieChart>
        </band>
    </summary>
</jasperReport>

饼图使用 pieChart 标签。

<field name="name"/>
<field name="quantity" class="java.lang.Integer"/>

我们有两个映射到数据源的字段:namequantity

<chartTitle position="Top">
    <titleExpression><![CDATA["Fruits"]]></titleExpression>
</chartTitle>

图表标题通过 chartTitle 设置。

<piePlot labelFormat="{2}">
    <plot/>
    <itemLabel/>
</piePlot>

使用 labelFormat 属性,我们在扇形中显示百分比。

report.gvy
package com.zetcode

@Grab(group='net.sf.jasperreports', module='jasperreports', 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.JasperExportManager
import net.sf.jasperreports.engine.JasperFillManager
import net.sf.jasperreports.engine.data.JRMapCollectionDataSource

def xmlFile = "report.xml"
def jrReport = JasperCompileManager.compileReport(xmlFile)

def fruits = [ 
    [ "name": "Oranges", "quantity": 38], 
    [ "name": "Pears", "quantity": 45], 
    [ "name": "Plums", "quantity": 24], 
    [ "name": "Cherries", "quantity": 10], 
]

def ds = new JRMapCollectionDataSource(fruits)

def params = [:]
def jrPrint = JasperFillManager.fillReport(jrReport, params, ds)

JasperExportManager.exportReportToPdfFile(jrPrint, "report.pdf")

这是生成报表的 Groovy 代码。

def fruits = [ 
    [ "name": "Oranges", "quantity": 38], 
    [ "name": "Pears", "quantity": 45], 
    [ "name": "Plums", "quantity": 24], 
    [ "name": "Cherries", "quantity": 10], 
]

这是在饼图中显示的数据;它是一个 Map 列表。

def ds = new JRMapCollectionDataSource(fruits)

我们使用 JRMapCollectionDataSource 作为数据源。

def jPrint = JasperFillManager.fillReport(jrReport, params, ds)

数据源被传递到 JasperFillManager.fillReport

在本文中,我们使用 JasperReports 库创建了一个饼图。

作者

我的名字是 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。至今,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 JasperReports 教程