JasperReports with Maven and Eclipse example

2019-02-24 00:18发布

问题:

All I want is to generate a simple pdf report using JasperReport+Maven+Eclipse.

I have been browsing for a simple example for some time but not able to find any.

  1. The JasperReport site doesn’t seem to have any tutorial with Maven
  2. The Maven 2 JasperReports Plugin gives the following error in Eclipse Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:jasperreports-maven-plugin:1.0- beta-2:compile-reports
  3. Most of the examples on other sites are with Ant and Jasper

回答1:

its a small report for getting data.

this is your controller

@RequestMapping(value ="/BMIbyage",method = RequestMethod.GET)
public ModelAndView BMIbyage(ModelAndView modelAndView, ModelMap model, Map<String, Object> map,HttpServletRequest request,
        @RequestParam("syear") int syear,@RequestParam("eyear") int eyear,HttpSession session){
    String childid = (String) session.getAttribute("childid");

    List<AdmissionSummery> asum = new ArrayList<AdmissionSummery>();

     List<PatientDetails> patientdetail = patientService.listpatientbmi();

    for(int i=syear;i<=eyear;i++){
         asum.add(new AdmissionSummery());
        int no=0;
        for(int j=0;j<patientdetail.size();j++){


            int dob = Integer.parseInt(patientdetail.get(j).getDateofbirth().substring(0, 4));

            float bmi = patientService.listPatient(patientdetail.get(j).getChildid()).get(0).getBmi();


            if(dob ==i && (bmi<18.5)){
                no=no+1;

                asum.get(asum.size()-1).setNooftime(no);

            }
            System.out.println("no"+no);
            System.out.println("j"+j);
            asum.get(asum.size()-1).setDuration(syear+" "+"-"+" "+eyear);
            asum.get(asum.size()-1).setYear(i);


            System.out.println("BMI"+bmi);

        }



        System.out.println("i"+i);
    }

      JRDataSource datasource = new JRBeanCollectionDataSource(asum);   

        model.addAttribute("datasourcebmireportA", datasource);

        model.addAttribute("format", "pdf");

        modelAndView = new ModelAndView("pdfReportViewaddsummeryA", model);



    return modelAndView;


}

designer page like this

Here is your designer xml

<title>
    <band height="122" splitType="Stretch">
        <rectangle>
            <reportElement x="4" y="100" width="197" height="20"/>
        </rectangle>
        <textField>
            <reportElement x="193" y="71" width="166" height="19"/>
            <textElement>
                <font size="14" isBold="true"/>
            </textElement>
            <textFieldExpression class="java.lang.String"><![CDATA[$F{duration}]]></textFieldExpression>
        </textField>
        <staticText>
            <reportElement x="5" y="9" width="526" height="37"/>
            <textElement textAlignment="Center">
                <font size="14" isBold="true"/>
            </textElement>
            <text><![CDATA[Paediatric Professional Unit -Ward 11
       Teaching Hospital Jaffna]]></text>
        </staticText>
        <line>
            <reportElement x="5" y="92" width="550" height="1" forecolor="#CCCCCC"/>
            <graphicElement>
                <pen lineWidth="2.0"/>
            </graphicElement>
        </line>
        <staticText>
            <reportElement x="5" y="102" width="51" height="20"/>
            <textElement textAlignment="Center" verticalAlignment="Middle">
                <font size="12" isBold="true"/>
            </textElement>
            <text><![CDATA[Year]]></text>
        </staticText>
        <staticText>
            <reportElement x="5" y="53" width="526" height="46"/>
            <textElement>
                <font size="14" isBold="true"/>
            </textElement>
            <text><![CDATA[
        BMI value < 18.5kg/m2 -]]></text>
        </staticText>
        <staticText>
            <reportElement x="59" y="102" width="142" height="20"/>
            <textElement textAlignment="Center" verticalAlignment="Middle">
                <font size="12" isBold="true"/>
            </textElement>
            <text><![CDATA[Number of Admission]]></text>
        </staticText>
        <line>
            <reportElement x="56" y="100" width="1" height="20"/>
        </line>
    </band>
</title>
<pageHeader>
    <band splitType="Stretch"/>
</pageHeader>
<columnHeader>
    <band splitType="Stretch"/>
</columnHeader>
<detail>
    <band height="21">
        <rectangle>
            <reportElement x="4" y="0" width="197" height="20">
                <printWhenExpression><![CDATA[$F{year}!=0]]></printWhenExpression>
            </reportElement>
        </rectangle>
        <textField>
            <reportElement x="56" y="2" width="145" height="17"/>
            <textElement textAlignment="Center" verticalAlignment="Middle"/>
            <textFieldExpression class="java.lang.Integer"><![CDATA[$F{nooftime}]]>           </textFieldExpression>
        </textField>
        <textField>
            <reportElement x="5" y="1" width="51" height="20">
                <printWhenExpression><![CDATA[$F{year}!=0]]></printWhenExpression>
             </reportElement>
            <textElement textAlignment="Center" verticalAlignment="Middle"/>
            <textFieldExpression class="java.lang.Integer"><![CDATA[$F{year}]]>      </textFieldExpression>
        </textField>
        <line>
            <reportElement x="55" y="1" width="1" height="19">
                <printWhenExpression><![CDATA[$F{year}!=0]]></printWhenExpression>
            </reportElement>
        </line>
    </band>
</detail>
<summary>

This is your JSP

<tr>
    <td  ><a href="#"><div class="box">
        <form action="BMIbyage">
        <table width="754">
        <tr>
        <td width="190">
        <font color="black">BMI value < 18.5kg/m2</font></td>

        <td width="124"></td>

        <td width="82">
    <select name="syear"> 
    <option value="Pleaseselect">----</option>
                <%for(int j=1980;j<=2030;j++)
                {
                    %>
                    <option value="<%=j%>"><%=j%></option>
                    <%
                    }
                    %>
    </select>
    </td>
    <td width="20"> to </td>
  <td width="178">
    <select name="eyear"> 
    <option value="Pleaseselect">----</option>
                <%for(int j=1980;j<=2030;j++)
                {
                    %>
                    <option value="<%=j%>"><%=j%></option>
                    <%
                    }
                    %>
    </select>
    </td>
    <td width="108"><input type="submit" value="Generate"></td>
    </tr>
    </table>
        </form>

    </div></a></td>
    </tr>

this is the jasper-views.xml

<bean id="pdfReportViewaddsummeryA"
class="org.springframework.web.servlet.view.jasperreports.JasperReportsMultiFormatView"
 p:url="/WEB-INF/Reports/BMIReport.jasper"
 p:reportDataKey="datasourcebmireportA"
 />

here is the pom.xml

<!--    report
     -->
    <dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>3.7.6</version>
    <type>jar</type>
    <scope>compile</scope>
    <exclusions>
        <exclusion>
            <artifactId>commons-collections</artifactId>
            <groupId>commons-collections</groupId>
        </exclusion>
        <exclusion>
            <artifactId>commons-beanutils</artifactId>
            <groupId>commons-beanutils</groupId>
        </exclusion>
        <exclusion>
            <artifactId>commons-digester</artifactId>
            <groupId>commons-digester</groupId>
        </exclusion>
        <exclusion>
            <artifactId>commons-logging</artifactId>
            <groupId>commons-logging</groupId>
        </exclusion>
    </exclusions>
</dependency>

i hope this could help