[信封袋套印]使用Bean DataSource製作report報表

四、建立Provider

這個項目不一定要建立,可以pass,在此範例會用到,可是也可以不使用,主要功能在顯示欄位的資訊,也可以拿來當取用DataSource的提供者。

package com.izero.print.provider;


    import net.sf.jasperreports.engine.JRDataSource;
    import net.sf.jasperreports.engine.JRDataSourceProvider;
    import net.sf.jasperreports.engine.JRException;
    import net.sf.jasperreports.engine.JRField;
    import net.sf.jasperreports.engine.JasperReport;

    public class AddressProvider implements JRDataSourceProvider {

        @Override
        public JRDataSource create(JasperReport arg0) throws JRException {
            com.izero.print.datasource.AddressSource ds = null;

            ds = new com.izero.print.datasource.AddressSource();

            return ds;
            //return null;
        }

        @Override
        public void dispose(JRDataSource arg0) throws JRException {
            // TODO Auto-generated method stub

        }

        @Override
        public JRField[] getFields(JasperReport arg0) throws JRException,
                UnsupportedOperationException {
            JRField[] fields = new JRField[2];
            fields[0] = new JRBasicField("名稱", "name", java.lang.String.class, "java.lang.String");
            fields[1] = new JRBasicField("郵遞區號", "post", java.lang.String.class, "java.lang.String");
            fields[2] = new JRBasicField("地址", "address", java.lang.String.class, "java.lang.String");
                    
                    
            return fields;
        }

        @Override
        public boolean supportsGetFieldsOperation() {
            // TODO Auto-generated method stub
            return false;
        }

    
}

JRBasicField

package com.izero.print.provider;

import net.sf.jasperreports.engine.JRPropertiesHolder;
import net.sf.jasperreports.engine.JRPropertiesMap;

public class JRBasicField extends
        net.sf.jasperreports.engine.design.JRDesignField {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private String description;
    private String name;
    private Class valueClass;
    private String valueClassName;

    public JRBasicField(String description, String name, Class valueClass,
            String valueClassName) {
        super();
        this.description = description;
        this.name = name;
        this.valueClass = valueClass;
        this.valueClassName = valueClassName;
    }

    public String getDescription() {
        return description;
    }

    public String getName() {
        return name;
    }

    public Class getValueClass() {
        return valueClass;
    }

    public String getValueClassName() {
        return valueClassName;
    }

    public void setDescription(String desc) {
        description = desc;
    }

    @Override
    public JRPropertiesHolder getParentProperties() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public JRPropertiesMap getPropertiesMap() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public boolean hasProperties() {
        // TODO Auto-generated method stub
        return false;
    }

}

五、開啟iReport,建立DataSource來源(Provider)

在MenuBar上選擇工具(T)->選項(O),在iReport這個tab裡找到Classpath這個分頁加入Add Folder來增加前四個步驟的的Class路徑,也可以先把程式export出jar檔,然後利用Add JAR來增加JAR,如此才可以在之後的步驟裡取得class內容。

01.jpg

選擇Report Datasources這個按鈕,來建立DataSource來源。

02.jpg

選擇New按鈕

03.jpg

選擇一個類型來檔DataSource,這裡選擇JRDataSourceProvider,這個範例其實選擇JavaBeans set Datasource也是可以的。

23.jpg

給於DataSource一個名稱,並告知class的package及名稱。

04.jpg

選擇Test按鈕,設定沒問題時會有視窗告知Connection test successful!

05.jpg

再來選擇Save把設定完成。

發表迴響