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

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

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

    efa's blog

    以用戶(hù)角度出發(fā),你就已經(jīng)成功一半了.

    導(dǎo)航

    <2007年1月>
    31123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    統(tǒng)計(jì)

    常用鏈接

    留言簿(18)

    我參與的團(tuán)隊(duì)

    隨筆分類(lèi)

    隨筆檔案

    文章分類(lèi)

    文章檔案

    Bi report

    dba

    info security

    other

    perl

    php

    python

    tech blogs

    tech websites

    最新隨筆

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    了解jasperreport ,讓web報(bào)表跑得更好

    一、為什么是jasperreport
             很簡(jiǎn)單兩點(diǎn):
        1 免費(fèi)
        2 在大多數(shù)開(kāi)源產(chǎn)品中最能滿(mǎn)足本人/公司的需求.
           如果要一句話(huà)總結(jié)那么就是 "適合就好!" ,其次再想插一句"其實(shí)jasperreport可以做得更好,只是缺少大家去發(fā)現(xiàn)。" 

                 在erp軟件開(kāi)發(fā)中一套強(qiáng)大易用的報(bào)表工具還是相當(dāng)重要的地位,在這里我只針對(duì)一些日常業(yè)務(wù)報(bào)表.
                  jasperreport + ireport 報(bào)表套裝在普通的報(bào)表中已做得很不錯(cuò):流水賬式的,分組報(bào)表都可以輕松實(shí)現(xiàn).在這里提出的是一些相對(duì)特別以及少用到的報(bào)表設(shè)計(jì)問(wèn)題.
                 當(dāng)前版本 : jasperreport  1.1.0
                                     ireport  : 0.5.2

    二、問(wèn)題與解決
               
    1.操作
            初用ireport 設(shè)計(jì)報(bào)表(特別是早期的版本)感覺(jué)還是比較原始,相對(duì)于birt 類(lèi)似于在 Dreamweaver中畫(huà)table 式的設(shè)計(jì)還是有點(diǎn)差距.但新版本(0.5.2)中也有不小的改善,增加了很多快速對(duì)齊,格式化的工具欄以及快捷操作方式.通過(guò)結(jié)合這些操作還算是方便了不少.

    2.分頁(yè)
               剛接觸jasper report ,無(wú)論是看其官方的example還是自己動(dòng)手設(shè)計(jì)報(bào)表,  html view 總給人很深的印象:"怎么字體那么小,而且實(shí)際打印一下,分頁(yè)功能并沒(méi)真正實(shí)現(xiàn)"
            經(jīng)過(guò)客戶(hù)一輪的抗義,最終還是下定決心去修補(bǔ)一下,
      其實(shí)jasper report 原理還是挺簡(jiǎn)單:
        它默認(rèn)的分頁(yè)方式是能過(guò)一輪的高度計(jì)算,再用兩個(gè)<br>就以為了事了.

    <table>
    <tr>
     
    <td>
       
    <table>
        
       
    </table>
       
    <br/> <!--兩個(gè)br分行標(biāo)記-->
       
    <br/>
       
    <table>
        
       
    </table>
     
    </td>
    </tr>
    </table>


           解決方案:
           好在jasperreport還提供了很好的擴(kuò)展方案.它允許我們自定義分頁(yè)方式(就是說(shuō)在兩頁(yè)/table之間能讓我們放自己的代碼),自己定義betweenPagesHtml 就OK了,可以能過(guò)CSS定義分頁(yè).在這里,我就直接改它代碼算了.大家可以自己選擇.
        
    net.sf.jasperreports.engine.export.JRHtmlExporter

    <!--CSS代碼-->
    pageEnd 
    {page-break-after:always}

     

    if (betweenPagesHtml == null)
                            
    {
                                writer.write(
    "<br class=\"pageEnd\">");   // 原來(lái)是兩個(gè) <br/>
                            }
     else
                            
    {
                                writer.write(betweenPagesHtml);
                            }

    3. 打印
          分頁(yè)解決后可以發(fā)現(xiàn)當(dāng)報(bào)表預(yù)覽時(shí)真的能一頁(yè)一頁(yè)分得很好.卻又發(fā)現(xiàn)了一個(gè)問(wèn)題.報(bào)表明顯不能滿(mǎn)一張A4張大小(ireport 設(shè)計(jì)選擇的是A4紙張),疑惑了一際子,其實(shí)不能算是BUG.
       ireport 報(bào)表屬性中明顯(21 * 29.7 CM) 一張A4紙的大小,為什么HTML出來(lái)的效果卻明顯小的那么多了.其實(shí)這與計(jì)算機(jī)的分辨率有關(guān)
       計(jì)算機(jī)中的分辨率,普遍是72 象素/英寸,而打印機(jī)普通是300象素/英寸.
       jasperreport 與ireport 默認(rèn)單位是px,我猜想如果用CM做單位的話(huà)可以解決這個(gè)問(wèn)題.但在這里我們的做法是盡量加大報(bào)表設(shè)計(jì)時(shí)的寬度與高度.另一個(gè)要注意的是記得將所有頁(yè)邊距設(shè)為0,因?yàn)檫@些設(shè)置在打印的時(shí)候已在IE/瀏覽器中設(shè)定了,不用重復(fù).
       
    4.分欄
          以前沒(méi)多注意,但剛用ireport新版本時(shí)可以發(fā)現(xiàn)在報(bào)表屬性設(shè)計(jì)的時(shí)候可以設(shè)置欄.這下子如果當(dāng)報(bào)表主體部分列數(shù)不多時(shí)實(shí)現(xiàn)分欄顯示,以節(jié)省紙張.

    5.斑馬線(xiàn)式顯示報(bào)表主體
       
    有時(shí)我們想讓報(bào)表更美化,讓用戶(hù)更方便地觀(guān)看數(shù)據(jù),可以設(shè)置兩種色相隔.這種效果在jasperreport 中的example中有demo一下,大家如果想學(xué)習(xí)可以下載看看.

    6.交叉報(bào)表

       關(guān)于jasperreport的交叉報(bào)表設(shè)計(jì)網(wǎng)上還是有不小的討論,而真正實(shí)現(xiàn)的不多.我觀(guān)察過(guò)大多用jasperreport實(shí)現(xiàn)都是偽交叉報(bào)表.并不是真正實(shí)現(xiàn)真正的動(dòng)態(tài)行與列.
       其實(shí)在jaspert report下載包中還是有個(gè)交叉報(bào)表的實(shí)現(xiàn)example(crosstabs),只不過(guò)據(jù)我了解,現(xiàn)在ireport還不能實(shí)現(xiàn)設(shè)計(jì).只能通過(guò)手工寫(xiě)jrxml文件實(shí)現(xiàn).本人小試一下,還是挺不錯(cuò)的.
     

    三、待研究
     通過(guò)繼承net.sf.jasperreports.engine.export.JRHtmlExporter ,還是能擴(kuò)展不小的功能.例如用CSS格式化,可以大大減小代碼量,動(dòng)態(tài)列/可設(shè)列寬度大大增強(qiáng)我們的報(bào)表功能.
     現(xiàn)本人初部實(shí)現(xiàn)100%寬度,不再用jasperreport中hardcode列度等等,以下三點(diǎn)還有待時(shí)間去跟進(jìn):)

    1.動(dòng)態(tài)列
     
    2.可設(shè)列寬度

    3.CSS設(shè)計(jì)
      


     

    posted on 2005-11-28 20:35 一凡@ITO 閱讀(13508) 評(píng)論(6)  編輯  收藏 所屬分類(lèi): Bi report Tools

    評(píng)論

    # re: 了解jasperreport ,讓web報(bào)表跑得更好 2006-02-15 22:02 kswdgx

    有點(diǎn)關(guān)于jasperreport的問(wèn)題請(qǐng)教
    我下載了jasperreport1.1.0的代碼,其中有許多DEMO但是我卻運(yùn)行不起來(lái),老是報(bào)如下錯(cuò)誤不知是何原因,但0.68版本卻可以,錯(cuò)誤如下 :
    Buildfile: H:\study\report\jasperreports-1.2.0-project\jasperreports-1.2.0\demo\samples\shapes\build.xml
    compile:
    [jrc] Compiling 1 report design files.
    [jrc] 2006-2-15 21:42:18 org.apache.commons.digester.Digester getParser
    [jrc] 嚴(yán)重: Digester.getParser:
    [jrc] org.xml.sax.SAXNotRecognizedException: Feature: http://apache.org/xml/features/validation/dynamic
    [jrc] at org.apache.crimson.parser.XMLReaderImpl.setFeature(Unknown Source)
    [jrc] at org.apache.crimson.jaxp.SAXParserImpl.setFeatures(Unknown Source)
    [jrc] at org.apache.crimson.jaxp.SAXParserImpl.<init>(Unknown Source)
    [jrc] at org.apache.crimson.jaxp.SAXParserFactoryImpl.newSAXParserImpl(Unknown Source)
    [jrc] at org.apache.crimson.jaxp.SAXParserFactoryImpl.setFeature(Unknown Source)
    [jrc] at org.apache.commons.digester.parser.XercesParser.configureXerces(XercesParser.java:185)
    [jrc] at org.apache.commons.digester.parser.XercesParser.newSAXParser(XercesParser.java:138)
    [jrc] at org.apache.commons.digester.ParserFeatureSetterFactory.newSAXParser(ParserFeatureSetterFactory.java:71)
    [jrc] at org.apache.commons.digester.Digester.getParser(Digester.java:692)
    [jrc] at org.apache.commons.digester.Digester.getXMLReader(Digester.java:899)
    [jrc] at org.apache.commons.digester.Digester.parse(Digester.java:1647)
    [jrc] at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:238)
    [jrc] at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:225)
    [jrc] at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:213)
    [jrc] at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:167)
    [jrc] at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:151)
    [jrc] at net.sf.jasperreports.engine.JasperCompileManager.compileReportToFile(JasperCompileManager.java:107)
    [jrc] at net.sf.jasperreports.ant.JRAntCompileTask.compile(JRAntCompileTask.java:398)
    [jrc] at net.sf.jasperreports.ant.JRAntCompileTask.execute(JRAntCompileTask.java:252)
    [jrc] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
    [jrc] at org.apache.tools.ant.Task.perform(Task.java:364)
    [jrc] at org.apache.tools.ant.Target.execute(Target.java:341)
    [jrc] at org.apache.tools.ant.Target.performTasks(Target.java:369)
    [jrc] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
    [jrc] at org.apache.tools.ant.Project.executeTarget(Project.java:1185)
    [jrc] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40)
    [jrc] at org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
    [jrc] at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
    [jrc] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423)
    [jrc] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137)
    File : H:\study\report\jasperreports-1.2.0-project\jasperreports-1.2.0\demo\samples\shapes\ShapesReport.jrxml ...

    BUILD FAILED
    H:\study\report\jasperreports-1.2.0-project\jasperreports-1.2.0\demo\samples\shapes\build.xml:30: java.lang.NullPointerException

    Total time: 2 seconds

    希望能指點(diǎn)一下,不勝感激,我的郵箱:kswdgx◎163.com
      回復(fù)  更多評(píng)論   

    # re: 了解jasperreport ,讓web報(bào)表跑得更好 2006-04-03 15:51 kelo

    good  回復(fù)  更多評(píng)論   

    # re: 了解jasperreport ,讓web報(bào)表跑得更好 2006-08-29 17:07 Tedeum

    打印問(wèn)題設(shè)置為cm后依然存在  回復(fù)  更多評(píng)論   

    # re: 了解jasperreport ,讓web報(bào)表跑得更好 2006-12-22 17:45 linger2008

    請(qǐng)教,如何能把jasper 生成的多個(gè)excel文件,合并為多個(gè)sheet的一個(gè)文件?我的郵箱 gll1976@yahoo.com.cn  回復(fù)  更多評(píng)論   

    # re: 了解jasperreport ,讓web報(bào)表跑得更好 2006-12-30 11:30 linger2008

    如何分組?  回復(fù)  更多評(píng)論   

    # re: 了解jasperreport ,讓web報(bào)表跑得更好 2007-04-26 18:18 caoyuan

    @kswdgx
    我也碰到類(lèi)似的問(wèn)題了,一直google不到解決辦法,今兒解決了,所以就在這兒回復(fù)您吧,雖然看起來(lái)我們一問(wèn)一答的時(shí)間差的很遠(yuǎn)^^

    我的環(huán)境是win2003 sp2,jdk1.5.0_11,resin-3.1.0

    [17:54:11.296] Compiling _jsp/_jsp/_compile__jsp.java
    [17:54:12.171] Digester.getParser:
    [17:54:12.171] org.xml.sax.SAXNotRecognizedException: http://apache.org/xml/feat
    ures/validation/dynamic
    [17:54:12.171] at com.caucho.xml.parsers.XmlSAXParserFactory.setFeature(XmlSAXP
    arserFactory.java:93)
    [17:54:12.171] at org.apache.commons.digester.parser.XercesParser.configureXerc
    es(XercesParser.java:185)
    [17:54:12.171] at org.apache.commons.digester.parser.XercesParser.newSAXParser(
    XercesParser.java:138)

    只看到這兒,很容易聯(lián)想到是xml解析器jar包里的沖突,經(jīng)排查是xercesImpl.jar包的問(wèn)題,移出lib即可,這個(gè)包記得在我用hibernate時(shí)也沖突過(guò),以后還得提防著他點(diǎn)兒^^  回復(fù)  更多評(píng)論   


    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲精品国产第一综合99久久| 99久久综合国产精品免费| 亚洲一卡2卡三卡4卡无卡下载 | 亚洲av激情无码专区在线播放| 成人一a毛片免费视频| 久久99精品免费视频| a级毛片免费观看网站| 色屁屁www影院免费观看视频| 亚洲专区一路线二| 亚洲天堂视频在线观看| 亚洲日韩精品无码一区二区三区| 国产在线98福利播放视频免费| 成人无遮挡毛片免费看| 1024免费福利永久观看网站| 久久久久国色av免费看| 中文字幕乱码一区二区免费| 一级毛片高清免费播放| 深夜a级毛片免费无码| 在线91精品亚洲网站精品成人| 亚洲成AV人影片在线观看| 天天爽亚洲中文字幕| 亚洲一级高清在线中文字幕| 亚洲美女精品视频| 亚洲免费视频播放| 日韩亚洲国产综合高清| 国产成人精品日本亚洲网址| 亚洲国产精品综合久久2007| 亚洲欧洲自拍拍偷综合| 亚洲激情黄色小说| 国产精品亚洲精品青青青| youjizz亚洲| 亚洲欧美日韩一区二区三区在线| 亚洲成年网站在线观看| 亚洲AV无码一区二区三区久久精品| 亚洲精品自偷自拍无码| 亚洲国产成人无码AV在线影院| 日韩国产欧美亚洲v片| 美女视频黄频a免费| 国产久爱免费精品视频 | 麻豆精品国产免费观看| 在线观看人成视频免费|