JasperReports - Rapor Tasarımını Derleme

Önceki bölümde JasperReport şablonunu (JRXML dosyası) oluşturduk. Bu dosya doğrudan rapor oluşturmak için kullanılamaz. JasperReport'un yerel ikili formatına derlenmelidir.Jasperdosya. Derlemede, JasperDesign nesnesini JasperReport nesnesine dönüştürüyoruz -

Arabirim net.sf.jasperreports.engine.design.JRCompiler derleme sırasında merkezi bir rol oynar. Bu arabirim, rapor ifadeleri için kullanılan dile bağlı olarak, derleyici uygulaması çalışma zamanında değerlendirebildiği sürece Java, Groovy, JavaScript veya başka herhangi bir komut dosyası dilinde yazılabilen birkaç uygulamaya sahiptir.

JRXML dosyasını aşağıdaki iki şekilde derleyebiliriz -

  • Programlı derleme.
  • ANT görevi aracılığıyla derleme.

JRXML'nin Programlı Derlemesi

JasperReports API, JasperReport'u derlemek için net.sf.jasperreports.engine.JasperCompileManager cephe sınıfı sunar . Bu sınıf, rapor şablonlarını derlemek için birkaç genel statik yöntemden oluşur. Şablonların kaynağı dosyalar, giriş akışları ve / veya bellek nesneleri olabilir.

JRXML dosyasının (jasper_report_template.jrxml) içeriği aşağıdaki gibidir. Dizine kaydedilirC:\tools\jasperreports-5.0.1\test -

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

Aşağıdaki kod, yukarıdaki jasper_report_template.jrxml dosyasının derlenmesini gösterir .

package com.tutorialspoint;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;

public class JasperReportCompile {

   public static void main(String[] args) {
      String sourceFileName = "C://tools/jasperreports-5.0.1/test" + 
         "/jasper_report_template.jrxml";

      System.out.println("Compiling Report Design ...");
      try {
          /**
          * Compile the report to a file name same as
          * the JRXML file name
          */
         JasperCompileManager.compileReportToFile(sourceFileName);
      } catch (JRException e) {
         e.printStackTrace();
      }
      System.out.println("Done compiling!!! ...");
   }
}

Şablon Derleme

Bir sonraki adım olarak, yukarıdaki içeriği dosyaya kaydedelim C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportCompile.javave aşağıdaki gibi build.xml dosyasındaki baseBuild.xml dosyasını içe aktarın . BaseBuild.xml dosyası zatencompile ve run hedefler -

<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "run" basedir = ".">

   <import file = "baseBuild.xml"/>

</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ünant -Dmain-class = com.tutorialspoint.JasperReportCompile olarak -

C:\tools\jasperreports-5.0.1\test>ant -Dmain-class = com.tutorialspoint.JasperReportCompile
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
compile:
   [javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:27:
   warning: 'includeantruntime' was not set, defaulting to
   build.sysclasspath=last;set to false for repeatable builds
   [javac] Compiling 1 source file to C:\tools\jasperreports-5.0.1\test\classes

run:
   [echo] Runnin class : com.tutorialspoint.JasperReportCompile
   [java] Compiling Report Design ...
   [java] log4j:WARN No appenders could be found for logger
   (net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
   [java] log4j:WARN Please initialize the log4j system properly.
   [java] Done compiling!!! ...

BUILD SUCCESSFUL
Total time: 8 seconds

Yukarıdaki derlemenin bir sonucu olarak, jasper_report_template.jasper şablon dosyasının C: \ tools \ jasperreports-5.0.1 \ test dizininde oluşturulduğunu göreceksiniz.

Derlenmiş Rapor Şablonunu Önizleyin

Net.sf.jasperreports.view.JasperDesignViewer önizleme derlenen rapor şablonları ve JRXML şablonları için kullanılabilir.

Daha ileri gitmek için yeni bir hedef ekleyelim viewDesignYukarıdaki build.xml dosyasına, derlenmiş raporu önizlememize izin verecek. Aşağıda revize edilmiş build.xml verilmiştir -

İç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 = "viewDesign" basedir = ".">

   <import file = "baseBuild.xml" />
   <target name = "viewDesign" description="Design viewer is launched 
      to preview the compiled report design.">
      
      <java classname = "net.sf.jasperreports.view.JasperDesignViewer" fork = "true">
         <arg value = "-F${file.name}.jasper" />
         <classpath refid = "classpath" />
      </java>
   </target>

</project>

Şu komutu çalıştıralım - ant(viewDesign varsayılan hedeftir) komut isteminde. JasperDesignViewer penceresi, Jasper dosyasını aşağıdaki gibi görüntüleyerek açılır -

ANT Görevi ile Derleme

Rapor şablonu derlemesi, bir çalışma zamanı işinden çok bir tasarım zamanı işi gibi olduğundan, JasperReport kitaplığının özel bir ANT görevi vardır. Bazı durumlarda, JRXML dosyası çalışma zamanında oluşturulduğunda, bu ANT görevini kullanamayız. Özel ANT görevi JRC olarak adlandırılır ve sınıf tarafından gerçekleştirilir: net.sf.jasperreports.ant.JRAntCompileTask . Sözdizimi ve davranışı yerleşik olana çok benzer<javac> ANT görevi.

Şablon Derleme

Yeni hedef ekleyelim compilereportdesingmevcut build.xml dosyamıza. Burada kaynak klasör, dosya kümeleriyle birlikte iç içe geçmiş bir <src> etiketi kullanılarak belirtilir. İç içe geçmiş kaynak etiketi, birçok farklı konuma dağılmış ve tek bir kök rapor kaynak klasörü altında gruplanmamış rapor şablonlarının derlenmesine izin verir. Aşağıda revize edilmiş build.xml verilmiştir -

<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "compilereportdesing" basedir = ".">
   
   <import file = "baseBuild.xml" />
   <target name = "viewDesign" description = "Design viewer is 
      launched to preview the compiled report design.">
      
      <java classname = "net.sf.jasperreports.view.JasperDesignViewer" fork = "true">
         <arg value = "-F${file.name}.jasper" />
         <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 istemini açalım ve build.xml'nin bulunduğu dizine gidelim. Komutu yürütünant(derleyici raporlaması varsayılan hedeftir); Çıktı aşağıdaki gibidir -

C:\tools\jasperreports-5.0.1\test>ant
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml

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.html#noconfig
   for more info.
   [jrc] File :
   C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.

BUILD SUCCESSFUL
Total time: 5 seconds

Dosya jasper_report_template.jasper dosya sistemi oluşturulur (bizim durumumuzda C: \ tools \ jasperreports-5.0.1 \ test dizin). Bu dosya, net.sf.jasperreports.engine.JasperCompileManager.compileReportToFile () çağrısıyla program aracılığıyla oluşturulan dosyayla aynıdır. Bu jasper dosyasını çalıştırarak önizleyebilirizant viewDesign.