经过2天对于jasper的研究,终于做出了第一个简单的报表打印现在记录一下整个过程
1. pom.xml修改增加
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.6.0</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreport</groupId>
<artifactId>jasperreport-font</artifactId>
<version>6.5.1</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
note
: jasperreport-font为下载源代码自己编译生成的,其中有加入先的字体支持中文,文末提供下载地址
2. 配置 resolver 支持ModelAndView显示
import net.pptech.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;
import org.springframework.web.servlet.view.jasperreports.JasperReportsMultiFormatView;
import org.springframework.web.servlet.view.jasperreports.JasperReportsViewResolver;
import javax.annotation.Resource;
/**
* @author jackychiang
*/
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Bean
public JasperReportsViewResolver getJasperReportsViewResolver(){
JasperReportsViewResolver resolver = new JasperReportsViewResolver();
resolver.setPrefix("classpath:jasper/"); //resources/jasper目录,将jrxml放入该目录
resolver.setSuffix(".jrxml");
resolver.setReportDataKey("datasource");
resolver.setViewNames("*service*");
resolver.setViewClass(JasperReportsMultiFormatView.class);
resolver.setOrder(0);
return resolver;
}
}
note
: Springboot 2.0之后WebMvcConfigurerAdapter 标记为过时需要自己实现接口
- 增加controller
@GetMapping("/order_list")
@RequiresUser
public ModelAndView orderList(Long orderId, final ModelMap modelMap) {
Map<String, Object> orderList = documentService.queryOrderList(orderId, getUser().getStoreId());
List<Material> materials = (List<Material>) orderList.get("materials");
JRDataSource dataSource = new JRBeanCollectionDataSource(materials);
modelMap.put("datasource",dataSource);
modelMap.put("format", "pdf");
modelMap.put("storeName", "中文测试");
modelMap.put("userName","蒋xxxxxxx");
modelMap.put("userPhone", "xxxxx");
modelMap.put("carNum", "渝xxxxx");
modelMap.put("carModel", "哈弗H6");
modelMap.put("vin","LGW12321312312121");
modelMap.put("km","58123");
return new ModelAndView("service_letter_of_trust",modelMap);
}
- service_letter_of_trust.jrxml 文件内容
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.6.0.final using JasperReports Library version 6.6.0 -->
<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="service_letter_of_trust" pageWidth="595" pageHeight="842" whenNoDataType="BlankPage" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="dfe0f072-ae06-47ef-a5ad-40939a619a0d">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<property name="com.jaspersoft.studio.unit." value="mm"/>
<property name="com.jaspersoft.studio.unit.pageHeight" value="mm"/>
<property name="com.jaspersoft.studio.unit.pageWidth" value="mm"/>
<property name="com.jaspersoft.studio.unit.topMargin" value="mm"/>
<property name="com.jaspersoft.studio.unit.bottomMargin" value="mm"/>
<property name="com.jaspersoft.studio.unit.leftMargin" value="mm"/>
<property name="com.jaspersoft.studio.unit.rightMargin" value="mm"/>
<property name="com.jaspersoft.studio.unit.columnWidth" value="mm"/>
<property name="com.jaspersoft.studio.unit.columnSpacing" value="mm"/>
<parameter name="userName" class="java.lang.String"/>
<parameter name="userPhone" class="java.lang.String"/>
<parameter name="carNum" class="java.lang.String"/>
<parameter name="carModel" class="java.lang.String"/>
<parameter name="vin" class="java.lang.String"/>
<parameter name="km" class="java.lang.String"/>
<parameter name="storeName" class="java.lang.String"/>
<queryString>
<![CDATA[]]>
</queryString>
<field name="materialCode" class="java.lang.String"/>
<field name="materialName" class="java.lang.String"/>
<field name="materialCount" class="java.lang.Integer"/>
<field name="materialPrice" class="java.math.BigDecimal"/>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="88" splitType="Stretch">
<staticText>
<reportElement x="6" y="46" width="54" height="20" uuid="12fdd4f4-795b-431e-a813-c98714c67910"/>
<textElement verticalAlignment="Middle">
<font fontName="宋体"/>
</textElement>
<text><![CDATA[客户姓名]]></text>
</staticText>
<staticText>
<reportElement x="6" y="68" width="54" height="20" uuid="166f60b4-aefa-47fe-bb31-979e7a4cf5de"/>
<textElement textAlignment="Left" verticalAlignment="Middle">
<font fontName="宋体"/>
</textElement>
<text><![CDATA[客户电话]]></text>
</staticText>
<textField>
<reportElement x="60" y="46" width="100" height="20" uuid="587beebf-4f4e-49a3-9355-753971c3dd80"/>
<textElement verticalAlignment="Middle">
<font fontName="宋体"/>
</textElement>
<textFieldExpression><![CDATA[$P{userName}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="60" y="68" width="100" height="20" uuid="f1c05726-e180-4cd0-a0f0-2d06f92464b8"/>
<textElement verticalAlignment="Middle">
<font fontName="宋体"/>
</textElement>
<textFieldExpression><![CDATA[$P{userPhone}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="160" y="46" width="54" height="20" uuid="2d2c33e8-780b-42db-ac66-a075674752a4"/>
<textElement verticalAlignment="Middle">
<font fontName="宋体"/>
</textElement>
<text><![CDATA[车牌号码]]></text>
</staticText>
<staticText>
<reportElement x="160" y="68" width="54" height="20" uuid="61befc35-b48f-4934-ab5c-8b0ac16e2030"/>
<textElement verticalAlignment="Middle">
<font fontName="宋体"/>
</textElement>
<text><![CDATA[车辆型号]]></text>
</staticText>
<textField>
<reportElement x="214" y="46" width="100" height="20" uuid="cbac0147-24b2-47b1-ae25-8e615d7b4e70"/>
<textElement verticalAlignment="Middle">
<font fontName="宋体"/>
</textElement>
<textFieldExpression><![CDATA[$P{carNum}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="314" y="46" width="54" height="20" uuid="ea7123d7-e24f-42e4-99bd-3314a4a286e6"/>
<textElement verticalAlignment="Middle">
<font fontName="宋体"/>
</textElement>
<text><![CDATA[VIN码]]></text>
</staticText>
<textField>
<reportElement x="214" y="68" width="100" height="20" uuid="b5330ecd-0f7c-46e5-87b9-b2cf04639b26"/>
<textElement verticalAlignment="Middle">
<font fontName="宋体"/>
</textElement>
<textFieldExpression><![CDATA[$P{carModel}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="368" y="46" width="182" height="20" uuid="0f7c3261-d8f4-46c2-8b43-c96a0dc81a8a"/>
<textElement verticalAlignment="Middle">
<font fontName="宋体"/>
</textElement>
<textFieldExpression><![CDATA[$P{vin}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="314" y="68" width="54" height="20" uuid="7897242f-9f4d-480e-8f3e-fd336e2c6e74"/>
<textElement verticalAlignment="Middle">
<font fontName="宋体"/>
</textElement>
<text><![CDATA[里程(Km)]]></text>
</staticText>
<textField>
<reportElement x="368" y="68" width="182" height="20" uuid="630e54d8-a4b8-4a0a-b8b2-1fc2048e9278"/>
<textElement verticalAlignment="Middle">
<font fontName="宋体"/>
</textElement>
<textFieldExpression><![CDATA[$P{km}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="6" y="10" width="308" height="30" uuid="ab813d40-4ca1-4afc-b5bd-028d4974f4bf"/>
<box topPadding="0" leftPadding="0" bottomPadding="0" rightPadding="0">
<pen lineWidth="0.0"/>
</box>
<textElement verticalAlignment="Middle">
<font fontName="宋体" size="18"/>
</textElement>
<textFieldExpression><![CDATA[$P{storeName}]]></textFieldExpression>
</textField>
</band>
</title>
<columnHeader>
<band height="20">
<staticText>
<reportElement x="6" y="0" width="144" height="20" uuid="37caac76-fa7b-4059-8ac8-0acb24dd15de"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font fontName="宋体"/>
</textElement>
<text><![CDATA[零件名称]]></text>
</staticText>
<staticText>
<reportElement x="150" y="0" width="40" height="20" uuid="67032300-5eff-44da-9dfb-30e8d44edbb4"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font fontName="宋体"/>
</textElement>
<text><![CDATA[数量]]></text>
</staticText>
<staticText>
<reportElement x="190" y="0" width="76" height="20" uuid="000cb987-4ce3-4b20-8c24-86e2b3887618"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font fontName="宋体"/>
</textElement>
<text><![CDATA[材料单价(元)]]></text>
</staticText>
<staticText>
<reportElement x="266" y="0" width="68" height="20" uuid="0c07454c-0840-4a3b-a815-c7f08943497c"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font fontName="宋体"/>
</textElement>
<text><![CDATA[工时费(元)]]></text>
</staticText>
<staticText>
<reportElement x="334" y="0" width="54" height="20" uuid="81e86971-4606-43a7-b522-bdb01e1e953f"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font fontName="宋体"/>
</textElement>
<text><![CDATA[合计(元)]]></text>
</staticText>
<staticText>
<reportElement x="388" y="0" width="62" height="20" uuid="9e099f02-0e0e-4527-b881-4c044d881312"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font fontName="宋体"/>
</textElement>
<text><![CDATA[是否订货]]></text>
</staticText>
<staticText>
<reportElement x="450" y="0" width="100" height="20" uuid="27626fea-ed8d-47b6-92a1-949714a94543"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font fontName="宋体"/>
</textElement>
<text><![CDATA[领料人]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="21" splitType="Stretch">
<textField>
<reportElement x="6" y="0" width="144" height="20" uuid="79f6d666-db9f-41a2-b773-205c89e0ef5b">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="55da8db3-ecdf-4a3d-8b30-393bc736f043"/>
</reportElement>
<textElement>
<font fontName="宋体"/>
</textElement>
<textFieldExpression><![CDATA[$F{materialName}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="150" y="0" width="40" height="20" uuid="b50fd257-d11a-4e0b-a1ea-1723b383ba6d">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="78956194-827a-499e-9556-0e5a1ce80fb0"/>
</reportElement>
<textElement>
<font fontName="宋体"/>
</textElement>
<textFieldExpression><![CDATA[$F{materialCount}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="190" y="0" width="90" height="20" uuid="9a689da4-5847-45a8-8b64-2e8456df7373">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="5c0c9d68-6d08-459f-a393-1cc05a5bac63"/>
</reportElement>
<textElement>
<font fontName="宋体"/>
</textElement>
<textFieldExpression><![CDATA[$F{materialPrice}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
未实现问题说明
- 生成html文件
- 文件下载