当前位置: 首页 > 教程 > JasperReports >

JasperReports 模板设计

精华
小牛编辑
182浏览
2023-03-14

JasperReport 中的 JRXML 模板(或 JRXML 文件)是标准 XML 文件,扩展名为 .jrxml。所有 JRXML 文件都包含标记 <jasperReport>,作为根元素。这又包含许多子元素(所有这些都是可选的)。JasperReport 框架可以处理不同类型的数据源。在本教程中,我们将展示如何生成基本报表,只需将一组 Java 数据对象(使用 Java Bean)传递给 JasperReport Engine。最终报表应显示人员名单,类别包括姓名和国家。

本章介绍了以下步骤来描述了如何设计JasperReport :

  • 创建 JRXML 报表模板。
  • 预览 XML 报表模板。

项目结构如下:

pom.xml文件如下:

 <!-- https://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports -->
<dependency>
     <groupId>net.sf.jasperreports</groupId>
     <artifactId>jasperreports</artifactId>
     <version>6.17.0</version>
</dependency>

创建 JRXML 报表模板

在cn.xnip目录下建立jasper_report_template.jrxml文件,内容如下:

<?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 = "jasper_report_template" language = "groovy" pageWidth = "595"
              pageHeight = "842" columnWidth = "555" leftMargin = "20" rightMargin = "20"
              topMargin = "20" bottomMargin = "20">

    <queryString>
        <![CDATA[]]>
    </queryString>

    <field name = "country" class = "java.lang.String">
        <fieldDescription><![CDATA[country]]></fieldDescription>
    </field>

    <field name = "name" class = "java.lang.String">
        <fieldDescription><![CDATA[name]]></fieldDescription>
    </field>

    <columnHeader>
        <band height = "23">

            <staticText>
                <reportElement mode = "Opaque" x = "0" y = "3" width = "535"
                               height = "15" backcolor = "#70A9A9" />

                <box>
                    <bottomPen lineWidth = "1.0" lineColor = "#CCCCCC" />
                </box>

                <textElement />
                <text><![CDATA[]]> </text>
            </staticText>

            <staticText>
                <reportElement x = "414" y = "3" width = "121" height = "15" />

                <textElement textAlignment = "Center" verticalAlignment = "Middle">
                    <font isBold = "true" />
                </textElement>

                <text><![CDATA[Country]]></text>
            </staticText>

            <staticText>
                <reportElement x = "0" y = "3" width = "136" height = "15" />

                <textElement textAlignment = "Center" verticalAlignment = "Middle">
                    <font isBold = "true" />
                </textElement>

                <text><![CDATA[Name]]></text>
            </staticText>

        </band>
    </columnHeader>

    <detail>
        <band height = "16">

            <staticText>
                <reportElement mode = "Opaque" x = "0" y = "0" width = "535"
                               height = "14" backcolor = "#E5ECF9" />

                <box>
                    <bottomPen lineWidth = "0.25" lineColor = "#CCCCCC" />
                </box>

                <textElement />
                <text><![CDATA[]]> </text>
            </staticText>

            <textField>
                <reportElement x = "414" y = "0" width = "121" height = "15" />

                <textElement textAlignment = "Center" verticalAlignment = "Middle">
                    <font size = "9" />
                </textElement>

                <textFieldExpression class = "java.lang.String">
                    <![CDATA[$F{country}]]>
                </textFieldExpression>
            </textField>

            <textField>
                <reportElement x = "0" y = "0" width = "136" height = "15" />
                <textElement textAlignment = "Center" verticalAlignment = "Middle" />

                <textFieldExpression class = "java.lang.String">
                    <![CDATA[$F{name}]]>
                </textFieldExpression>
            </textField>

        </band>
    </detail>

</jasperReport>

以下是上述报告模板中主要字段的详细信息 :

  • <queryString> :这是空的(因为我们通过 Java Beans 传递数据)。通常包含检索报告结果的 SQL 语句。

  • <field name> : 此元素用于将数据源或查询中的数据映射到报告模板中。name在报告正文中重复使用并且区分大小写。

  • <fieldDescription> : 此元素将字段名称映射到 XML 文件中的适当元素。

  • <staticText> : 这定义了不依赖于任何数据源、变量、参数或报告表达式的静态文本。

  • <textFieldExpression> : 这定义了结果字段的外观。

  • $F{country} : 这是一个变量,包含结果的值,标签 <field name> 中的预定义字段。

  • <band> : 带包含显示在报告中的数据。

预览 XML 报告模板

JasperReports JAR 文件中有一个实用程序net.sf.jasperreports.view.JasperDesignViewer,它有助于预览报表设计,而无需编译或填充它。此实用程序是一个独立的 Java 应用程序。

让我们编写一个 测试程序来查看 JRXML。

package cn.xnip;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.view.JasperDesignViewer;

import java.io.File;
import java.io.InputStream;

public class JasperReportsDemo {

    public static void main(String[] args) {
        String filePath = "D:/idea_codes/jasper_reports/src/main/java/com/xnip/jasper_report_template.jrxml";
        try {
            JasperDesignViewer.viewReportDesign(filePath,true);
        } catch (JRException e) {
            e.printStackTrace();
        }
    }
}

输出结果如下: