已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
學(xué)習(xí)完jasperreports+ireport,給我感覺深刻,不僅掌握了報(bào)表開發(fā)技術(shù),還掌握了如何在web中生成pdf,xls,rtf文件,以下是jasperreports+ireport開發(fā)知識(shí)點(diǎn): 1.字段,變量,參數(shù),傳參2.矢量圖,位圖3.超鏈接,錨4.數(shù)據(jù)源,自定義數(shù)據(jù)源5.國際化(I18N)6.腳本 7.子報(bào)表 8.圖表(餅圖,柱圖,線圖) 9.導(dǎo)出pdf,xls,html.操作版本:jasperreports2.0.2+ireport2.0.2說明:本文并非入門級(jí)教程,所以閱讀本文需要有一定基礎(chǔ).以下針對(duì)每個(gè)知識(shí)點(diǎn),講解在ireport中是如何操作,以及在真實(shí)項(xiàng)目中如何部署.1.字段,變量,參數(shù),傳參這個(gè)知識(shí)點(diǎn)很簡單,在ireport的 view 菜單下有 Fields,Variables,Parameters三個(gè)菜單,如要定義一個(gè)參數(shù),可進(jìn)行如下操作.點(diǎn)擊 Parameters 菜單,此時(shí)彈出一個(gè)操作參數(shù)的窗口,單擊 New 按鈕,輸入?yún)?shù)名(Parameter Name),選擇參數(shù)類型(Parameter Class Type),如要賦一個(gè)默認(rèn)值則填寫默認(rèn)值表達(dá)式(Default Value Expression)(默認(rèn)值如為字符串則以string形式填寫,如為整形則以 new Integer(1) 形式填寫,以此類推.),填好后,點(diǎn) OK 就新建了一個(gè)參數(shù)了.定義字段與定義參數(shù)是一樣的操作,至于定義變量操作差不多,也相對(duì)少用一些,在此就不講述.在ireport中如何引用字段,變量,參數(shù)?引用字段使用 $Ffield_name引用變量使用 $Vvariable_name引用參數(shù)使用 $Pparam_name 或 $P!param_name$P!param_name一般用于拼接sql語句,它的值可以與sql語句拼接后,再去執(zhí)行查詢.例:定義一個(gè)參數(shù)名為 where 類型為String 默認(rèn)值為 where id=100有一查詢語句:select * from user $P!where則執(zhí)行查詢時(shí)會(huì)替換成:select * from user where id=100$Pparam_name在sql語句中使用時(shí),也有一特殊情況.例:有一參數(shù)名為 id,類型為Integer,默認(rèn)值為 new Integer(100)有一查詢語句:select * from user where id=$Pid執(zhí)行查詢可正常查詢,但如果有一參數(shù)名為 name,類型為String,默認(rèn)值為zhanngle有一查詢語句:select * from user where name=$Pname執(zhí)行查詢時(shí)出錯(cuò),不知道為什么(即使數(shù)據(jù)庫中有該條記錄),不知是不是bug,還是自已哪里弄錯(cuò)了.解決辦法是,將查詢語句改為:select * from user where name=$P!name可以證明$P!語法,只做替換操作,如上只將$P!name替換成zhanngle.也可以證明$P語法,在sql語句中使用時(shí),值為數(shù)字類型還可以正常執(zhí)行,如為字符串類型則會(huì)出錯(cuò).在程序中如何傳參?如上例定義了一個(gè)name參數(shù),那么在程序中如何動(dòng)態(tài)傳參查詢出不同的記錄呢,也很簡單.程序代碼如下:Mapparams=newHashMap();params.put(name,zhanngle);JasperPrintprint=JasperFillManager.fillReport(jasper,params,conn);就是將參數(shù)名和值put進(jìn)入一map,然后再填充報(bào)表時(shí)將map傳過去就行了.2.矢量圖,位圖Jasperreports支持矢量圖與位圖功能,是因?yàn)樗庋b了jfreechart(jfreechart是一個(gè)開源的圖形解決方案庫),使用ireport繪制矢量圖或插入位圖,可以不用我們寫一行代碼,這些jasperreports已經(jīng)為我們?nèi)糠庋b好了,ireport只提供了三種矢量圖,分別是矩形,圓形,線條,下面先介紹如何繪制矢量圖,再介紹如何插入位圖.初始工作:先新建一個(gè)空?qǐng)?bào)表繪制矩形:點(diǎn)擊工具欄的 Rectangle 按鈕,在Detail區(qū)域,繪制一個(gè)矩形,繪制方法與windows自帶的畫圖工具一樣,繪制好后,在該矩形上點(diǎn)右鍵,選屬性,即可設(shè)置該矩形的屬性,大家可以根據(jù)自己需要進(jìn)行設(shè)置,如設(shè)置前景色,背景色.繪制圓形與繪制線條方法一樣,只需要在工具欄點(diǎn)相應(yīng)的圓形工具或線條工具就行了.很簡單吧.問題出現(xiàn)1. 圖與圖之間(更具體的說法,應(yīng)該是元素與元素之間)不能有任何重疊,如重疊則只能顯示最上層的圖.2. 使用線條工具可以繪制斜線,當(dāng)導(dǎo)出為pdf文件,沒有任何問題,當(dāng)導(dǎo)出html,xls文件時(shí),發(fā)現(xiàn)斜線變成了矩形,解決方案是:使用外部圖形編輯軟件,繪制一條斜線,并保存為圖片文件,再將這個(gè)圖片文件插入到報(bào)表相應(yīng)位置中.在ireport中如何測(cè)試預(yù)覽pdf,html,xls文件?1首先要設(shè)置一下pdf文件有什么預(yù)覽,html文件用什么預(yù)覽點(diǎn)Options - Settings - External Programs,在彈出的窗口中填寫正確的外部程序。如我的設(shè)置如下:External Editor: C:Program FilesEditPlus 2editplus.exe(jrxml文件編輯器)PDF Viewer: D:Program FilesAdobeAcrobat 7.0ReaderAcroRd32.exeHTML Viewer: C:Program FilesInternet ExplorerIEXPLORE.EXEXLS Viewer: D:Program FilesMicrosoft OfficeOFFICE11EXCEL.EXERTF Viewer: C:Program FilesWindows NTAccessorieswordpad.exe該步操作只要設(shè)置一次,以后就不需要再設(shè)置了。2設(shè)置你要預(yù)覽的是什么文件,ireport默認(rèn)預(yù)覽的是pdf文件,但不是使用我們配制的外部程序預(yù)覽的,而是使用jasperreports的JRViewer預(yù)覽的。你也可以設(shè)置使用我們配制的外部程序來預(yù)覽,點(diǎn)Build - PDF Preview,再點(diǎn)Execute (empty data source)按鈕,即可預(yù)覽PDF文件。點(diǎn)Build - HTML Preview,再點(diǎn)Execute (empty data source)按鈕,即可預(yù)覽HTML文件。注意:任何一個(gè)報(bào)表都必須要有一個(gè)數(shù)據(jù)源來為報(bào)表提供數(shù)據(jù)。Execute (empty data source)的意思就是構(gòu)造一個(gè)只有一條記錄的數(shù)據(jù)源傳給報(bào)表,并且這條記錄的值都是null,這個(gè)按鈕在測(cè)試報(bào)表不需要數(shù)據(jù)時(shí),非常有用。Execute (whit active connection)的意思就是將當(dāng)前激活的連接或數(shù)據(jù)源傳給報(bào)表,并生成報(bào)表。位圖插入位圖也很簡單,在工具欄上點(diǎn)擊 Image 按鈕,然后在 Detail 區(qū)域繪制一個(gè)”矩形”(與繪制矩形操作相同),此時(shí)可以在你繪制的區(qū)域看到一個(gè)圖片,在這個(gè)圖片上點(diǎn)右鍵,選屬性,選 Image 選項(xiàng)卡,點(diǎn) “Find ”按鈕,選擇你要插入的圖片,OK后,就可以看到你要插入的圖片了.在真實(shí)項(xiàng)目中如何插入圖片,動(dòng)態(tài)改變圖片?在真實(shí)項(xiàng)目中可不能使用上面介紹的方法來插入圖片,上面的方法只是啟到 hello world 的作用,要想在真實(shí)項(xiàng)目中插入圖片,可以按照以下方法來配制.1. 定義一個(gè)參數(shù)名為 imageName 類型:String 沒有默認(rèn)值 2. 在報(bào)表設(shè)計(jì)界面中繪制一個(gè)Image,打開該Image的屬性框,選Image選項(xiàng)卡,在Image Expression文本框中輸入:$PimageName,代表該圖片的路徑是由imageName的參數(shù)值來決定的,我們可以在程序中傳入該參數(shù)的值.如何在程序中傳入該參數(shù)值呢?示例代碼如下:ServletContextcontext=request.getSession().getServletContext();Mapparams=newHashMap();Params.put(“imageName”,context.getRealPath(“/reports/test.jpg”);JasperPrintprint=JasperFillManager.fillReport(jasper,params,conn);傳入不同的路徑值即可動(dòng)態(tài)改變圖片在html中如何顯示圖片?當(dāng)導(dǎo)出帶有圖片的報(bào)表到pdf,xls文件時(shí),沒有任何問題,但導(dǎo)出到html文件時(shí),發(fā)現(xiàn)圖片不能正常顯示,不要急,jasperreports已經(jīng)為我們提供了解決方案.解決步驟如下:1.將以下代碼添加到web.xml文件中JasperreportsImageServletnet.sf.jasperreports.j2ee.servlets.ImageServletJasperreportsImageServlet/servlets/image2.程序代碼按以下方式編寫ServletContextcontext=request.getSession().getServletContext();Mapparams=newHashMap();Params.put(“imageName”,context.getRealPath(“/reports/test.jpg”);MapimageMap=newHashMap();request.getSession().setAttribute(IMAGES_MAP,imageMap);JasperPrintprint=JasperFillManager.fillReport(jasper,params,conn);request.getSession().setAttribute(net.sf.jasperreports.j2ee.servlets.ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,print);JRHtmlExporterexporter=newJRHtmlExporter();exporter.setParameter(JRExporterParameter.JASPER_PRINT,print);exporter.setParameter(JRExporterParameter.OUTPUT_WRITER,response.getWriter();exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP,imageMap);exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,request.getContextPath()+/servlets/image?image=);exporter.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE);exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,Boolean.TRUE);3.超鏈接,錨有時(shí)我們想在報(bào)表中為某個(gè)關(guān)鍵字添加超鏈接或錨,使鼠標(biāo)點(diǎn)擊該關(guān)鍵字時(shí)跳轉(zhuǎn)頁面.針對(duì)這一小功能,jasperreports 也提供了支持,在ireport中操作很簡單.不是所有的元素都支持超鏈接,目前我所知道支持超鏈接的常用元素有,動(dòng)態(tài)文本框元素(Text Field),位圖元素(Image),圖表元素(Chart tool).這三種元素設(shè)置超鏈接的方法都是一樣,所以只介紹動(dòng)態(tài)文本框如何設(shè)置超鏈接.如何在ireport中插入超鏈接?由于靜態(tài)文本框不支持超鏈接,所以只能通過動(dòng)態(tài)文本框?yàn)殪o態(tài)文字設(shè)置超鏈接,操作方法如下所述:1.在工具欄中選中 Text Field 按鈕,回到 Detail 區(qū)域,繪制一個(gè)Text Field (與繪制矩形方法一樣),然后在該Text Field 上點(diǎn)右鍵,選 Edit Expresion,在彈出的窗口中輸入表達(dá)式 CSDN,然后再點(diǎn) apply 按鈕.(注意: CSDN要包含雙引號(hào))2.打開該 Text Field 的屬性框,選 Hyperlink 選項(xiàng)卡,將 Hyperlink target 改為 blank,Hyperlink Type 改為 Reference,在Hyperlink Reference Expression框中輸入,再點(diǎn)關(guān)閉.(注意: 要包含雙引號(hào))此時(shí)一個(gè)超鏈接已設(shè)置好,導(dǎo)出pdf,html文件看看,點(diǎn)擊CSDN即可彈出CSDN的網(wǎng)頁.如何在ireport中插入錨?其實(shí)錨是超鏈接的一種特殊形式,因此支持超鏈接的元素都支持錨,不支持超鏈接的元素都不支持錨,錨的設(shè)置也很簡單,只要你知道使用html的設(shè)置錨,那么ireport也是差不多的.設(shè)置錨,也需要兩步操作1.設(shè)置錨對(duì)象在 Title 區(qū)域繪制一個(gè)動(dòng)態(tài)文本框,輸入表達(dá)式 “2007年終財(cái)務(wù)報(bào)表”,再打開它的Hyperlink 選項(xiàng)卡,在 Anchor Name Expression 框中輸入 “title”,點(diǎn)關(guān)閉.此時(shí)已定義了一個(gè)錨對(duì)象.它的錨名字是 title.2.鏈接錨對(duì)象在 Detail區(qū)域繪制一個(gè)動(dòng)態(tài)文本框,輸入表達(dá)式 “返回頂部”,再打開它的 Hyperlink 選項(xiàng)卡,將Hyperlink target改為 self,Hyperlink Type 改為 LocalAnchor,在Hyperlink Anchor Expression框中輸入 “title”,點(diǎn)關(guān)閉.一個(gè)錨鏈接已設(shè)置完畢,導(dǎo)出pdf,html看看,當(dāng)然,如果你的報(bào)表內(nèi)容不多,那么錨起不到任何作用.4.數(shù)據(jù)源,自定義數(shù)據(jù)源數(shù)據(jù)源顧名思義數(shù)據(jù)來源,即報(bào)表數(shù)據(jù)從何而來。jasperreports可以從數(shù)據(jù)庫、XML文件、CSV文件、java.util.Collection對(duì)象以及自定義數(shù)據(jù)源得到數(shù)據(jù)。在真實(shí)項(xiàng)目中,報(bào)表數(shù)據(jù)一般從數(shù)據(jù)庫得到,下面介紹在ireport中如何配制連接制數(shù)據(jù)庫的數(shù)據(jù)源。操作步驟如下:說明:本例以MySql數(shù)據(jù)庫來配制數(shù)據(jù)源新建一個(gè)Document(報(bào)表文檔),點(diǎn) Data - Connections/Data Sources - New - Database JDBC Connection - Next。在彈出的窗口中按照提示填寫屬性,例:Name:mysql,JDBC Driver:com.mysql.jdbc.DriverJDBC URL:jdbc:mysql:/localhost:3306/db_nameUser Name:rootPassword:your_password填好后,單擊Test按鈕,如彈出 Connection test successful!,則代表數(shù)據(jù)源配制正確,并再點(diǎn)Save 按鈕,保存配制。否則配制錯(cuò)誤,請(qǐng)檢查哪里出錯(cuò)。配制好后,即可連接數(shù)據(jù)庫。那么如何用數(shù)據(jù)源查詢數(shù)據(jù)庫,并將查詢結(jié)果顯示在報(bào)表上呢?說明:本例操作必須配制好數(shù)據(jù)庫數(shù)據(jù)源才能正常操作。而且連接的數(shù)據(jù)庫里要有表。點(diǎn) Data - Report Query,在彈出的窗口中輸入SQL查詢語句:select * from t_users 。如果sql語句正確將在窗口底部顯示該表的所有字段,點(diǎn)擊OK,即完成了報(bào)表查詢工作。大家可以查看一下Fields面板,ireport已經(jīng)自動(dòng)將查詢出的所有字段,定義成字段對(duì)象了(也就是最前面所說的定義字段)。說完了如何將數(shù)據(jù)查詢出來,接下來的工作就是如何將數(shù)據(jù)顯示在報(bào)表界面上。點(diǎn)View - Fields打開Fields面板,在面板上任意選一個(gè)字段,將它拖到Detail區(qū)域的左上角對(duì)齊,再選一個(gè)字段拖到Detail區(qū)域的中上角,好了就用兩字段做試驗(yàn)吧,只要Detail區(qū)域夠?qū)?,大家可以多拖兩個(gè)字段到Detail區(qū)域,拖到Detail區(qū)域的字段將在報(bào)表中顯示。調(diào)整好Detail區(qū)域的高度,運(yùn)行(Build - Execute (whit active connection))一下看看吧,如果你看到有正確數(shù)據(jù),那恭喜你,你試驗(yàn)成功了!自定義數(shù)據(jù)源有時(shí),你可能需要自定義一個(gè)數(shù)據(jù)源來滿足你的需求,jasperreports對(duì)此也提供了良好支持。只要你實(shí)現(xiàn)JRDataSource接口,就行了,很簡單吧!JRDataSource接口聲明如下:publicinterfaceJRDataSource.publicbooleannext()throwsJRException;publicObjectgetFieldValue(JRFieldjrField)throwsJRException;以下我是我自定義的一個(gè)數(shù)據(jù)源代碼:1先創(chuàng)建一個(gè)Bean類,該bean類屬性全是大寫,這是因?yàn)閕report自動(dòng)定義字段時(shí),字段名全是大寫,你也可以手動(dòng)改為小寫,那么該bean類屬性就可以為小寫,你要確保bean類的屬性名與字段名一致(包括大小寫)。packagetest;importjava.sql.Timestamp;publicclassBean.privateintID;privateStringNAME;privateStringNICKNAME;privateintSCORE;privatefloatBALANCE;privateTimestampLASTLOGINDATE;publicfloatgetBALANCE().returnBALANCE;publicvoidsetBALANCE(floatbalance).this.BALANCE=balance;publicintgetID().returnID;publicvoidsetID(intid).this.ID=id;publicTimestampgetLASTLOGINDATE().returnLASTLOGINDATE;publicvoidsetLASTLOGINDATE(TimestamplastLoginDate).this.LASTLOGINDATE=lastLoginDate;publicStringgetNAME().returnNAME;publicvoidsetNAME(Stringname).this.NAME=name;publicStringgetNICKNAME().returnNICKNAME;publicvoidsetNICKNAME(Stringnickname).this.NICKNAME=nickname;publicintgetSCORE().returnSCORE;publicvoidsetSCORE(intscore).this.SCORE=score;2創(chuàng)建實(shí)現(xiàn)數(shù)據(jù)源類packagetest;importjava.sql.Timestamp;importjava.util.ArrayList;importjava.util.List;mons.beanutils.PropertyUtils;importnet.sf.jasperreports.engine.JRDataSource;importnet.sf.jasperreports.engine.JRException;importnet.sf.jasperreports.engine.JRField;publicclassTestBeanDataSourceimplementsJRDataSource.privateListlist;privateintindex=-1;publicTestBeanDataSource().list=newArrayList();Beanbean=null;for(inti=0;i100;i+).bean=newBean();bean.setID(i);bean.setNAME(name+i);bean.setNICKNAME(nickname+i);bean.setBALANCE(float)(Math.random()*100*i);bean.setSCORE(i*2);bean.setLASTLOGINDATE(newTimestamp(System.currentTimeMillis();list.add(bean);publicbooleannext()throwsJRException.return+index Classpath - Add Folder 選擇d:/workspace/jasperreports/classes,選擇好后,點(diǎn)Save Classpath。3在ireport中創(chuàng)建一個(gè)自定義數(shù)據(jù)源點(diǎn)Data - Connections/Data Sources - New - Custom JRDataSource將彈出一窗口,根據(jù)提示填寫內(nèi)容,例:Name:testCustomFactory Class:test.TestCustomJRDataSourceFactoryThe static method to call:test點(diǎn)擊Test,彈出Connection test successful!,則代表自定義數(shù)據(jù)源配制成功,否則請(qǐng)檢查錯(cuò)誤。完成了這三步,就可以在ireport中使用該自定義數(shù)據(jù)源了。如何激活數(shù)據(jù)源?創(chuàng)建好數(shù)據(jù)源后,ireport會(huì)自動(dòng)激活它,由于同一時(shí)刻只能有一個(gè)數(shù)據(jù)源處于激活狀態(tài),所以當(dāng)你想激活其它數(shù)據(jù)源時(shí)可如下操作:點(diǎn)Data - Set Active Connection,在彈出的窗口中選擇你要激活的數(shù)據(jù)源,再點(diǎn)OK就激活了。只有激活的數(shù)據(jù)源才會(huì)傳給報(bào)表。5.國際化(I18N)國際化,又稱I18N,因?yàn)閲H化的英文是Internationalization,它以I開頭,以N結(jié)尾,中間共18個(gè)字母。Jasprereports通過ResourceBundle類支持I18N。在ireport中如何配制支持I18N?我們新建一個(gè)報(bào)表,報(bào)表名為I18NTest,然后點(diǎn)Edit - Internationalization - Locale Files - Create New Locale,輸入_zh_CN,按OK,此時(shí)創(chuàng)建了一個(gè)支持中文的.properties文件,它的文件名全寫是I18NTest_zh_CN.properties,存放在與報(bào)表文件在同一目錄下,我們?cè)俳ㄒ粋€(gè)支持英文的.properties文件,單擊Create New Locale,輸入_en,按OK。如果你對(duì)ResourceBundle類有些了解,那么你就會(huì)知道輸入的是什么意思。創(chuàng)建屬性文件后,下一步就是編輯它們,在Locale resource bundle窗口中,雙擊I18NTest_zh_CN.properties,此時(shí)即可對(duì)編輯屬性文件,我們?cè)趯傩晕募性黾右粭li18n=嗨!國際化,然后保存。再編輯I18NTest_perties,在屬性文件中增加一條i18n=hello I18n,保存。以上操作即配制好了ireport支持i18n。如何調(diào)用顯示屬性文件內(nèi)容?在報(bào)表的任何一個(gè)區(qū)域都可以調(diào)用屬性文件顯示內(nèi)容。調(diào)用語法:$Rkey 或 str(key)例:如要調(diào)用上面所配制的屬性,使用 $Ri18n 或 str(“i18n”)格式化消息使用msg(pattern, arg1)例:msg(”my name is 0.”,”zhannggle”) 則輸出:my name is zhanngle.msg()有三個(gè)重載方式,msg(pattern,arg1), msg(pattern,arg1,arg1), msg(pattern,arg1,arg1,arg1)區(qū)別就是參數(shù)不同而已,底層是通過MessageFormat.format(pattern,arguments)實(shí)現(xiàn)的。使用屬性文件格式化消息。例有一屬性文件定義如下:a=jasperreportsb=ireporthi=hello 0,hello 1!我們可以使用以下表達(dá)式顯示消息msg(str(“hi”),str(“a”),str(“b”) 輸出:hello jasperreports,hello ireport!在web開發(fā)中如何存放屬性文件?將屬性文件存放到WEB-INF/classes目錄下,jasprereports會(huì)去這個(gè)目錄搜索它。提示:只要配制好ireport支持I18N,就可以到報(bào)表文件存放目錄找到自動(dòng)生成好的屬性文件,將它們拷到WEB-INF/classes目錄下就可以了。討論:jasperreports是通過ResourceBundle.getBundle()獲取屬性文件,而getBundle()有三種重載方式getBundle(baseName),getBundle(baseName,locale),getBundle(baseName,locale,loader)不知jasperreports是采用哪種方式,如果采用第一種,則根據(jù)服務(wù)器系統(tǒng)默認(rèn)語言獲取屬性文件,而不管客戶端請(qǐng)求哪種語言,如采用第二、三種,則會(huì)根據(jù)客戶端請(qǐng)求語言去獲取屬性文件。而我在做測(cè)試時(shí),不管將客戶端設(shè)置成何種語言,都返回服務(wù)器系統(tǒng)默認(rèn)語言,挻郁悶的,不知是我哪里錯(cuò)了,還是jasperreports采用了第一種方式去獲取屬性文件,沒測(cè)出來,挻遺憾的,要查看源碼才知道。6.腳本腳本是一個(gè)java類,它用來執(zhí)行指定的細(xì)節(jié)在打印期間。腳本中的一些方法被報(bào)表引擎的調(diào)用,當(dāng)一些特殊的事件,像創(chuàng)建一個(gè)新頁或者處理detail 行。實(shí)現(xiàn)一個(gè)腳本得繼承net.sf.jasperreports.engine.JRAbstractScriptlet類。net.sf.jasperreports.engine.JRAbstractScriptlet的聲明如下:packagenet.sf.jasperreports.engine;/*/*authorTeodorDanciu()*version$Id:JRDefaultScriptlet.java,v1.32004/06/0120:28:22teodordExp$*/publicclassJRDefaultScriptletextendsJRAbstractScriptlet.publicJRDefaultScriptlet().publicvoidbeforeReportInit()throwsJRScriptletException.publicvoidafterReportInit()throwsJRScriptletException.publicvoidbeforePageInit()throwsJRScriptletException.publicvoidafterPageInit()throwsJRScriptletException.publicvoidbeforeColumnInit()throwsJRScriptletException.publicvoidafterColumnInit()throwsJRScriptletException.publicvoidbeforeGroupInit(StringgroupName)throwsJRScriptletException.publicvoidafterGroupInit(StringgroupName)throwsJRScriptletException.publicvoidbeforeDetailEval()throwsJRScriptletException.publicvoidafterDetailEval()throwsJRScriptletException.在ireport中如何配制腳本?Ireport默認(rèn)不使用腳本,我們可以如下操作,使它使用腳本。首先新建一個(gè)報(bào)表文檔,報(bào)表名TestScriptlet然后點(diǎn)Edit - Report Properties - Scriptlet Class - Use ireport internal scriptlet support此時(shí)ireport已經(jīng)使用了一個(gè)內(nèi)部定義好的腳本,該腳本是個(gè)空殼子,沒有實(shí)現(xiàn)任何功能。我們也可以編輯該腳本類,如下操作:點(diǎn)Edit - Scriptlet Editor,此時(shí)會(huì)彈出一個(gè)編輯腳本類的窗口,找到該腳本構(gòu)造方法,在構(gòu)造方法中添加一條語句:System.out.println(“create scriptlet”);在構(gòu)造方法下面添加一個(gè)max方法,整個(gè)代碼如下所示:importnet.sf.jasperreports.engine.*;publicclassextendsit.businesslogic.ireport.IReportScriptlet./*/*CreatesanewinstanceofJRIreportDefaultScriptlet*/public().System.out.println(createscriptlet.);publicintmax(inta,intb).if(a=b)returna;returnb;然后點(diǎn)Save保存,即創(chuàng)建了一個(gè)腳本,并再保存報(bào)表文件,此時(shí)你可以到報(bào)表文件目錄找到一個(gè)TestScriptleScriptlet的java文件,這就是ireport自動(dòng)生成的腳本類文件(腳本類名= 報(bào)表名+Scriptlet)。在ireport中如何調(diào)用腳本?在報(bào)表創(chuàng)建時(shí)jasperreports會(huì)自動(dòng)創(chuàng)建腳本對(duì)象,并在生成腳本時(shí),jasperreports會(huì)自動(dòng)調(diào)用相應(yīng)的腳本方法,自定義的方法需要我們手動(dòng)調(diào)用才會(huì)執(zhí)行。例調(diào)用上面的max方法,可使用表達(dá)式:(TestScriptletScriptlet)$PREPORT_SCRIPTLET).max ( 23,64)$PREPORT_SCRIPTLET返回當(dāng)前報(bào)表的腳本類大家可以根據(jù)以上表達(dá)式舉一反三調(diào)用腳本。在web項(xiàng)目中如何配制腳本?當(dāng)在web項(xiàng)目中使用腳本時(shí),就不能按照上面的方式配制了,那樣會(huì)找不到腳本類的。解決辦法如下4步:1在ireport的lib目錄下找到ireport.jar,將它引入到項(xiàng)目中。2將ireport自動(dòng)生成的java文件復(fù)制到項(xiàng)目src目錄下(打包也行)。3編譯項(xiàng)目后,將該項(xiàng)目的classes目錄添加到ireport的classpath中。4點(diǎn)Edit - Report Properties - Scriptlet Class - Use this scriptlet class,在下面的文本框輸入腳本類名,如打了包,要輸入包名,點(diǎn)OK,編譯ireport。7.子報(bào)表未完待續(xù).8.圖表(餅圖,柱圖,線圖) 未完待續(xù).9.導(dǎo)出pdf,xls,html.以下是我導(dǎo)出各種報(bào)表Servlet源代碼,供大家參考!packageservlet;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.io.PrintWriter;importjava.io.StringWriter;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importjava.util.HashMap;importjava.util.Map;importjavax.servlet.ServletContext;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importoracle.jdbc.driver.OracleDriver;importtest.TestBeanDataSource;importnet.sf.jasperreports.engine.JRAbstractExporter;importnet.sf.jasperreports.engine.JREmptyDataSource;importnet.sf.jasperreports.engine.JRException;importnet.sf.jasperreports.engine.JRExporterParameter;importnet.sf.jasperreports.engine.JasperCompileManager;importnet.sf.jasperreports.engine.JasperExportManager;importnet.sf.jasperreports.engine.JasperFillManager;importnet.sf.jasperreports.engine.JasperPrint;importnet.sf.jasperreports.engine.JasperReport;importnet.sf.jasperreports.engine.JasperRunManager;importnet.sf.jasperreports.engine.base.JRBaseReport;importnet.sf.jasperreports.engine.export.JExcelApiExporter;importnet.sf.jasperreports.engine.export.JRHtmlExporter;importnet.sf.jasperreports.engine.export.JRHtmlExporterParameter;importnet.sf.jasperreports.engine.export.JRXlsExporterParameter;importnet.sf.jasperreports.engine.export.JRXmlExporter;importnet.sf.jasperreports.engine.uti
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024短期汽車租賃服務(wù)合同版B版
- 動(dòng)物行為學(xué)知到智慧樹章節(jié)測(cè)試課后答案2024年秋浙江農(nóng)林大學(xué)
- 2025年度博物館場地租賃及展覽展示服務(wù)協(xié)議3篇
- 2024年數(shù)字政府白皮書一體化政務(wù)大數(shù)據(jù)分冊(cè)
- 船舶制造塔吊租賃協(xié)議模板
- 鋼結(jié)構(gòu)圖書館鋼架焊接施工合同
- 港口曬場施工協(xié)議
- 礦業(yè)安全監(jiān)督員租賃協(xié)議
- 酒吧休閑魚池租賃合同
- 食品加工設(shè)備維修機(jī)井合同
- 2025康復(fù)科年度工作計(jì)劃
- 拼圖行業(yè)未來五年前景展望
- 廣西玉林市(2024年-2025年小學(xué)六年級(jí)語文)統(tǒng)編版質(zhì)量測(cè)試(上學(xué)期)試卷及答案
- 醫(yī)院醫(yī)??乒ぷ骺偨Y(jié)
- 2024-2025學(xué)年譯林版八年級(jí)英語上學(xué)期重點(diǎn)詞匯短語句子歸納【考點(diǎn)清單】
- 廣東省六校聯(lián)考2024-2025學(xué)年高二上學(xué)期12月月考英語試題
- 養(yǎng)老護(hù)理員技能培訓(xùn)的標(biāo)準(zhǔn)化實(shí)施方案
- 2024年企業(yè)采購部年終總結(jié)及今后計(jì)劃(3篇)
- 2024中國誠通控股集團(tuán)限公司總部招聘11人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 物業(yè)客服個(gè)人述職報(bào)告范例
- 數(shù)據(jù)崗位招聘筆試題與參考答案2024年
評(píng)論
0/150
提交評(píng)論