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

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

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

    efa's blog

    以用戶角度出發,你就已經成功一半了.

    導航

    <2007年2月>
    28293031123
    45678910
    11121314151617
    18192021222324
    25262728123
    45678910

    統計

    常用鏈接

    留言簿(18)

    我參與的團隊

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    Bi report

    dba

    info security

    other

    perl

    php

    python

    tech blogs

    tech websites

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    了解jasperreport ,讓web報表跑得更好

    一、為什么是jasperreport
             很簡單兩點:
        1 免費
        2 在大多數開源產品中最能滿足本人/公司的需求.
           如果要一句話總結那么就是 "適合就好!" ,其次再想插一句"其實jasperreport可以做得更好,只是缺少大家去發現。" 

                 在erp軟件開發中一套強大易用的報表工具還是相當重要的地位,在這里我只針對一些日常業務報表.
                  jasperreport + ireport 報表套裝在普通的報表中已做得很不錯:流水賬式的,分組報表都可以輕松實現.在這里提出的是一些相對特別以及少用到的報表設計問題.
                 當前版本 : jasperreport  1.1.0
                                     ireport  : 0.5.2

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

    2.分頁
               剛接觸jasper report ,無論是看其官方的example還是自己動手設計報表,  html view 總給人很深的印象:"怎么字體那么小,而且實際打印一下,分頁功能并沒真正實現"
            經過客戶一輪的抗義,最終還是下定決心去修補一下,
      其實jasper report 原理還是挺簡單:
        它默認的分頁方式是能過一輪的高度計算,再用兩個<br>就以為了事了.

    <table>
    <tr>
     
    <td>
       
    <table>
        
       
    </table>
       
    <br/> <!--兩個br分行標記-->
       
    <br/>
       
    <table>
        
       
    </table>
     
    </td>
    </tr>
    </table>


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

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

     

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

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

    5.斑馬線式顯示報表主體
       
    有時我們想讓報表更美化,讓用戶更方便地觀看數據,可以設置兩種色相隔.這種效果在jasperreport 中的example中有demo一下,大家如果想學習可以下載看看.

    6.交叉報表

       關于jasperreport的交叉報表設計網上還是有不小的討論,而真正實現的不多.我觀察過大多用jasperreport實現都是偽交叉報表.并不是真正實現真正的動態行與列.
       其實在jaspert report下載包中還是有個交叉報表的實現example(crosstabs),只不過據我了解,現在ireport還不能實現設計.只能通過手工寫jrxml文件實現.本人小試一下,還是挺不錯的.
     

    三、待研究
     通過繼承net.sf.jasperreports.engine.export.JRHtmlExporter ,還是能擴展不小的功能.例如用CSS格式化,可以大大減小代碼量,動態列/可設列寬度大大增強我們的報表功能.
     現本人初部實現100%寬度,不再用jasperreport中hardcode列度等等,以下三點還有待時間去跟進:)

    1.動態列
     
    2.可設列寬度

    3.CSS設計
      


     

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

    評論

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

    有點關于jasperreport的問題請教
    我下載了jasperreport1.1.0的代碼,其中有許多DEMO但是我卻運行不起來,老是報如下錯誤不知是何原因,但0.68版本卻可以,錯誤如下 :
    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] 嚴重: 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

    希望能指點一下,不勝感激,我的郵箱:kswdgx◎163.com
      回復  更多評論   

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

    good  回復  更多評論   

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

    打印問題設置為cm后依然存在  回復  更多評論   

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

    請教,如何能把jasper 生成的多個excel文件,合并為多個sheet的一個文件?我的郵箱 gll1976@yahoo.com.cn  回復  更多評論   

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

    如何分組?  回復  更多評論   

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

    @kswdgx
    我也碰到類似的問題了,一直google不到解決辦法,今兒解決了,所以就在這兒回復您吧,雖然看起來我們一問一答的時間差的很遠^^

    我的環境是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)

    只看到這兒,很容易聯想到是xml解析器jar包里的沖突,經排查是xercesImpl.jar包的問題,移出lib即可,這個包記得在我用hibernate時也沖突過,以后還得提防著他點兒^^  回復  更多評論   

    主站蜘蛛池模板: 国产性爱在线观看亚洲黄色一级片 | 韩国欧洲一级毛片免费| 国产91精品一区二区麻豆亚洲 | 自拍偷自拍亚洲精品播放| 丁香花免费完整高清观看| 久久久久亚洲av无码专区导航| 久久青草免费91观看| 亚洲自偷自偷在线制服| 大妹子影视剧在线观看全集免费| 亚洲综合色视频在线观看| 国产精品极品美女自在线观看免费| 国产精品亚洲w码日韩中文| 国产又黄又爽又大的免费视频| 国产精品亚洲аv无码播放| 免费国产黄网站在线观看视频| 亚洲尹人九九大色香蕉网站 | 亚洲人成国产精品无码| 老司机精品免费视频| 亚洲av无码一区二区三区不卡| 99在线观看免费视频| 亚洲偷自精品三十六区| 免费A级毛片在线播放不收费| jizz免费观看视频| 久久国产亚洲高清观看| 国内大片在线免费看| 好吊色永久免费视频大全 | 免费国产污网站在线观看15| 亚洲人成在线播放| 四虎亚洲国产成人久久精品| 国产在线观看无码免费视频| 亚洲黄色三级视频| 日本一道综合久久aⅴ免费| 国产特黄特色的大片观看免费视频| 亚洲高清无在码在线无弹窗| 永久免费的网站在线观看| 偷自拍亚洲视频在线观看| 久久久久久亚洲精品| 国产极品粉嫩泬免费观看 | 亚洲国产高清精品线久久| 久久精品视频免费播放| 国产亚洲精彩视频|