最近工作中用到報(bào)表,而我在學(xué)習(xí)JasperReport的過程中遇到了很多問題(主要是國(guó)內(nèi)的資料太少了),網(wǎng)上很少找得到,在此我就把我找到的一些資料和大家共享,希望能對(duì)大家有所幫助。
1、JasperReport和iReport的資源,最新版本可以到下面官方網(wǎng)站得到
iReport官方網(wǎng)站:
http://ireport.sourceforge.net
JasperReport官方網(wǎng)站:
http://jasperreports.sourceforge.net
2、安裝
1)、JDK的安裝,并配置JAVA_HOME
比如我的JAVA_HOME路徑如下:
JAVA_HOME D:\Program Files\j2sdk1.4.2_03
2)、由于中文的問題,所以還需要下載:itext-1.02b.jar和iTextAsian.jar包
下載地址:http://itext.sourceforge.net/downloads/iTextAsian.jar
并在CLASSPATH中設(shè)置
例如我的CLASSPATH如下:
CLASSPATH
E:\Program Files\Apache GroupTomcat4.1\webapps \estreport\WEB-INF\lib\itext-1.02b.jar;E:\Program
Files\Apache GroupTomcat 4.1\webapps\ estreport\WEB-INF\lib\iTextAsian.jar;E:\Program Files\Apache
GroupTomcat 4.1\webapps \estreport\WEB-INF\lib;D: \ools\iReport0.2.3\lib
3)、iReport的安裝iReport只要解壓就OK,如果沒有安裝Ant,可以直接在iReport下的noAnt目錄下,
運(yùn)行startup.bat就可以了,這樣iReport就可以啟動(dòng)了
4)、JasperReport
Jasperreport不需要任何配置,你只需將下載以后的jar包放到classpath下即可
5)、數(shù)據(jù)庫(kù)的JDBC驅(qū)動(dòng)包
加入到CLASSPATH中
3、詳細(xì)資源
iReport官方提供了一些關(guān)于iReport視頻,對(duì)于初學(xué)者很有幫助:
地址:http://ireport.sourceforge.net/docs.html
JasperReport官方提供的使用指南
地址:http://jasperreports.sourceforge.net/tutorial/index.html
JasperReport提供的一些例子:
地址:http://jasperreports.sourceforge.net/samples/index.html
4、常見問題
1)、iReport中提示框輸入中文是不能正常顯示,請(qǐng)將iReport下lib中的這個(gè)包刪除tinylaf.jar
2)、在iReport中運(yùn)行報(bào)表時(shí)如果出現(xiàn)亂碼問題,請(qǐng)檢查itext-1.02b.jar和iTextAsian.jar這兩個(gè)包是否加到CLASSPATH
3)、在jsp或servlet高度報(bào)表時(shí)出現(xiàn)亂碼或不顯示,請(qǐng)檢查你在報(bào)表設(shè)計(jì)過程中所設(shè)置的字體及其編碼
比如:pdfname、pdfencoding
5、下面是兩個(gè)調(diào)試?yán)?
Servlet:
import javax.servlet.*;
import javax.servlet.http.*;
import dori.jasper.engine.*;
import java.io.*;
import java.util.*;
import java.sql.*;
/**
* @author Administrator
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class TestReport extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Connection conn = null;
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
conn =
DriverManager.getConnection(
"jdbc:microsoft:sqlserver://192.168.0.10:1433;DatabaseName=am;user=sa;password=sa");
ServletContext servletContext =this.getServletContext();
File reportFile = new File(servletContext.getRealPath("test/iteminfo.jasper"));
Map parameters = new HashMap();
Integer i=new Integer(8);
parameters.put("pjId", i);
byte[] bytes =
JasperRunManager.runReportToPdf(
reportFile.getPath(),
parameters,
conn);
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
} catch (JRException jre) {
System.out.println("JRException:" + jre.getMessage());
} catch (Exception e) {
System.out.println("Exception:" + e.getMessage());
}
}
public void doPost(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
?
1 首先看看
http://plateau.sicool.com/main.html
上的三篇ireport和Jasperreport整合開發(fā)報(bào)表向?qū)Вㄒ唬ǘㄈ?br />看完理解并自己運(yùn)行一下,OK,你入門了
2 去找一份TheJasperReportsUltimateGuide.1.0.pdf
看完之后你就能了解JasperReport生成的基本過程及原理,里面也回答了很多
剛接觸這個(gè)報(bào)表工具會(huì)產(chǎn)生的疑問
3 論壇上的經(jīng)驗(yàn)
Java研究的論壇上有很多關(guān)于JasperReport及iReport的經(jīng)驗(yàn)及問題解答,所以
大家在提問的時(shí)候不妨多翻翻論壇上的帖子,很多你要問的問題都能找到答案,
還有很多寶貴的經(jīng)驗(yàn)
當(dāng)然說起論壇最正宗還是
https://sourceforge.net/projects/ireport/
https://sourceforge.net/projects/jasperreports/
大家可以到sourceforge.net去看看,論壇上提供搜索,也能翻到很多東西,順便
練練你的英語(yǔ)
4 學(xué)習(xí)JasperReport的Samples
解壓jasperreports-0.5.0-project.zip 后目錄jasperreportsdemosamples
下的例子,看看這些例子是你關(guān)于這個(gè)報(bào)表工具提升能力的最好最快的方式,
我會(huì)在下面貼上各個(gè)例子的簡(jiǎn)要說明。
要運(yùn)行sample下的例子,首先你要安裝ant,并設(shè)置好環(huán)境變量
如ANT_HOME??? 值為?? D:Installant161
然后到dos方式下,到某一個(gè)sample的目錄,比如到
jasperreportsdemosamplesalterdesign目錄下
運(yùn)行 ant 則會(huì)編譯報(bào)表文件
運(yùn)行 ant view 則會(huì)展現(xiàn)報(bào)表
5 比上面更好的資料是什么?
就是JasperReport的源代碼,看懂源代碼,JasperReport
就是在你腦子里的了,你想干什么都行了,優(yōu)化代碼,覆寫,繼承他的類,實(shí)現(xiàn)個(gè)性
化的功能,甚至你可以參考他的思想,升華一下,做一個(gè)你自己的報(bào)表
?
1. alterdesign
該例子演示了報(bào)表編譯后,在報(bào)表展現(xiàn)的時(shí)候如何動(dòng)態(tài)的控制其中的元素
比如讓某一個(gè)矩形變色或其他
2. antcompile
?
演示如何讓 ant 來編譯
3. chart
?
演示了如何在報(bào)表中添加圖像,JasperReport是用Scriptlet的方式
往報(bào)表中添加圖像,而Scriptlet是調(diào)用也是開源的jfreechart的Api來
生成圖形,去jfreechart看一下,該工具能的圖形生成能力也很強(qiáng)
4. datasource
?
演示了如何在報(bào)表中使用各種數(shù)據(jù)源,能夠使用beanarray
beancollection,也可以用自定義的數(shù)據(jù)源,只要繼承了JRDataSource的
兩個(gè)接口,這個(gè)能給用戶提供非常大的靈活性,報(bào)表的數(shù)據(jù)不用局限于一
條Sql語(yǔ)句,也可以使用存儲(chǔ)過程,對(duì)生成報(bào)表中的數(shù)據(jù)也可以排序,二
次檢索,等等
5. fonts
?
各種字體的演示
6. horizontal
?
演示了水平分欄的報(bào)表,演示報(bào)表中分了三欄,其中還用到了
textFieldExpression,就像if語(yǔ)句的效果來選擇輸出的內(nèi)容
7. hyperlink
?
演示了各種樣式的鏈接
8. images
演示了如何在報(bào)表中加入圖像以及圖像的顯示方式
9. jasper
?
演示了分組分欄的報(bào)表,演示中用了2次group
10. jcharts
演示了調(diào)用另一個(gè)開源的API jcharts來往報(bào)表中加入分析圖形,原理同
上chart,如果jfreechart都還不能滿足你分析圖形的要求,那到j(luò)charts
里找找看吧,說不定有
11. landscape
?
演示橫向的報(bào)表
12. nopagebreak
?
演示比如在IE中不分頁(yè)的方式打印出報(bào)表的內(nèi)容,通過這個(gè)演示也可以
了解報(bào)表輸出如何配置參數(shù)
13. noreport
演示了如何直接通過java程序生成JasperPrint對(duì)象來輸出
14. noxmldesign
演示了如何直接通過java程序生成JasperDesign對(duì)象來動(dòng)態(tài)的生成報(bào)
表,根據(jù)這個(gè)例子,用戶可以作出自定義選列的報(bào)表,當(dāng)然比較麻煩,
而且肯定自己要補(bǔ)充他的API庫(kù)
(JasperReport真是強(qiáng)大啊,呵呵)
15. pdfencrypt
?
演示了pdf的輸出方式,可以給pdf文件加密碼,其實(shí)就是pdf輸出方式的
參數(shù)配置,具體有那些參數(shù)可配置,去看看API吧
16. printservice
演示了如何直接打印報(bào)表
17. query
演示了如何讓查詢的sql動(dòng)態(tài)起來,比如你可以通過一個(gè)Jsp頁(yè)面?zhèn)?br />報(bào)表的sql的where條件,order條件,甚至整個(gè)sql語(yǔ)句
18. rotation
演示了文字縱向顯示的報(bào)表
19. scriptlet
?
演示了如何繼承JRDefaultScriptlet,并加入自己的處理語(yǔ)句,這個(gè)功能
可是很強(qiáng)大的哦,看看這些接口
beforeReportInit() afterReportInit() beforePageInit()
afterPageInit() beforeColumnInit() afterColumnInit()
beforeGroupInit(String groupName)
afterGroupInit(String groupName)
看看這些名字就知道你能完成那些功能,比如顯示一列數(shù)據(jù)后,馬上跟
上該列數(shù)據(jù)的分析圖形,當(dāng)然你也可以加上自己的方法并在報(bào)表中調(diào)用
20. shapes
演示了JasperReport中自帶的圖形,及能配置的參數(shù)
當(dāng)然你也能繼承或者覆寫JasperReport中的Api生成你要的圖形,
21. stretch
演示了如何處理報(bào)表中數(shù)據(jù)拉伸以及帶來周圍的線及框的拉伸,
你能了解到雖然黑框式表格不是JasperReport中缺省的展現(xiàn)方式,
但在JasperReport中不難實(shí)現(xiàn)
22. subreport
演示了子報(bào)表,還告訴你一個(gè)報(bào)表中可以有n個(gè)子報(bào)表,子報(bào)表中還可以
嵌套子報(bào)表
23. tableofcontents
演示了如何生成一個(gè)有目錄的,復(fù)雜的報(bào)表
24. unicode
演示了各種 字符編碼
25. webapp
演示了如何把報(bào)表放到一個(gè)JavaWeb項(xiàng)目中,可以用Jsp Servlet
applet,筆者做了一個(gè)有參數(shù)頁(yè)面,可以選擇html pdf applet
輸出方式的報(bào)表,有興趣的 我可以在后面放上代碼