Showing posts with label JasperReports. Show all posts
Showing posts with label JasperReports. Show all posts

Sunday, March 19, 2017

Jasper Report - Table from List Java


Pada kesempatan yang lalu saya pernah membahas mengenai penggunaan jasper pada java yang dapat dibaca di sini. Disana saya sudah menjelaskan mengenai bagian- bagian yang terdapat pada jasper. Serta bagaimana penggunaanya pada java

Pada kesempatan beberapa waktu saya berkesempatan bermain kembali dengan jasper dan masih menggunakan java untuk penggunaannya. Pada kesempatan kali ini saya akan memberikan contoh penggunaan jasper menggunakan table dengan javabean datasource.

Table tentunya merupakan bagian yang sering ada pada report. Jasper tentunya juga support dengan fitur ini. Penggunaan table pada jasper sebenarnya sangat mudah apabila menggunakan datasource karena sudah ada wizard untuk hal tersebut. Maka dari itu saya tidak akan membahas penggunaan table pada jasper menggunakan datasource melainkan menggunakan java.

Apabila sebelumnya dengan mengirim list sebagai JRDataSource dan langsung dapat digunakan pada detail band. Untuk menggunakan list pada table data dalam bentuk JRDataSource perlu dikirim sebagai bagian dari param.

Mari kita siapkan template reportnya.
    • Buat parameter pada report dengan nama ObjectDataSource dan Class : net.sf.jasperreports.engine.data.JRBeanCollectionDataSource





    • Membuat sebuah datasource yang akan digunakan pada table ( bisa langsung ketika config tablenya juga )

    •  Ambil table dari pallet dan menjalankan wizardnya seperti berikut




    • Membuat field pada datasource yang digunakan untuk table tersebut sesuai dengan object java kita.



    • Tata dalam table.



    • Setelah selesai saya membersihkan band yang ada pada report dan hanya menyisakan band title dan detail saja. Berikut struktut akhir dari template yang digunakan


    Berikut adalah cara pemanggilan reportnya untuk pembuatan report dalam format pdf dari java.

    
    
        List<SimpleReportVO> detail = new ArrayList<>();    
        SimpleReportVO data1 = new SimpleReportVO();    
        data1.setName("Roti Tawar");    
        data1.setPrice(1000);
    
        detail.add(data1);
    String dest = "D://report/report.pdf"; String template = "D://report-template.jasper"; try{ JRDataSource ds = new JRBeanCollectionDataSource(detail); HashMap params = new HashMap();
            params.put("ObjectDataSource", ds);        
            JasperPrint jp  = JasperFillManager.fillReport(template ,
                    params, new JREmptyDataSource());
            JasperExportManager.exportReportToPdfFile(jp, dest);
        }catch (Exception e){
            logger.info(e.getMessage());    
        }

    Object Java : 
    import lombok.Data;
    
    
    @Data
    public class SimpleReportVO {
        private String name;
        private int price;}

    Hasil darinya seperti berikut :



    Demikian cara penggunaan table pada jasper report dari list java. Semoga berguna..
    Sampai bertemu di kesempatan berikutnya.
    Happy Coding :)


    Wednesday, December 17, 2014

    Jasper Template with iReport

    Pada kesempatan kali ini saya akan membahas sedikit mengenai Jasper. JasperReports merupakan salah satu reporting tools yang dapat di gunakan untuk membantu kegiatan pembuatan report. Dalam pembuatan sistem sering kali kita membutuhkan pembuatan report.

    JasperReports template itu sendiri merupakan sebuah XML file yang disebut JRXML. Untuk mempermudah pembuatan JRXML file kita dapat menggunakan beberapa bantuan tools 3rd party seperti iReport, DynamicReport dan berbagai macam tools lainnya.

    Pada kesempatan kali ini kita akan bermain-main dengan iReport. Saya Menggunakan iReport 5.6.0 untuk membantu dalam pembuatan JRXML file. iReport merupakan tools yang memiliki UI designer, sehingga lebih mudah dalam pembuatannya bagi yang tidak terbiasa membuat berbaris-baris tag xml.

    iReport dapat menggunakan banyak tipe datasource seperti misalnya database, xml file maupun JSON. Pada kesempatan kali ini kita akan menggunakan empty datasource. Langsung saja kita membuat new file pada iReport File-> New... -> Blank A4 -> Open this template, beri nama file TestReport.jrxml.


    Setelah membuat JRXML baru akan muncul tempate awal seperti gambar d bawah. 


    Pada pembuatan report, pada report properties default language yang digunakan sebagai expressionnya adalah Groovy. Kita akan menggunakan java sehingga Language dapat kita ganti menjadi java.

    Sebelum kita memulai pembuatan report mari sedikit membahas mengenai tampilan yang ada. Pada awal pembuatan report akan terbagi menjadi 7 bagian yang biasa di sebut band.

    7 Band pada iReport designer UI : 
    1. Title 
      • Band ini hanya akan muncul satu kali dalam sebuah laporan, yaitu padahal bagian paling atas pada halaman pertama.
    2. Page Header
      • Band ini akan muncul di setiap halaman, berposisi di bagian header setiap halaman atau pada bawah titile band pada halaman pertama.
    3. Column Header
      • Band ini juga akan muncul pada setiap halaman seperti halnya page Header, band ini lebih bertujuan untuk tempat header column yang mungkin akan muncul pada detail band.
    4. Detail
      • Pada template tertulis detail 1 karena band ini dapat ditambahkan lebih dari 1 dalam setiap halamannya. Detail band merupakan tempat untuk menaruh datasource karena memiliki karakteristik akan berulang sebanyak data tersebut. 
    5. Column Footer
      • Column Header akan berada d bawah detail band apabila data pada detail band sudah ditampilkan seluruhnya. Column header akan muncul di setiap halaman.
    6. Page Footer
      • Band ini juga akan muncul di setiap halaman laporan,seperti halnya Page Header, Column Header, maupun Column Footer. Band ini akan muncul di bawah Coulm Footer di setiap halamannya.
    7. Summary
      •  Band ini mirip seperti Title, hanya akan muncul 1x dalam sebuah laporan tetapi d halaman paling akhir sebuah laporan. Tetapi jangan terkecoh dengan design ui yang memperlihatkan dia berada di bagian paling bawah sebuah laporan. Band ini akan berposisi setelah detail atau di atas column Footer.
    Setelah membahas mengenai band yang ada dalam JRXML file mari kita menengok di sebelah kiri   terdapat Report inspektor. kita akan membahas mengenai perbedaan parameter, field dan variable  yang terdapat disana untuk membantu kita menentukan pembuatan "variable" yang kita perlukan.

    1. Parameter
      • Parameter merupakan tempat mendekarasikan data yang memiliki key dan data seperti hashmap. Jasper menerima parameter yang sudah mereka siapkan maupun bisa kita buat sendiri. biasa parameter digunakan untuk menampilkan data seperti judul, tujuan pengiriman dll
    2. Field
      • Field merupakan tempat mendeklarasikan data yang memiliki banyak value dengan key yang sama. Seperti data dari table atau bisa d asumsikan tempat untuk mendeklarasikan data yang akan kita dpat dari datasource.
    3. Variable
      • Variable sendiri merupakan tipe data yang dapat diolah di dalam template, seperti melakukan calculation penjumlahan(sum), penghitungan(count) dan berbagai macam kegiatan lainnya.
    Tipe Calculation pada Variable

    Setelah mengetahui itu marilah kita mulai membuat contoh sebuah laporan. Mari membuat sebuah parameter bernama Title bertipe data string, 4 buah field , income , outcome dan margin yang bertipe data integer dan month yang bertipe data string. Kemudian kita juga membuat 3 buah variable bertipe integer yaitu totalIncome, totalOutcome dan totalMargin dan mengeset properties, calculation = sum dengan expresion yang akan dijumlahkan sesuai kebutuhan masing-masing.
    Contoh Properties totalIncome





    Kemudian mari kita susun variable,field dan parameter yang sudah kita buat dalam template hingga menjadi seperti gambar di bawah, bisa ditambah label atau image dari pallet yang terletak disebelah kanan template untuk mempercantiknya.



    Setelah selesai membuat JRXML file mari membuat java untuk menggenerate report berdasarkan template tersebut. Saya menggunakan new Spring Backend project untuk menaruh code yang bertugas menggenerate reportnya. Jangan lupa menambahkan dependency pada pom.xml untuk jasper : 

    <dependency>     
            <groupid>net.sf.jasperreports</groupid>
            <artifactid>jasperreports</artifactid>
            <version>5.0.1</version>
    </dependency>

    Taruh TestReport.jrxml di folder resource. Kemudian buat class CashFlow yang akan memiliki variable dengan nama dan tipe data yang sama seperti yang kita deklarasikan ketika membuat field di iReport. 

    package com.springapp.batch;
    public class CashFlow { private String month; private Integer income; private Integer outcome; private Integer margin;
    public String getMonth(){ return month; }
    public void setMonth(String month) { this.month = month; }
    public Integer getIncome() { return income; }
    public void setIncome(Integer income) { this.income = income; }
    public Integer getOutcome() { return outcome; }
    public void setOutcome(Integer outcome) { this.outcome = outcome; }
    public Integer getMargin() { return margin; }
    public void setMargin() { margin = income-outcome; } }



    Setelah itu kita buat class report yang bertugas untuk mengisi data dan menggenerate report.

    package com.springapp.batch;
    import net.sf.jasperreports.engine.*; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; import net.sf.jasperreports.engine.design.JasperDesign; import net.sf.jasperreports.engine.xml.JRXmlLoader; import java.io.File; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List;
    public class Report {
    public void main(){ List<CashFlow> cashFlows = insertData(); try{ String fileName = createDirectory("Laporan_Keuangan_2014"); JRDataSource ds = new JRBeanCollectionDataSource(cashFlows); HashMap params = new HashMap(); params.put("Title","Laporan keuangan"); InputStream reportStream = this.getClass().getResourceAsStream("/TestReport.jrxml"); JasperDesign jd = JRXmlLoader.load(reportStream); JasperReport jr = JasperCompileManager.compileReport(jd); JasperPrint jp = JasperFillManager.fillReport(jr, params, ds); JasperExportManager.exportReportToPdfFile(jp, fileName); }catch (Exception e){ } }
    private String createDirectory(String reportName){ String directory = "/Users/rennytanuwijaya/nostra/Test/"; File f=new File(directory); if(!f.exists()){ new File(directory).mkdirs(); } String fileName = directory+"/"+reportName+".pdf"; return fileName; }
    private List<CashFlow> insertData(){ List<CashFlow> cashFlows = new ArrayList<CashFlow>(); CashFlow cashFlow1 = new CashFlow(); cashFlow1.setMonth("Januari"); cashFlow1.setIncome(10000000); cashFlow1.setOutcome(9800000); cashFlow1.setMargin(); cashFlows.add(cashFlow1); CashFlow cashFlow2 = new CashFlow(); cashFlow2.setMonth("Februari"); cashFlow2.setIncome(10000000); cashFlow2.setOutcome(9800000); cashFlow2.setMargin(); cashFlows.add(cashFlow2); CashFlow cashFlow3 = new CashFlow(); cashFlow3.setMonth("Maret"); cashFlow3.setIncome(10000000); cashFlow3.setOutcome(9800000); cashFlow3.setMargin(); cashFlows.add(cashFlow3); return cashFlows; } }

    Kemudian kita jalankan method main untuk mengisi data dan menggenerate report tersebut.
    Berikut adalah hasil dari report yang dihasilkan : 




    Demikian saja perkenalan singkat dengan membuat template report menggunakan iReport.
    Selamat mencoba..