<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    海鷗航際

    JAVA站
    posts - 11, comments - 53, trackbacks - 1, articles - 102
    我是在一個(gè)星期以前接觸iReport Jasperreport的,下載最初它們并沒有吸引我的興趣(或信任),主要是他們的版本的問題(我一直不敢用版本都不到1.0的工具軟件,目前它們的版本:iReport0.2.2,Jasperreport0.5.0),不過聽說有人在用他們,于是就仔細(xì)看了一下(因?yàn)樵?/SPAN>java應(yīng)用程序的web打印方面我一直都是采用瀏覽器打印,非常痛苦,所以寧可信其有不可信其無,呵呵……)

    一個(gè)星期下來,我針對(duì)項(xiàng)目中關(guān)于報(bào)表的一些需求點(diǎn)進(jìn)行了嘗試,發(fā)現(xiàn)他們都可以解決,真實(shí)大快人心,于是今天把他們推薦給各位。

    其實(shí)我們做報(bào)表用的只是JasperreportiReport是一個(gè)Jasperreport的可視化開發(fā)工具(不要看它的界面有些簡陋,我們要的操作他都可以幫我們輕松搞定。),當(dāng)然iReport還有其他的用處,不過這里不做闡述。

    目前幾乎還沒有中文的介紹他們整合開發(fā)的文章,盡管如此我也不準(zhǔn)備非常詳細(xì)的介紹它們,在這里我僅將我的一些經(jīng)驗(yàn)寫出來,不乏有些地方淺嘗輒止,如果想細(xì)致的研究它們還請(qǐng)閱讀它們被套的英文文檔。

    Jasperreport的配套文檔非常詳細(xì),該文檔是收費(fèi)的,不過網(wǎng)上有流傳的電子版本,本人有幸得到一份,如果你需要可以到本人站點(diǎn)(http://plateau.sicool.com)獲得,在此感謝Jasperreport的為開源世界做出的貢獻(xiàn)。

    相反iReport的文檔不多,也許作者認(rèn)為其足夠簡單J,我也是經(jīng)過無數(shù)的探索才有些開發(fā)的經(jīng)驗(yàn)。

     

    好了,讓我們進(jìn)入上述兩者整合開發(fā)報(bào)表的歷程……

     

    1.  首先你要得到它們最新的版本,你可以到下邊的地址下載

     

    iRport: http://ireport.sourceforge.net

    Jasperreport: http://jasperreports.sourceforge.net

     

    他們的配置也很簡單:

    iReport解壓縮以后編輯目錄下的iReport.bat文件即可,如下

     

    @echo off

     

    set JAVA_HOME=C:\jdk14

    set ANT_HOME=d:\ant

    set IREPORT_HOME=C:\Documenti\progetti\iReport\iReport2\

     

    rem %ANT_HOME%\bin\ant javadocs

    %ANT_HOME%\bin\ant iReport

     

    是不是很簡單,你只要設(shè)置相應(yīng)的一些路經(jīng)就可以,這里是采用ant來運(yùn)行,當(dāng)然如果你沒有安裝ant也不想安裝它,那么也可以,不過這里我買個(gè)官子,你們自己可以到解壓縮以后的目錄中找到相應(yīng)的運(yùn)行方法。呵呵,安裝antJ

    Jasperreport不需要任何配置,你只需將下載以后的jar包放到classpath下即可。呵呵,說來簡單,可是如果沒有iReport來替我們干“臟活”,那么做報(bào)表的工作將是怎樣的痛苦~

     

     

    2.  Jasperreport是如何工作的?

     

    這里我就往簡單里說了。

    首先要先有個(gè)xml文件,然后編譯成jasper文件(以.jasper結(jié)尾),我們真正要使用的是編譯以后的.jasper文件,這很像我們熟悉的.jsp文件,其實(shí)我們調(diào)用的是其編譯以后的servlet


    (
    圖片來自http://ireport.sourceforge.net/cap3.html#3.1)

     

    不過靜態(tài)的報(bào)表沒有什么意思,所以有句話說得好:

    A datasource + a jasper = a print

     

    它可以支持的輸出格式如下:PDF,HTML,XML,XLS,CVS等等。

     

    因此,Jasperreport的原始輸入就是一個(gè).xml文檔,想象看一個(gè)簡單報(bào)表的xml文件也有幾百行,在沒有iReport以前用它做報(bào)表是多么痛苦。(令我不可思議的是,我一個(gè)同學(xué)公司曾經(jīng)用jasperreport做報(bào)表,可是它們竟然沒有用過iReport,天!)

    現(xiàn)在不用怕了,用iReport可以輕松的搞定這個(gè)XML,寫到這里,我想起了struts_config.xml,也曾出現(xiàn)不少關(guān)于它的可視化的編輯器,呵呵J

     

    如果在iReport以前,如果你要做報(bào)表,你要華上很長時(shí)間來熟悉Jasperreport的文檔,熟悉文檔的一個(gè)用途就是編寫那個(gè)xml文件,現(xiàn)在你只要他熟悉文檔的時(shí)間來熟悉iReport就可以了。

     

    3.  IReport初探

    先來看一下這個(gè)(rich and very simple to user GUI)吧:

     

     

       如果以前你有過用vb或其他的開發(fā)工具開發(fā)報(bào)表的經(jīng)驗(yàn)的話,這個(gè)界面乍一看應(yīng)該很熟悉的,如果碰巧你又熟悉java語言,哇,那么你用iReport應(yīng)該易如反掌啊,呵呵J

     

    在上一篇文檔里我們初步介紹了iReportJasperreport,基本上我們已經(jīng)對(duì)它們有了一個(gè)最初的認(rèn)識(shí),在今天這篇文檔里,我將深入的對(duì)iReport這個(gè)工具進(jìn)行說明。

     

           接著上篇文檔的結(jié)尾,如果我們成功運(yùn)行iReport的話,可以看到如下的主界面:

     

     

    點(diǎn)擊“新增”  按鈕可以創(chuàng)建一個(gè)新的空?qǐng)?bào)表,考慮到生成后的XML文件編輯的時(shí)候可以顯示中文,請(qǐng)?jiān)?/SPAN>xml encoding選項(xiàng)上GB2312(沒有選項(xiàng)自己手動(dòng)輸入),如下圖:

     

    當(dāng)設(shè)置玩必要的選項(xiàng)點(diǎn)擊完成可以得到一個(gè)空白的報(bào)表,如下圖:

     

     

    好了,輸入一段文本,很簡單,點(diǎn)擊創(chuàng)建“靜態(tài)文本”按鈕 ,然后在報(bào)表任何一個(gè)工作區(qū)(如title,pageheader,detail,pagefooter summary等等)輸入,如輸入“今天天氣不錯(cuò)!”

    在屬性框頁可以對(duì)輸入的內(nèi)容進(jìn)行屬性控制,如字體,顏色,大小,以及其他的屬性,報(bào)表中任何的元素(靜態(tài)文本,線,框等等)都有自己的屬性頁,一般雙擊任何元素都可以彈出該元素的屬性頁,屬性頁如下圖:

     

    完工,一個(gè)最簡單的報(bào)表就生成了,iReport配有運(yùn)行環(huán)境,如下快捷按鈕:

    左邊的按鈕是運(yùn)行靜態(tài)報(bào)表(無需數(shù)據(jù)庫環(huán)境),右邊的是運(yùn)行動(dòng)態(tài)報(bào)表(這時(shí)需要設(shè)置數(shù)據(jù)庫連接,數(shù)據(jù)庫的連接載下面介紹)

     

    那么經(jīng)過上遍的努力,很顯然我們將要運(yùn)行的靜態(tài)報(bào)表,那么點(diǎn)擊左邊的按鈕就可以看到下面的pdf,如圖:

    當(dāng)然上遍的例子是最簡單,呵呵J

     

    下面我將采用問答的方式進(jìn)行逐步講解iReport的用法

    1. 如何連接數(shù)據(jù)庫?

    2. 如何定義變量、參數(shù)以及字段?

    3. 如何定義字體以及如何使用自定義的字體(如黑體、楷體或者比較藝術(shù)化的子體)?

    4. 如何執(zhí)行SQL腳本進(jìn)行查詢?

    5.  如何把做好的報(bào)表引入到應(yīng)用程序中?

     

    好了,針對(duì)上面的問題,我在下面的篇幅中給于解答并穿插介紹iReport中其它的功能菜單。

    1. 如何連接數(shù)據(jù)庫?

    靜態(tài)的報(bào)表其實(shí)很少的,我在前一篇文檔中有提到過一句經(jīng)典的話:

    A datasource + a jasper = a print”因此有必要首先介紹一下如何連接數(shù)據(jù)庫,其實(shí)很簡單

    進(jìn)入Datasource/Connections/Datasources菜單或者點(diǎn)擊 快捷按鈕,則出現(xiàn)下面屬性頁:


    進(jìn)行必要的數(shù)據(jù)庫連接屬性配置,然后點(diǎn)擊test按鈕進(jìn)行測(cè)試,如果提示測(cè)試成功,則保存數(shù)據(jù)庫連接,即可。

     

    2. 如何定義變量、參數(shù)以及字段?

    變量、參數(shù)以及字段的定義,在iReport里是比較方便的,在菜單view下可以看到一些控制點(diǎn),如下圖:

    Report properties 設(shè)置報(bào)表屬性

    Report query 設(shè)置查詢語句的,這個(gè)在下面有介紹

    Report fields設(shè)置字段(數(shù)據(jù)庫)

    Report variables設(shè)置變量

    Report parameters設(shè)置參數(shù)

    Report fonts 設(shè)置字體

    順便把下面的你個(gè)也說明一下

    Bands,彈出報(bào)表工作區(qū)(title detail)的屬性頁

    Report groups設(shè)置組

     

    Element properties 元素屬性頁

    Element browser 顯示報(bào)表所有元素的列表

     

    設(shè)置很容易,但是在報(bào)表中引用這些變量、參數(shù)和字段就有寫說頭了,呵呵J,讓我們一步一步慢慢來。

    iReport中引用的方式,如下表

    元素

    名稱

    引用

    變量

    variablesName

    $V{ variablesName }

    參數(shù)

    parameterName

    $P{ parameterName }

    字段

    filedsName

    $F{ filedsName }

    其實(shí)這些不說明好像不知道如何辦,一單說明了,它們也是很好用的也很簡單的。多用吧J

     

    3. 如何定義字體以及如何使用自定義的字體(如黑體、楷體或者比較藝術(shù)化的子體)?

     

    因?yàn)榭紤]到使用亞洲字體,因此你需要下在額外的jariTextAsian.jar,如果iReport下載包中含有此jar包,此步驟可免。

     

    目前在iReport中使用中文字體,好像只有宋體一種,如果想用其它的字體(如黑體、楷體等)需要另外的方法,這在下面介紹,下面介紹如何使用常用的中文字體“宋體”的設(shè)置方法,在問題2中我們看到引入字體的選項(xiàng),點(diǎn)擊“Report fonts”可以看到下面屬性頁:

     

    好,如上邊的設(shè)置就已經(jīng)設(shè)置好宋體,以后在報(bào)表的任何地方都可以引用該字體,如下面我們要把我們?cè)谏线叺睦又械脑亍敖裉焯鞖獠诲e(cuò)!”改為用宋體,如下:

    這樣只要我們?cè)?/SPAN>Report font選項(xiàng)中選中songti 那么下面的屬性自動(dòng)繼承,呵呵,方便吧J

    好,下面講述如何使用宋體以外的中文字體,如:黑體、楷體或其他的藝術(shù)化的字體。

     

    也很簡單,不過好像目前iReport的功能不夠完美的緣故,還要手動(dòng)修改xml文件才可以達(dá)到要求,如下圖我們定義黑體:

    首先不同的是在PDF font name選項(xiàng)中選中External TTF font…,按照常理,此時(shí)要在緊接著的選項(xiàng)中選擇黑體的ttf文件SIMHEI.TTF,可是不知為什么TrueType font的選項(xiàng)是空的,(當(dāng)時(shí)我在學(xué)習(xí)的時(shí)候,這步操作讓我好勝郁悶),天啊,該怎么辦?!

     

    后來我查看了相應(yīng)的xml文件,如下:(由于文件較大,因此只截取我們關(guān)心的)

                                <staticText>

                                       <reportElement

                                              mode="Opaque"

                                              x="13"

                                              y="42"

                                              width="239"

                                              height="53"

                                              forecolor="#000000"

                                              backcolor="#FFFFFF"

                                              positionType="FixRelativeToTop"

                                              isPrintRepeatedValues="true"

                                              isRemoveLineWhenBlank="false"

                                              isPrintInFirstWholeBand="false"

                                              isPrintWhenDetailOverflows="false"/>

                                       <textElement textAlignment="Left" verticalAlignment="Top" lineSpacing="Single">

                                              <font fontName="黑體" pdfFontName="" size="36" isBold="false" isItalic="false" isUnderline="false" isPdfEmbedded ="true" pdfEncoding ="Identity-H" isStrikeThrough="false" />

                                       </textElement>

                                <text><![CDATA[黑體]]></text>

                                </staticText>

     

    大家可以看到黑體的pdfFontName=””是空的,于是我嘗試把系統(tǒng)黑體的TTF文件路徑(C:\WINNT\fonts\SIMHEI.TTF)寫到這個(gè)地方,哈哈,居然成功了。

    于是我得到這樣一個(gè)結(jié)論,目前如果你在報(bào)表中使用其它的字體,首先要做上面圖中所做的屬性設(shè)置,然后手動(dòng)把字體的TTF文件寫到pdfFontName=””,雖然麻煩了點(diǎn),不過這招挺管用,呵呵J

    讓我們先回顧一下上一篇文檔中已經(jīng)闡述的問題:

    1. 如何連接數(shù)據(jù)庫?

    2. 如何定義變量、參數(shù)以及字段?

    3. 如何定義字體以及如何使用自定義的字體(如黑體、楷體或者比較藝術(shù)化的子體)?

    下面我們接著往下闡述余下的兩個(gè)問題,在開始以前我補(bǔ)充兩個(gè)因該在上篇文檔闡述而沒有闡述的地方。

           第一個(gè)就是我忘記說明iReport怎樣把xml文件編譯成jasper文件,其實(shí)很簡單,點(diǎn)擊“編譯”按鈕 即可,其實(shí)在你點(diǎn)擊兩種“運(yùn)行 ”按鈕的是缺省的操作就是先對(duì)xml文件進(jìn)行編譯。

    第二個(gè)就是如何設(shè)置iReport的輸出格式,我們?cè)谇懊嬖f過iReport可以以很多種格式進(jìn)行輸出,如PDF,HTML,XML,XLS,CVS等等,那么我們?cè)撊绾卧O(shè)置以何種方式輸出呢?

    在菜單Build中我們可以看出iReport的缺省輸出格式為PDF,如圖:

    PDF preview 缺省輸出格

    HTML preview 以網(wǎng)頁的格式輸出

    剩下的就不說了,大家試一下就明白了,J

    但是只在此設(shè)置輸出格式了,還沒有完成設(shè)置,還有一個(gè)必需的設(shè)置就是,為每一種設(shè)置選擇執(zhí)行“環(huán)境”,例如,如果你選擇以PDF輸出,那么你需要為其指明Acrobat Reader的路徑,如圖選擇菜單Tools/Options,則會(huì)彈出如下屬性頁:

    這里還有一點(diǎn)我要說明的就是,在上邊途中External editor的設(shè)置是選擇編輯xml文件的編輯器,這里我一般用UltraEdit來編輯,你可能喜歡用其他的,譬如editplus等,那么就把常用的xml編輯器輸入在這里就可以隨心所欲的編輯xml文件了,編輯xml文件進(jìn)入菜單“Edit/edit XML source”,則會(huì)彈出你熟悉的編輯器來編輯該xml文件,如圖:

     

    還有最后一點(diǎn)要補(bǔ)充的就是,在上一篇文檔中我引入非宋體的字體的pdfFontNamettf文件路徑都是絕對(duì)路徑(如:c:\winnt\fonts\simhei.ttf),其實(shí)這是不對(duì)的,應(yīng)該把你在應(yīng)用程序中的字體打包進(jìn)來,這樣改絕對(duì)路徑為相對(duì)路徑(如 reportfonts/simhei.ttf),這樣就萬無一失了,呵呵J

     

    好了,做完上邊的補(bǔ)充,讓我們接著前面的問題往下進(jìn)行,先把下面要解決的問題列如下:

    4. 如何執(zhí)行SQL腳本進(jìn)行查詢?

    5. 如何把做好的報(bào)表引入到應(yīng)用程序中?

     

    接下來讓我們一個(gè)問題一個(gè)問題的解決它J

     

           4如何執(zhí)行SQL腳本進(jìn)行查詢?

    我們大家都知道,從數(shù)據(jù)查詢必須要有查詢語句,特別綜合查詢的時(shí)候可能sql語句會(huì)復(fù)雜的多,那么iReport是怎樣讓我們使用自己的查詢語句進(jìn)行輸出的呢?我們?cè)谏弦黄性岬竭^,呵呵J,希望你不會(huì)忘記,在菜單view下有Reprot query項(xiàng),點(diǎn)擊則會(huì)彈出如下屬性頁:

    點(diǎn)擊上圖的“Save query to report”則會(huì)把這條SQL語句就會(huì)把這條查詢語句“引入”到報(bào)表中了,如果你此時(shí)查看XML文件,則會(huì)發(fā)現(xiàn)如下片斷:

    <queryString><![CDATA[select * from users where name='Jplateau']]></queryString>

    此時(shí)我們還以上篇文章開始的例子入手,讓我們“加工”一下,如下圖:

      

    假設(shè)我們已經(jīng)設(shè)置好連接數(shù)據(jù),那么此時(shí)點(diǎn)擊“運(yùn)行”按鈕 則會(huì)得到如下效果:

    呵呵,得到了我們期望的效果,這時(shí),可能你要問,如果我要在sql語句中使用參數(shù)呢,那么又該如何?其實(shí)我接下來馬上要說這個(gè)問題,如果我們要以名稱來進(jìn)行模糊查詢,傳遞的參數(shù)為name,那么期望的sql語句可能是下面這個(gè)樣子:

    Select * from users where name like ‘%name%’

    其實(shí)在iReport中也可以很容易實(shí)現(xiàn),記得我們?cè)谏弦黄臋n中曾說過參數(shù)的使用方法,因此我不多說,我只把最終的sql語句寫給大家,相信大家一看就明白:

    Select * from users where name like ‘%$P{name}%’

    是不是很簡單?J

     

    5. 如何把做好的報(bào)表引入到應(yīng)用程序中?

    其實(shí)在問題4中,如果要運(yùn)行帶參數(shù)的查詢報(bào)表的話,就會(huì)牽涉到問題5的,因此我在這里還是要引用問題4種的例子。

    此時(shí)我們就要引入一個(gè)jsp頁面,假設(shè)是pdf.jsp,那么下面就是pdf.jsp的代碼:

    <%@ page import="dori.jasper.engine.*" %>

    <%@ page import="java.util.*" %>

    <%@ page import="java.io.*" %>

    <%@ page import="java.sql.*" %>

     

    <%

           File reportFile = new File(application.getRealPath("/reports/test.jasper"));

     

           Map parameters = new HashMap();

           parameters.put("name", "p");

          

           Connection conn=null

          

           //以下忽略得到數(shù)據(jù)庫連接過程

    //……

    //……

                               

           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();

    %>

     

    還有一個(gè)必要的步驟就是把你下載的Jasperreport.jar放在你應(yīng)用程序的lib下,

    好了,啟動(dòng)你的應(yīng)用程序,運(yùn)行dbf.jsp則會(huì)看到如下效果

    怎么樣,根據(jù)名稱的模糊查詢結(jié)果是符合我們的期望的,相信你已經(jīng)掌握了上邊的方法了。

     

    當(dāng)然上邊我給出的例子都是最簡單的,而且報(bào)表的排版也比較隨意,相信一點(diǎn),精美的報(bào)表可是細(xì)活啊,呵呵J,多練習(xí)吧。

     

     

    總結(jié)

     

    這篇系列文檔總算寫完了,總覺得有點(diǎn)隨意的樣子,不過還是希望能給一點(diǎn)幫助,文檔中不乏有些淺嘗輒止的地方,希望你不明白的地方或認(rèn)為我闡述的不對(duì)的地方給我留言或?qū)懶拧?/FONT>

    我的站點(diǎn):http://plateau.sicool.com

    Feedback

    # re: iReport 和 Jasperreport整合開發(fā)web報(bào)表向?qū)?  回復(fù)  更多評(píng)論   

    2006-06-08 14:51 by zhuiyun
    你能不能指導(dǎo)我一下關(guān)于在WEB客戶端直接打印JasperReport報(bào)表的問題。
    我現(xiàn)在做出來的只能在自己的機(jī)上訪問,在其他機(jī)子上反問ie會(huì)自動(dòng)關(guān)閉。
    主站蜘蛛池模板: 99国产精品视频免费观看| 久久精品免费大片国产大片| 亚洲Av无码国产一区二区| 亚洲AV无码精品国产成人| 一本久久免费视频| 最好免费观看高清在线| 午夜不卡久久精品无码免费| 国产四虎免费精品视频| 在线观看永久免费视频网站| 亚洲国产成人精品91久久久| 国产亚洲精品资源在线26u| 伊人久久综在合线亚洲2019| 亚洲天堂免费在线| jizz免费观看| 99热这里只有精品6免费| 亚洲欧洲免费无码| 亚洲人成无码网站久久99热国产| 亚洲AV人无码激艳猛片| 四虎必出精品亚洲高清| 亚洲欧洲久久久精品| 在线观看亚洲av每日更新| 亚洲美女免费视频| 天天综合亚洲色在线精品| 最近更新免费中文字幕大全| 亚洲精品在线免费观看| 免费人成在线观看播放国产 | 亚洲va久久久久| 色老头综合免费视频| 久久不见久久见免费视频7| 国产乱子伦精品免费无码专区| 亚洲国产综合无码一区| 亚洲综合av一区二区三区| 精品国产福利尤物免费| 色se01短视频永久免费| 亚洲成A∨人片天堂网无码| 亚洲精品福利网站| 成人特级毛片69免费观看| 国产精品成人免费福利| 亚洲一区二区三区国产精品| 亚洲国产韩国一区二区| 国产精品福利在线观看免费不卡|