18 Şubat 2010 Perşembe

JasperReports - Parametreden grafik gönderme

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 JasperReports'a göndereceğimiz HashMap'i 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>

Hiç yorum yok:

Yorum Gönder