JasperReports ArrayList üzerinden veri göndermek
Daha önceki yazıda JasperReports kullanarak parametreler üzerinden HashMap yardımıyla veri göndermeyi göstermiştik. Şimdi ise ArrayLit yardımıyla nasıl veri yollayabileceğinizi göstereceğiz. Bunun için öncelikle veriyi saklayacağınız bir sınıf yaratın.
public class Data {
private String value1;
private String value2;
public Data(String value1,String value2){
this.value1 = value1;
this.value2 = value2;
}
public String getValue1() {
return value1;
}
public void setValue1(String value1) {
this.value1 = value1;
}
public String getValue2() {
return value2;
}
public void setValue2(String value2) {
this.value2 = value2;
}
}
Data nesnesinin içinde value1 ve value2 adında iki değişken tutuyoruz. Bunlara atayacağımız değerler oluşturacağımız raporun verisi olacak. Şimdi raporu oluşturacak koda bakalım;
final ArrayList<Data> reportRows = new ArrayList<Data>();
for(int i = 0; i < 10; i++){
reportRows.add(new Data(Integer.toString(i), Integer.toString(i * 2));
}
String jasperFileName = design.jrxml;
String outFile = output;
// veri kaynağını belirtiyoruz
final JRDataSource dataSource = new JRBeanCollectionDataSource(reportRows);
// jrxml dosyamızı belirtiyoruz
final JasperDesign jasperDesign = JRXmlLoader.load(jasperFileName);
final JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
// raporu oluşturuyoruz
JasperPrint print = JasperFillManager.fillReport(jasperReport, params, dataSource);
JRExporter exporter = new net.sf.jasperreports.engine.export.JRPdfExporter();
// pdf çıktısını oluşturuyoruz
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outFile + .pdf);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
exporter.exportReport();
Raporumuzda ise ilk olarak değer tanımlamalarını yapmamız gerekiyor;
<field name=value1″/>
<field name=value2″/>
Daha sonra <detail> bandı içine rapor tasarımımızı oluşturuyoruz. <detail> bandını kullanmamızın sebebi dizi içindeki bütün değerler için bir tablo oluşturulması.
<detail>
<band height=21″ splitType=Stretch>
<textField>
<reportElement x=15″ y=1″ width=84″ height=20″/>
<box>
<pen lineWidth=0.25″/>
<topPen lineWidth=0.25″/>
<leftPen lineWidth=0.25″/>
<bottomPen lineWidth=0.25″/>
<rightPen lineWidth=0.25″/>
</box>
<textElement verticalAlignment=Middle/>
<textFieldExpression><![CDATA[$F{value1}]]></textFieldExpression>
</textField>
<textField>
<reportElement x=99″ y=1″ width=77″ height=20″/>
<box>
<pen lineWidth=0.25″/>
<topPen lineWidth=0.25″/>
<leftPen lineWidth=0.25″/>
<bottomPen lineWidth=0.25″/>
<rightPen lineWidth=0.25″/>
</box>
<textElement textAlignment=Center verticalAlignment=Middle/>
<textFieldExpression><![CDATA[$F{value2}]]></textFieldExpression>
</textField>
</band>
</detail>
Kaynak
Daha önceki yazıda JasperReports kullanarak parametreler üzerinden HashMap yardımıyla veri göndermeyi göstermiştik. Şimdi ise ArrayLit yardımıyla nasıl veri yollayabileceğinizi göstereceğiz. Bunun için öncelikle veriyi saklayacağınız bir sınıf yaratın.
public class Data {
private String value1;
private String value2;
public Data(String value1,String value2){
this.value1 = value1;
this.value2 = value2;
}
public String getValue1() {
return value1;
}
public void setValue1(String value1) {
this.value1 = value1;
}
public String getValue2() {
return value2;
}
public void setValue2(String value2) {
this.value2 = value2;
}
}
Data nesnesinin içinde value1 ve value2 adında iki değişken tutuyoruz. Bunlara atayacağımız değerler oluşturacağımız raporun verisi olacak. Şimdi raporu oluşturacak koda bakalım;
final ArrayList<Data> reportRows = new ArrayList<Data>();
for(int i = 0; i < 10; i++){
reportRows.add(new Data(Integer.toString(i), Integer.toString(i * 2));
}
String jasperFileName = design.jrxml;
String outFile = output;
// veri kaynağını belirtiyoruz
final JRDataSource dataSource = new JRBeanCollectionDataSource(reportRows);
// jrxml dosyamızı belirtiyoruz
final JasperDesign jasperDesign = JRXmlLoader.load(jasperFileName);
final JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
// raporu oluşturuyoruz
JasperPrint print = JasperFillManager.fillReport(jasperReport, params, dataSource);
JRExporter exporter = new net.sf.jasperreports.engine.export.JRPdfExporter();
// pdf çıktısını oluşturuyoruz
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outFile + .pdf);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
exporter.exportReport();
Raporumuzda ise ilk olarak değer tanımlamalarını yapmamız gerekiyor;
<field name=value1″/>
<field name=value2″/>
Daha sonra <detail> bandı içine rapor tasarımımızı oluşturuyoruz. <detail> bandını kullanmamızın sebebi dizi içindeki bütün değerler için bir tablo oluşturulması.
<detail>
<band height=21″ splitType=Stretch>
<textField>
<reportElement x=15″ y=1″ width=84″ height=20″/>
<box>
<pen lineWidth=0.25″/>
<topPen lineWidth=0.25″/>
<leftPen lineWidth=0.25″/>
<bottomPen lineWidth=0.25″/>
<rightPen lineWidth=0.25″/>
</box>
<textElement verticalAlignment=Middle/>
<textFieldExpression><![CDATA[$F{value1}]]></textFieldExpression>
</textField>
<textField>
<reportElement x=99″ y=1″ width=77″ height=20″/>
<box>
<pen lineWidth=0.25″/>
<topPen lineWidth=0.25″/>
<leftPen lineWidth=0.25″/>
<bottomPen lineWidth=0.25″/>
<rightPen lineWidth=0.25″/>
</box>
<textElement textAlignment=Center verticalAlignment=Middle/>
<textFieldExpression><![CDATA[$F{value2}]]></textFieldExpression>
</textField>
</band>
</detail>
Kaynak