小亿 发布的文章

使用 Jaspersoft Studio 设计报表样式

用你熟悉的环境设计一套最简单的模板,名称定义为: Reports.jrxml
report_template.png
下载源文件: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, 其他,大概目录结构如下
    report2.png

  • 创建 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 版本
    r1.png

  • 也可以是 PDF 版本
    r2.png

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