หน้าเว็บ

วันพุธที่ 24 เมษายน พ.ศ. 2556

inject jasper report pdf viewer into java application (step by step)

ที่ Netbeans IDE
1. สร้าง maven project





2. ที่ pom.xml ให้เพิ่ม dependencies (librarys) ที่จำเป็นต้องใช้ลงไป  ดังต่อไปนี้
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.blogspot.na5cent</groupId>
    <artifactId>jasper-viewer</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>jasper-viewer</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    
    
        <!-- jasper viewer -->
        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>5.0.1</version>
            <type>jar</type>
        </dependency>
    
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derbyclient</artifactId>
            <version>10.1.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>1.8.5</version>
        </dependency>
        <!-- jasper viewer -->


    </dependencies>
</project>
3. คลิ๊กขวาที่ project --> clean and build เพื่อ download dependencies



4. เขียน code
 คลิ๊กขวาที่ project แล้ว New Java Class ขึ้นมา


ตั้งชื่อ class
ซึ่ง class ตัวนี้จะเป็น utility สำหรับ set up swing viewer ครับ

JasperViewer.java
package com.blogspot.na5cent.jasper.viewer;

import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JRSaveContributor;
import net.sf.jasperreports.view.save.JRPdfSaveContributor;

/**
 *
 * @author redcrow
 */
public class JasperViewer extends net.sf.jasperreports.view.JasperViewer {

    public JasperViewer(JasperPrint jasperPrint, String title) {
        super(jasperPrint, false);
        setTitle(title);
        JRSaveContributor[] contrib = viewer.getSaveContributors();
        for (JRSaveContributor ct : contrib) {
            if (!(ct instanceof JRPdfSaveContributor)) {
                viewer.removeSaveContributor(ct);
            }
        }

    }
}

5. สร้าง Class ReportUtils
เพื่อเอาไว้ set up report และเรียกใช้งาน JasperViewer



ReportUtils.java
package com.blogspot.na5cent.jasper.viewer;

import java.io.InputStream;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanArrayDataSource;

/**
 *
 * @author redcrow
 */
public class ReportUtils {

    public static void viewReport(Object[] models, InputStream inputStream, Map params, String title) throws JRException {
        JRBeanArrayDataSource beans = new JRBeanArrayDataSource(models);
        JasperPrint jasperPrint = JasperFillManager.fillReport(inputStream, params, beans);
        JasperViewer viewer = new JasperViewer(jasperPrint, title);
        viewer.setVisible(true);
        viewer.setFitPageZoomRatio();
    }
}
6. สร้าง report ทดสอบ
ไปที่โปรแกรม iReport (หรืออาจจะใช้ ireport ที่เป็น plugin ของ netbeans ก็ได้น่ะครับ)






7. ลองเพิ่ม parameter และ field ของ report ดู


เปลี่ยนชื่อ parameter



ลองสร้าง parameter หลายๆ  ตัวดูครับ


จากนั้นเพิ่ม field (สำหรับคนที่ไม่รู้ว่า field คืออะไร  เดี๋ยวหลังๆ  จะอธิบายให้ฟังครับ)




นี่คือ parameter และ field ทั้งหมด  ที่เราเพิ่มลงไปครับ


เราจะสังเกตเห็นว่า มี field ตัวนึงที่มี type เป็น date ชื่อ birthDate  ซึ่งเราจะต้องเปลี่ยน type มันใหม่ให้เป็น date ครับ ดังนี้


8. ลาก parameter และ field ไปวางใน report


band ไหนที่ไม่จำเป็น  ก็ลบออกไปได้น่ะครับ (ด้วยการคลิ๊กขวา delete band) ซึ่งในที่นี้ผม  เอาไว้เฉาะ detail band ครับ

10. Preview เลือกเป็น PDF Preview


11. Compile report  ด้วยการคลิกที่ปุ่ม Preview


12. ผลลัพธ์ออกมาเป็น pdf


13. นำ report ที่สร้าง  มาไว้ใน class path ของ project   jasper-viewer
ที่ต้องใช้จริงๆคือ file .jasper ครับ
ส่วน .jrxml  เอามาเผื่อไว้สำหรับแก้ไขงานครับ


14. สร้าง class User  ที่มี field เป็น  String fname, String lname, Date birthDate
ซึ่ง field นี้เป็น field ที่ตรงกับ field ของ report ครับ (ตัวเล็กตัวใหญ่ต้องตรงกันหมดทุกอย่าง)  ใน report มีกี่ field เราต้องสร้างให้ครบครับ



User.java
package com.blogspot.na5cent.jasper.viewer;

import java.util.Date;

/**
 *
 * @author redcrow
 */
public class User {

    private String fname;
    private String lname;
    private Date birthDate;

    public String getFname() {
        return fname;
    }

    public void setFname(String fname) {
        this.fname = fname;
    }

    public String getLname() {
        return lname;
    }

    public void setLname(String lname) {
        this.lname = lname;
    }

    public Date getBirthDate() {
        return birthDate;
    }

    public void setBirthDate(Date birthDate) {
        this.birthDate = birthDate;
    }
}
15. เรียกใช้งาน
App.java
package com.blogspot.na5cent.jasper.viewer;

import java.io.InputStream;
import java.sql.SQLException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.sf.jasperreports.engine.JRException;

/**
 * redcrow
 *
 */
public class App {

    private static final Logger LOG = Logger.getLogger(App.class.getName());
    private static final String REPORT_FILE = "viewerReport.jasper"; //เรียกใช้ file .jasper

    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        //อ้างถึง resource ของ project จาก class path
        InputStream inputStream = null;
        try {
            inputStream = App.class.getClassLoader().getResourceAsStream(REPORT_FILE);

            //set up field
            User user = new User();
            user.setFname("redcrow");
            user.setLname("na5cent");
            user.setBirthDate(new Date());

            //ส่งค่า parameter ผ่าน map
            Map<String, Object> params = new HashMap<String, Object>();
            params.put("title", "inject jasper report pdf viewer into java application (step by step)");
            params.put("content", "hello world");

            //เรียกใช้งาน ReportUtils
            ReportUtils.viewReport(new Object[]{user}, inputStream, params, "test report viewer");
        } catch (RuntimeException ex) {
            LOG.log(Level.SEVERE, null, ex);
        } catch (JRException ex) {
            LOG.log(Level.SEVERE, null, ex);
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException ex) {
                    LOG.log(Level.SEVERE, null, ex);
                }
            }
        } 
    }
}

16. run file
คลิ๊กขวาที่ App.java --> run file




หวังว่าคงมีประโยชน์น่ะครับ ^__^

1 ความคิดเห็น: