JasperReport学习必备手册
- 格式:docx
- 大小:10.30 KB
- 文档页数:3
2 API 概述大多数情况下,人们使用JasperReports的类库的时候都只会用到一小部分,并且不会对所有的API有个整体的概念。
在这一章节里让我们近距离的来看一下那些在使用时有重要意义的类和接口。
同时也可以了解在需要使用到JasperReports报表功能的应用程序里怎样使用这些类和接口。
Class dori.jasper.engine.design.JasperDesign从这个类开始介绍是因为这个类的实例为JasperReports生成报表提供原材料。
在JasperReprots使用内部的XML解析器解析了XML报表设计文件后便生成了dori.jasper.engine.design.JasperDesign实例。
如果应用程序不使用XML文件,这个实例的生成也可以通过编程来实现。
在提供源代码的例子里有一个叫做noxmldesign的例子,通过它你可以了解到如何不写XML报表设计文件而动态的生成一个dori.jasper.engine.design.JasperDesign实例。
所有dori.jasper.engine.design.JasperDesign类的实例在被填充和生成报表使用之前已经被编译出来了。
这就是我说它为类库提供原材料的原因。
Class dori.jasper.engine.JasperReport这个类的实例是编译好的报表设计对象。
它只会作为JasperReports报表编译的结果获得,并在填充表格和生成报表时被使用。
为了以后更快速的使用,在通过不通程度的检查和报表元素整理后,这个类库创建了一个临时文件存放包括报表变量表达式、文本域和图形表达式组表达式等所有的报表表达式信息。
这个临时Java源文件可以在两种情况下被编译。
一是在使用中编译,还有一种是被JDK编译。
如果在classpath里没有发现tools.jar e文件,编译器就会通过运行javac.exe来编译这个文件。
jasperReports、iReport使用说明相关网址JasperReport下载地址: IReport下载地址:iText亚洲语言包下载地址:/iText JasperReports API 帮助:/api/1. readme为什么需要JasperReports?JasperReports是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF,HTML,XML,Excel(通过POI或JExcelAPI实现)和Rtf(通过POI实现)格式。
该库完全由Java写成,可以用于在各种Java应用程序,包括J2EE,Web应用程序中生成动态内容。
它的主要目的是辅助生成面向页面的(page oriented),准备付诸打印的文档。
JasperReport借由定义于XML文档中的report design进行数据组织。
这些数据可能来自不同的数据源,包括关系型数据库,collections,java对象数组。
通过实现简单的接口,用户就可以将report library插入到订制好的数据源中。
为什么需要iReport?JasperReport借由定义于XML文档中的report design进行数据组织但是繁琐的XML标记和功能API在提供强大的动态及可扩展开发的同时也带来了超高的复杂性,所以我们需要一个图形化可视的IDE来编辑符合jasperReports API的XML文件。
而iReport正是这样一款工具。
我们用iReport可以进行可视化的报表设计。
然而任何事物都不是十全十美的,iReport这一款工具带给我们方便、快捷、直观的同时,也损失了报表设计的灵活性。
但就其实用性而言,所损失的灵活性也就微乎其微了。
2. iReport上手(1) 语言设置,安装好iReport以后,默认语言是繁体中文(2) 下面是一个较快上手的小例子,如有基础,可以跳过,无须浪费时间为新建报表起点击这里,在页面上拖双击可修改显示内容(3) iReport 各部分简单说明运行效果页头域数据域,需要迭代的数据放在这里列脚域页脚域这个页脚,只在最后一图形,图片放在这个域里·Title:每个报表一般会有一个名字,比如×××销售报表,title就是搁置这个名称的最好地方了,当然你也可以根据需要搁置在合适的地方。
JasperReport4.0.1 用户手册目录1.介绍 (4)2.准备工作 (4)2.1环境要求 (4)2.2下载 (5)3.报表生命周期 (5)4.报表结构 (5)5.Report Datasource (6)5.1 Database JDBC connection (6)5.2 JavaBeans set datasource (9)5.3 File CSV datasource (11)5.4 Microsoft Excel(xls)data source (12)6.报表元素(Report Elements) (12)6.1 Static Texts (12)6.2 Text Field (13)6.3 Crosstab(交叉报表) (13)6.3.1 基本设置 (13)6.3.2 设置报表的语言 (15)6.3.3 对Row Groups中的变量的操作 (16)6.3.3 对Column Groups中的变量的操作 (17)6.3.4 对Measures中的变量的操作 (17)6.3.5 预览报表效果 (18)6.4 List (18)6.4.1 设置List引用的dataset,为List所引用的参数赋值 (18)6.4.2 设置List中内容的扩展方向 (18)6.4.3 设置List中内容的扩展个数 (19)6.4.4 示例中的报表的设计以及运行效果如下图(截取部分) (19)6.5 Table(表格) (20)6.5.1 Table如何获得连接 (20)6.5.2 如何向Table中的参数传值 (20)6.5.3 如何删除或添加一列 (20)6.6 Break(分页符) (20)6.7 Chart(图表) (20)6.8 Subreport (22)6.8.1 为子报表的参数传值 (22)6.8.2 子报表向主报表返回值 (23)7.其它内容 (23)7.1 分组报表 (23)7.2组件对齐技巧 (24)7.3 Style (24)7.4 Scriptlet (25)8、使用中出现的问题以及解决办法 (26)用户手册中demo 需要导入数据源,导入方法:1.介绍iReport 是一个能够创建复杂报表的开源项目,它是用Java 语言编写的,是目前全球较为流行的开源报表设计器。
JasperReport学习笔记5-其它数据⽣成动态的报表(WEB)1.空数据(Empty Datasources)就是说JRXML⽂件⾥⾯的内容都是静态的,直接使⽤JREmptyDataSource就⾏了Java代码1. JasperRunManager.runReportToPdfStream(reportStream,2. servletOutputStream, new HashMap(), new JREmptyDataSource());2.Map数组(Map Datasources)有的时候数据不⼀定要从数据库⾥⾯来,还有可能从Map数组⾥⾯来成⽣Map[]的⽅法Java代码1. private Map[] initializeMapArray()2. {3. //你可以把数组⾥⾯的每个map看成⼀个对象,就相于数据库⾥⾯的每个字段4. HashMap[] reportRows = new HashMap[4];5. HashMap row1Map = new HashMap();6. HashMap row2Map = new HashMap();7. HashMap row3Map = new HashMap();8. HashMap row4Map = new HashMap();9. row1Map.put("tail_num", "N263Y");10. row1Map.put("aircraft_serial", "T-11");11. row1Map.put("aircraft_model", "39 ROSCOE TRNR RACER");12. row1Map.put("engine_model", "R1830 SERIES");13. row2Map.put("tail_num", "N4087X");14. row2Map.put("aircraft_serial", "BA100-163");15. row2Map.put("aircraft_model", "BRADLEY AEROBAT");16. row2Map.put("engine_model", "R2800 SERIES");17. row3Map.put("tail_num", "N43JE");18. row3Map.put("aircraft_serial", "HAYABUSA 1");19. row3Map.put("aircraft_model", "NAKAJIMA KI-43 IIIA");20. row3Map.put("engine_model", "R1830 SERIES");21. row4Map.put("tail_num", "N912S");22. row4Map.put("aircraft_serial", "9973CC");23. row4Map.put("aircraft_model", "PA18-150");24. row4Map.put("engine_model", "R-1820 SER");25. reportRows[0] = row1Map;26. reportRows[1] = row2Map;27. reportRows[2] = row3Map;28. reportRows[3] = row4Map;29. return reportRows;30. }⽣成JRMapArrayDataSource对象Java代码1. private JRDataSource createReportDataSource()2. {3. JRMapArrayDataSource dataSource;4. Map[] reportRows = initializeMapArray();5. dataSource = new JRMapArrayDataSource(reportRows);6. return dataSource;7. }Servlet⾥⾯Java代码1. JRDataSource dataSource = createReportDataSource();2. JasperRunManager.runReportToPdfStream(reportStream,3. servletOutputStream, new HashMap(), dataSource);3.Map集合Java代码1. private JRDataSource createReportDataSource()2. {3. JRMapCollectionDataSource dataSource;4. Collection reportRows = initializeMapCollection();5. dataSource = new JRMapCollectionDataSource(reportRows);6. return dataSource;7. }8. private Collection initializeMapCollection()9. {10. ArrayList reportRows = new ArrayList();11. HashMap row1Map = new HashMap();12. HashMap row2Map = new HashMap();13. HashMap row3Map = new HashMap();14. HashMap row4Map = new HashMap();15. row1Map.put("tail_num", "N263Y");16. row1Map.put("aircraft_serial", "T-11");17. row1Map.put("aircraft_model", "39 ROSCOE TRNR RACER");18. row1Map.put("engine_model", "R1830 SERIES");19. row2Map.put("tail_num", "N4087X");20. row2Map.put("aircraft_serial", "BA100-163");21. row2Map.put("aircraft_model", "BRADLEY AEROBAT");22. row2Map.put("engine_model", "R2800 SERIES");23. row3Map.put("tail_num", "N43JE");24. row3Map.put("aircraft_serial", "HAYABUSA 1");25. row3Map.put("aircraft_model", "NAKAJIMA KI-43 IIIA");26. row3Map.put("engine_model", "R1830 SERIES");27. row4Map.put("tail_num", "N912S");28. row4Map.put("aircraft_serial", "9973CC");29. row4Map.put("aircraft_model", "PA18-150");30. row4Map.put("engine_model", "R-1820 SER");31. reportRows.add(row1Map);32. reportRows.add(row2Map);33. reportRows.add(row3Map);34. reportRows.add(row4Map);35. return reportRows;36. }使⽤Java代码1. JRDataSource dataSource = createReportDataSource();2. JasperRunManager.runReportToPdfStream(reportStream,3. servletOutputStream, new HashMap(), dataSource);4.对象数组(Java Objects as Datasources)对象JAVABEANJava代码1. public class AircraftData2. {3. public AircraftData(String tail, String serial, String model,4. String engine)5. {6. setTailNum(tail);7. setAircraftSerial(serial);8. setAircraftModel(model);9. setEngineModel(engine);10. }11. public AircraftData()12. {13. }14. private String tailNum;15. private String aircraftSerial;16. private String aircraftModel;17. private String engineModel;18. //set get method.....19. }JRXML⽂件Java代码1. <?xml version="1.0" encoding="UTF-8"?>2. <!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"3. "/dtds/jasperreport.dtd">4. <jasperReport name="AircraftReport">5. <field name="tailNum" class="ng.String"/>6. <field name="aircraftSerial" class="ng.String"/>7. <field name="aircraftModel" class="ng.String"/>8. <field name="engineModel" class="ng.String"/>9. <pageHeader>10. <band height="30">11. <staticText>12. <reportElement x="0" y="0" width="69" height="24"/>13. <textElement verticalAlignment="Bottom"/>14. <text>15. <![CDATA[Tail Number: ]]>16. </text>17. </staticText>18. <staticText>19. <reportElement x="140" y="0" width="69" height="24"/>20. <text>21. <![CDATA[Serial Number: ]]>22. </text>23. </staticText>24. <staticText>25. <reportElement x="280" y="0" width="69" height="24"/>26. <text>27. <![CDATA[Model: ]]>28. </text>29. </staticText>30. <staticText>31. <reportElement x="420" y="0" width="69" height="24"/>32. <text>33. <![CDATA[Engine: ]]>34. </text>35. </staticText>36. </band>37. </pageHeader>37. </pageHeader>38. <detail>39. <band height="30">40. <textField>41. <reportElement x="0" y="0" width="69" height="24"/>42. <textFieldExpression class="ng.String">43. <![CDATA[$F{tailNum}]]>44. </textFieldExpression>45. </textField>46. <textField>47. <reportElement x="140" y="0" width="69" height="24"/>48. <textFieldExpression class="ng.String">49. <![CDATA[$F{aircraftSerial}]]>50. </textFieldExpression>51. </textField>52. <textField>53. <reportElement x="280" y="0" width="69" height="24"/>54. <textFieldExpression class="ng.String">55. <![CDATA[$F{aircraftModel}]]>56. </textFieldExpression>57. </textField>58. <textField>59. <reportElement x="420" y="0" width="69" height="24"/>60. <textFieldExpression class="ng.String">61. <![CDATA[$F{engineModel}]]>62. </textFieldExpression>63. </textField>64. </band>65. </detail>66. </jasperReport>调⽤Java代码1. private JRDataSource createReportDataSource()2. {3. JRBeanArrayDataSource dataSource;4. AircraftData[] reportRows = initializeBeanArray();5. dataSource = new JRBeanArrayDataSource(reportRows);6. return dataSource;7. }8.9. private AircraftData[] initializeBeanArray()10. {11. AircraftData[] reportRows = new AircraftData[4];12. reportRows[0] = new AircraftData("N263Y", "T-11", "39 ROSCOE TRNR13. RACER", "R1830 SERIES");14. reportRows[1] = new AircraftData("N4087X", "BA100-163", "BRADLEY15. AEROBAT", "R2800 SERIES");16. reportRows[2] = new AircraftData("N43JE", "HAYABUSA 1", "NAKAJIMA17. KI-43 IIIA", "R1830 SERIES");18. reportRows[3] = new AircraftData("N912S", "9973CC", "PA18-150",19. "R-1820 SER");20. return reportRows;21. }22.23. //最后servlet⾥⾯调⽤24. JRDataSource dataSource = createReportDataSource();25. JasperRunManager.runReportToPdfStream(reportStream,26. servletOutputStream, new HashMap(), dataSource);5.对象集合和对象数组基本上⼀样,就是最后⽣成的是JRBeanCollectionDataSourceJava代码1. private JRDataSource createReportDataSource()2. {3. JRBeanCollectionDataSource dataSource;4. Collection reportRows = initializeBeanCollection();5. dataSource = new JRBeanCollectionDataSource(reportRows);6. return dataSource;7. }8.9. JRDataSource dataSource = createReportDataSource();10. JasperRunManager.runReportToPdfStream(reportStream,11. servletOutputStream, new HashMap(), dataSource);6.XML数据成⽣报表(XML as Datasource)Xml代码1. <?xml version="1.0" encoding="UTF-8"?>2. <AircraftData>3. <aircraft>4. <tail_num>N263Y</tail_num>5. <aircraft_serial>T-11</aircraft_serial>6. <aircraft_model>39 ROSCOE TRNR RACER</aircraft_model>7. <engine_model>R1830 SERIES</engine_model>8. </aircraft>9. <aircraft>10. <tail_num>N4087X</tail_num>11. <aircraft_serial>BA100-163</aircraft_serial>12. <aircraft_model>BRADLEY AEROBAT</aircraft_model>13. <engine_model>R2800 SERIES</engine_model>14. </aircraft>15. <aircraft>16. <tail_num>N43JE</tail_num>17. <aircraft_serial>HAYABUSA 1</aircraft_serial>18. <aircraft_model>NAKAJIMA KI-43 IIIA</aircraft_model>19. <engine_model>R1830 SERIES</engine_model>20. </aircraft>21. <aircraft>22. <tail_num>N912S</tail_num>23. <aircraft_serial>9973CC</aircraft_serial>24. <aircraft_model>PA18-150</aircraft_model>25. <engine_model>R-1820 SER</engine_model>26. </aircraft>27. </AircraftData>这样获得Java代码1. JRXmlDataSource xmlDataSource = new JRXmlDataSource(2. new BufferedInputStream(getServletConfig().getServletContext()3. .getResourceAsStream("/reports/AircraftData.xml")),4. "/AircraftData/aircraft");JREmptyDataSource,JRMapArrayDataSource,JRMapCollectionDataSource,JRBeanArrayDataSource,JRBeanCollectionDataSource,JRXmlDataSource他们都implements JRDataSource主要⽬地就是不从数据库⾥⾯取数据,这个⽅⾯和Hibernate结合。
JasperReport框架使⽤教程(附带常见空⽩页问题说明)概述与安装使⽤1. PDF报表概述概述在企业级应⽤开发中,报表⽣成、报表打印下载是其重要的⼀个环节。
在之前的课程中我们已经学习了报表中⽐较重要的⼀种:Excel报表。
其实除了Excel报表之外,PDF报表也有⼴泛的应⽤场景,例如货运详情,货运单等。
常见PDF报表的制作⽅式⽬前世⾯上⽐较流⾏的制作PDF报表的⼯具如下:1. iText PDF:iText是著名的开放项⽬,是⽤于⽣成PDF⽂档的⼀个java类库。
通过iText不仅可以⽣成PDF或rtf的⽂档,⽽且可以将XML、Html⽂件转化为PDF⽂件。
2. Openoffice:openoffice是开源软件且能在windows和linux平台下运⾏,可以灵活的将word或者Excel转化为PDF⽂档。
3. Jasper Report:是⼀个强⼤、灵活的报表⽣成⼯具,能够展⽰丰富的页⾯内容,并将之转换成PDFJasperReport框架的介绍JasperReport是⼀个强⼤、灵活的报表⽣成⼯具,能够展⽰丰富的页⾯内容,并将之转换成PDF,HTML,或者XML格式。
该库完全由Java 写成,可以⽤于在各种Java应⽤程序,包括J2EE,Web应⽤程序中⽣成动态内容。
只需要将JasperReport引⼊⼯程中即可完成PDF报表的编译、显⽰、输出等⼯作。
在开源的JAVA报表⼯具中,JASPER Report发展是⽐较好的,⽐⼀些商业的报表引擎做得还好,如⽀持了⼗字交叉报表、统计报表、图形报表,⽀持多种报表格式的输出,如PDF、RTF、XML、CSV、XHTML、TEXT、DOCX以及OpenOffice。
数据源⽀持更多,常⽤ JDBC SQL查询、XML⽂件、CSV⽂件、HQL(Hibernate查询),HBase,JAVA集合等。
还允许你义⾃⼰的数据源,通过JASPER⽂件及数据源,JASPER就能⽣成最终⽤户想要的⽂档格式。
JasperReport详解_(1)报表设计基础及JasperReort,JFreeChart简明教程摘要本⽂先从通⽤的⾓度定义了与报表相关的各种概念。
然后介绍了怎么应⽤JasperReport和Ireport设计报表,最后介绍了怎么使⽤JfreeChart⽣成图形报表。
⽂章中出现的很多概念和定义都出⾃作者⾃⼰的思考,没有通⽤性,在阅读时请不必深究它的准确性。
1、什么是报表,什么是报表应⽤程序1.1 什么是报表报表是数据统计结果的呈现。
常见的报表格式有表格、数据⽴⽅体(多维表)、曲线图、直⽅图、饼图等等,其中以表格最为常见。
总结各种报表的共同特征,可以这样来定义报表的结构。
⼀般来说,Report = Title + Page(s) + Report FooterPages(s)表⽰⼀个报表可能有⼀页或多页Page = PageHeader + Content + PageFooterContent则代表真正的数据,它⼀般由若⼲列和若⼲⾏组成。
Content = ColumnHeader + Row(s) + ColumnFooter⼀个报表的结构可以表⽰为下图所⽰的树形:这棵树中的所有叶结点,就构成了报表的实体。
⼀个叶结点⼀般称作⼀个Band,从上到下排列,⼀个Report的组成如下图所⽰:下图是⼀个报表的例⼦。
它有3页。
1.2 计算机上的报表与报表应⽤程序可以利⽤计算机处理数据和界⾯设计的功能来⽣成、展⽰报表。
计算机上的报表的主要特点是动态化。
已经有各种各样的计算机报表设计⼯具,它们⼀般提供格式设计和数据填充等功能。
⼴义地讲,EXCEL、WORD、甚⾄写字板都可以算作报表设计⼯具,但是它们没有定义专门的报表结构,也⽆法实现报表格式和报表数据的动态决定,⽆法实现计算机报表的“动态化”特性,也就是说不能⽤它来开发“报表应⽤程序”,所以它们⼀般不能视为报表设计⼯具。
⽽所谓报表应⽤程序,指的是能够在运⾏时动态地决定报表格式和报表数据的应⽤程序,它必须要实现数据格式和数据内容之间的分离,也就是报表和数据源之间的分离。
JasperReports最终用户手册中文版第四章报表设计jasperreports最终用户手册中文版第四章报表设计第四章报告设计thereportdesignrepresentsatemplatethatwillbeusedbythejasperreportsenginetodeli verdynamiccontenttotheprinter,tothescreenortotheweb.datastoredinthedatabaseiso rganizedduringthereportfillingprocessaccordingtothisreportdesigntoobtainreadyt oprint,pageorienteddocuments.通常,“报告设计”包括数据填充后形成的文件的结构和内容有的其他方面的信息。
这些信息包括将要输出到报表上的各种文本,图像元素的位置,内容,以及要进行的数据计算,自定义计算,分组,操作等信息。
通常情况下,报表设计包含所有与文档结构和视图相关的信息,这些信息将在提供数据时生成。
这些信息涉及文档中出现的各种文本或图形元素的位置和范围、它们的外观、生成文档时应执行的客户计算、数据分组和数据处理等。
一般,“报表设计(reportdesign)”用一种特殊的结构定义在xml文档中(我们会在稍后详细分析),在被填充数据前,这一过程属于jasperreports报表的编辑阶段。
但是“报表设计(reportdesign)”也可以用jasperreportsapi以编程的方式在内存中构造.随jasperreports项目源文件一起提供了一个noxmldesign(noxmldesign)例子介绍了如何直接在内存中创建“报表设计(reportdesign)”,而不用编辑xml文档。
4.1 DTD文件参考用xml文档来编辑“报表设计(reportdesign)”时,jasperreports用它自己内部专用的验证本文件内容的DTD文件。
1.1跟我学JasperReports报表框架——iReport报表工具的应用详解1.1.1iReport报表制作工具的基本应用1、建立一个新的报表(1)选择文件菜单中的“开启新档”菜单项目单击工具栏的第一个工具“New Report”,新建一个报表,输入报表名称和定义报表的一些参数。
(2)设置该文档的属性在“预设尺寸”区内选择所要用的纸张及尺寸,在这里选择默认参数并输入名称为“我的第一个报表”。
选择文档的排版方式,“Portrait”是纵向排布,即我们常用的排布方式,选择“Landscape”表示横向排布,这适合于一行数据很多,超过平常一行的显示的情况。
(3)让本文档支持中文可以修改"i18n"选项卡中的“XML 编码”,默认参数为"UTF-8"(如果认为有必要可以手动输入"GB2312")。
填写或是选择XML编码,这是关系到你的XML支持的字符集的选择,请根据需要选择,比如需要你的XML文件支持中文,那么可以输入或是GBK,之后点击【OK】按钮,进入报表的设计界面。
如果没有见到,可以打开或者出现错误时如果以后还需要对属性进行修改,则可以采用下面的方式进入。
2、保存该报表文档最后产生出下面的结果3、第二次如果还需要打开找到上次保存的文件名称,将加载目标文件(*.jrxml)4、在iReport中建立数据库连接仅显示静态文本的报表是没有什么用的,要连接数据库显示动态内容才有用,这里我们就演示一下,如何实现在客户端(不是Web中)发布报表页连接数据库生成动态报表的目的。
如何利用JasperReport 的API,在Web中发布动态报表,后面将再介绍。
(1)添加JDBC的驱动首先把SQL Server 2000连接Java的驱动包放入iReport组件所在目录的lib中,这样iReport组件才可以使用数据源,本示例计划采用JDTS的JDBC驱动程序,因此应该将jtds-1.2.jar拷贝到IReport的lib目录下。
第一章初识JasperReports (3)一、Ireport中生成pdf中文字码显示,和自定义字体做法 (3)1、自定义字体集(没成功,待研究) (3)2、常规支持方案 (4)二、使用jasperreports和irepoert生成的.jasper来实现pdf的生成 (4)1、字体在项目中的引入 (4)2、将自己制作做的静态报表在页面上用pdf的形式显示出来 (5)3、利用程序将.jrxml导出为.jasper文件并用PDF显示 (5)小结:在前面我们使用的只是html中显示的静态的pdf,在大多数的情况下,打印的数据来自于一些变量 (6)三、填充报表数据 (6)1、对参数进行填充打印到pdf到html (6)2、对对象内部属性进行填充 (7)3、填充报表数据--使用JDBC向导作为数据源 (9)3.1 新建报表JDBC数据源 (9)3.2 新建报表模板文件 (11)四、报表的常用属性 (15)4.1分列显示 (15)4.2 Title和Summary在单独的页面打印 (16)4.3 报表的常用属性 (17)4.4 Summary with Page Header and Footer属性 (17)4.5 Float column footer属性 (20)4.6 When No Data属性 (21)第二章控件 (24)一、控件的常用知识 (24)二、控件的对齐 (25)1. Align Top/Align Bottom/Align Left/Align Right的使用 (26)2. Align Horizontal Axes和Align Vertical Axes的使用 (27)3. Align To Top/Bottom/Left/Right Margin的使用 (27)4. Organize As Table的使用 (28)5. Join Left/Right的使用 (29)7. Same Width/Height(Min/Max)和Same Size的使用 (33)8. Adapt to parent和Adapt to parent width/Height的使用 (33)9. Center和Center Horizontally/Vertically的使用 (33)三、控件的常用属性 (33)3.1 Forecolor、Backcolor、Opaque属性 (33)3.2 Blank When Null属性(1) (34)3.3 Position Type属性 (34)3.4 Stretch Type属性(重要) (38)3.5、Stretch With Overflow (43)3.6 Print Repeated Values属性 (43)3.7 Remove line when blank属性 (44)3.8 Print When Detail Overflows属性 (44)四、控件的使用方法 (46)4.1 形状控件 (46)4.2 Image控件(1) (47)4.3 Image控件的属性及应用效果 (54)4.4、Image控件超链接设置 (60)4.4 文本控件(1) (63)第5章子报表Subreport (64)5.1 子报表Subreport的示例--静态文本(1) (65)1. 创建主报表及子报表 (65)2. 两个.jrxml文件中的代码及编译 (68)3. 在Web项目中使用两个.jrxml文件 (70)5.2 子报表Subreport的示例--动态数据JDBC(1) (73)1. 创建userinfo数据表及内容 (73)2. 创建主报表模板 (73)3. 创建子报表模板 (74)4. 在Web项目中预览 (79)5.3 子报表Subreport的示例--打印实体类中的List<Userinfo> (82)1. 实体类的结构 (82)2. 创建3个.jrxml报表模板文件 (83)3. 设计Servlet核心代码 (86)4. 运行效果 (87)5.4 从Servlet传递一个Map类型的参数到子报表 (88)1. 创建Servlet代码 (88)2. 在main.jrxml中添加两个Parameters参数对象 (89)3. 在main.jrxml中显示showMainUsername参数值并添加Subreport控件 (89)4. 设计sub.jrxml子报表模板 (90)5. 运行效果 (91)5.5 对表达式进行计算后再传入子报表 (91)5.6 对子报表传递List<Userinfo>数据源 (93)5.7 示例:从主报表中取得子报表返回的参数值(1) (97)1. 在Servlet对象中封装省市二级联动关系 (97)2. 添加Sheng.class、Shi.class及中文.jar文件路径 (98)3. 逆向Sheng.java的属性 (98)4. 设计main.jrxml的报表模板 (99)5. 显示省列表的运行效果 (100)6. 在main.jrxml中添加Subreport控件 (100)7. 设计sub.jrxml报表模板 (101)8. 省市一起显示的运行效果 (102)9. 统计每个省中市的数量 (102)10. 在main.jrxml中添加Variables变量并与子报表中的变量做关联映射 (103)第一章初识JasperReports1.1一、Ireport中生成pdf中文字码显示,和自定义字体做法1、自定义字体集将需要的字体.ttf文件打包,在ireport中引入jar包即可。
接上篇接下来需要设置【datasource】下的【report query】:在弹出窗口的report sql query Tab页面的sql编辑区输入sql语句如“select * from scott.emp” 。
完毕点击右下方的ok,所有的emp表中的字段就读入了。
点击工具栏上的,看看是不是表中所有的字段是不是正常的显示了?下面为empno、ename和sal这三个字段在报表中的显示添加text field。
选择【edit】菜单下的【insert element…】菜单项下的【text field】选项。
选择完毕后,在detail区域单击鼠标左键,则添加了一个text field 元素。
我们要在这个元素中显示EmpNO字段的内容。
双击打开此text field的属性页面。
在text field Tab 页中,修改Textfield Expression区中的$F{Field}为$F{EMPNO},如果正确的话,$F{EMPNO}显示颜色改为绿色。
修改Textfield Expression class为你的字段类型。
如下图所示。
编译运行报表即可。
3、为报表添加合计字段合计功能是报表最常用的功能。
下面就为报表添加一个合计字段。
为emp 表中的sal(工资)字段添加一个合计字段。
新建空白报表total,设置datasource下的report query(同上)。
完毕后回到空白报表。
点击工具栏上的图标。
在弹出的total group窗口中点击new。
为新建的group命名为total_sal。
完毕点击ok。
回到报表设计页面,可以看到报表上添加了一个group即有一个total_salheader和一个total_salfooter编辑区。
按照上面2中空白报表的步骤设计报表,初步完成未添加合计字段的报表应该是这个样子的:完毕后点击ok。
下面我们在报表上添加此字段。
选择【edit】下的【insert element…】下的text field,然后点击total_salfooter添加此text field 元素。
Jasper Report用户手册version1.0作者:薛笛EMail:jxuedi@严正声明:本来我在以前把JasperReport1.0的用户文档由中文译成了英文,花了两周多时间写了几万字,并把它贴到了CSDN的Blog上,并凡是要翻译完的PDF文档的朋友我都尽量给邮过去。
但是最近我发现问我要文档的人总管我叫“良子大哥”,我开始还不明所以,后来一查才知道CSDN上有个叫良子的人把我翻译的东西整理了一下,调整了一下格式变成了他的作品,上面压根就没提我,但是里面的注明的索要文档PDF版的E-Mail (jxuedi@)却是还是我的—所以别人还是问我要PDF文档!!这令我十分不爽。
本来嘛,我想公开大家看是件好事,但你不能连个转载标志也不写啊!??这行为不是明抢吗,做人不能这样啊?但是今天我终于想通了,我好歹也念过这么多年书,不能和他一般见识,最终又重新把它贴出来,不过还是希望不要有人再这么做。
Jasper Report用户手册 (i)version1.0. i1 简介 (1)2 API概览 (2)Class net.sf.jasper.engine.design.JasperDesign. 2Class net.sf.jasper.engine.JasperReport4Class net.sf.jasper.engine.JasperCompileManager4Class net.sf.jasper.engine.JasperPrint4Interface net.sf.jasper.engine.JRDataSource. 4Class net.sf.jasper.engine.JRResultSetDataSource. 5Class net.sf.jasper.engine.data.JRTableModelDataSource. 5Class net.sf.jasper.engine.JREmptyDataSource. 5Class net.sf.jasper.engine.JasperFillManager5Class net.sf.jasper.engine.JRAbstractScriptlet6Class net.sf.jasper.engine.JRDefaultScriptlet6Class net.sf.jasper.engine.JasperPrintManager6Class net.sf.jasper.engine.JasperExportManager7Class net.sf.jasper.engine.JasperRunManager7Class net.sf.jasper.view.JRV iewer7Class net.sf.jasper.view.JasperV iewer7Class net.sf.jasper.view.JasperDesignViewer7Class net.sf.jasper.engine.util.JRLoader73 主要的任务和过程 (8)3.1 XML解析 (8)3.2 编译报表设计(Report Designs)93.3 Report Design 预览 (12)3.4报表装填(Filling Report) (13)3.5 查看报表(V iewing Reports) (15)3.6 打印报表 (15)3.7 导出报表 (16)3.8 对象的载入和保存 (16)4 报表设计(Report Designs) (17)4.1 DTD Reference. 174.2 XML 编码 (18)4.3 报表属性 (19)Report Name. 19Column Count(列数) (20)Print Order(打印顺序) (20)Page Size(页面大小) (21)Page Orientation(默认设置为Portrait) (21)Page Margins(页边距) (21)Empty Data Source Behavior22Scriptlet Class225 报表数据(Report Date) (23)5.1 表达式(expressions) (23)5.2 参数(Parameters) (24)参数名 (25)参数类型 (25)Prompting for Parameter values26参数的默认值(parameter default value) (26)5.2.1 内置的报表参数 (27)5.3 Data Source(数据源) (28)5.4 报表查询(Report Query) (30)5.5 字段(Field) (32)字段名(Field Name) (33)字段类型(Field Class) (34)字段描述(Field Description) (34)5.6 变量(V ariables) (35)变量名(V ariable Name) (35)变量类型(V ariable Class) (35)重置类型(Reset Type) (36)Reset Group. 365.6.1 运算(Calculations) (36)5.6.2 内置的报表变量(Build-in Report V ariables) (39)6 Report Sections416.1 Main Report Sections426.2 Data Grouping. 43Group Name. 44Group Header44Group Footer447 Scriptlets458 Report Elements46Absolute Position. 46Relative Position. 47Element Size. 47Element Color478.1 Text Elements518.1.1 Fonts and Unicode Support518.1.2 Static Texts558.1.3 Text Fields568.2 Graphic Elements588.2.1 Lines598.2.2 Rectangles608.2.3 Images608.2.4 Charts and Graphics628.3 Hyperlinks638.4 Element Groups649 Subreports659.1 Subreport Parameters679.2 Subreport Data Source. 6810 Advanced JasperReports6810.1 XML Report Designs Loading and Writing. 6810.2 Implementing Data Sources6910.3 Customizing Viewers6910.4 Exporting to New Output Formats701 简介JasperReport是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF,HTML,或者XML格式。
特别声明:本文版权为原文作者李克喜所有。
1使用iReport制作报表的详细过程(Windows环境下)1.1前言在网络上可以搜索到很多使用iReport和Jasperreport配合实现各种报表任务的文章,但是我觉得很少有一篇(几乎没有)做一个比较详细的介绍如何使用iReport制作报表的全过程,我所看过的文章的基本思想是覆盖面广,很多内容都是提及即过,并不是开发人员都有时间为每个实践花费时间自己实现,如果能有更详细的资料,那岂不是一件乐事。
出于这个念头促使我写这篇文章,希望能对那些使用iReport和Jasperreport朋友有所帮助,特别是需要亲身去实现报表的朋友,希望能给你们带来一点帮助。
本文不是对iReport的每个细节进行介绍,关于iReport的每个细节可以参考iReport网站的资料,但是可能得花费一些费用。
一般用户没有必要付出这些费用,因为我们关心的是如何制作我们需要的报表,而不是去扩展iReport,比如制作iReport的插件。
1.2准备1.2.1下载JDK1.2.2下载iReport1.2.3准备数据库1.2.4启动MySql服务确定Mysql使用的的字符集是重要的问题,特别是对需要中文报表的朋友,应该特别注意这个问题。
1.2.5确定商务逻辑也就是希望完成什么样的报表任务。
需要实现的报表的详细描述,这是实现报表的业务条件,否则所有的任务绝大部分没有意义。
本文使用一个Bug记录表为例,本文的例子是制作一个根据项目和项目中的模块分组的Bug量统计。
1.3开始配置基本信息1.3.1配置界面使用的语言和报表输出路径第一次进入系统是英文环境,可以通过【Tools】-【Options】开启配置iReport 系统的基本信息对话框。
在“Language”选项里面选择你需要的界面语言,比如“中文-中国”。
点击【Apply】按钮,系统既把整个界面中文化。
在配置iReport系统的基本信息对话框中选择【编译】Label,之后决定你的报表输出路径,可以把“编译在报表数据文件夹”选择打勾,这样报表的jrxml 文件和jasper文件就放置同一文件夹。
Jasper Report用户手册version1.01 简介2 API概览Class net.sf.jasper.engine.design.JasperDesignClass net.sf.jasper.engine.JasperReportClass net.sf.jasper.engine.JasperCompileManager Class net.sf.jasper.engine.JasperPrintInterface net.sf.jasper.engine.JRDataSourceClass net.sf.jasper.engine.JRResultSetDataSource Class net.sf.jasper.engine.data.JRTableModelDataSource Class net.sf.jasper.engine.JREmptyDataSourceClass net.sf.jasper.engine.JasperFillManagerClass net.sf.jasper.engine.JRAbstractScriptletClass net.sf.jasper.engine.JRDefaultScriptletClass net.sf.jasper.engine.JasperPrintManagerClass net.sf.jasper.engine.JasperExportManagerClass net.sf.jasper.engine.JasperRunManagerClass net.sf.jasper.view.JRViewerClass net.sf.jasper.view.JasperViewerClass net.sf.jasper.view.JasperDesignViewerClass net.sf.jasper.engine.util.JRLoader3 主要的任务和过程3.1 XML解析3.2 编译报表设计(Report Designs)3.3 Report Design 预览3.4报表装填(Filling Report)3.5 查看报表(Viewing Reports)3.6 打印报表3.7 导出报表3.8 对象的载入和保存4 报表设计(Report Designs)4.1 DTD Reference4.2 XML 编码4.3 报表属性Report NameColumn Count(列数)Print Order(打印顺序)Page Size(页面大小)Page Orientation(默认设置为Portrait)Page Margins(页边距)Empty Data Source BehaviorScriptlet Class5 报表数据(Report Date)5.1 表达式(expressions)5.2 参数(Parameters)参数名参数类型Prompting for Parameter values参数的默认值(parameter default value)5.2.1 内置的报表参数5.3 Data Source(数据源)5.4 报表查询(Report Query)5.5 字段(Field)字段名(Field Name)字段类型(Field Class)字段描述(Field Description)5.6 变量(Variables)变量名(Variable Name)变量类型(Variable Class)重置类型(Reset Type)Reset Group5.6.1 运算(Calculations)5.6.2 内置的报表变量(Build-in Report Variables)6 Report Sections6.1 Main Report Sections6.2 Data GroupingGroup NameGroup HeaderGroup Footer7 Scriptlets8 Report ElementsAbsolute PositionRelative PositionElement SizeElement Color8.1 Text Elements8.1.1 Fonts and Unicode Support8.1.2 Static Texts8.1.3 Text Fields8.2 Graphic Elements8.2.1 Lines8.2.2 Rectangles8.2.3 Images8.2.4 Charts and Graphics8.3 Hyperlinks8.4 Element Groups9 Subreports9.1 Subreport Parameters9.2 Subreport Data Source10 Advanced JasperReports10.1 XML Report Designs Loading and Writing10.2 Implementing Data Sources10.3 Customizing Viewers10.4 Exporting to New Output Formats1 简介JasperReport是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF,HTML,或者XML格式。
JasperReport与iReport的配置与使用(版权作品,未经作者允许禁止以任何形式进行盈利)作者:裴贺先目录1.JasperReport与iReport简介 (4)1.1 JasperReport简介 (4)1.2 iReport简介 (4)2.安装与配置 (4)2.1 JDK的安装与配置 (4)2.1.1 JDK的下载与版本选择 (4)2.1.2 JDK的安装 (5)2.1.3 JDK的配置 (5)2.2 ant的安装与配置 (6)2.2.1 ant的下载与安装 (6)2.2.2 ant的配置 (6)2.3 JasperReport的安装与配置 (7)2.3.1 JasperReport的安装 (7)2.3.2 JasperReport的配置 (7)2.4 iReport的安装与配置 (8)2.4.1 iReport的安装 (8)2.4.2 iReport的配置 (8)3.iReport的使用 (8)3.1 启动iReport的两种方式 (8)3.1.1 在有ant环境的下运行iReport (8)3.1.2 在没有ant的环境下运行iReport (8)3.2 iReport设计环境中的乱码现象的解决 (9)3.3 如何设计一个最简单的报表 (9)3.4 如何处理带有中文的报表 (10)3.5 使用数据库中的数据生成报表 (12)3.5.1 如何设置数据库连接 (12)3.5.2 设置SQL查询语句 (13)3.5.3 增加、修改与删除报表字段 (14)3.5.4 字段在报表设计器中的使用 (14)3.5.5 编译与预览带有字段的报表 (16)3.6 一劳永益的解决中文字体问题 (17)3.7 JasperReport中各band的功能 (18)3.8 在iReport中定义与使用参数 (22)3.9 怎样定义与使用变量 (23)4. JasperReport在程序中的应用 (24)4.1 在JSP程序中的应用示例 (24)4.1.1 JSP服务器运行环境的配置 (24)4.1.2 JSP代码内容 (24)4.1.3 运行示例JSP程序出错的几种情况及解决方法 (25)4.2 在Servlet程序中的应用示例 (26)4.3 动态SQL的示例 (27)4.4 怎样使某个字段中的数据在特定条件下才打印出来 (28)4.5 如何将PDF格式报表结果直接输出到打印机 (28)5.参考信息及其他 (29)5.1 iReport中引用报表中的变量、参数及字段的书写形式 (29)5.2 作者的联系方式 (30)5.3 写在最后 (30)1.JasperReport与iReport简介1.1 JasperReport简介JasperReport是一款报表打印组件,是开放源代码组织中的一个java报表打印工程,在我写这篇文章时,JasperReport的最新版本是0.5.2版,JasperReport的最新版本可以从/index.html下载得到。
JasperReport学习必备手册
(小弟第一次发帖,好像用小字体才好看些,大家将就一下)这是我学习JasperReport的一点经验,欢迎大家指正、赐教,我只是起个砖块的作用,大家就接着抛玉吧,希望最后真的能累成一个必备手册,呵呵。
假设大家已经对JasperReport有一定的了解(至少知道大概的开发流程),
这里就不赘述JasperReport的好处、设计、表达式的定义等JasperReport 自带文档里有的东西了。
可能因为我是java新手,所以遇到的问题特别
多,下面仅列一些,并附上我的解决方法:
Jsp生成不了 PDF的问题
生成 HTML 时 JRHtmlExporterParameter.lMAGES_MAP 的问题
中文显示的问题
图片显示的实现方法(JFreeChart)
我的通用.jasper生成方法
我的项目的实现
Jsp生成不了PDF的问题
问题描述:运行自带的web(webapp目录下)例子时(我使用的服务器是TomCat),用Servlet生成PDF完全没问题,而JSP方式却报getOutputStream () has already been called forthis respons的令昔,看JSP源码发现和Servlet差不多。
问题原因:Tomcat首先执行.jsp文件开始的Java代码,然后准备session, out等变量。
而输出PDF的代码出现在.jsp文件开始的<% ... %>段中,这样HttpServerletResponse的getOutputStream()方法已被调用。
在JSP规范中定义此方法只能被调用一次,这样当Tomcat准备out变量时必然会出错。
所以基于TomCat的服务器都会出错,如Jboss?un ONE AppServer
解决方法:很简单,按照JSP/Servlet规范定义输出非文本内容,如图片、声音等应该使用Servlet而不是JSP。
在Servlet中输出流完全由应用程序按需打开/关闭。
虽然仿佛这不叫解决方法,但我查了很多地方,也没有找到更好的说
法,所以大家做JasperReport还是用Servlet好了
生成HTML 时JRHtmlExporterParameter.IMAGES_MAP 的问题
这算不得一个问题,只是当时我有点迷惑,就拿出来说说好了。
不知大家注意过没有,每次生成Html 时,都有下面一段:
Map imagesMap = new HashMap();
session.setAttribute("IMAGES_MAP",imagesMap);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out); exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap); exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,"image .jsp?ima ge=");
特别是:exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out); exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap); exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,"image .jsp?ima ge=");
这几句,感觉莫名其妙的,最初猜想是显示图片用的,可到底是不是呢?而且生成的Html 页面的源码中,有很多
<td><img src="image?image=px" width=40height=1></td> 到底px 是什么样的图片?
查看javadoc,写的过于简单,根本没有说明。
于是,看源码:
his.imagesMap
=(Map)this.parameters.get(JRHtmlExporterParameter.IMAGES_MAP);
if(this.imagesMap == null)
{ this.imagesMap = new HashMap();
}
this.loadedImagesMap = new HashMap(); byte[] pxBytes
=JRImageLoader.loadImageDataFromLocation("dori/jasper/engine/im
ages/pixel.GIF");
this.loadedImagesMap.put(pxBytes, "px");
this.imagesMap.put("px", pxBytes);
哈哈,原形毕露了,原来px 就是dori/jasper/engine/images/pixel.GIF一个小不点),但它对网页的美观起了很大的作用,不信你写错lmage(jsp、servlet)的路径看看(这也是个可能出错的地方)。
中文显示的问题
问题描述:生成的Html或PDF中文显示为乱码或不显示
解决方法(HTML):
如果只要求生成Html(可能不会有这么简单就能打发走的客户),很好
办,如果是JSP: <%@ pagecontentType="text/html;charset=GB2312" %>
如果是Servlet:response.setContentType("text/html;charset=GB2312"); 哈哈,大功告成,预知PDF的中文解决方法,请拨打收费咨询电话110。
解决方法(PDF):
大家把手上的板砖放下吧,我说还不行吗,只是不知道这是不是正确或比较好的解决方法,请多指点。
由于生成PDF时没有什么地方可以设置charset=GB2312真是个天才的傻想法)。
我们分三步走好了。
1.由于JasperRepor使用iText生成PDF,所以我们需要iText亚洲语言
包
http://itext.sourceforge. net/dow nloads/iTextAsia n.jar
将他放在lib中。
2.在JasperReport的设计xml中,可以定义一个中文Font:
<reportF ont n ame="Arial_Normal"isDefault="true"
fon tName="Arial" size="12"
pdfFo ntName="STSo ng-Light"pdfE ncod in g="U niGB-UCS2-H" isPdfEmbedded="true"/>
其中pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H"的就是iTextAsian.jar包中定义的字体了。
3 .汉字都用UTF-8编码
iReport 保存的汉字都是UTF-8编码
还可以使用UltraEdit,只需菜单Advaneed。