四、建立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內容。
選擇Report Datasources這個按鈕,來建立DataSource來源。
選擇New按鈕
選擇一個類型來檔DataSource,這裡選擇JRDataSourceProvider,這個範例其實選擇JavaBeans set Datasource也是可以的。
給於DataSource一個名稱,並告知class的package及名稱。
選擇Test按鈕,設定沒問題時會有視窗告知Connection test successful!
再來選擇Save把設定完成。