JasperReport oldukça kuvvetli ve birçok özellikler sunan bir raporlama aracı olduğundan birçok firma ve kuruluş tarafından kabul görmektedir. Özellikle sunduğu geniş özellikler ve Java içinden çağırılabilmesi sayesinde geliştirdiğiniz raporlama arabirimlerinde bir numaralı tercihiniz olacaktır. Bu örnekte JChart kullanarak bir grafik çizip bunu JasperReports içinden çağırmayı göstereceğiz.
İlk olarak elimizdeki veriyle basit bir XY grafiği çizelim;
// Eğriye gönderilecek veri dizileri birden fazla eğri gönderebilirsiniz
XYSeriesCollection dataset = new XYSeriesCollection();
// eğri için veriler
for(int j = 1; j < 4; j++){
XYSeries xy = new XYSeries(Eğri + j);
for(int i = 0; i < 7; i++){
xy.add(i, j * i);
}
dataset.addSeries(xy);
}
JFreeChart chart = ChartFactory.createXYLineChart(
Eğri Serisi, // başlık
X Değerleri, // x ekseni başlığı
Y Değerleri, // y ekseni başlığı
dataset, // verş
PlotOrientation.VERTICAL,
true,
true,
false);
XYPlot plot = chart.getXYPlot();
SymbolAxis domainAxis = new SymbolAxis(Gunler, dates);
plot.setDomainAxis(domainAxis);
chart.setBackgroundPaint(Color.white);
plot.setOutlinePaint(Color.black);
Oluşturduğumuz grafikle ilgili veriler chart nesnesinde tutulmaktadır. Şimdi ise JasperReportsa göndereceğimiz HashMapi oluşturalım.
HashMap parameters = new HashMap();
// 1200 x 360 ebatında grafiği çizdir
parameters.put(myChart, chart.createBufferedImage(1200, 360));
parameters.put(bigHeader, Grafik Denemesi);
Bu şekilde grafiğimizi çizip kaydetmiş olduk. Şimdi ise jasper.jrxml dosyasını çağırıp derleme yapan kodu yazalım. jrxml dosyası oluşturacağınız raporla ilgili tasarımı içermektedir.
// tasarım dosyasını yükle
JasperDesign jasperDesign = JRXmlLoader.load(jasper.jrxml);
// tasarımı derle
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
// rapora verileri yükle
JasperPrint print = JasperFillManager.fillReport(jasperReport, parameters);
// pdf çıktısını hazırla
JRExporter exporter = new net.sf.jasperreports.engine.export.JRPdfExporter();
// cikti dosyasının adını seç
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, cikti.pdf);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
// pdf dosyasını oluştur
exporter.exportReport();
Oluşturulan pdf dosyasına baktığınızda grafiğinizi göreceksiniz. Aşağıda jrxml dosyasının içeriği verilmiştir. Parametre tanımlarına dikkat ediniz.
<?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=StreamingDurationperChannels language=groovy pageWidth=1220″ pageHeight=1200″ orientation=Landscape columnWidth=834″ leftMargin=20″ rightMargin=20″ topMargin=20″ bottomMargin=20″>
<style name=Crosstab Data Text isDefault=false hAlign=Center/>
<parameter name=myChart isForPrompting=false/>
<parameter name=bigHeader isForPrompting=false/>
<background>
<band splitType=Stretch/>
</background>
<pageHeader>
<band height=418″ splitType=Stretch>
<textField>
<reportElement x=0″ y=0″ width=1748″ height=30″/>
<textElement>
<font size=16″/>
</textElement>
<textFieldExpression><![CDATA[$P{bigHeader}]]></textFieldExpression>
</textField>
<image scaleImage=RetainShape hAlign=Center vAlign=Middle isUsingCache=false>
<reportElement key=element-41″ mode=Opaque x=0″ y=58″ width=1214″ height=360″ forecolor=#000000″ backcolor=#FFFFFF/>
<graphicElement fill=Solid>
<pen lineWidth=0.0″ lineStyle=Solid/>
</graphicElement>
<imageExpression><![CDATA[$P{myChart}]]></imageExpression>
</image>
</band>
</pageHeader>
</jasperReport>
Kaynak
İlk olarak elimizdeki veriyle basit bir XY grafiği çizelim;
// Eğriye gönderilecek veri dizileri birden fazla eğri gönderebilirsiniz
XYSeriesCollection dataset = new XYSeriesCollection();
// eğri için veriler
for(int j = 1; j < 4; j++){
XYSeries xy = new XYSeries(Eğri + j);
for(int i = 0; i < 7; i++){
xy.add(i, j * i);
}
dataset.addSeries(xy);
}
JFreeChart chart = ChartFactory.createXYLineChart(
Eğri Serisi, // başlık
X Değerleri, // x ekseni başlığı
Y Değerleri, // y ekseni başlığı
dataset, // verş
PlotOrientation.VERTICAL,
true,
true,
false);
XYPlot plot = chart.getXYPlot();
SymbolAxis domainAxis = new SymbolAxis(Gunler, dates);
plot.setDomainAxis(domainAxis);
chart.setBackgroundPaint(Color.white);
plot.setOutlinePaint(Color.black);
Oluşturduğumuz grafikle ilgili veriler chart nesnesinde tutulmaktadır. Şimdi ise JasperReportsa göndereceğimiz HashMapi oluşturalım.
HashMap parameters = new HashMap();
// 1200 x 360 ebatında grafiği çizdir
parameters.put(myChart, chart.createBufferedImage(1200, 360));
parameters.put(bigHeader, Grafik Denemesi);
Bu şekilde grafiğimizi çizip kaydetmiş olduk. Şimdi ise jasper.jrxml dosyasını çağırıp derleme yapan kodu yazalım. jrxml dosyası oluşturacağınız raporla ilgili tasarımı içermektedir.
// tasarım dosyasını yükle
JasperDesign jasperDesign = JRXmlLoader.load(jasper.jrxml);
// tasarımı derle
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
// rapora verileri yükle
JasperPrint print = JasperFillManager.fillReport(jasperReport, parameters);
// pdf çıktısını hazırla
JRExporter exporter = new net.sf.jasperreports.engine.export.JRPdfExporter();
// cikti dosyasının adını seç
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, cikti.pdf);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
// pdf dosyasını oluştur
exporter.exportReport();
Oluşturulan pdf dosyasına baktığınızda grafiğinizi göreceksiniz. Aşağıda jrxml dosyasının içeriği verilmiştir. Parametre tanımlarına dikkat ediniz.
<?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=StreamingDurationperChannels language=groovy pageWidth=1220″ pageHeight=1200″ orientation=Landscape columnWidth=834″ leftMargin=20″ rightMargin=20″ topMargin=20″ bottomMargin=20″>
<style name=Crosstab Data Text isDefault=false hAlign=Center/>
<parameter name=myChart isForPrompting=false/>
<parameter name=bigHeader isForPrompting=false/>
<background>
<band splitType=Stretch/>
</background>
<pageHeader>
<band height=418″ splitType=Stretch>
<textField>
<reportElement x=0″ y=0″ width=1748″ height=30″/>
<textElement>
<font size=16″/>
</textElement>
<textFieldExpression><![CDATA[$P{bigHeader}]]></textFieldExpression>
</textField>
<image scaleImage=RetainShape hAlign=Center vAlign=Middle isUsingCache=false>
<reportElement key=element-41″ mode=Opaque x=0″ y=58″ width=1214″ height=360″ forecolor=#000000″ backcolor=#FFFFFF/>
<graphicElement fill=Solid>
<pen lineWidth=0.0″ lineStyle=Solid/>
</graphicElement>
<imageExpression><![CDATA[$P{myChart}]]></imageExpression>
</image>
</band>
</pageHeader>
</jasperReport>
Kaynak