<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
    我是在一個星期以前接觸iReport Jasperreport的,下載最初它們并沒有吸引我的興趣(或信任),主要是他們的版本的問題(我一直不敢用版本都不到1.0的工具軟件,目前它們的版本:iReport0.2.2,Jasperreport0.5.0),不過聽說有人在用他們,于是就仔細看了一下(因為在java應用程序的web打印方面我一直都是采用瀏覽器打印,非常痛苦,所以寧可信其有不可信其無,呵呵……)

    一個星期下來,我針對項目中關于報表的一些需求點進行了嘗試,發現他們都可以解決,真實大快人心,于是今天把他們推薦給各位。

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

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

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

    相反iReport的文檔不多,也許作者認為其足夠簡單J,我也是經過無數的探索才有些開發的經驗。

     

    好了,讓我們進入上述兩者整合開發報表的歷程……

     

    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

     

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

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

     

     

    2.  Jasperreport是如何工作的?

     

    這里我就往簡單里說了。

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


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

     

    不過靜態的報表沒有什么意思,所以有句話說得好:

    A datasource + a jasper = a print

     

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

     

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

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

     

    如果在iReport以前,如果你要做報表,你要華上很長時間來熟悉Jasperreport的文檔,熟悉文檔的一個用途就是編寫那個xml文件,現在你只要他熟悉文檔的時間來熟悉iReport就可以了。

     

    3.  IReport初探

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

     

     

       如果以前你有過用vb或其他的開發工具開發報表的經驗的話,這個界面乍一看應該很熟悉的,如果碰巧你又熟悉java語言,哇,那么你用iReport應該易如反掌啊,呵呵J

     

    在上一篇文檔里我們初步介紹了iReportJasperreport,基本上我們已經對它們有了一個最初的認識,在今天這篇文檔里,我將深入的對iReport這個工具進行說明。

     

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

     

     

    點擊“新增”  按鈕可以創建一個新的空報表,考慮到生成后的XML文件編輯的時候可以顯示中文,請在xml encoding選項上GB2312(沒有選項自己手動輸入),如下圖:

     

    當設置玩必要的選項點擊完成可以得到一個空白的報表,如下圖:

     

     

    好了,輸入一段文本,很簡單,點擊創建“靜態文本”按鈕 ,然后在報表任何一個工作區(如title,pageheader,detail,pagefooter summary等等)輸入,如輸入“今天天氣不錯!”

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

     

    完工,一個最簡單的報表就生成了,iReport配有運行環境,如下快捷按鈕:

    左邊的按鈕是運行靜態報表(無需數據庫環境),右邊的是運行動態報表(這時需要設置數據庫連接,數據庫的連接載下面介紹)

     

    那么經過上遍的努力,很顯然我們將要運行的靜態報表,那么點擊左邊的按鈕就可以看到下面的pdf,如圖:

    當然上遍的例子是最簡單,呵呵J

     

    下面我將采用問答的方式進行逐步講解iReport的用法

    1. 如何連接數據庫?

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

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

    4. 如何執行SQL腳本進行查詢?

    5.  如何把做好的報表引入到應用程序中?

     

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

    1. 如何連接數據庫?

    靜態的報表其實很少的,我在前一篇文檔中有提到過一句經典的話:

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

    進入Datasource/Connections/Datasources菜單或者點擊 快捷按鈕,則出現下面屬性頁:


    進行必要的數據庫連接屬性配置,然后點擊test按鈕進行測試,如果提示測試成功,則保存數據庫連接,即可。

     

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

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

    Report properties 設置報表屬性

    Report query 設置查詢語句的,這個在下面有介紹

    Report fields設置字段(數據庫)

    Report variables設置變量

    Report parameters設置參數

    Report fonts 設置字體

    順便把下面的你個也說明一下

    Bands,彈出報表工作區(title detail)的屬性頁

    Report groups設置組

     

    Element properties 元素屬性頁

    Element browser 顯示報表所有元素的列表

     

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

    iReport中引用的方式,如下表

    元素

    名稱

    引用

    變量

    variablesName

    $V{ variablesName }

    參數

    parameterName

    $P{ parameterName }

    字段

    filedsName

    $F{ filedsName }

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

     

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

     

    因為考慮到使用亞洲字體,因此你需要下在額外的jariTextAsian.jar,如果iReport下載包中含有此jar包,此步驟可免。

     

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

     

    好,如上邊的設置就已經設置好宋體,以后在報表的任何地方都可以引用該字體,如下面我們要把我們在上邊的例子中的元素“今天天氣不錯!”改為用宋體,如下:

    這樣只要我們在Report font選項中選中songti 那么下面的屬性自動繼承,呵呵,方便吧J

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

     

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

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

     

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

                                <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=””是空的,于是我嘗試把系統黑體的TTF文件路徑(C:\WINNT\fonts\SIMHEI.TTF)寫到這個地方,哈哈,居然成功了。

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

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

    1. 如何連接數據庫?

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

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

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

           第一個就是我忘記說明iReport怎樣把xml文件編譯成jasper文件,其實很簡單,點擊“編譯”按鈕 即可,其實在你點擊兩種“運行 ”按鈕的是缺省的操作就是先對xml文件進行編譯。

    第二個就是如何設置iReport的輸出格式,我們在前面曾說過iReport可以以很多種格式進行輸出,如PDF,HTML,XML,XLS,CVS等等,那么我們該如何設置以何種方式輸出呢?

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

    PDF preview 缺省輸出格

    HTML preview 以網頁的格式輸出

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

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

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

     

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

     

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

    4. 如何執行SQL腳本進行查詢?

    5. 如何把做好的報表引入到應用程序中?

     

    接下來讓我們一個問題一個問題的解決它J

     

           4如何執行SQL腳本進行查詢?

    我們大家都知道,從數據查詢必須要有查詢語句,特別綜合查詢的時候可能sql語句會復雜的多,那么iReport是怎樣讓我們使用自己的查詢語句進行輸出的呢?我們在上一篇中曾提到過,呵呵J,希望你不會忘記,在菜單view下有Reprot query項,點擊則會彈出如下屬性頁:

    點擊上圖的“Save query to report”則會把這條SQL語句就會把這條查詢語句“引入”到報表中了,如果你此時查看XML文件,則會發現如下片斷:

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

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

      

    假設我們已經設置好連接數據,那么此時點擊“運行”按鈕 則會得到如下效果:

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

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

    其實在iReport中也可以很容易實現,記得我們在上一篇文檔中曾說過參數的使用方法,因此我不多說,我只把最終的sql語句寫給大家,相信大家一看就明白:

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

    是不是很簡單?J

     

    5. 如何把做好的報表引入到應用程序中?

    其實在問題4中,如果要運行帶參數的查詢報表的話,就會牽涉到問題5的,因此我在這里還是要引用問題4種的例子。

    此時我們就要引入一個jsp頁面,假設是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

          

           //以下忽略得到數據庫連接過程

    //……

    //……

                               

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

    %>

     

    還有一個必要的步驟就是把你下載的Jasperreport.jar放在你應用程序的lib下,

    好了,啟動你的應用程序,運行dbf.jsp則會看到如下效果

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

     

    當然上邊我給出的例子都是最簡單的,而且報表的排版也比較隨意,相信一點,精美的報表可是細活啊,呵呵J,多練習吧。

     

     

    總結

     

    這篇系列文檔總算寫完了,總覺得有點隨意的樣子,不過還是希望能給一點幫助,文檔中不乏有些淺嘗輒止的地方,希望你不明白的地方或認為我闡述的不對的地方給我留言或寫信。

    我的站點:http://plateau.sicool.com

    Feedback

    # re: iReport 和 Jasperreport整合開發web報表向導   回復  更多評論   

    2006-06-08 14:51 by zhuiyun
    你能不能指導我一下關于在WEB客戶端直接打印JasperReport報表的問題。
    我現在做出來的只能在自己的機上訪問,在其他機子上反問ie會自動關閉。
    主站蜘蛛池模板: 中文字幕亚洲精品资源网| 亚洲日韩国产欧美一区二区三区| 久久精品无码专区免费东京热| 亚洲大片免费观看| 国产一区二区三区在线免费观看 | 少妇高潮太爽了在线观看免费| 亚洲一本到无码av中文字幕| 免费午夜爽爽爽WWW视频十八禁| 黄色网站软件app在线观看免费| 亚洲三级在线视频| 亚洲免费一区二区| 久久久久久精品成人免费图片| 精品韩国亚洲av无码不卡区| 久久综合日韩亚洲精品色| 在线精品免费视频无码的| 国内精品免费久久影院| 伊人久久亚洲综合影院首页| 亚洲熟妇av一区二区三区漫画| 国产情侣激情在线视频免费看| 黄色免费在线观看网址| 亚洲欧洲国产综合| 亚洲精品人成无码中文毛片| 国产va精品免费观看| A毛片毛片看免费| 亚洲av日韩综合一区久热| 久久久无码精品亚洲日韩蜜臀浪潮| 国产一区二区三区在线免费观看| 午夜理伦剧场免费| 一个人看的www免费在线视频| 亚洲卡一卡二卡乱码新区| 亚洲爆乳无码一区二区三区| 免费在线观看日韩| 黄色永久免费网站| 久久综合九色综合97免费下载| 国产大陆亚洲精品国产| 最新国产成人亚洲精品影院| 亚洲AV成人一区二区三区AV| 国产国拍亚洲精品福利 | 自拍偷自拍亚洲精品第1页| 成年女人午夜毛片免费视频| 最近中文字幕无免费|