iT邦幫忙

1

使用iReport+JasperReport產生PDF及Excel報表(1)

前言

今天主要介紹如何運用iReport產生的報表template,我們的目標是在Servlet上簡單的運用JDBC連接DB,查詢我們事先建置好的Person Table,表格內紀錄ID、Name、Age、Phone、Email、Birthday這六個欄位,並在前端JSP有DatePicker可以選擇查詢某生日區間的Person資料,並產生PDF或Excel報表。


環境介紹

開發電腦:MAC
開發工具:Eclipse
開發環境:Java 1.7
工具軟體:iReport v5.6.0


下載與安裝

Step 1.首先我們先去JasperReport官網下載iReport並安裝到MAC上,我們選擇的版本是v5.6.0
https://ithelp.ithome.com.tw/upload/images/20190325/20114725WusPBnfSjo.png

Step 2.安裝完成後,如果有MAC使用者有打不開的情況,我們需要到iReport的config檔裡面去修改jdkhome的設定,把jdkhome的註解打開,並填入自己jdk1.7的路徑
路徑:/Applications/Jaspersoft iReport Designer.app/Contents/Resources/ireport/etc/ireport.conf)
https://ithelp.ithome.com.tw/upload/images/20190325/20114725HVHti9bkDD.jpg


製作報表template

Step1.接著我們便可以開始用iReport製作報表的template
首先我們先將調色盤的Static Text拖曳到報表上,為報表新增標題
https://ithelp.ithome.com.tw/upload/images/20190325/20114725gxIRLvc3aj.jpg

Step 2.接著我們要為報表設定dataSource對應的attribute,所以我們在Eclipse中新增一個Dynamic Web Project,並將此專案設定為Java 1.7,如果沒有設為1.7,iReport可能會讀不到編譯出來的class檔,並新增一個Person的VO

package com.example.model;

public class Person {

	private int id;
	
	private String name;
	
	private String age;
	
	private String phone;
	
	private String email;
	
	private String birthday;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getBirthday() {
		return birthday;
	}

	public void setBirthday(String birthday) {
		this.birthday = birthday;
	}
	
}

Step 3.接著我們回到iReport,點選左上角iReport > Preferences,為報表設定classPath,這樣我們等等設定DataSource就可以讀取到我們剛剛新增的Person VO的calss檔
https://ithelp.ithome.com.tw/upload/images/20190325/20114725x7V9HssHNG.jpg

Step 4.點選報表上方這個新增Fields的按鈕,並在classPath的頁籤裡輸入我們剛剛新增Person VO的class檔路徑,按下Read attributes的按鈕後,便可以看到我們Person VO裡的attributes出現在視窗中,接著選取並新增想要在報表中呈現的attributes,再點選OK儲存。
https://ithelp.ithome.com.tw/upload/images/20190325/20114725Qc5C9V8SrB.png

Step 5.就可以看到我們所選取的attributes出現在iReport左邊的Fields中,接著我們就可以開始為報表新增欄位了。
https://ithelp.ithome.com.tw/upload/images/20190325/20114725FJKvsj9R7i.png

Step 6.我們可以直接拖曳Fields裡的attributes到報表中的Detail 1裡,iReport便會自動在Column Header中新增我們的欄位名稱,我們可以對其進行排版及修改,或是點選右鍵在Padding And Borders選項中為欄位設定框線,下圖便是我排版後的樣子。
https://ithelp.ithome.com.tw/upload/images/20190326/201147251nyl0QxwiR.jpg

Step 7.我們再為這個報表加入一個查詢起訖日的欄位,這樣我們就可以清楚的知道這個報表內容的查詢區間是什麼時候。
我們在Parameters點選右鍵加入Parameter,並把這個新增的Parameter Name改為searchDate,並拖曳到報表Page Header的區塊中。
https://ithelp.ithome.com.tw/upload/images/20190326/20114725Txz2DcCHoN.jpg

Step 8.接著我們對報表上的這個$P{searchDate}點選右鍵 > Edit Expression,為這個parameter加入前綴文字。
https://ithelp.ithome.com.tw/upload/images/20190326/20114725ofkx4EcQP1.jpg

Step 9.到目前爲止,我們的報表樣式大概完成了,但因為我們的報表中有中文字,所以還需要在iReport中加入我們想要的字型,不然會發生產出來的報表無法顯示中文字的狀況。因為是Mac的關係,所以我請Windows的朋友傳windows/font底下的kaiu.tff給我,接著我們點選左上角iReport > Preferences,在Fonts頁籤中新增字型。
https://ithelp.ithome.com.tw/upload/images/20190326/20114725NPjdWYT6tH.jpg

Step 10.新增完成後,我們選取剛剛新增的kaiu字型,並點選Export as extension按鈕,這裡會匯出該字型的jar檔,之後我們在做Servlet需要把這個jar檔import進來。
https://ithelp.ithome.com.tw/upload/images/20190326/20114725pIdKYmTGyI.jpg

Step 11.接著還要記得把所有的欄位字型都設定成我們剛剛新增的kaiu。
https://ithelp.ithome.com.tw/upload/images/20190326/20114725gsH0SzGIV8.png

Step 12.最後我們就點選Compile Report的圖示,就可以在同一個路徑下產生JasperReportExample.jasper的檔案,這就是我們剛剛運用iReport產生出來的報表template,在下一篇文章使用iReport+JasperReport產生PDF及Excel報表(2)中將介紹如何運用JasperReport的jar檔在Servlet中產生我們想要的報表。
https://ithelp.ithome.com.tw/upload/images/20190326/20114725sTljlU2rRL.jpg


尚未有邦友留言

立即登入留言