使用 Jaspersoft Studio 设计报表样式
用你熟悉的环境设计一套最简单的模板,名称定义为: Reports.jrxml

下载源文件:report.jrxml
语法比较特殊,需要努力学习
<?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="report1" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="84feeac3-d1f7-4503-84bf-fc3fa153df55">
<queryString>
<![CDATA[]]>
</queryString>
<field name="id" class="java.lang.Long"/>
<field name="price" class="java.math.BigDecimal"/>
<field name="quantity" class="java.lang.Integer"/>
<field name="categoryName" class="java.lang.String"/>
<field name="name" class="java.lang.String"/>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="36" splitType="Stretch"/>
</title>
<pageHeader>
<band height="49" splitType="Stretch">
<staticText>
<reportElement x="170" y="10" width="230" height="30" uuid="04d35299-5eb0-4a34-b340-3ca5cf8290fc"/>
<textElement>
<font fontName="宋体" size="20"/>
</textElement>
<text><![CDATA[Product List | 产品列表]]></text>
</staticText>
</band>
</pageHeader>
<columnHeader>
<band height="37" splitType="Stretch">
<staticText>
<reportElement x="0" y="10" width="70" height="20" uuid="bcaf85c0-57ff-4a34-af27-cbf1330125ae"/>
<textElement>
<font fontName="宋体" isBold="true"/>
</textElement>
<text><![CDATA[ID]]></text>
</staticText>
<staticText>
<reportElement x="90" y="10" width="100" height="20" uuid="faf9b9ee-7cf2-4ea5-80b8-d371c3c753b9"/>
<textElement>
<font fontName="宋体" isBold="true"/>
</textElement>
<text><![CDATA[名称]]></text>
</staticText>
<staticText>
<reportElement x="210" y="10" width="70" height="20" uuid="93727672-9f69-4856-aa26-33837e8dc417"/>
<textElement>
<font fontName="宋体" isBold="true"/>
</textElement>
<text><![CDATA[价格]]></text>
</staticText>
<staticText>
<reportElement x="314" y="10" width="70" height="20" uuid="09b47abe-09b2-479a-bb76-9770e361a23c"/>
<textElement>
<font fontName="宋体" isBold="true"/>
</textElement>
<text><![CDATA[数量]]></text>
</staticText>
<staticText>
<reportElement x="410" y="10" width="100" height="20" uuid="c258f47b-da6a-418d-a5e0-892388ec65c5"/>
<textElement>
<font fontName="宋体" isBold="true"/>
</textElement>
<text><![CDATA[类别]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="39" splitType="Stretch">
<textField>
<reportElement x="0" y="4" width="70" height="16" uuid="99fa4c16-cfe2-4482-828e-4439abb9e8f0"/>
<textFieldExpression><![CDATA[$F{id}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="210" y="4" width="70" height="16" uuid="ba6e9cfa-6d4c-470b-8bc4-eb2e3411c21e"/>
<textFieldExpression><![CDATA[$F{price}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="310" y="4" width="70" height="16" uuid="447253d3-d268-4873-b0b7-9c174c6a7c9f"/>
<textFieldExpression><![CDATA[$F{quantity}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="410" y="4" width="100" height="16" uuid="8992d0ad-1f5e-4210-b50b-1e29dc66f119"/>
<textFieldExpression><![CDATA[$F{categoryName}]]></textFieldExpression>
</textField>
<line>
<reportElement x="-3" y="27" width="521" height="1" uuid="9b493a65-a499-4199-90bb-b3fedbe45f85"/>
</line>
<textField>
<reportElement x="90" y="4" width="100" height="16" uuid="fcdd8979-dc44-46e3-be56-11e5f33b8e0c">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="73fad7b3-74b5-4436-bd46-d2b9c3c113fd"/>
</reportElement>
<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>
新建 Spring Boot 项目
新建 Spring Boot 项目,不多说
需包含的内容比较特殊,pom.xml,jasperreports 是依赖包,jasperreports-fonts 是字体支持包
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.15.0</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-fonts</artifactId>
<version>6.15.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-support</artifactId>
<version>2.0.8</version>
</dependency>
- 新建各种类
controller, domain, repository, service, 其他,大概目录结构如下

创建 Postgresql 数据表
CREATE TABLE public.product
(
id bigint NOT NULL,
name character varying(255) COLLATE pg_catalog."default",
price numeric,
quantity integer,
category_name character varying(255) COLLATE pg_catalog."default",
CONSTRAINT product_pkey PRIMARY KEY (id)
)
集成 JasperReports 到 Spring Boot 项目
中文支持文章:Spring Boot 集成 JasperReports,并支持中文PDF
Service 服务层处理要求
@RequestMapping(value = "/report", method = RequestMethod.GET)
public void report(HttpServletResponse response, @RequestParam(name = "type", defaultValue = "pdf") String type) throws Exception {
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(productService.report());
InputStream inputStream = this.getClass().getResourceAsStream("/report_templates/report.jrxml");
JasperReport jasperReport = JasperCompileManager.compileReport(inputStream);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, dataSource);
switch (type) {
case "html":
response.setContentType("text/html;charset=utf-8");
HtmlExporter exporter = new HtmlExporter(DefaultJasperReportsContext.getInstance());
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
exporter.setExporterOutput(new SimpleHtmlExporterOutput(response.getWriter()));
exporter.exportReport();
break;
case "pdf":
default:
JRPdfExporter exporterPdf = new JRPdfExporter();
exporterPdf.setExporterInput(new SimpleExporterInput(jasperPrint));
OutputStream outputStream = response.getOutputStream();
exporterPdf.setExporterOutput(new SimpleOutputStreamExporterOutput(outputStream));
exporterPdf.exportReport();
break;
}
}
- 可以是 HTML 版本

- 也可以是 PDF 版本

源码下载: https://github.com/jiekechoo/YiqisoftReport