Google
 


การรวมรายงาน

ในบางครั้งเราอาจมีความต้องการรวมรายงานหลายตัวเข้าด้วยกัน เพื่อแสดงในรายงานเดียวกัน เราก็สามารถทำได้ แต่เนื่องจากปัจจุบัน JasperPrint ยังไม่รองรับการรวมรายงานที่มี Layout แตกต่างกัน เช่น รูปแบบ Portrait หรือ Landscape เป็นต้น ดังนั้นถ้าเราใช้ JasperViewer เป็นตัวดูรายงาน ก็จะสามารถรวมรายงานได้ เมื่อมี Layout เหมือนกันเท่านั้น มิฉะนั้นตัวรายงานจะใช้ Layout ของรายงานตัวแรกเป็นตัวแสดงผลแทน ในที่นี้สมมติว่าเรามีรายงานที่ compile จาก iReport แล้วชื่อ report1.jasper และ report2.jasper โดยเราจะนำ report2 มาต่อท้ายจาก report1 เราสามารถเขียนโปรแกรมได้ดังนี้


            JasperPrint jp = JasperFillManager.fillReport("report1.jasper",pm, bmod.getCon());
            JasperPrint jp1 = JasperFillManager.fillReport("report2.jasper",pm, bmod.getCon());
            
            ArrayList list = (ArrayList) jp1.getPages();
            for (int i = 0; i < list.size(); i++) {
                jp.addPage((JRPrintPage) list.get(i));
            }
            
            JasperViewer.viewReport(jp,false);

เนื่องจาก JasperPrint ยังไม่รองรับหลาย Layout ภายในตัวมันเอง ดังนั้นถ้าเราต้องการรวมรายงาน ที่มีหลาย Layout ก็สามารถทำได้ โดยการรวมแบบ Batch ซึ่งจะต้องแปลงรายงานให้เป็น PDF แล้ว จึงนำรายงานมารวมกันได้ดังนี้


            JasperPrint jp = JasperFillManager.fillReport("report1.jasper", null , con);
            
            JasperPrint jp1 = JasperFillManager.fillReport("report2.jasper", null, con);
            JRPdfExporter exp = new JRPdfExporter();
            List list = new ArrayList();
            list.add( jp );
            list.add( jp1 );
            
            exp.setParameter(JRExporterParameter.JASPER_PRINT_LIST, list);
            exp.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "test.pdf");
            exp.exportReport();

ซึ่งโค้ดข้างต้นเป็นการรวมรายงาน แล้วบันทึกเป็น PDF File ชื่อ test.pdf โดยรายงานสามารถมีได้หลาย Layout ภายในตัวรายงานเอง และโค้ดนี้เป็นการทำงานบน Desktop Application นะครับ
หวังว่าบทความนี้คงจะมีประโยชน์แก่ท่านบ้างไม่มากก็น้อย