zoukankan      html  css  js  c++  java
  • JasperReport导出报表8

    我们已经看到在前面的章节中,如何打印和查看的JasperReport生成的文档。在这里,我们将看到如何在其他格式,如PDF,HTML和XLS转换或导出这些报告。 Facade类net.sf.jasperreports.engine.JasperExportManager提供实现这一功能。导出方式转变JasperPrint对象(.jrprint文件)导入到不同的格式。

    下面的代码(JasperReportExport.java)演示了JasperReport文档的导出过程。该JasperExportManager提供的方法将报表导出成PDF,HTML和XML。导出到使用的类net.sf.jasperreports.engine.export.JRXlsExporter的XLS格式。此代码生成以下三个文件:

    • sample_report.pdf

    • sample_report.htmll

    • sample_report.xls

    导出为其他格式

    让我们来写一个报表模板。在JRXML文件的内容 (C: oolsjasperreports-5.0.1 estjasper_report_template.jrxml) 如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"
    "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
    <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="jasper_report_template" language="groovy" pageWidth="595"
    pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20"
    topMargin="20" bottomMargin="20">
    
        <queryString>
    	<![CDATA[]]>
        </queryString>
        <field name="country" class="java.lang.String">
            <fieldDescription><![CDATA[country]]></fieldDescription>
        </field>
        <field name="name" class="java.lang.String">
            <fieldDescription><![CDATA[name]]></fieldDescription>
        </field>
        <columnHeader>
         <band height="23">
    	<staticText>
    	    <reportElement mode="Opaque" x="0" y="3" width="535"
    		 height="15" backcolor="#70A9A9" />
    	    <box>
    	        <bottomPen lineWidth="1.0" lineColor="#CCCCCC" />
    	    </box>
    	    <textElement />
    	    <text><![CDATA[]]> </text>
    	</staticText>
    	<staticText>
    	    <reportElement x="414" y="3" width="121" height="15" />
    	    <textElement textAlignment="Center"
    	        verticalAlignment="Middle">
    		<font isBold="true" />
    	    </textElement>
    	    <text><![CDATA[Country]]></text>
    	</staticText>
    	<staticText>
    	    <reportElement x="0" y="3" width="136" height="15" />
    	    <textElement textAlignment="Center"
    	        verticalAlignment="Middle">
    		<font isBold="true" />
    	    </textElement>
    	    <text><![CDATA[Name]]></text>
    	</staticText>
         </band>
        </columnHeader>
        <detail>
            <band height="16">
    	 <staticText>
    	     <reportElement mode="Opaque" x="0" y="0" width="535"
    		 height="14" backcolor="#E5ECF9" />
    	     <box>
    	            <bottomPen lineWidth="0.25" lineColor="#CCCCCC" />
    	     </box>
    	     <textElement />
    	     <text><![CDATA[]]> </text>
    	 </staticText>
    	 <textField>
    	     <reportElement x="414" y="0" width="121" height="15" />
    	     <textElement textAlignment="Center"
    	         verticalAlignment="Middle">
    		 <font size="9" />
    	     </textElement>
    	     <textFieldExpression class="java.lang.String">
    	         <![CDATA[$F{country}]]>
    		</textFieldExpression>
    	 </textField>
    	 <textField>
    	     <reportElement x="0" y="0" width="136" height="15" />
    	     <textElement textAlignment="Center"
    	         verticalAlignment="Middle" />
    	         <textFieldExpression class="java.lang.String">
    			<![CDATA[$F{name}]]>
    	         </textFieldExpression>
    	 </textField>
            </band>
        </detail>
    </jasperReport>

    接着,POJO文件 C: oolsjasperreports-5.0.1 estsrccomyiibaiDataBean.java 的内容如下:

    package com.yiibai;
    
    public class DataBean {
       private String name;
       private String country;
    
       public String getName() {
          return name;
       }
    
       public void setName(String name) {
          this.name = name;
       }
    
       public String getCountry() {
          return country;
       }
    
       public void setCountry(String country) {
          this.country = country;
       }
    }

    文件 C: oolsjasperreports-5.0.1 estsrccomyiibaiDataBeanList.java 的内容如下:

    package com.yiibai;
    
    import java.util.ArrayList;
    
    public class DataBeanList {
       public ArrayList<DataBean> getDataBeanList() {
          ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>();
    
          dataBeanList.add(produce("Manisha", "India"));
          dataBeanList.add(produce("Dennis Ritchie", "USA"));
          dataBeanList.add(produce("V.Anand", "India"));
          dataBeanList.add(produce("Shrinath", "California"));
    
          return dataBeanList;
       }
    
       /**
        * This method returns a DataBean object,
        * with name and country set in it.
        */
       private DataBean produce(String name, String country) {
          DataBean dataBean = new DataBean();
          dataBean.setName(name);
          dataBean.setCountry(country);
          return dataBean;
       }
    }

    写一个主类文件JasperReportFill.java,它从类(DataBeanList)获取java bean集合,并将其传递到Jasper 报表引擎,填补了报表模板。把它保存到目录 C: oolsjasperreports-5.0.1 estsrccomyiibai.

    package com.yiibai;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
    
    import net.sf.jasperreports.engine.JRException;
    import net.sf.jasperreports.engine.JRExporterParameter;
    import net.sf.jasperreports.engine.JasperExportManager;
    import net.sf.jasperreports.engine.JasperFillManager;
    import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
    import net.sf.jasperreports.engine.export.JRXlsExporter;
    
    public class JasperReportFill {
       @SuppressWarnings("unchecked")
       public static void main(String[] args) {
          String sourceFileName = "c://tools/jasperreports-5.0.1/"
                + "test/jasper_report_template.jasper";
          String printFileName = null;
          DataBeanList DataBeanList = new DataBeanList();
          ArrayList dataList = DataBeanList.getDataBeanList();
          JRBeanCollectionDataSource beanColDataSource =
             new JRBeanCollectionDataSource(dataList);
    
          Map parameters = new HashMap();
          try {
             printFileName = JasperFillManager.fillReportToFile(sourceFileName,
                parameters, beanColDataSource);
             if (printFileName != null) {
                /**
                 * 1- export to PDF
                 */
                JasperExportManager.exportReportToPdfFile(printFileName,
                      "C://sample_report.pdf");
    
                /**
                 * 2- export to HTML
                 */
                JasperExportManager.exportReportToHtmlFile(printFileName,
                      "C://sample_report.htmll");
    
                /**
                 * 3- export to Excel sheet
                 */
                JRXlsExporter exporter = new JRXlsExporter();
    
                exporter.setParameter(JRExporterParameter.INPUT_FILE_NAME,
                      printFileName);
                exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,
                      "C://sample_report.xls");
    
                exporter.exportReport();
             }
          } catch (JRException e) {
             e.printStackTrace();
          }
       }
    }

    在这里,我们已经包括了逻辑Jasper 打印文件导出到PDF,HTML和XLS格式。

    生成报表

    让我们用我们的常规Ant构建过程编译和执行上述文件。 build.xml文件如下图所示:

     
    <?xml version="1.0" encoding="UTF-8"?>
    <project name="JasperReportTest" default="executereport" basedir=".">
       <import file="baseBuild.xml"/>
    
       <target name="executereport" depends="compile,compilereportdesing,run">
            <echo message="Im here"/>
       </target>
        <target name="compilereportdesing"
             description="Compiles the JXML file and
             produces the .jasper file.">
             <taskdef name="jrc"
             classname="net.sf.jasperreports.ant.JRAntCompileTask">
                <classpath refid="classpath" />
             </taskdef>
             <jrc destdir=".">
                <src>
                <fileset dir=".">
                   <include name="*.jrxml" />
                </fileset>
                </src>
                <classpath refid="classpath" />
             </jrc>
       </target>
    </project>

    进入命令提示符,然后转到目录C: oolsjasperreports-5.0.1 est,其中build.xml已放置。最后执行的命令 ant -Dmain-class=com.yiibai.JasperReportFill. 输出如下所示:

    C:	oolsjasperreports-5.0.1	est>ant -Dmain-class=com.yiibai.JasperReportFill
    Buildfile: C:	oolsjasperreports-5.0.1	estuild.xml
    
    clean-sample:
       [delete] Deleting directory C:	oolsjasperreports-5.0.1	estclasses
       [delete] Deleting: C:	oolsjasperreports-5.0.1	estjasper_report_template.jasper
       [delete] Deleting: C:	oolsjasperreports-5.0.1	estjasper_report_template.jrprint
    
    compile:
        [mkdir] Created dir: C:	oolsjasperreports-5.0.1	estclasses
        [javac] C:	oolsjasperreports-5.0.1	estaseBuild.xml:28:
        warning: 'includeantruntime' was not set, defaulting t
        [javac] Compiling 4 source files to C:	oolsjasperreports-5.0.1	estclasses
    
    compilereportdesing:
          [jrc] Compiling 1 report design files.
          [jrc] log4j:WARN No appenders could be found for logger
          (net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
          [jrc] log4j:WARN Please initialize the log4j system properly.
          [jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.htmll#noconfig for more info.
          [jrc] File : C:	oolsjasperreports-5.0.1	estjasper_report_template.jrxml ... OK.
    
    run:
         [echo] Runnin class : com.yiibai.JasperReportFill
         [java] log4j:WARN No appenders could be found for logger
         (net.sf.jasperreports.extensions.ExtensionsEnvironment).
         [java] log4j:WARN Please initialize the log4j system properly.
    
    executereport:
         [echo] Im here
    
    BUILD SUCCESSFUL
    Total time: 32 seconds
    

    正如上面执行的结果,会发现三个文件sample_report.pdf,sample_report.htmll,sample_report.xls已生成在 C: 目录.

  • 相关阅读:
    通过圆形按钮的绘制熟悉Qt的绘图机制,掌握这种终极方法
    Qt用委托绘制需要的图形的步骤
    定位问题的一个思路
    头文件找不到引用的类的定义
    model的index无限次数执行导致stackOverFlow
    error C2248: 'QObject::QObject' : cannot access private member declared in class 'QObject'
    Python爬虫之使用celery加速爬虫
    Python之celery的简介与使用
    NLP入门(七)中文预处理之繁简体转换及获取拼音
    NLP入门(六)pyltp的介绍与使用
  • 原文地址:https://www.cnblogs.com/mengyuxin/p/4663804.html
Copyright © 2011-2022 走看看