JasperReports - Designs

Os modelos JRXML (ou arquivos JRXML) no JasperReport são arquivos XML padrão, com uma extensão .jrxml. Todos os arquivos JRXML contêm a tag <jasperReport>, como elemento raiz. Este, por sua vez, contém muitos subelementos (todos eles são opcionais). A estrutura JasperReport pode lidar com diferentes tipos de fontes de dados. Neste tutorial, mostraremos como gerar um relatório básico, apenas passando uma coleção de objetos de dados Java (usando Java beans) para o mecanismo JasperReport. O relatório final deve exibir uma lista de pessoas com as categorias, incluindo seus nomes e países.

As etapas a seguir são abordadas neste capítulo para descrever - como projetar um JasperReport -

  • Criação de um modelo de relatório JRXML e.
  • Visualizando o modelo de relatório XML.

Criação de um modelo de relatório JRXML

Crie o arquivo JRXML, que é jasper_report_template.jrxmlusando um editor de texto e salve este arquivo em C: \ tools \ jasperreports-5.0.1 \ test de acordo com a configuração do nosso ambiente.

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

Aqui estão os detalhes dos campos principais no modelo de relatório acima -

  • <queryString> - Está vazio (já que estamos passando dados por Java Beans). Normalmente contém a instrução SQL, que recupera o resultado do relatório.

  • <nome do campo> - Este elemento é usado para mapear dados de fontes de dados ou consultas em modelos de relatório. name é reutilizado no corpo do relatório e faz distinção entre maiúsculas e minúsculas.

  • <fieldDescription> - Este elemento mapeia o nome do campo com o elemento apropriado no arquivo XML.

  • <staticText> - define o texto estático que não depende de nenhuma fonte de dados, variável, parâmetro ou expressão de relatório.

  • <textFieldExpression> - Isso define a aparência do campo de resultado.

  • $ F {country} - Esta é uma variável que contém o valor do resultado, campo pré-definido na tag <nome do campo>.

  • <band> - As bandas contêm os dados, que são exibidos no relatório.

Quando o design do relatório estiver pronto, salve-o no diretório C: \.

Visualizando o modelo de relatório XML

Existe um utilitário net.sf.jasperreports.view.JasperDesignViewer disponível no arquivo JasperReports JAR, que ajuda a visualizar o design do relatório sem ter que compilá-lo ou preenchê-lo. Este utilitário é um aplicativo Java autônomo, portanto, pode ser executado usando ANT.

Vamos escrever um alvo ANT viewDesignXMLpara visualizar o JRXML. Então, vamos criar e salvarbuild.xmlsob o diretório C: \ tools \ jasperreports-5.0.1 \ test (deve ser colocado no mesmo diretório onde JRXML é colocado). Aqui está o arquivo build.xml -

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

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

</project>

A seguir, vamos abrir um prompt de comando e ir para o diretório onde build.xml está colocado. Execute o comandoant(Como viewDesignXML é o destino padrão). O resultado é o seguinte -

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

viewDesignXML:
[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.

O aviso Log4j pode ser ignorado e, como resultado da execução acima, uma janela chamada "JasperDesignViewer" é aberta, exibindo a visualização do modelo de relatório.

Como vemos, apenas expressões de relatório para obter os dados são exibidas, pois JasperDesignViewer não tem acesso à fonte de dados real ou aos parâmetros do relatório. Encerre o JasperDesignViewer fechando a janela ou pressionando Ctrl-c na janela da linha de comando.