Šta je jasperreports

Izveštaji u java aplikacijama
Šta je jasperreports
 Open source java biblioteka za renderovanje
sadrzaja
 Formira dokumente od podataka, i
omogućava njihov prikaz i eksport
 Izvori podataka: baze podataka, XML, csv,
java beanovi …
 Prikaz izveštaja: jasperov prikaz, SWT
preview, pdf, html, csv ...
Kako
 Formiranje dizajna izveštaja pravljenjem
report template-a (.jrxml)
 Formiranje izvora podataka i upita koji se
izvršava nad njim
 Kompajliranje izveštaja (.jasper)
 Punjenje izveštaja podacima (.jprint)
 Prikazivanje izveštaja (preview, .pdf, .html...)
s
Šta je potrebno
 jasperreports-x.z.jar
(http://jasperforge.org/projects/jasperreports)
 Java virtuelna mašina (jre 1.3 ili više)
 Java kompajler (jdk 1.3 ili više)
 Xml parser (JAXP 1.1)
Jakarta commons pomoćne biblioteke:
Javaflow, Digester, BeanUtils, Collections,
Logging (http://commons.apache.org)
I još ...
 IDE okruženje (Eclipse, NetBeans ...)
 Jasperreports grafički editor:
Jasper Assistant (http://www.jasperassistant.com/)
Ireport (http://jasperforge.org/projects/ireport)
 JDBC (ako se radi s SQL-om)
 IText za pdf (http://www.lowagie.com/iText)
 JfreeChart (http://www.jfree.org/jfreechart)
Formiranje dizajna izveštaja
 Dizajn izveštaja ima xml strukturu
 Grafički i logički elementi izveštaja su xml
elementi
 Osobine elemenata su xml atributi
<?xml version="1.0" encoding="UTF-8"?>
<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="filmovi" pageWidth="595" pageHeight="842"...>
<queryString>
upit
<![CDATA[SELECT naziv P_NAZIV, godina P_GODINA FROM filmovi ORDER BY 1]]>
</queryString>
<field name="P_NAZIV" class="java.lang.String"/>
Parametri, polja, promenljive
....
<pageHeader>
....
</pageHeader>
<detail>
<band height="33">
<textField hyperlinkType="None">
<reportElement positionType="Float" x="2" y="7" width="277" height="15"/>
<textElement>
<font fontName="Arial"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{P_NAZIV}]]></textFieldExpression>
</textField>
....
</band>
</detail>
<pageFooter>
....
</pageFooter>
</jasperReport>
Grafičke sekcije i elementi
Root element
 <jasperReport> - opšte karakteristike
<jasperReport ... pageWidth="595" pageHeight="842"
columnWidth="511" leftMargin="42" ...>
 Atributi:
name – ime izveštaja
pageWidth, PageHeight – veličina
isTitleNewPage – naziv na posebnoj strani
resourceBundle – podrška za višejezičnost
...
Izgled izveštaja
 Stilovi
<style> – dobijanje izgleda grafičkih
elemenata (boje, okviri, fontovi) koji se kasnije
koriste kao atributi raznih elemenata
 Fontovi
<font> – definisanje fontova (veličine,
boje, tipa …) koji se kasnije koriste takođe u
grafičkim elementima
 Upit
Podaci
<queryString> – dobijanje podataka iz baze
<queryString><![CDATA[SELECT naziv P_NAZIV FROM filmovi></queryString>
 Parametri
upit
<parameter> – ulazni parametri za
<parameter name="godina" class="java.lang.Integer"/>
 Polja
<field>– dobijeni podaci iz upita
<field name="P_NAZIV" class="java.lang.String"/>
 Promenljive
<variable>– manipulacija
parametrima i poljima, kao izrazi koji mogu biti
napisani u Javi (Groovy, JavaScript …)
<variable name="Tekst" class="java.lang.String"> <variableExpression><![CDATA["Naziv " +
$F{P_NAZIV} ]]></variableExpression></variable>
Sekcije izveštaja
 Title <title>– početna strana izveštaja
 Summary <summary>– rekapitulacija na
poslednjoj strani
 Header, footer
<pageHeader>, <pageFooter> –
predstavljaju zaglavlje i dno strane
 Detalj
<detail>– odgovara jednom redu
podataka za izveštaj
Grupe
 Grupisanje podataka na osnovu definisanog
izraza, koji obično sadrži polja izveštaja
 Podaci treba da budu sortirani po tom polju
 Grupa <group>– root element grupe
 Sekcije grupe <groupHeader>, <groupFooter> –
zaglavlje i dno grupe
 Grupe su medjusobno ugnježdene, oko detalja
Prikazni tekst elementi
 Labele <staticText> - nepromenljivi izrazi
 Tekst polja <textField> - java izrazi od
podataka tj parametara, polja, varijabli
<textField hyperlinkType="None">
<reportElement positionType="Float" x="2" y="7" width="277" height="15"/>
<textElement>
<font fontName="Arial"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{P_NAZIV}]]></textFieldExpression>
</textField>
Neke osobine tekst elemenata
 Kada se radi evaluacija evaluationTime
 Dinamičko povećanje isStretchWithOverflow
 Ne prikazuj null isBlankWhenNull
 Formatiranje pattern
 Ne štampaj uvek printWhenExpression
 Pozicija, veličina, margine, okvir, font
...
 Linija
Grafički elementi
<line>
<line>
<reportElement positionType="Float" x="0" y="0" width="511" height="1"
isPrintWhenDetailOverflows="true" backcolor="#000000"/>
<graphicElement><pen lineWidth="0.5" lineStyle="Solid"/></graphicElement>
</line>
Četvorougao <rectangle>
Elipsa <ellipse>
Slika <image>
Grafikon <chart>
Subreport
 Bilo koji izveštaj može biti subreport, ako se
doda kao element u neki drugi izveštaj
Element subreport u glavnom izveštaju
<subreport> – mora da definiše ime izveštaja
koji je subreport i izvor podataka
Mapiranje ulaznih parametara
<subreportParameter>
 Vraćanje vrednosti iz subreporta glavnom
izveštaju <returnValue>
Crosstab
 Međuzavisnost dve ili više varijabli, u formi
tabele sa dinamičnim kolonama i redovima
 U ćelijama mogu biti razni grafički elementi
 Redovi i kolone <rowGroup>, <columnGroup>–
definisanje ove međuzavisnosti
 Header
<crosstabRowHeader>,
<crosstabColumnHeader>
 Sume <crosstabTotalRowHeader>,
<crosstabTotalColumnHeader>
Još komponenti
 Lista
 Tabela
 Barkod
Internacionalizacija
 REPORT_RESOURCE_BUNDLE parametar
izveštaja koji je veza sa java.util.ResourceBundle
 $R{} sintaksom se pomoću ključa pristupa
odgovarajućem prevodu
Jasper java API
Faze izveštaja
NET.SF.JASPERREPORTS.ENGINE.*
 JasperDesign.java, instanca ove klase predstavlja
.jrxml fajl
 JasperReport.java, instanca ove klase
predstavlja .jasper fajl koji nastaje kompilacijom
.jrxml fajla
 JasperPrint.java, instanca ove klase
predstavlja .jrprint fajl, koji nastaje
punjenjem .jasper fajla podacima
Podaci za izveštaj
 JRDataSource.java, interfejs za kolekciju
podataka
 getFieldValue, metoda koja dohvata polje sa
trenutne pozicije
 next, metoda koja iterira po podacima
 Implementacije: JRResultSetDataSource,
JRBeanCollectionDataSource,
JRXMLDataSource
Kompilacija
 JasperCompileManager.java, kompajlira .jrxml
fajl i formira .jasper fajl
 Metoda compileReport kao argument ima
JasperDesign objekat a vraća JasperReport
objekat
 Moguće je raditi i sa zadavanjem lokacija
fajlova ili input i output streamovima
.jrxml
compile
.jasper
Punjenje izveštaja podacima
 JasperFillManager.java, formira .jrprint fajl
od .jasper fajla i podataka
 Metoda fillReport kao argument ima
JasperReport objekat (kompajlirani izveštaj),
JRDataSource objekat (podaci) I mapu
parametara, a vraća JasperPrint objekat
 Moguće je raditi i sa zadavanjem konekcije,
lokacija fajlova ili input i output streamovima
.jasper
datasource
parametri
fill
.jrprint
Prikaz izveštaja
 JRViewer.java, posebna grafička komponenta za
preview u Swing aplikacijama
Štampanje izveštaja
 JasperPrintManager.java slanje .jprint izveštaja
na štampu
 Metoda printReport ima kao argument
JasperPrint objekat (može i inputstream i
lokaciju fajla na disku)
 Štampa može generisati sliku java.awt.Image
Skraćivanje procesa
 JasperRunManager.java direktno od .jasper fajla
i izvora podataka ili konekcije, bez pravljenja
.jrprint fajla na disku, formira .pdf ili HTML fajl
 Metode runReportToHtml, runReportToPDF ...
imaju kao argument JasperReport objekat, I
vraćaju niz bajtova koji predtavlja novi fajl u
odgovarajućem formatu
 Može se raditi i sa fajlovima na disku, kao I
input i output streamovima