使用JAVA要套印報表可以免費的
JasperReport
這個Framework,可以使用GUI的
iReport
來layout報表內容,最簡單的方法就是建立一個DB-Connection,然後利用SQL語法來查詢需要的資料,建立報表。JasperRepor可以輸出的格式有pdf、html、Excel、Word或是Swing的GUI畫面,再選擇列印輸出至印表機。
這個範例因為不需要使用到Database,所以需要使用Java-Bean來製作DataSource,雖然使用DB-Connection十分方便也很簡單就可以製作報表,可是使用Bean的DataSource靈活性比較高,不過相對的也比較不好設定。
套印信封,需要先準備一個信封,並把信封的長與寬量出來,轉換成pixel。
一、建立Java Bean
先把需要在報表裡顯示的欄位製作成一個Bean元件(地址、郵遞區號、姓名)
package com.izero.print.beans;
public class Address {
private String name;
private String post;
private String address;
public Address()
super();
this.name = "";
this.post="";
this.address="";
public Address(String name, String post, String address) {
super();
this.name = name;
this.post = post;
this.address = address;
public String getName() {
return name;
public void setName(String name) {
this.name = name;
public String getPost() {
return post;
public void setPost(String post) {
this.post = post;
public String getAddress() {
return address;
public void setAddress(String address) {
this.address = address;
二、建立一個BeanList
BeanList是用來存放Bean列表的,每一個Bean都是一個信箱套,那很多信封套就很多的Bean集合(ArrayList<Bean>),所以建立一個BeanList來當做資料來源操作。
package com.izero.print.beansList;
public class AddressList {
public java.util.ArrayList<com.izero.print.beans.Address> addr;
public AddressList() {
addr = new java.util.ArrayList<com.izero.print.beans.Address>();
public void addBean(com.izero.print.beans.Address add) {
addr.add(add);
public java.util.ArrayList<com.izero.print.beans.Address> getBeans() {
if (this.addr.size() == 0) {
addBean(new com.izero.print.beans.Address());
// return null;
return this.addr;
三、建立DataSource來與報表溝通
DataSource主要的功用是與報表溝通,當報表需要下一筆資料時會跟DataSource要資料,next()會自動增加beanList的index指標位置,如果已經沒有資料就會回報false無資料,當回報true時,會使用getFieldValue(JRField arg0)來取得相關欄位的資料內容。
package com.izero.print.datasource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;
public class AddressSource implements net.sf.jasperreports.engine.JRDataSource {
private java.util.ArrayList<com.izero.print.beans.Address> list;
private int index;
private com.izero.print.beans.Address bean;
public AddressSource() {
com.izero.print.beansList.AddressList addrlist =
new com.izero.print.beansList.AddressList();
this.list = addrlist.getBeans();
this.index = -1;
public void add(com.izero.print.beans.Address addr) {
this.list.add(addr);
public AddressSource(com.izero.print.beansList.AddressList addrlist) {
this.list = addrlist.getBeans();
this.index = -1;
@Override
public Object getFieldValue(JRField arg0) throws JRException {
String FieldName = arg0.getName();
if (FieldName.equals("name")) {
return bean.getName();
} else if (FieldName.equals("post")) {
return bean.getPost();
} else if (FieldName.equals("address")) {
return bean.getAddress();
return null;
@Override
public boolean next() throws JRException {
index++;
boolean f = true;
if (list == null || index >= list.size())
f = false;
bean = list.get(index);
return f;
bean datasource ireport jasperreport Java