Jasper Raporu - Raporları Görüntüle ve Yazdır

Rapor doldurma işleminin çıktısı JasperPrint nesneleri , yerleşik bir görüntüleyici bileşeni kullanılarak görüntülenebilir veya yazdırılabilir veya PDF, HTML, RTF, XLS, ODT, CSV veya XML gibi daha popüler belge formatlarına aktarılabilir. Jasper belgelerinin görüntülenmesi ve yazdırılması bu bölümde ele alınacak ve ihracat bir sonraki bölümde, yani 'İhracat Raporları'nda ele alınacaktır .

Raporları Görüntüleme

JasperReport, oluşturulan raporları orijinal biçiminde görüntülemek için yerleşik bir görüntüleyici sağlar. Swing tabanlı bir bileşendir ve diğer Java uygulamaları, belgeleri görüntülenmek veya yazdırılmak için başka biçimlere dışa aktarmaya gerek kalmadan bu bileşeni entegre edebilir. Net.sf.jasperreports.view.JRViewer sınıfı, bu görsel bir bileşeni temsil etmektedir. Bu sınıf, uygulama ihtiyaçlarına göre alt sınıflandırılarak da özelleştirilebilir.

JasperReports, raporları görüntülemek için görsel bileşeni kullanan bir Swing uygulamasına da sahiptir. Bu uygulama, raporların üretildiği * .jrprint ile aynı formatta görüntülenmesine yardımcı olur. Bu Swing uygulaması net.sf.jasperreports.view.JasperViewer sınıfında gerçekleştirilir . Bu sınıfı kullanarak raporları görüntülemek için, onu bir ANT hedefine sarmamız gerekir.

Oluşturulan Raporu Görüntüleme

Aşağıdaki örnek, - JasperViewer sınıfını kullanarak bir raporun nasıl görüntüleneceğini gösterir -

Bir rapor şablonu yazalım. JRXML dosyasının içeriği (C: \ tools \ jasperreports-5.0.1 \ test \ jasper_report_template.jrxml) aşağıda verilmiştir -

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

Sonra, bu derlenmiş raporu doldurmak için Java veri nesneleri (Java çekirdekleri) koleksiyonunu JasperReports Motoruna geçirelim.

Veri nesnesini (Java bean) temsil eden bir POJO DataBean.java yazın. Bu sınıf iki String nesnesini tanımlar, yani 'ad' ve 'ülke'. Dizine kaydedinC:\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;
   }
}

Java bean nesnelerinden oluşan bir koleksiyon oluşturmak için iş mantığına sahip bir DataBeanList.java sınıfı yazın. Bu, raporu oluşturmak için JasperReports motoruna da aktarılır. Burada Listeye 4 DataBean nesnesi ekliyoruz. Dizine kaydedinC:\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;
   }
}

Bir ana sınıf dosyası yazın JasperReportFill.java, java bean koleksiyonunu sınıftan (DataBeanList) alır ve rapor şablonunu doldurmak için JasperReports motoruna geçirir. Dizine kaydedinC:\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();
      }
   }
}

Bir hedef yazalım viewFillReportbuild.xml dosyasına. Build.xml dosyası aşağıdaki gibidir -

İçe aktarma dosyası - baseBuild.xml, Ortam Kurulumu bölümünden seçilir ve build.xml ile aynı dizine yerleştirilmelidir.

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

Ardından komut satırı penceresini açalım ve build.xml'nin bulunduğu dizine geçelim. Son olarak, komutu yürütün ant -Dmain-class=com.tutorialspoint.JasperReportFill(viewFillReport varsayılan hedeftir). Sonuç olarak, aşağıda verilen ekranda gösterildiği gibi bir JasperViewer penceresi görüyoruz -

Raporları Yazdırma

Net.sf.jasperreports.engine.JasperPrintManager sınıfını kullanarak JasperReports kitaplığı tarafından oluşturulan belgeleri (kendi özel biçimlerinde, örneğin JasperPrint nesnelerinde) yazdırabiliriz . Bu, Java 2 Printing API'ye dayanan bir cephe sınıfıdır. JasperReport belgeleri HTML veya PDF gibi diğer biçimlere aktarıldıktan sonra da belgeleri yazdırabiliriz.

Oluşturulan Raporu Yazdırma

Aşağıdaki kod, bir raporun yazdırılmasını gösterir. Mevcut sınıfımız JasperReportFill'i güncelleyelim. JasperPrintManager.printReport () yöntemini kullanacağız . Bu yöntem kaynak dosya adını alır (burada önceki adımda JasperFillManager.fillReportToFile () yöntemini kullanarak oluşturduğumuz .jrprint dosyasını ilk parametre olarak alırız. İkinci parametre, standart yazdırma iletişim kutusunu görüntülemek için kullanılan boole değeridir (biz bunutrue buraya).

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

Şimdi bu dosyayı dizine kaydedelim C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint. Bu dosyayı ANT kullanarak derleyip çalıştıracağız. Build.xml'nin içeriği aşağıda verildiği gibidir -

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

Ardından komut istemini açalım ve build.xml'nin bulunduğu dizine gidelim. Son olarak, komutu yürütünant -Dmain-class=com.tutorialspoint.JasperReportPrint. Sonuç olarak, bir yazdırma iletişim kutusu belirir. Belgeyi yazdırmak için tamam'ı tıklayın.