zoukankan      html  css  js  c++  java
  • 2019-05-09 EasyWeb下使用JasperReport制作主从表

    【制作思路】

    一个报表模板只能放置一个数据源,当有两个及以上时候,需要使用主报表嵌套子报表;主报表使用数据源方式传入数据,子报表使用参数方式传入数据

    【开发注意】

    1.报表中使用了二维码,所以需要引入依赖,所有与报表相关的依赖如下

     1         <dependency>
     2             <groupId>net.sf.jasperreports</groupId>
     3             <artifactId>jasperreports</artifactId>
     4             <version>6.8.0</version>
     5         </dependency>
     6         
     7         <!-- jasperreport用到的二维码生成 -->
     8         <dependency>
     9             <groupId>net.sf.barcode4j</groupId>
    10             <artifactId>barcode4j</artifactId>
    11             <version>2.1</version>
    12         </dependency>
    13         <dependency>
    14             <groupId>com.google.zxing</groupId>
    15             <artifactId>core</artifactId>
    16             <version>3.3.3</version>
    17         </dependency>
    18         <dependency>
    19             <groupId>com.google.zxing</groupId>
    20             <artifactId>javase</artifactId>
    21             <version>3.3.3</version>
    22         </dependency>

    2.需要在报表模板编辑器Parameters中定义存放从表数据的参数detailData

    3.在报表模板编辑器中增加Subreport指向子报表模板

    4.在Subreport属性中设置Data Source Expression(数据源表达式),通过java类转换成数据源传给子报表

    1 new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{detailData})

    【关键代码】

    1.主报表模板

      1 <?xml version="1.0" encoding="UTF-8"?>
      2 <!-- Created with Jaspersoft Studio version 6.6.0.final using JasperReports Library version 6.6.0  -->
      3 <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="order" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="3f7172d1-9779-4750-b9e5-5abc388f7210">
      4     <property name="com.jaspersoft.studio.data.defaultdataadapter" value="demo1"/>
      5     <property name="com.jaspersoft.studio.data.sql.tables" value=""/>
      6     <property name="com.jaspersoft.studio.property.dataset.dialog.DatasetDialog.sash.w1" value="579"/>
      7     <property name="com.jaspersoft.studio.property.dataset.dialog.DatasetDialog.sash.w2" value="410"/>
      8     <parameter name="detailData" class="java.util.List"/>
      9     <parameter name="title" class="java.lang.String"/>
     10     <queryString>
     11         <![CDATA[]]>
     12     </queryString>
     13     <field name="date" class="java.util.Date">
     14         <fieldDescription><![CDATA[date]]></fieldDescription>
     15     </field>
     16     <field name="deptName" class="java.lang.String">
     17         <fieldDescription><![CDATA[deptName]]></fieldDescription>
     18     </field>
     19     <field name="creator" class="java.lang.String">
     20         <fieldDescription><![CDATA[creator]]></fieldDescription>
     21     </field>
     22     <field name="taskCode" class="java.lang.String">
     23         <fieldDescription><![CDATA[taskCode]]></fieldDescription>
     24     </field>
     25     <field name="orderCode" class="java.lang.String">
     26         <fieldDescription><![CDATA[orderCode]]></fieldDescription>
     27     </field>
     28     <field name="id" class="java.lang.String">
     29         <fieldDescription><![CDATA[id]]></fieldDescription>
     30     </field>
     31     <field name="state" class="java.lang.Integer">
     32         <fieldDescription><![CDATA[state]]></fieldDescription>
     33     </field>
     34     <field name="createDate" class="java.util.Date">
     35         <fieldDescription><![CDATA[createDate]]></fieldDescription>
     36     </field>
     37     <background>
     38         <band splitType="Stretch"/>
     39     </background>
     40     <title>
     41         <band height="42" splitType="Stretch">
     42             <textField>
     43                 <reportElement x="180" y="6" width="200" height="30" uuid="1bbd790d-66dd-4152-9ecf-ca82def10e00"/>
     44                 <textElement textAlignment="Center" verticalAlignment="Middle">
     45                     <font fontName="宋体" size="20"/>
     46                 </textElement>
     47                 <textFieldExpression><![CDATA[$P{title}]]></textFieldExpression>
     48             </textField>
     49         </band>
     50     </title>
     51     <pageHeader>
     52         <band height="88" splitType="Stretch">
     53             <staticText>
     54                 <reportElement x="0" y="0" width="40" height="20" uuid="523f3327-2264-445f-b837-5dd6c4018f08"/>
     55                 <textElement>
     56                     <font fontName="宋体" size="14"/>
     57                 </textElement>
     58                 <text><![CDATA[日期]]></text>
     59             </staticText>
     60             <staticText>
     61                 <reportElement x="0" y="30" width="40" height="20" uuid="05b201de-67ab-4ffa-b3cd-695f5f25e3c8"/>
     62                 <textElement>
     63                     <font fontName="宋体" size="14"/>
     64                 </textElement>
     65                 <text><![CDATA[部门]]></text>
     66             </staticText>
     67             <staticText>
     68                 <reportElement x="120" y="0" width="60" height="20" uuid="505f2466-8591-4e6a-a06f-84d46a09be8a"/>
     69                 <textElement>
     70                     <font fontName="宋体" size="14"/>
     71                 </textElement>
     72                 <text><![CDATA[任务单号]]></text>
     73             </staticText>
     74             <staticText>
     75                 <reportElement x="300" y="0" width="60" height="20" uuid="275e5db4-29fe-496f-97d6-e1877e69d1aa"/>
     76                 <textElement>
     77                     <font fontName="宋体" size="14"/>
     78                 </textElement>
     79                 <text><![CDATA[派工单号]]></text>
     80             </staticText>
     81             <staticText>
     82                 <reportElement x="120" y="30" width="60" height="20" uuid="6522ec29-267f-4bba-a3b2-c6c97f264648"/>
     83                 <textElement>
     84                     <font fontName="宋体" size="14"/>
     85                 </textElement>
     86                 <text><![CDATA[制单人]]></text>
     87             </staticText>
     88             <staticText>
     89                 <reportElement x="300" y="30" width="60" height="20" uuid="e87bf7b2-88ed-42bf-a384-40a514c4ae72"/>
     90                 <textElement>
     91                     <font fontName="宋体" size="14"/>
     92                 </textElement>
     93                 <text><![CDATA[制单日期]]></text>
     94             </staticText>
     95             <staticText>
     96                 <reportElement x="0" y="60" width="40" height="20" uuid="522db4c7-92db-43da-8c54-85556594bfd7"/>
     97                 <textElement>
     98                     <font fontName="宋体" size="14"/>
     99                 </textElement>
    100                 <text><![CDATA[状态]]></text>
    101             </staticText>
    102             <textField>
    103                 <reportElement x="40" y="0" width="70" height="20" uuid="99f3e0ae-0525-42ea-aa03-0c5c80decd5e"/>
    104                 <textElement verticalAlignment="Middle">
    105                     <font fontName="宋体"/>
    106                 </textElement>
    107                 <textFieldExpression><![CDATA[$F{date}]]></textFieldExpression>
    108             </textField>
    109             <textField>
    110                 <reportElement x="40" y="30" width="70" height="20" uuid="40729b5d-b5f5-46a3-bde3-49898de66db2"/>
    111                 <textElement verticalAlignment="Middle">
    112                     <font fontName="宋体"/>
    113                 </textElement>
    114                 <textFieldExpression><![CDATA[$F{deptName}]]></textFieldExpression>
    115             </textField>
    116             <textField>
    117                 <reportElement x="180" y="0" width="110" height="20" uuid="02467d83-b5be-4e12-8729-22de35be5fe9"/>
    118                 <textElement verticalAlignment="Middle">
    119                     <font fontName="宋体"/>
    120                 </textElement>
    121                 <textFieldExpression><![CDATA[$F{orderCode}]]></textFieldExpression>
    122             </textField>
    123             <textField>
    124                 <reportElement x="180" y="30" width="110" height="20" uuid="b2b3a476-7518-4cae-8011-84da7a2e3df4"/>
    125                 <textElement verticalAlignment="Middle">
    126                     <font fontName="宋体"/>
    127                 </textElement>
    128                 <textFieldExpression><![CDATA[$F{creator}]]></textFieldExpression>
    129             </textField>
    130             <textField>
    131                 <reportElement x="360" y="0" width="110" height="20" uuid="e0990b1b-42f4-455a-b8b3-98cc4163bdfd"/>
    132                 <textElement verticalAlignment="Middle">
    133                     <font fontName="宋体"/>
    134                 </textElement>
    135                 <textFieldExpression><![CDATA[$F{taskCode}]]></textFieldExpression>
    136             </textField>
    137             <textField>
    138                 <reportElement x="360" y="30" width="110" height="20" uuid="adcd741c-1b9a-4309-a71d-3fe3bd428279"/>
    139                 <textElement verticalAlignment="Middle">
    140                     <font fontName="宋体"/>
    141                 </textElement>
    142                 <textFieldExpression><![CDATA[$F{createDate}]]></textFieldExpression>
    143             </textField>
    144             <textField>
    145                 <reportElement x="40" y="60" width="140" height="20" uuid="afbdae73-4cd7-44ab-9f09-fb05f77536b6"/>
    146                 <textElement verticalAlignment="Middle">
    147                     <font fontName="宋体"/>
    148                 </textElement>
    149                 <textFieldExpression><![CDATA[$F{state}==0?"保存":($F{state}==1?"下单":"作废")]]></textFieldExpression>
    150             </textField>
    151             <componentElement>
    152                 <reportElement x="460" y="6" width="70" height="70" uuid="67689075-e44b-4c4b-ad2b-d899415a1f4e"/>
    153                 <jr:QRCode xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" margin="0">
    154                     <jr:codeExpression><![CDATA["master:"+$F{id}]]></jr:codeExpression>
    155                 </jr:QRCode>
    156             </componentElement>
    157             <line>
    158                 <reportElement x="-8" y="87" width="570" height="1" uuid="d6a63de9-1c8b-44be-b42e-104952a24eb5"/>
    159             </line>
    160         </band>
    161     </pageHeader>
    162     <detail>
    163         <band height="100" splitType="Stretch">
    164             <subreport>
    165                 <reportElement x="-20" y="0" width="595" height="100" uuid="c229f65b-afea-4a9f-abde-195e7321065e"/>
    166                 <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{detailData})]]></dataSourceExpression>
    167                 <subreportExpression><![CDATA["src/main/resources/jasper/demo1/order-detail.jasper"]]></subreportExpression>
    168             </subreport>
    169         </band>
    170     </detail>
    171 </jasperReport>

    2.从报表模板

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!-- Created with Jaspersoft Studio version 6.6.0.final using JasperReports Library version 6.6.0  -->
     3 <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="order-detail" columnCount="2" printOrder="Horizontal" pageWidth="595" pageHeight="842" columnWidth="277" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="fd47ee62-841a-40bf-8baf-fadfee67070c">
     4     <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
     5     <queryString>
     6         <![CDATA[]]>
     7     </queryString>
     8     <field name="productCode" class="java.lang.String">
     9         <fieldDescription><![CDATA[productCode]]></fieldDescription>
    10     </field>
    11     <field name="orderNum" class="java.lang.String">
    12         <fieldDescription><![CDATA[orderNum]]></fieldDescription>
    13     </field>
    14     <field name="id" class="java.lang.String">
    15         <fieldDescription><![CDATA[id]]></fieldDescription>
    16     </field>
    17     <field name="productName" class="java.lang.String">
    18         <fieldDescription><![CDATA[productName]]></fieldDescription>
    19     </field>
    20     <background>
    21         <band splitType="Stretch"/>
    22     </background>
    23     <detail>
    24         <band height="102" splitType="Stretch">
    25             <staticText>
    26                 <reportElement x="90" y="10" width="60" height="20" uuid="02e931c4-a903-492f-a915-fb4f38a8b130"/>
    27                 <textElement>
    28                     <font fontName="宋体" size="14" isBold="true"/>
    29                 </textElement>
    30                 <text><![CDATA[产品代码]]></text>
    31             </staticText>
    32             <staticText>
    33                 <reportElement x="90" y="40" width="60" height="20" uuid="98efa39e-7d23-4c1e-bcd6-acf0953c5429"/>
    34                 <textElement>
    35                     <font fontName="宋体" size="14" isBold="true"/>
    36                 </textElement>
    37                 <text><![CDATA[产品名称]]></text>
    38             </staticText>
    39             <staticText>
    40                 <reportElement x="90" y="70" width="60" height="19" uuid="33c4eae1-f075-440b-8744-4d816f4167ff"/>
    41                 <textElement textAlignment="Left">
    42                     <font fontName="宋体" size="14" isBold="true"/>
    43                 </textElement>
    44                 <text><![CDATA[数  量  ]]></text>
    45             </staticText>
    46             <textField>
    47                 <reportElement x="160" y="10" width="110" height="20" uuid="a565adea-bac5-4406-95b5-900def774984"/>
    48                 <textElement verticalAlignment="Middle">
    49                     <font fontName="宋体"/>
    50                 </textElement>
    51                 <textFieldExpression><![CDATA[$F{productCode}]]></textFieldExpression>
    52             </textField>
    53             <textField>
    54                 <reportElement x="160" y="40" width="105" height="20" uuid="8222b996-e9b4-4b51-a314-990341b1f5d2"/>
    55                 <textElement verticalAlignment="Middle">
    56                     <font fontName="宋体"/>
    57                 </textElement>
    58                 <textFieldExpression><![CDATA[$F{productName}]]></textFieldExpression>
    59             </textField>
    60             <textField>
    61                 <reportElement x="160" y="70" width="105" height="19" uuid="e5985c93-c08a-4b01-a6ea-b54097e057d3"/>
    62                 <textElement verticalAlignment="Middle">
    63                     <font fontName="宋体"/>
    64                 </textElement>
    65                 <textFieldExpression><![CDATA[$F{orderNum}]]></textFieldExpression>
    66             </textField>
    67             <componentElement>
    68                 <reportElement x="0" y="10" width="80" height="80" uuid="1293a5a8-ac25-44d0-a17a-d055c6bcbd31"/>
    69                 <jr:QRCode xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" margin="0">
    70                     <jr:codeExpression><![CDATA["detail:"+$F{id}]]></jr:codeExpression>
    71                 </jr:QRCode>
    72             </componentElement>
    73             <line>
    74                 <reportElement x="0" y="101" width="270" height="1" forecolor="#BFB2B2" uuid="1f835a86-88bb-4647-bcb1-290e79355507"/>
    75             </line>
    76         </band>
    77     </detail>
    78 </jasperReport>

    3.后端Java 代码

     1 @RequestMapping("/report")
     2     public void getReport(String orderID,HttpServletRequest request, HttpServletResponse response) throws Exception {
     3         // 主表数据放入主报表模板渲染数据源
     4         List<Object> list = new ArrayList<Object>();
     5         ProductOrderExample example1 = new ProductOrderExample();
     6         example1.createCriteria().andIdEqualTo(orderID);
     7         list.add(productOrderService.list(example1, 1, 1).getData().get(0));
     8         
     9         
    10         HashMap<String, Object> parameters = new HashMap<String, Object>();
    11         
    12         // 从表数据放入主报表模板参数detailData
    13         ProductOrderDetailExample example2 = new ProductOrderDetailExample();
    14         example2.createCriteria().andOrderIDEqualTo(orderID);
    15         parameters.put("detailData",productOrderDetailService.list(example2, 0, 0).getData());
    16         // 设置报表标题参数
    17         parameters.put("title","生产派工单");
    18         
    19         
    20         JasperReportUtils.printPdf2HtmlByJavaBean(request, response, "classpath:jasper/demo1/order.jasper",parameters ,list );
    21 
    22 
    23     }

    4.上面涉及的printPdf2HtmlByJavaBean封装代码

     1     /**
     2      * 使用JavaBean填充打印PDF到Html中
     3      * @param request
     4      * @param response
     5      * @param jasperPath 例如:classpath:jasper/report2.jasper
     6      * @param list JavaBean数据
     7      * @param parameters 
     8      * @throws Exception
     9      */
    10     public static void printPdf2HtmlByJavaBean(HttpServletRequest request, HttpServletResponse response,String jasperPath,Map<String, Object> parameters,List<?> list) throws Exception {
    11 
    12         ServletOutputStream outputStream = response.getOutputStream();
    13 
    14         //获取报表的编译文件,后面要将对其进行填充数据
    15         String path = URLDecoder.decode(ResourceUtils.getURL(jasperPath).getPath(),"UTF-8");
    16         
    17         FileInputStream inputStream =new FileInputStream(new File(path));
    18 
    19         //由于没有数据,故这里使用空参数和空数据源,该方法需要抛出JRException异常
    20         JasperRunManager.runReportToPdfStream(inputStream, outputStream, parameters , new JRBeanCollectionDataSource(list));
    21 
    22         // 输出PDF
    23         response.setContentType("application/pdf");
    24 
    25         // 关闭资源
    26         outputStream.flush();
    27         outputStream.close();
    28         inputStream.close();
    29         
    30     }

    【最终效果】

  • 相关阅读:
    【转】Java抽象类与接口的区别
    【转】java方法参数传递方式--按值传递、引用传递
    关联mysql失败_Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezon'
    分词器的安装与使用
    Mysql、ES 数据同步
    ES、kibana安装及交互操作
    tl-wr742n 怎么设置dns
    tl-wr742n无线路由器怎么设置
    PowerMock学习(十一)之Mock private methods的使用
    PowerMock学习(十)之Mock spy的使用
  • 原文地址:https://www.cnblogs.com/WongHugh/p/10840831.html
Copyright © 2011-2022 走看看