




已閱讀5頁,還剩41頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
JasperReport 與iReport 的配置與使用1.JasperReport 與iReport 簡介1.1 JasperReport 簡介JasperReport 是一款報表打印組件,是開放源代碼組織 中的一個java 報表打印工程,在我寫這篇文章時,JasperReport 的最新版本是0.5.2 版,JasperReport 的最新版本可以從/index.html 下載得到。JasperReport 適合用來做WEB 應(yīng)用程序與Java Application 的報表打印組件,而且關(guān)鍵的一點(diǎn)是:JasperReport 是免費(fèi)的!1.2 iReport 簡介iReport 也是開源組織 中的一款免費(fèi)軟件,其主要作用是用來以可視化的方式設(shè)計生成JasperReport 所使用的報表格式文件,因為JasperReport 本身并未提供很好的可視化報表設(shè)計工具,iReport 的出現(xiàn)正好彌補(bǔ)了這個缺陷。本文寫作時的iReport的最新版本是0.3.0,iReport可以從 下載得到,注意下載的iReport 一定要與你所使用的JasperReport 版本相匹配,當(dāng)然您也可以更新iReport 中所使用的JasperReport 組件,后面的文章中會有詳細(xì)的介紹。2.安裝與配置2.1 JDK 的安裝與配置2.1.1 JDK 的下載與版本選擇JDK的最新版本可以從SUN的官方網(wǎng)站上下載得到, JDK共分為3 個版本,J2ME,J2SE,J2EE,因為是在計算機(jī)上使用,我們需要下載使用 J2SE SDK,如果您的計算機(jī)是用來做軟件開發(fā),需要下載J2SE SDK,如果是用來運(yùn)行已經(jīng)編譯好的JAVA 程序的,可以只下載J2SE JRE 即可。下載JDK 時SUN 公司會要求你同意一個JDK 的使用許可協(xié)議,選接受協(xié)議后,會出現(xiàn)選擇適合不同的操作系統(tǒng)平臺使用的JDK 版本選擇的界面,您可以根據(jù)自己使用的操作系統(tǒng)平臺選擇適合的JDK 版本。2.1.2 JDK 的安裝以Windows 平臺的安裝為例,在安裝的過程中一路Next 即可,同時請注意記錄下JDK安裝后的目錄,稍后進(jìn)行配置時要用到。2.1.3 JDK 的配置以在Windows 2000 平臺配置J2SE SDK 為例(注意不是J2SE JRE),鼠標(biāo)右鍵點(diǎn)擊桌面上的“我的電腦”圖標(biāo),在彈出的菜單中選擇屬性,選擇“高級”選項,選擇“環(huán)境變量”,點(diǎn)擊“系統(tǒng)變量”下的新增按鈕,在對話框中的變量名處輸入大寫的JAVA_HOME,在變量值處輸入2.1.2 中所記錄的JDK 安裝目錄,目錄名后不要帶有“”。點(diǎn)擊“確定”完成第一步的配置,接下來以同樣的方法配置系統(tǒng)環(huán)境變量CLASSPATH,在CLASSPATH的變量值處輸入%JAVA_HOME%libtools.jar; %JAVA_HOME%libdt.jar,當(dāng)然,也可以直接輸入絕對路徑,但建議使用%JAVA_HOME%的方式。再接下來還要修改系統(tǒng)環(huán)境變量PATH,增加%JAVA_HOME%bin 目錄。至此JDK 的配置也完成,打開一個命令行窗口,鍵入set classpath 與set java_home 應(yīng)該可以看到正確的配置信息,同時,輸入javac -version 看系統(tǒng)能否找到JAVA 的編譯器。2.2 ant 的安裝與配置ant 是個很好用的工具,雖然對于JasperReport 和iReport 來說ant 并不是必須的,但還是建議以使用ant 的方式來應(yīng)用。2.2.1 ant 的下載與安裝ant 是apache 組織的一個子項目,可以從 下載得到,Windows 平臺的可以下載ZIP 格式的安裝文件,下載完成以后解壓縮到某個目錄,建議使用根目錄下的直接子目錄作為ant 解壓縮以后目錄,ant 無需安裝,解壓縮文件以后就算安裝完成。2.2.2 ant 的配置與2.1.3 小節(jié)中設(shè)置JDK相同的操作過程打開系統(tǒng)環(huán)境變量設(shè)置窗口,增加ANT_HOME環(huán)境變量,變量值為解壓縮以后的ant 所在目錄,目錄名中同樣不要帶有“”。在系統(tǒng)的環(huán)境變量Path 中增加%ANT_HOME%bin 目錄,然后新開一個命令行窗口,輸入ant 后如果出現(xiàn)如下圖所示內(nèi)容即算正確完成ant 的配置。2.3 JasperReport 的安裝與配置2.3.1 JasperReport 的安裝因為JasperReport 是 的開源項目,最新的JasperReport 版本可以在 中找到,同時,為了方便世界各國程序員下載, 還設(shè)有許多的鏡像站點(diǎn)供你選擇,推薦大家選擇設(shè)在日本鬼子小島上的Asia 服務(wù)器下載。強(qiáng)烈建議下載jasperreport 的source.zip,因為這里面包含了很多的示例程序,對于想深入研究jasperreport 的人來說會有很大的幫助。如果不想對JasperReport 有太多的深入了解,只需要下載.jar 文件就能正常開發(fā)應(yīng)用了。沒有必要單獨(dú)為JasperReport.jar 文件設(shè)置目錄, 建議放在您系統(tǒng)中的%JAVA_HOME%lib目錄中。2.3.2 JasperReport 的配置將JasperReport-x.x.x.jar 文件添加到操作系統(tǒng)的環(huán)境變量ClASSPATH 中即可完成JasperReport 的配置。2.4 iReport 的安裝與配置2.4.1 iReport 的安裝iReport 組件有時可能會發(fā)布一些小的bug fix 版本,里面所帶有的文件不全,筆者在第一次學(xué)習(xí)iReport 的使用時就被郁悶了很長時間,后來才發(fā)現(xiàn)原來自己使用的iReport 運(yùn)行不起來的原因是所用的版本只是個小的bug fix 集合,不過好在iReport 的網(wǎng)站會注明哪些版本需要哪些文件,大家到時候留心看一下就可以了,帶有全部文件的壓縮包應(yīng)該在8M 以上。iReport 在Windows 平臺也是以.zip 形式的文件提供的,直接解壓縮后就算完成了安裝,如果您下載了一個老的帶有全部文件的iReport 版本,又發(fā)現(xiàn)了bug fix 集合,直接將修補(bǔ)版覆蓋老版本即可完成升級(注意不能刪除老版本的文件,只能覆蓋)。JasperReport 在生成PDF 格式報表時使用了iText 組件,因為iText 在我們的中文環(huán)境下應(yīng)用時需要用到一個iTextAsia.jar,我們還需要下載一個iText 處理中文字體時時用到的iTextAsia.jar,下載網(wǎng)址:,下載以后將iTextAsia.jar 放到iReport的lib 目錄中。2.4.2 iReport 的配置只針對2.x 版:如果您決定以ant 的方式運(yùn)行iReport 程序,需要修改一下iReport 目錄中的ireport.bat 文件中的內(nèi)容,第一次運(yùn)行ireport.bat 會生成javadoc,在確定已正確生成javadoc 文件后可以將生成doc 的那一段注釋掉以便以后可以快速的啟動iReport 程序。3.0 版無需修改ireport.bat 文件。3.iReport 的使用3.1 啟動iReport 的兩種方式3.1.1 在有ant 環(huán)境的下運(yùn)行iReport直接運(yùn)行iReport 目錄中的ireport.bat 即可。3.1.2 在沒有ant 的環(huán)境下運(yùn)行iReport2.X 版本使用iReport 目錄中的noant 目錄中的startup.bat 運(yùn)行,3.0 版本使用bin 目錄中的startup.bat 運(yùn)行。3.2 iReport 設(shè)計環(huán)境中的亂碼現(xiàn)象的解決不知道是出于讓報表設(shè)計器的界面更美觀還是別的什么原因,iReport 使用了一個tinylaf.jar,但是正是由于這個文件,在一些是否保存文件等對話框中的中文變的一塌糊涂,解決辦法就是將iReportlib 目錄中的tinylaf.jar 刪除或改成后綴不是.jar 的文件,當(dāng)然這樣做的代價就是報表設(shè)計器的界面不再那么漂亮了,但對你最終交給用戶使用的系統(tǒng)沒有影響,因為iReport 只是個在搞系統(tǒng)開發(fā)時才用的著的報表設(shè)計器。3.3 如何設(shè)計一個最簡單的報表選擇File 菜單,選擇New document在彈出的Report property 對話框中輸入報表文件的名稱,設(shè)置報表的頁面大小及邊距等,編碼格式保持UTF-8 不動。選擇工具欄中的Static text tool,在報表設(shè)計器的Detail 中用鼠標(biāo)拖拽到適合的大小,如下圖:拖拽以后:如果拖拽后的組件在允許打印的區(qū)域內(nèi),則顯示藍(lán)框,如果拖拽到其他的bands,則顯示紅框,紅框代表不能打印,出現(xiàn)紅框的錯誤情況如下圖所示:在保證所拖拽區(qū)域正確后,保存這個報表后,選擇編譯報表,即點(diǎn)擊build 菜單中的complile,然后選擇報表的預(yù)覽方式為JRViewer preview,然后選擇execute report 即可預(yù)覽您的第一個報表了。3.4 如何處理帶有中文的報表雙擊剛才所畫的Static Text,在出現(xiàn)的對話框中選擇Static Text 項,修改text 內(nèi)容為漢字,如下所示:同時,修改FONT 項中的內(nèi)容與下圖相同改動的地方有三項,一是font name,二是PDF font name 三是PDF Encoding再次預(yù)覽報表即可顯示中文報表。上面修改的第二和第三項在JRViewer 中是看不出來效果的,如果選擇報表的生成結(jié)果為PDF格式則會體現(xiàn)出來。另外,如果您修改了這三項后,在生成的PDF 文件中漢字還是變成亂碼,請確認(rèn)您是否下載了itextAsian.jar 并正確的放在了iReport 的Lib 目錄中。3.5 使用數(shù)據(jù)庫中的數(shù)據(jù)生成報表3.5.1 如何設(shè)置數(shù)據(jù)庫連接選擇“data source”菜單中的“Connections/Datasources”,在打開的數(shù)據(jù)連接列表窗口中點(diǎn)擊“new”以便新增一個數(shù)據(jù)源,JasperReport 可以使用多種數(shù)據(jù)源,可以是JDBC 數(shù)據(jù)庫連接,也可以是從XML 文件中取數(shù)據(jù)等,以下是使用Sql Server 中的pubs 數(shù)據(jù)庫做為數(shù)據(jù)源的一個配置例子。上例中是以Sql Server 做為數(shù)據(jù)庫的一個例子,我們還需要手工復(fù)制Sql Server 的JDBC 驅(qū)動文件到iReport 的lib 目錄,復(fù)制JDBC 驅(qū)動以外需要重新運(yùn)行iReport 才會生效。配置好數(shù)據(jù)源以后,點(diǎn)擊“Test”按鈕,如果配置沒有錯誤,應(yīng)該會出現(xiàn)如下所示的內(nèi)容:測試數(shù)據(jù)庫連接成功后,點(diǎn)擊“Save”按鈕保存這個數(shù)據(jù)源以便完成數(shù)據(jù)源的配置。3.5.2 設(shè)置SQL 查詢語句一個數(shù)據(jù)庫中有多個Table,我們需要通過設(shè)置SQL 查詢來從特定某一個或某幾個表中取到報表中將會使用到的字段與數(shù)據(jù)。在進(jìn)行SQL 語句的設(shè)置之前,需要為報表指定默認(rèn)的數(shù)據(jù)源連接,如果未正確設(shè)置數(shù)據(jù)源,則會出現(xiàn)如下所示的報錯對話框。如上面所提示的,正確設(shè)置數(shù)據(jù)源連接的方法為:選擇“build”菜單,選擇“set active connection”即可。設(shè)置SQL 查詢語句的方法:點(diǎn)擊“View”菜單,點(diǎn)擊“Report query”,在打開的窗口中輸入SQL 查詢語句。2.X 版本增加字段的方法:點(diǎn)擊“Read fields”按鈕,如果SQL 查詢語句語法正確,則iReport 自動取出查詢結(jié)果中的字段列表,使用Ctrl 鍵選擇我們的報表中將會使用到的字段,也可以使用Shift 鍵選擇所有字段,點(diǎn)擊“Register fields to report”,您所選中的字段名稱及類型等信息自動增加到了報表引用字段列表中,點(diǎn)擊“Save query to report”,保存這個查詢。3.0 版增加字段的方法:3.0 版可以自動的根據(jù)sql 語句取出查詢結(jié)果,并且查詢結(jié)果中的字段列表默認(rèn)就是已經(jīng)選中的了,如下所示,輸入完正確的sql 語句后直接點(diǎn)擊“OK”即可完成字段的自動增加。3.5.3 增加、修改與刪除報表字段點(diǎn)擊“View”菜單,選擇“Report fields”,iReport 打開報表字段列表窗口,如果您已經(jīng)按照3.5.2 小節(jié)中的內(nèi)容從SQL 查詢中增加過了報表字段列表,則打開后的窗口中將會顯示您所增字段列表,在此功能中可以再手工編輯報表字段列表。3.5.4 字段在報表設(shè)計器中的使用點(diǎn)擊工具欄中的圖標(biāo),在報表中的“Details”段中用鼠標(biāo)拖拽到適合的大小,雙擊該字段框,打開如下所示的對話框:選中Text Field 項,如果沒有設(shè)置正確的字段名稱,則Textfield expression 中的內(nèi)容將顯示藍(lán)色,手工修改Textfield expression 中的內(nèi)容為正確的字段名稱,格式為$F字段名稱,正確修改后將變?yōu)榫G色顯示。如果該字段中有中文內(nèi)容,打開Font 項,按照第3.4 小節(jié)中修改字體選項中的那三項進(jìn)行修改。3.5.5 編譯與預(yù)覽帶有字段的報表編譯報表的方法可以選擇“build”菜單中的compile 選項,也可以直接點(diǎn)擊工具欄中的圖標(biāo),如果編譯過程正確完成,iReport 設(shè)計器的下面會顯示如下內(nèi)容:帶有字段的報表進(jìn)行預(yù)覽有兩種方式,一種是不使用數(shù)據(jù)庫中的數(shù)據(jù),默認(rèn)所有字段值為null 的方式,預(yù)覽方法為選擇“build”菜單中的“execute report”,第二種方式為使用數(shù)據(jù)庫中的數(shù)據(jù)的方式,預(yù)覽方法為選擇“build”菜單中的“execute report (use active conn)”,也可以直接點(diǎn)擊工具欄中的圖標(biāo)。下圖為選擇輸出格式為PDF,在adobe acrobat reader 中的顯示結(jié)果的情況:3.6 一勞永益的解決中文字體問題前面介始的中文字體解決辦法,對于每一個字段的字體都要進(jìn)行三次修改,很是煩人,我們可以通過自己定義一種新的字體來稍稍緩解這些麻煩,定義過程如下:打開“View”菜單,選擇“Report fonts”,點(diǎn)擊“new”新增加一個自定義字體名稱,字體名稱可以為中文,修改Font name 中的內(nèi)容為中文字體類型,如“宋體”,修改字體大小,修改PDF font name 為“STSong-Light”,修改PDF Encoding 中的內(nèi)容為“UniGB-UCS2-H”,如下圖所示:點(diǎn)擊“OK”保存該自定義字體。當(dāng)再次修改某個字段的字體時,我們可以直接選擇使用該字體,而不必再同時修改三個選擇了,直接選擇該自定義字體后,如下圖所示,其他三個選項中的內(nèi)容將會自動改變。3.7 JasperReport 中各band 的功能Title Band:title 段只在整個報表的第一頁的最上面部分顯示,除了第一頁以外,不管報表中共有多少個頁面也不會再出現(xiàn)Title band 中的內(nèi)容。pageHeader Band:顧名思義,pageHeader 段中的內(nèi)容將會在整個報表中的每一個頁面中都會出現(xiàn),顯示位置在頁面的上部,如果是報表的第一頁,pageHeader 中的內(nèi)容將顯示在Title Band 下面,除了第一頁以外的其他所有頁面中pageHeader 中的內(nèi)容將在顯示在頁面的最上端。pageFooter Band:顯示在所在頁面的最下端。Detail Band: 報表內(nèi)容段,在這個Band 中設(shè)計報表中需要重復(fù)出現(xiàn)的內(nèi)容,Detail 段中的內(nèi)容每頁都會出現(xiàn)。columnHeader Band:針對Detail Band 的表頭段,一般情況下在這個段中畫報表的表頭。columnFooter Band:針對Detail Band 的表尾段。Summary Band:表格的合計段,出現(xiàn)在整個報表的最后一頁中的Detail band 的后面,一般用來統(tǒng)計報表中某一個或某幾個字段的合計值。為了給大家一個直觀的印象,我這樣設(shè)計了一個測試用的報表,報表中的數(shù)據(jù)是從Sql Server的pubs 數(shù)據(jù)庫的titles 表中取出的,這些數(shù)據(jù)只是用來做測試的,不代表任何意義。設(shè)計狀態(tài)的報表:在不使用數(shù)據(jù)庫數(shù)據(jù)的情況下,報表結(jié)果如下圖所示:由上面的兩張圖我們可以發(fā)現(xiàn),除了summary 段中的內(nèi)容出現(xiàn)在了detail 段的后面,其他幾個band 的位置與設(shè)計狀態(tài)的位置是一樣的,但是多頁的話就可以看出不同了,下面是多頁時的情況,注意title band 中的內(nèi)容只在第一頁出現(xiàn)過,summary band 中的內(nèi)容只在最后一頁出現(xiàn)過:多頁時的第一頁中的內(nèi)容:(上圖是第一頁的頁面上半部分內(nèi)容)(上圖是第一頁的頁面下半部分內(nèi)容)(上圖是第二頁的頁面上半部分內(nèi)容)第二頁的下半部分與第一頁下半部分相同,第三頁的格式與第二頁相同,以下圖例為最后一頁的內(nèi)容:(上圖是最后一頁的頁面上半部分內(nèi)容)(上圖是最后一頁的頁面下半部分內(nèi)容)3.8 在iReport 中定義與使用參數(shù)參數(shù)用來在報表運(yùn)行時動態(tài)傳遞某些數(shù)據(jù),如SQL 查詢中的條件,報表中需要動態(tài)顯示的數(shù)據(jù)等,定義參數(shù)的方法為:選擇“View”主菜單,選擇“Report Parameters”項,打開當(dāng)前報表中的參數(shù)列表窗口,點(diǎn)擊“New”來新增參數(shù),在新增參數(shù)對話框中輸入?yún)?shù)的名稱、數(shù)據(jù)類型、缺省值以及參數(shù)的描述信息等,如下圖所示:需要注意的是,根據(jù)不同的參數(shù)類型,在設(shè)置參數(shù)的缺省值時要使值能與參數(shù)類型匹配,即字符型的參數(shù)在設(shè)置缺省值時要用”把值括起來,如果是數(shù)據(jù)值型的則不能加”。參數(shù)在iReport 設(shè)計器中的使用也很簡單,使用方法與使用數(shù)據(jù)庫字段類似,只是需要將$F 改為$P,即,參數(shù)數(shù)據(jù)的表達(dá)格式為$P參數(shù)名稱,同時注意參數(shù)名稱是大小寫敏感的。3.9 怎樣定義與使用變量何時使用變量呢?對于一些可以由報表系統(tǒng)自己產(chǎn)生而不必需要從外界傳入的數(shù)據(jù),如報表的打印時間等,我們可以通過定義一個變量來解決這類小問題。定義過程如下:選擇“View”菜單,選擇“Report Variables”項,點(diǎn)擊“New”按鈕, 在變量名稱處輸入您要定義的變量名稱,如:PrintDate,選擇變量類型,設(shè)置變量的初始值,設(shè)置合適的變量計算類型。保存變量后,打開字段設(shè)計窗口,修改里面的內(nèi)容為如下所示:主要修改了三個地方,一是字段的類型,必須要和變量所定義的類型相符,二是字段的取值,變量類型的格式為:$V(變量名),三是變量的輸出格式,即在Pattern 中設(shè)置正確的格式,如取小時和分鐘的話可以設(shè)置為:HH 時MM 分。使用變量的報表結(jié)果如下所示:4. JasperReport 在程序中的應(yīng)用4.1 在JSP 程序中的應(yīng)用示例4.1.1 JSP 服務(wù)器運(yùn)行環(huán)境的配置運(yùn)行JasperReport 之前,需要在已有的JSP 服務(wù)器環(huán)境中再修改一些配置,最簡單的辦法就是直接把iReport 設(shè)計器中的lib 目錄下的所有擴(kuò)展名為.JAR 的文件都復(fù)制到JSP 服務(wù)器的web-inflib 目錄中,如果原來的web-inflib 目錄中已經(jīng)有某Jar 的老版本程序存在,還需要清理一下那些老版本的JAR 文件。4.1.2 JSP 代碼內(nèi)容4.1.3 運(yùn)行示例JSP 程序出錯的幾種情況及解決方法(1)在其他JSP 服務(wù)器程序與IIS 綁定的情況下運(yùn)行出錯時上面的示例程序在我的RESIN-2.11 版JSP 服務(wù)器與Windows 2000 平臺的IIS 5.0 綁定運(yùn)行時,如果使用IIS 的80 端口訪問會報找不到Apache 的一個log 程序,如果使用Resin服務(wù)器自己的端口訪問時會報一個fill 錯誤,解決的辦法就是不要使用服務(wù)(Service)方式啟動綁定的JSP 服務(wù)器軟件,直接開命令行窗口運(yùn)行JSP 服務(wù)器軟件。(2)找不到報表文件看一下你的物理路徑中是否能找到那個test.jasper 文件,沒有的話建立正確的目錄把設(shè)計編譯好的test.jasper 文件放進(jìn)去就行了。(3)運(yùn)行后沒有報錯,什么反映也沒有安裝一下Adobe acrobat reader 等PDF 閱讀工具軟件。(4)可以運(yùn)行,但出不了PDF 文件,只是在IE 中有一堆亂碼沒有報錯就說明程序沒有問題,在你自己的客戶端找找問題所在,可以試著換個Adobe acrobat reader 版本,同時如果是以Localhost 等域名的方法訪問的話,換成IP 方式試一下。(5)能運(yùn)行,但出不來中文請確認(rèn)您的web-inflib 目錄中是否有iTextAsian.jar 文件,并且您已經(jīng)在報表設(shè)計器中將字段的font 調(diào)成漢字類型了。4.2 在Servlet 程序中的應(yīng)用示例在Servlet 中進(jìn)行應(yīng)用同樣也需要對服務(wù)器進(jìn)行配置,配置方法見4.1 小節(jié)。import javax.servlet.*;import javax.servlet.http.*;import dori.jasper.engine.*;import java.io.*;import java.util.*;import java.sql.*;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:/:1433;DatabaseName=pubs;user=sa;password=);ServletContext servletContext =this.getServletContext();File reportFile = new File(servletContext.getRealPath(report/test.jasper);Map parameters = new HashMap();String myname=new String(裴賀先);parameters.put(Name, myname);byte bytes =JasperRunManager.runReportToPdf(reportFile.getPath(),parameters,conn);JasperReport 與iReport 的配置與使用第27 頁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);4.3 動態(tài)SQL 的示例在大多數(shù)的情況下,報表中要打印的數(shù)據(jù)不是固定的內(nèi)容,我們常常需要通過SQL 語句來指定特定的某些記錄出現(xiàn)在報表中。要使用動態(tài)的SQL,我們可以定義一個String 類型的參數(shù),如下圖所示:在SQL 查詢器中使用這個參數(shù),如下圖所示:注意:這里使用的是$P!SQLSTR,與所有其他例子不同的是,這里使用$P!而不是$P,在程序中應(yīng)用時只需要像傳遞其他參數(shù)一樣應(yīng)用就可以了。4.4 怎樣使某個字段中的數(shù)據(jù)在特定條件下才打印出來通過設(shè)置字段的PrintWhenExpression,我們可以限定只有在某些特定的條件下字段值才會被打印出來,在PrintWhenExpression 中需要設(shè)置Boolean 型的表達(dá)式,如:newjava.lang.Boolean($Ftype.trim().equals(mod_cook)4.5 如何將PDF 格式報表結(jié)果直接輸出到打印機(jī)注:這段代碼只能應(yīng)用在Java Application 中,同時需要系統(tǒng)中安裝有Adobe Acroabat 或Adobe Acrobat Reader 軟件。public void print() throws UnsupportedFormatExceptionsave(./tmp.pdf);tryString osName = System.getProperty();/FOR WINDOWS 95 AND 98 USE COMMAND.COMif (osName.equals(Windows 95) | osName.equals(Windows 98)Runtime.getRuntime().exec( /C start acrord32 /p + ./tmp.pdf);/FOR WINDOWS NT/XP/2000 USE CMD.EXEelseRuntime.getRuntime().exec(cmd.exe /C Start acrord32 /p + ./tmp.pdf);catch (IOException IOE)JOptionPane.showMessageDialog(null, IOE.getMessage(), RuntimeException,JOptionPane.ERROR_MESSAGE);在控制JasperReport報表的格式問題的時候。如果有的字段值內(nèi)容太長可能會比原先畫好的如下圖”$Fbz”的動態(tài)字段值框大,內(nèi)容就會被擠到框子外邊來或者內(nèi)容會被截斷,嚴(yán)重影響報表的美觀。這個是數(shù)據(jù)沒有顯示全的原因。你可以雙擊”$Fbz”這個框,然后在TextField里面可以看到有Stretch with overflow和Blank when null, 選中Blank when null就是在用真實數(shù)據(jù)瀏覽的時候這個字段值如果遇到NULL值就顯示為空白。否則的話,就顯示NULL。 “Stretch with overflow “的作用就是讓動態(tài)字段框隨著內(nèi)容的增大而增大。這個時候會遇到一些問題,如果框子下面有線,或者其他框子的時候,則會把內(nèi)容壓在上面,如下圖,這個時。候就需要把線的格式設(shè)置一下,雙擊你所需要設(shè)置的線,彈出如下圖對話框。在Position type中選擇“FixRelativeToBottom”這個時候你畫的線也就會跟著你的字段值框,而改變位置。如下圖效果*處理打印的JSP* % com.paiao.app.db.DbBase dbbase = com.paiao.app.db.DbBase.getInstance(); String type=request.getParameter(type); String bdzid = request.getParameter(bdzid); String filepath=request.getParameter(filepath); String sbrq=request.getParameter(sbrq); String jzrq=request.getParameter(jzrq); String jlflbh=request.getParameter(jlflbh); com.paiao.bdpm.system.Reportjiexiguize bean=new com.paiao.bdpm.system.Reportjiexiguize(); String bdzname=com.paiao.app.util.Encoding.encodingUnicode(String.valueOf(request.getParameter(bdzname); com.paiao.app.util.Base base=new com.paiao.app.util.Base(); / Class.forName(sun.jdbc.odbc.JdbcOdbcDriver).newInstance(); Connection con=null; try con =dbbase.getConnection(); / DriverManager.getConnection(url,sa,123); File reportFile = new File(application.getRealPath(reports/+filepath); Map parameters = new HashMap();com.paiao.bdpm.runrecord.ReturnSql sql1=new com.paiao.bdpm.runrecord.ReturnSql();String ss1=,pdfname=;if(filepath.equals(jidianbaohubaobiao.jasper)sql1.Addsql(bdzid,sbrq);ss1= sql1.GetjidianSql();pdfname=jidianbaohu;else if(filepath.equals(yuanyouquexianbaobiao.jasper)sql1.Addsql(bdzid,sbrq);ss1=sql1.GetyuanyouSql();pdfname=yuanyouquexian;else if(filepath.equals(benyuexiaoquebaobiao.jasper)sql1.Addsql(bdzid,sbrq);ss1=sql1.GetbenyueSql();pdfname=benyuexiaoque;else if(filepath.equals(xinfaxianquexianbaobiao.jasper)sql1.Addsql(bdzid,sbrq);ss1=sql1.GetxinfaxianSql();pdfname=xinfaxianquexian;else if(filepath.equals(zhanyoudianliangbaobiao.jasper)sql1.Addsql(bdzid,sbrq);ss1=sql1.GetzhanyongSql();pdfname=zhanyongdianliang;else if(filepath.equals(zhibanjilu.jasper) sql1.Addsql(bdzid,sbrq); Calendar cal=Calendar.getInstance(); cal.setTime(base.stringToDate(sbrq); cal.add(Calendar.DATE,+1); jzrq= new SimpleDateFormat(yyyy-MM-dd).format(cal.getTime();ss1=sql1.GetzhibanjiluSql()+jzrq+ 9:30 order by fssj; parameters.put(sbrq,sbrq+ 9:30); parameters.put(jzsj,jzrq+ 9:30); parameters.put(bdzname,bdzname);pdfname=zhibanjilu;else if(filepath.equals(weihujiluzongjie.jasper) sql1.Addsql(bdzid,sbrq);/ Calendar cal=Calendar.getInstance();/ cal.setTime(base.stringToDate(sbrq);/ cal.add(Calendar.DATE,+1);/ jzrq= new SimpleDateFormat(yyyy-MM-dd).format(cal.getTime();ss1=sql1.GetweihujiluSql();/+jzrq+; parameters.put(sbrq,sbrq);/ parameters.put(jzsj,jzrq); parameters.put(bdzname,bdzname);pdfname=weihujilu;else if(filepath.equals(shebeiquexianjilu.jasper)String reportsql=com.paiao.app.util.Encoding.encodingUnicode(request.getParameter(reportSql);ss1=sql1.GetsbqxjlSql(reportsql);pdfname=shebeiquexianjilu;else if(filepath.equals(shebeijianxiujilu.jasper)String keyid = request.getParameter(keyid); ss1=sql1.GetsbjxsyjlSql(keyid);pdfname=shebeijianxiujilu;else if(filepath.equals(kdkkx_110kv.jasper)if(!(type=null) & type.equals(tongji)String reportsql=request.getParameter(110kvreport);ss1=sql1.Gettongji110kvSql(reportsql);elseString reportsql=request.getParameter(reportSql);ss1=sql1.Get110kvSql(reportsql);pdfname=kdkkx_110kv;else if(filepath.equals(gdkkx6_10kv.jasper)if(!(type=null) & type.equals(tongji)String reportsql=com.paiao.app.util.Encoding.encodingUnicode(request.getParameter(6_10kvreport);ss1=sql1.Gettongji6_10kvSql(reportsql);elseString reportsql=com.paiao.app.util.Encoding.encodingUnicode(request.getParameter(reportSql);ss1=sql1.Get6_10kvSql(reportsql);pdfname=gdkkx6_10kv;else if(filepath.equals(bean.getEnglishname(jlflbh)+.jasper)String repo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 紡織生產(chǎn)效率提升的實踐試題及答案
- 我的家鄉(xiāng)風(fēng)采活動
- 四川省成都市簡陽市陽安中學(xué)2022-2023學(xué)年高二下學(xué)期3月月考物理試題 含解析
- 面料生產(chǎn)中質(zhì)量監(jiān)控的有效措施研究試題及答案
- 合同協(xié)議書怎么上傳
- 商品合同協(xié)議書
- 工程合作協(xié)議書合同范本
- 母嬰合同協(xié)議書
- 大型車輛買賣合同協(xié)議書
- 保管合同協(xié)議書
- DBJ41∕T 228-2019 河南省房屋建筑施工現(xiàn)場安全資料管理標(biāo)準(zhǔn)
- 三級安全教育考試試題(的)
- DB13 5325-2021 生活垃圾焚燒大氣污染控制標(biāo)準(zhǔn)
- 芒針療法課件
- 鼓樂鏗鏘課件 (2)
- 小學(xué)二年級下冊科學(xué)課件1.《春夏秋冬》大象版(22張)ppt課件
- 鋼結(jié)構(gòu)工程質(zhì)量通病防治圖冊
- 鼻咽癌放療臨床路徑
- 地下水八大離子-陰陽離子平衡計算公式
- 派力肯安全防護(hù)箱
- T∕CCES 23-2021 裝配式多層混凝土墻板建筑技術(shù)規(guī)程
評論
0/150
提交評論