ireport与jasperreports开发总结?

一。  下载ireport( 官方网站:http://ireport.sourceforge.net),本人下载ireport3.7.0。


二。  搭建ireport+jasperreports java开发平台。将ireport3.7.0安装路径下

D:\iReport-3.7.0 \ireport\modules\ext下的(jasperreports-3.7.jar,

iText-  2.1.0.jar,iTextAsian.jar,commons-logging-1.1.jar,commons-collections-3.2.1.jar,

commons- digester-1.7.jar,poi-3.2-FINAL-20081019.jar,groovy-all-1.5.5.jar)的jar包加入到 

java classPath下。其中各jar包的版本以你下载的ireport的\ireport\modules\ext路径下jar为准。

各jar包作用如下:

jasperreports-3.7.jar:该包的作用完成ireport中Preview按扭功能。通过该包可以通过java来ireport生成摸班 

(.jrxml或.jasper)填充数据源并导出pdf,excel,html等格式文件。

iText-2.1.0.jar:生成pdf所依赖的包。

iTextAsian.jar:支持pdf中文字体依赖的包。

groovy-all-1.5.5.jar:将.jrxml编译成.jasper.如果你不使用java编译,而使用ireport工具编译则无须导入该 包。

commons-digester-1.7.jar:解析.jrxml

poi-3.2-FINAL-20081019.jar:生成excel报表所依赖的jar






三。使用javaBean数据源开发子报表例子如下:

      第一步:创建主报表javaBean(货物)如下(set,get方法省列):

public class DailySales implements Serializable {

private static final long serialVersionUID = 1L;

     private String productNo;//货物代号

     private String productName;//货物名称

     private int number;

     private int money;//货物价格

     private int id;//货物唯一标识

     private List dailyZooms;//货物销售地区(子报表)

     public DailySales(String productNo, String productName, int number, int money,

List   dailyZooms) {

this.productNo = productNo;

this.productName = productName;

this.number = number;

this.money = money;

this.dailyZooms = dailyZooms;

}

}




   第二步:创建子报表报表javaBean(货物销售地区)如下(set,get方法省列):

  public class DailyZoom implements Serializable {

    private String name;

    private BigDecimal amounts;

public DailyZoom(String name, BigDecimal amounts) {

this.name = name;

this.amounts = amounts;

}

}

注意:如果在报表中需要排序则上述类必须实现Comparable接口,并实现其方法。




 第三步:创建DailySalesFactory工厂类提供集合数据源如下:

public class DailySalesFactory {

private static DailySales[] data = { new DailySales(" 货号 1", " 物品1 ", 1, 1000, getDailyZoom()),

new DailySales(" 货号 2", " 物品 2", 2, 2000, getDailyZoom()),

new DailySales(" 货号 3", " 物品 3", 3, 3000, getDailyZoom()),

new DailySales(" 货号 4", " 物品 4", 4, 4000, getDailyZoom()),

new DailySales(" 货号 5", " 物品 5", 5, 5000, getDailyZoom()),

new DailySales(" 货号 6", " 物品 6", 6, 6000, getDailyZoom()),

new DailySales(" 货号 7", " 物品 7", 7, 7000, getDailyZoom()),

new DailySales(" 货号 8", " 物品 8", 8, 8000, getDailyZoom()),

new DailySales(" 货号 9", " 物品 9", 9, 9000, getDailyZoom()),

new DailySales(" 货号 10", " 物品 10", 10, 10000, getDailyZoom()) };

public static Object[] getBeanArray() {

return data;

}

public static Collection getBeanCollection() {

return Arrays.asList(data);

}

public static List getDailyZoom() {

List dailyZooms = new ArrayList();

dailyZooms.add(new DailyZoom("厦门", new BigDecimal(123.00)));

dailyZooms.add(new DailyZoom("南昌", new BigDecimal(456.00)));

return dailyZooms;

}

}

将上述创建的类设置到ireport3.7.0的classPath目录下(工具》选项》classPath),然后配置javaBean数据源如下:





注意:(1)pdf中文设定:首先将iTextAsian.jar設置到classPath下.然後fonts path下勾選iTextAsian.jar路徑和jasperreports-extensions-3.5.3.jar路徑,最後将会显示中文的文本Pdf Font name is now deprecated:STSong-Light,pdfExcoding:UniGB-UCS2-V (Chinese Simplified)(V是从上往下显示,H是从左往右显示)。

         (2)上下和左右表格要对其,否则生成的excel会很乱。

         (3)Parameters,Fields,Variables区别:Parameters是保存从java外部传进来的参数,Fields是Sql或javaBean数据查询返回的字段,Variables是ireport计算或保存值的。

         (4)分页:强行分页可直接使用Break控件,程序控制分页(让它每显示20条就自动分页)在该print when expression里面写表达式,如下:new Boolean($V{total}.intValue() % 20 == 0)    total是数据总量

         (5)分組統計的報表.每一分組一頁(在ireport中***group foot1勾選start on a new page).

    第五步:使用数据源开发子报表如下:



注意:(1)Subreport Expression中$P{SUBREPORT_DIR} + "javaBeanReport_subreport1.jasper"中为子报表编译后文件的路径,其中$P{SUBREPORT_DIR} 是从java中传进子报表路径。

          (2)Data Source Expression:new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{dailyZooms})是使用主报表List集合构造子报表JavaBean数据源。

第五步:从java中加载ireport做好的模板生成报表如下:

     将集合转换成javaBeanDataSource:

JRBeanCollectionDataSource javaBeanDataSource = new JRBeanCollectionDataSource(results);

将jrxml编译成jasper:

JasperReport jasperReport = JasperCompileManager.compileReport("c:/javaBeanReport.jrxml");

生成JasperPrint对象:

     JasperPrint jasperPrint = JasperFillManager.fillReport

(jasperReport,parameters,  javaBeanDataSource);parameters为要传如的参数Map对象

生成pdf流对象:JasperExportManager.exportReportToPdfStream(jasperPrint, stream);

调用ireport中JasperViewer查看pdf

JasperViewer jrview = new JasperViewer(jasperPrint);

jrview.setPreferredSize(new Dimension(200, 100));

jrview.setVisible(true);

    生成excel代码如下:

JRXlsExporter exporter = new JRXlsExporter();

exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT, jasperPrint);

exporter.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, streamExcel);

exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,  Boolean.FALSE);

exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);

exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);

exporter.exportReport();


    子报表需注意的java代码:

Map parameters = new HashMap();

parameters.put("SUBREPORT_DIR", "C:/Documents and Settings/user/桌面/");

     如果有子报表必须从java端将SUBREPORT_DIR参数传给ireport


    大量数据内存处理(磁盘建立目录来优化内存):

JRFileVirtualizer对象如JRFileVirtualizer  virtualizer = new JRFileVirtualizer(2, "tmp");

然后数据填充时传一个参数即可如:

Map parameters = new HashMap();

parameters.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);

    第六步:显示效果如下:



  四:与与struts2.0整合(导入struts2-jasperreports-plugin-2.0.12.jar包)


          default">

/reports/demoReport.jasper

list

PDF

map


location - 提供利用iReport制作编译好的报表文件。

dataSource - 数据源

format - 报表输出格式

reportParameters - 报表参数

  五:常见的异常:

       (1)spring+jasperReport生成PDF格式的报表时报

    java.lang.NoSuchMethodError: com.lowagie.text.pdf.PdfWriter.setRgbTransparencyBlending(Z)V异常

    原因:iText.jar文件过旧,将之改为2.1版就没事了。

(2)java.lang.NoClassDefFoundError: org/codehaus/groovy/control/CompilationFailedException异常 

原因:没有导入 groovy-all.jar 包,导入 groovy-all.jar 包就可以了。 

(3)Excle 应用: 

java.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFCellStyle 

出现上述错误提示加入 poi-3.2-FINAL-20081019.jar 

(4)net.sf.jasperreports.engine.JRRuntimeException: Could not load the following font : 

pdfFontName   : STSong-Light 

pdfEncoding   : UniGB-UCS2-H 

isPdfEmbedded : false 

出现上述错误提示加入 

iTextAsian.jar 

(5)java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester 

出现上述错误提示加入 commons-digester-1.7.jar   iReport/lib  功能简述:解析 xml 文件; 

(6)java.lang.NoClassDefFoundError: org/apache/commons/collections/ArrayStack 出现上述错误提示加入 

commons-beanutils-1.7.jar    iReport/lib 

(7)java.lang.NoClassDefFoundError: org/apache/commons/collections/ReferenceMap 出现上述错误提示加入 

commons-collections-2.1.jar   iReport/lib 


(8)

异常:Found two components for namespace http://jasperreports.sourceforge.net/jasperreports/components 

解决方法.查看是否在工程目录添加了外部jar [jasperreports-X.X.X.jar],[jasperreports-X.X.X-javaflow.jar]

如果有同时添加了这两个jar.移除[jasperreports-3.5.3-javaflow.jar] 则可.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,600评论 18 139
  • /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home...
    光剑书架上的书阅读 3,856评论 2 8
  • 如果你去百度搜「重要的事情说三遍」,还能发现这句话出自哪里,何时开始火,为何会火。之后,这句话就经常地被用到各种广...
    老马不老阅读 731评论 0 0
  • 写在双十一前。 西部世界里的威廉原本在现实世界那么规矩,最初有些腼腆还很善良,在西部世界逐渐成为了那个残暴暴力的黑...
    喜宝小丸子阅读 718评论 0 0