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文件。
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。