📜  Jasper报告-查看和打印报告

📅  最后修改于: 2020-11-16 07:50:15             🧑  作者: Mango


报表填充过程的JasperPrint对象的输出可以使用内置的查看器组件进行查看,也可以打印或导出为更流行的文档格式,例如PDF,HTML,RTF,XLS,ODT,CSV或XML。在本章中将讨论查看和打印Jasper文档,在下一章即“导出报告”中将讨论导出。

查看报告

JasperReport提供了一个内置查看器,用于以其原始格式查看生成的报告。它是一个基于swing的组件,其他Java应用程序可以集成此组件,而不必将文档导出为其他格式以进行查看或打印。 net.sf.jasperreports.view.JRViewer类表示此可视组件。也可以通过子类将其根据应用程序需求进行自定义。

JasperReports还具有一个Swing应用程序,该应用程序使用可视组件来查看报告。此应用程序有助于查看与生成* .jrprint相同格式的报告。此Swing应用程序在类net.sf.jasperreports.view.JasperViewer中实现。要使用此类查看报告,我们需要将其包装到ANT目标中。

查看生成的报告

以下示例演示-如何使用JasperViewer类查看报告-

让我们编写一个报告模板。 JRXML文件的内容(C:\ tools \ jasperreports-5.0.1 \ test \ jasper_report_template.jrxml)如下所示-






   
      
   
   
   
      
   
   
   
      
   
   
   
      
         
         
            
            
            
               
            
            
            
             
         
         
         
            
            
            
               
            
            
         
         
         
            
            
            
               
            
            
         
      
      
   
   
   
      
         
         
            
            
            
               
            
            
            
             
         
         
         
            
            
            
               
            
            
            
               
            
         
         
         
            
            
            
            
               
            
         
      
      
   
    

接下来,让我们将Java数据对象(Java Bean)的集合传递给JasperReports Engine,以填充此已编译的报告。

编写一个POJO DataBean.java,它代表数据对象(Java bean)。此类定义了两个String对象,即“ name”和“ country”。将其保存到目录C:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspoint

package com.tutorialspoint;

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;
   }
}

编写一个DataBeanList.java类,该类具有用于生成Java Bean对象集合的业务逻辑。这进一步传递给JasperReports引擎,以生成报告。在这里,我们在列表中添加了4个DataBean对象。将其保存到目录C:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspoint

package com.tutorialspoint;

import java.util.ArrayList;

public class DataBeanList {
   public ArrayList getDataBeanList() {
      ArrayList dataBeanList = new ArrayList();

      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集合并将其传递给JasperReports引擎,以填充报告模板。将其保存到目录C:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspoint

package com.tutorialspoint;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

public class JasperReportFill {
   @SuppressWarnings("unchecked")
   public static void main(String[] args) {
      String sourceFileName = 
         "c://tools/jasperreports-5.0.1/test/jasper_report_template.jasper";
      DataBeanList DataBeanList = new DataBeanList();
      ArrayList dataList = DataBeanList.getDataBeanList();

      JRBeanCollectionDataSource beanColDataSource = new 
         JRBeanCollectionDataSource(dataList);

      Map parameters = new HashMap();
      try {
         JasperFillManager.fillReportToFile( 
            sourceFileName, parameters, beanColDataSource);
      } catch (JRException e) {
         e.printStackTrace();
      }
   }
}

让我们将目标viewFillReport写入build.xml文件。 build.xml文件如下-

导入文件-baseBuild.xml是从“环境设置”一章中选取的,应与build.xml放在同一目录中。



   

   
      
      
         
         
      
   
   
   
      
      
         
      
      
      
         
            
               
            
         
         
      
   
   
    

接下来,让我们打开命令行窗口并转到build.xml所在的目录。最后,执行命令ant -Dmain-class = com.tutorialspoint.JasperReportFill (viewFillReport是默认目标)。结果,我们看到一个JasperViewer窗口,如下图所示:

Jasper报表查看器

打印报告

我们可以使用net.sf.jasperreports.engine.JasperPrintManager类打印由JasperReports库生成的文档(采用其专有格式,即JasperPrint对象)。这是一个依赖Java 2 Printing API的Facade类。 JasperReport文档导出为其他格式(例如HTML或PDF)后,我们也可以打印文档。

打印生成的报告

以下代码演示了报告的打印。让我们更新现有的类JasperReportFill。我们将使用JasperPrintManager.printReport()方法。此方法采用源文件名(此处传递.jrprint文件,该文件是在上一步中使用JasperFillManager.fillReportToFile()方法生成的)作为第一个参数。第二个参数是用于显示标准打印对话框的布尔值(我们在此处将其设置为true )。

package com.tutorialspoint;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrintManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

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){
            JasperPrintManager.printReport( printFileName, true);
         }
      } catch (JRException e) {
         e.printStackTrace();
      }
   }
}

现在,让我们将该文件保存到目录C:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspoint 。我们将使用ANT编译并执行此文件。 build.xml的内容如下所示-



   

   
      
   
   
   
      
      
         
      
      
      
         
            
               
            
         
         
      
        
   
    

接下来,让我们打开命令提示符,然后转到build.xml所在的目录。最后,执行命令ant -Dmain-class = com.tutorialspoint.JasperReportPrint 。结果,出现一个打印对话框。单击确定以打印文档。