Báo cáo Jasper - Xem & In Báo cáo

Đầu ra của quá trình điền báo cáo Các đối tượng JasperPrint có thể được xem bằng cách sử dụng thành phần trình xem tích hợp sẵn, hoặc in hoặc xuất sang các định dạng tài liệu phổ biến hơn như PDF, HTML, RTF, XLS, ODT, CSV hoặc XML. Việc xem và in các tài liệu Jasper sẽ được thảo luận trong chương này và việc xuất sẽ được thảo luận trong chương tiếp theo, tức là 'Báo cáo xuất khẩu'.

Xem báo cáo

JasperReport cung cấp một trình xem tích hợp để xem các báo cáo đã tạo ở định dạng ban đầu. Nó là một thành phần dựa trên swing và các ứng dụng Java khác có thể tích hợp thành phần này mà không cần phải xuất tài liệu sang các định dạng khác để được xem hoặc in. Lớp net.sf.jasperreports.view.JRViewer đại diện cho thành phần trực quan này. Lớp này cũng có thể được tùy chỉnh theo nhu cầu của ứng dụng, bằng cách phân loại nó.

JasperReports cũng có một ứng dụng Swing, sử dụng thành phần trực quan để xem các báo cáo. Ứng dụng này giúp xem các báo cáo ở định dạng giống như * .jrprint được tạo ra. Ứng dụng Swing này được triển khai trong lớp net.sf.jasperreports.view.JasperViewer . Để xem các báo cáo bằng cách sử dụng lớp này, chúng ta cần bao bọc nó thành một đích ANT.

Xem Báo cáo đã tạo

Ví dụ sau minh họa - cách xem báo cáo bằng lớp JasperViewer -

Hãy viết một mẫu báo cáo. Nội dung của tệp JRXML (C: \ tools \ jasperreports-5.0.1 \ test \ jasper_report_template.jrxml) như dưới đây:

<?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>

Tiếp theo, hãy chuyển một tập hợp các đối tượng dữ liệu Java (Java bean), tới JasperReports Engine, để điền vào báo cáo đã biên dịch này.

Viết một POJO DataBean.java, đại diện cho đối tượng dữ liệu (Java bean). Lớp này định nghĩa hai đối tượng Chuỗi tức là 'tên' và 'quốc gia'. Lưu nó vào thư mụcC:\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;
   }
}

Viết một lớp DataBeanList.java, có logic nghiệp vụ để tạo ra một tập hợp các đối tượng bean java. Điều này tiếp tục được chuyển đến công cụ JasperReports, để tạo báo cáo. Ở đây, chúng tôi đang thêm 4 đối tượng DataBean trong Danh sách. Lưu nó vào thư mụcC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint.

package com.tutorialspoint;

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

Viết một tệp lớp chính JasperReportFill.java, lấy bộ sưu tập bean java từ lớp (DataBeanList) và chuyển nó đến công cụ JasperReports, để điền vào mẫu báo cáo. Lưu nó vào thư mụcC:\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<DataBean> dataList = DataBeanList.getDataBeanList();

      JRBeanCollectionDataSource beanColDataSource = new 
         JRBeanCollectionDataSource(dataList);

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

Hãy viết một mục tiêu viewFillReportvào tệp build.xml. Tệp build.xml như sau:

Tệp nhập - baseBuild.xml được chọn từ chương Thiết lập môi trường và phải được đặt trong cùng thư mục với build.xml.

<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewFillReport" basedir = ".">
   <import file = "baseBuild.xml"/>

   <target name = "viewFillReport" depends = "compile,compilereportdesing,run"
      description = "Launches the report viewer
      to preview the report stored in the .JRprint file.">
      
      <java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true">
         <arg value = "-F${file.name}.JRprint" />
         <classpath refid = "classpath" />
      </java>
   </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>

Tiếp theo, hãy mở cửa sổ dòng lệnh và đi đến thư mục nơi build.xml được đặt. Cuối cùng, thực hiện lệnh ant -Dmain-class=com.tutorialspoint.JasperReportFill(viewFillReport là mục tiêu mặc định). Kết quả là, chúng ta thấy một cửa sổ JasperViewer như được hiển thị trong màn hình bên dưới:

Báo cáo in

Chúng ta có thể in các tài liệu được tạo bởi thư viện JasperReports (ở định dạng độc quyền của chúng, tức là các đối tượng JasperPrint ) bằng cách sử dụng lớp net.sf.jasperreports.engine.JasperPrintManager . Đây là một lớp mặt tiền dựa trên API in Java 2. Chúng tôi cũng có thể in tài liệu sau khi tài liệu JasperReport được xuất sang các định dạng khác như HTML hoặc PDF.

In Báo cáo đã Tạo

Đoạn mã sau minh họa việc in báo cáo. Hãy cập nhật lớp JasperReportFill hiện có của chúng ta. Chúng tôi sẽ sử dụng phương thức JasperPrintManager.printReport () . Phương thức này lấy tên tệp nguồn (ở đây chúng tôi chuyển tệp .jrprint , mà chúng tôi tạo ở bước trước bằng cách sử dụng phương thức JasperFillManager.fillReportToFile ()) làm tham số đầu tiên. Tham số thứ hai là boolean để hiển thị hộp thoại in tiêu chuẩn (chúng tôi đã đặt nó thànhtrue đây).

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<DataBean> 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();
      }
   }
}

Bây giờ, hãy lưu tệp này vào thư mục C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint. Chúng tôi sẽ biên dịch và thực thi tệp này bằng ANT. Nội dung của build.xml như dưới đây:

<?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>

Tiếp theo, hãy mở dấu nhắc lệnh và đi đến thư mục nơi build.xml được đặt. Cuối cùng, thực hiện lệnhant -Dmain-class=com.tutorialspoint.JasperReportPrint. Kết quả là một hộp thoại in xuất hiện. Nhấn OK để in tài liệu.