JasperReport

  • 开发报表设计文件,也就是一个*.jrxml文件。可以用Ireport或Jaspersoft Studio来制作
  • 使用JasperReports提供的JasperCompileManager工具编译.jrxml文件,编译后生成一个.jasper文件。可以有Ireport或Jaspersoft Studio来制作
  • 使用JasperReports提供的JasperFillManager工具填充编译后的.jasper文件,填充后生成一个.jrprint文件。
  • 使用导出管理器JasperExportManager或者各种格式的文件导出器JRXxxExporter将*.jrprint文件导出成各种格式的报表文件。也可以使用JRViewer工具类来直接浏览报表。也可以使用打印管理器JasperPrintManager来打印报表。

    在JasperReports开发过程中,报表源文件开各种格式的报表文件要经过下图所示的过程:

报表开发流程.png

    在JasperReports的开发流程中,JasperReports共涉及以下几个类:

报表开发流程中涉及的类图.png

相关类说明

net.sf.jasperreports.engine.design.JasperDesign

对应报表设计文件在内存中的形式,也就是对应的*.jrxml文件。

net.sf.jasperreports.engine.JasperReport

对应二进制报表文件在内存中的形式,也就是对应的*.jasper文件。

net.sf.jasperreports.engine.JasperPrint

对应可显示报表设计文件在内存中的形式,也就是对应的*.jrprint文件。这时可以通过JasperReports内建的报表查看器直接使用,也可以序列化后存储到磁盘上以后使用,更甚于通过网络发送给他处使用。

net.sf.jasperreports.engine.xml.JRXmlLoader

当调用这个方法来载入一个对象时,程序会先通过一个有效的URL来解析路径。如果失败了,程序就会认为这是一个文件路径并且尝试去读取。如果这个文件也没有被发现,程序就会尝试在classpath里寻找能够匹配的资源。如果这也失败了,只好抛出异常。

JasperDesign design = JRXmlLoader.load(File file);
JasperDesign design = JRXmlLoader.load(InputStreaminputStream);
JasperDesign design = JRXmlLoader.load(String sourceFileName);
net.sf.jasperreports.engine.JasperCompileManager

这是一个与编译有关的类,利用它提供的一些编译方法,允许我们将一个报表设计文档(.jrxml文件)编译成一个二进制文件(.jasper文件)。
此外,它也可以直接将net.sf.jasperreports.engine.design.JasperDesign(*.jrxml文件在内存中的形式)
对象编译成net.sf.jasperreports.engine.JasperReport对象。

    JasperCompileManager.compileReport(InputStream inputStream);    return JasperReport
    JasperCompileManager.compileReport(JasperDesign jasperDesign);  return JasperReport
    JasperCompileManager.compileReport(String sourceFileName);      return JasperReport
 
    JasperCompileManager.compileReportToFile(JasperDesign jasperDesign, String destFileName);
    JasperCompileManager.compileReportToFile(String sourceFileName);
    JasperCompileManager.compileReportToFile(String sourceFileName, String destFileName).
 
    JasperCompileManager.compileReportToStream(InputStream inputStream, OutputStream outputStream);
    JasperCompileManager.compileReportToStream(JasperDesign jasperDesign, OutputStream outputStream);
net.sf.jasperreports.engine.JasperFillManager

这个类用于报表填充的。报表填充就是为报表的数据查询提供数据库连接,给报表的参数设置值等。填充之前是.jasper文件,经过填充后就变成了.jrprint文件--这是一个可显示或者可导出成报表的文件。
参数的值通常通过一个java.util.Map对象来提供,这个Map对象的键是报表参数的名字。
数据源在不同的情况下可以通过两种方式提供:通常情况下,它必须作为一个JRDataSource对象被提供。但是由于大多数的报表所填的值都是从关系数据库取出来的。JasperReports有一个内建的默认行为,可以让人们在报表设计的时候就指定一条SQL查询语句。当在运行时填充报表的时候,执行SQL查询语句来获得需要填充的值。在这种情况下,JasperReports需要的仅仅是一个java.sql.Connection对象,一个通常的数据源对象的实例。JasperReports需要使用这个连接对象通过JDBC连接到关系数据库管理系统,并且执行报表查询。
在执行了报表查询后,JasperReports会自动创建一个net.sf.jasperreports.engine.JRResultSetDataSource对象来封装java.sql.ResultSet对象,并将它传给普通的填充过程使用。

    JasperFillManager.fillReport(InputStream inputStream, Map parameters);         return JasperPrint
    JasperFillManager.fillReport(InputStream inputStream, Map parameters, Connection connection);
    JasperFillManager.fillReport(InputStream inputStream, Map parameters, JRDataSource dataSource);
    JasperFillManager.fillReport(JasperReport jasperReport, Map parameters);   
    JasperFillManager.fillReport(JasperReport jasperReport, Map parameters, Connection connection);
    JasperFillManager.fillReport(JasperReport jasperReport, Map parameters, JRDataSource dataSource);
    JasperFillManager.fillReport(String sourceFileName, Map parameters);                  
    JasperFillManager.fillReport(String sourceFileName, Map parameters, Connection connection);
    JasperFillManager.fillReport(String sourceFileName, Map parameters, JRDataSource dataSource);
    
    JasperFillManager.fillReportToFile(JasperReport jasperReport, String destFileName, Map parameters);
    JasperFillManager.fillReportToFile(JasperReport jasperReport, String destFileName, Map parameters, Connection connection);
    JasperFillManager.fillReportToFile(JasperReport jasperReport, String destFileName, Map parameters, JRDataSource datasource);
    JasperFillManager.fillReportToFile(String sourceFileName, Map parameters);
    JasperFillManager.fillReportToFile(String sourceFileName, Map parameters, Connection connection);
    JasperFillManager.fillReportToFile(String sourceFileName, Map parameters, JRDatasource dataSource);
    JasperFillManager.fillReportToFile(String sourceFileName, String destFileName, Map parameters);
    JasperFillManager.fillReportToFile(String sourceFileName, String destFileName, Map parameters, Connection connection);
    JasperFillManager.fillReportToFile(String sourceFileName, String destFileName, Map parameters, JRDataSource dataSource);
    
    JasperFillManager.fillReportToStream(InputStream inputStream, OutputStream outputStream, Map parameters);
    JasperFillManager.fillReportToStream(InputStream inputStream, OutputStream outputStream, Map parameters, Connection connection);
    JasperFillManager.fillReportToStream(InputStream inputStream, OutputStream outputStream, Map parameters, JRDataSource dataSource);
    JasperFillManager.fillReportToStream(JasperReport jasperReport, OutputStream outputStream, Map parameters);
    JasperFillManager.fillReportToStream(JasperReport jasperReport, OutputStream outputStream, Map parameters, Connection connection);
    JasperFillManager.fillReportToStream(JasperReport jasperReport, OutputStream outputStream, Map parameters, JRDataSource dataSource);
net.sf.jasperreports.engine.JasperPrintManager

用于将一个*.jrprint文件完成打印。在JapserReports中,我们可以通过这个类来打印报表,它包含了所有的打印功能。它提供了打印整个文档或者部分文档、显不显示打印对话框的方法。使用这个类可以将JasperReports文档的一页作为一个java.awt.Image对象来显示。

    JasperPrintManager.printPage(InputStream inputStream, int pageIndex, boolean withPrintDialog);
    JasperPrintManager.printPage(JasperPrint jasperPrint, int pageIndex, boolean withPrintDialog);
    JasperPrintManager.printPage(String sourceFileName, int pageIndex, boolean withPrintDialog);     
    
    JasperPrintManager.printPages(InputStream inputStream, int firstPageIndex, int lastPageIndex, boolean withPrintDialog);          
    JasperPrintManager.printPages(JasperPrint jasperPrint, int firstPageIndex, int lastPageIndex, boolean withPrintDialog);          
    JasperPrintManager.printPages(String sourceFileName, int firstPageIndex, int lastPageIndex, boolean withPrintDialog);   
    
    JasperPrintManager.printPageToImage(InputStream inputStream, int pageIndex, float zoom);         
    JasperPrintManager.printPageToImage(JasperPrint jasperPrint, int pageIndex, float zoom);        
    JasperPrintManager.printPageToImage(String sourceFileName, int pageIndex, float zoom);  
    
    JasperPrintManager.printReport(InputStream inputStream, boolean withPrintDialog);         
    JasperPrintManager.printReport(JasperPrint jasperPrint, boolean withPrintDialog);        
    JasperPrintManager.printReport(String sourceFileName, boolean withPrintDialog);
    
    JasperPrintManager.printReportToPdf(JasperPrint jasperPrint);
    JasperPrintManager.printReportToPdfFile(JasperPrint jasperPrint, String destFileName);
    JasperPrintManager.printReportToPdfFile(String sourceFileName);
    JasperPrintManager.printReportToPdfFile(String sourceFileName, String destFileName);
    JasperPrintManager.printReportToPdfStream(InputStream inputStream, OutputStream outputStream);
    JasperPrintManager.printReportToPdfStream(JasperPrint jasperPrint, OutputStream outputStream);
    
    JasperPrintManager.printReportToXml(JasperPrint jasperPrint);
    JasperPrintManager.printReportToXmlFile(JasperPrint jasperPrint, String destFileName);
    JasperPrintManager.printReportToXmlFile(String sourceFileName);
    JasperPrintManager.printReportToXmlFile(String sourceFileName, String destFileName);
    JasperPrintManager.printReportToXmlStream(InputStream inputStream, OutputStream outputStream);
    JasperPrintManager.printReportToXmlStream(JasperPrint jasperPrint, OutputStream outputStream);
net.sf.jasperreports.engine.JasperExportManager

这个管理类对不同来源和不同去处(文件、输入输出流等)的数据提供不同的方法。用于将可显示的报表导出成各种格式的报表文件,例如PDF、HTML、XML和其他的格式。

    JasperExportManager.exportReportToHtmlFile(JasperPrint jasperPrint, String destFileName);
    JasperExportManager.exportReportToHtmlFile(String sourceFileName);
    JasperExportManager.exportReportToHtmlFile(String sourceFileName, String destFileName);
    
    JasperExportManager.exportReportToPdf(JasperPrint jasperPrint);
    JasperExportManager.exportReportToPdfFile(JasperPrint jasperPrint, String destFileName);
    JasperExportManager.exportReportToPdfFile(String sourceFileName);
    JasperExportManager.exportReportToPdfFile(String sourceFileName, String destFileName);
    JasperExportManager.exportReportToPdfStream(InputStream inputStream, OutputStream outputStream);
    JasperExportManager.exportReportToPdfStream(JasperPrint jasperPrint, OutputStream outputStream);
    
    JasperExportManager.exportReportToXml(JasperPrint jasperPrint);
    JasperExportManager.exportReportToXmlFile(JasperPrint jasperPrint, String destFileName, boolean isEmbeddingImages);
    JasperExportManager.exportReportToXmlFile(String sourceFileName, boolean isEmbeddingImages);
    JasperExportManager.exportReportToXmlFile(String sourceFileName, String destFileName, boolean isEmbeddingImages);
    JasperExportManager.exportReportToXmlStream(InputStream inputStream, OutputStream outputStream);
    JasperExportManager.exportReportToXmlStream(JasperPrint jasperPrint, OutputStream outputStream);
net.sf.jasperreports.engine.export.JRXxxExporter

这是一系列的文件导出器,它们用于将*.jrprint文件导出成对应格式的报表文件。例如XSL、PDF、HTML、XML、CSV、RTF、TXT和其他的格式。JRXlsExporter、JRPdfExporter、JRXmlExporter、JRCsvExporter、JRHtmlExporter、JRTextExporter、JRRtfExporter

    eg: JRXlsExporter exporter = new JRXlsExporter();
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "reports/StretchReport.xls");
        exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
        exporter.exportReport();
net.sf.jasperreports.engine.JasperRunManager

这个类可以直接将*.jasper文件导出成各种格式的报表文件,有时候在报表填充过程中我们不希望生成中间的net.sf.jasperreports.engine.JasperPrint对象,而直接生成我们所需要的文档格式,例如:PDF或HTML。

    JasperRunManager.runReportToHtmlFile(String sourceFileName, Map parameters);
    JasperRunManager.runReportToHtmlFile(String sourceFileName, Map parameters, Connection conn);
    JasperRunManager.runReportToHtmlFile(String sourceFileName, Map parameters, JRDataSource jrDataSource);
    JasperRunManager.runReportToHtmlFile(String sourceFileName, String destFileName, Map parameters);
    JasperRunManager.runReportToHtmlFile(String sourceFileName, String destFileName, Map parameters, Connection conn);
    JasperRunManager.runReportToHtmlFile(String sourceFileName, String destFileName, Map parameters, JRDataSource jrDataSource);
    
    JasperRunManager.runReportToPdf(InputStream inputStream, Map parameters);
    JasperRunManager.runReportToPdf(InputStream inputStream, Map parameters, Connection conn);
    JasperRunManager.runReportToPdf(InputStream inputStream, Map parameters, JRDataSource jrDataSource);
    JasperRunManager.runReportToPdf(JasperReport jasperReport, Map parameters);
    JasperRunManager.runReportToPdf(JasperReport jasperReport, Map parameters, Connection conn);
    JasperRunManager.runReportToPdf(JasperReport jasperReport, Map parameters, JRDataSource jrDataSource);
    JasperRunManager.runReportToPdf(String sourceFileName, Map parameters);
    JasperRunManager.runReportToPdf(String sourceFileName, Map parameters, Connection conn);
    JasperRunManager.runReportToPdf(String sourceFileName, Map parameters, JRDataSource jrDataSource);
    
    JasperRunManager.runReportToPdfFile(String sourceFileName, Map parameters);
    JasperRunManager.runReportToPdfFile(String sourceFileName, Map parameters, Connection conn);
    JasperRunManager.runReportToPdfFile(String sourceFileName, Map parameters, JRDataSource jrDataSource);
    JasperRunManager.runReportToPdfFile(String sourceFileName, String destFileName, Map parameters);
    JasperRunManager.runReportToPdfFile(String sourceFileName, String destFileName, Map parameters, Connection conn);
    JasperRunManager.runReportToPdfFile(String sourceFileName, String destFileName, Map parameters, JRDataSource jrDataSource);
    
    JasperRunManager.runReportToPdfStream(InputStream inputStream, OutputStream outputStream, Map parameters);
    JasperRunManager.runReportToPdfStream(InputStream inputStream, OutputStream outputStream, Map parameters, Connection conn);
    JasperRunManager.runReportToPdfStream(InputStream inputStream, OutputStream outputStream, Map parameters, JRDataSource jrDataSource);

<b>需要注意的是</b>:

    1、生成的文件名和对应的.jrxml文件名相同
    2、生成的文件路径和对应的
.jrxml文件部署后所在目录相同

JasperRunManager_fielPath.png

net.sf.jasperreports.engine.JRDataSource

JasperReports在报表数据来源方面是具有高柔韧性的。人们可以使用任意的数据源,前提条件就是能够提供一个这个接口的恰当的实现。这样报表引擎可以在填充报表时从数据源解析和检索数据。
通常来说,如果一个报表填充了数据,肯定有一个这个接口的实例被报表引擎提供或创建。

net.sf.jasperreports.engine.JREmptyDataSource

作为最简单的net.sf.jasperreports.engine.JRDataSource接口的实现,这个类可以在不希望显示从数据源获得的数据,而只关心数据源的虚拟行数时在报表中使用。
在提供的例子里有不少在填充报表时用到了这个类的实例,例如:fonts、images、shapes和unicode。这样做是为了模拟一个有一条空记录的数据源。

net.sf.jasperreports.engine.JRResultSetDataSource

这个类是net.sf.jasperreports.engine.JRDataSource接口的一个默认实现。由于大多数的报表都由关系数据库的数据生成,JasperReports包含了一个封装了java.sql.ResultSet对象的默认实现。
这个类有着明确的目的:在传给报表填充测试之前封装已经载入的数据集。在执行了通过JDBC的报表查询后它会被用来封装从数据库获得的数据。

net.sf.jasperreports.engine.data.JRTableModelDataSource

这个类是net.sf.jasperreports.engine.JRDataSource接口的另外一个默认实现。它封装了javax.swing.table.TableModel对象。它可以在Java Swing应用程序中通过已经载入的屏幕表格的数据生成报表。

net.sf.jasperreports.engine.data.JRBeanCollectionDataSource

使用Bean作为数据源,JRBeanCollectionDataSource继承JRAbstractBeanDataSource类,而JRAbstractBeanDataSource是一个抽象类它间接的实现了JRDataSource这个接口,所以我们就可以不用自己去实现next()/getFieldValue()这两个方法了

eg:JRDataSource datesource = new JRBeanCollectionDataSource(list);
net.sf.jasperreports.swing.JRViewer

这个类和上面说到的类不大一样,说它是一个实用类不如说是一个显示插件。它可以用在基于Swing的应用程序里来显示JasperReports生成的报表。
这个可视化组件并不能满足每一个人。它被当作一个例子组件被包含在主类库中,用来显示核心打印功能可以在基于Swing的应用程序里通过net.sf.jasperreports.engine.JasperPrintManager类生成java.awt.Image对象来显示报表。
如果想修改这个组件使其满足应用程序的需求,首选的方法是使用它的子类。

    JRVierer jr = new JRViewer(InputStream inputStream, boolean isXML);
    JRVierer jr = new JRViewer(inputStream inputStream, boolean isXML, Locale locale);
    JRVierer jr = new JRViewer(inputStream inputStream, boolean isXML, Locale locale, ResourceBundle resBundle);
 
    JRVierer jr = new JRViewer(JasperPrint jrPrint);
    JRVierer jr = new JRViewer(JasperPrint jrPrint, Locale locale);
    JRVierer jr = new JRViewer(JasperPrint jrPrint, Locale locale, ResourceBundle resBundle);
    
    JRVierer jr = new JRViewer(String fileName, boolean isXML);
    JRVierer jr = new JRViewer(String fileName, boolean isXML, Locale locale);
    JRVierer jr = new JRViewer(String fileName, boolean isXML, Locale locale, ResourceBundle resBundle);
net.sf.jasperreports.view.JasperViewer

这也是一个以教学为目的的类。它使用了net.sf.jasperreports.swing.JRViewer组件来显示报表。它是一个简单的Java Swing应用程序,可以装载和显示报表。它在提供的例子中被广泛的使用,用来显示生成的文档。

net.sf.jasperreports.view.JasperDesignViewer

通常,一个使用JasperReports来生成报表的应用程序如果使用了这个类将不能运行。这个类可以在设计阶段用来预览报表模版。它被当作一个用作可视化设计而使用的开发工具提供。

net.sf.jasperreports.engine.JRAbstractScriptlet

脚本程序(Scriptlets)是JasperReports类库中一个非常强大的功能。它可以让用户自己编写在填充过程中可以被报表引擎执行的代码。用户代码可以在一个定义良好的片断(例如:页、列或者组)里操作报表数据;为生成的文档建立一个新的range。

net.sf.jasperreports.engine.JRDefaultScriptlet

这是net.sf.jasperreports.engine.JRAbstractScriptlet的一个便利的子类。大多数时间用户在使用脚本程序时会选择这个类,这样他们就不需要实现抽象类里定义的所有抽象方法了。

附:Exporter常用参数说明
Ø         net.sf.jasperreports.engine.JRExporterParameter. JASPER_PRINT
这个参数是net.sf.jasperreports.engine.JasperPrint的对象,exporter在导出报表前会做检测  
 
Ø         net.sf.jasperreports.engine.JRExporterParameter. JASPER_PRINT_LIST
这个参数是包含了n个net.sf.jasperreports.engine.JasperPrint对象的java.util.List,exporter在导出报表前会做检测
 
Ø         net.sf.jasperreports.engine.JRExporterParameter.INPUT_STREAM
这个参数是net.sf.jasperreports.engine.JasperPrint被序列化对象的输入流,exporter在导出报表前会做检测
 
Ø         net.sf.jasperreports.engine.JRExporterParameter.INPUT_URL
这个参数是包含net.sf.jasperreports.engine.JasperPrint被序列化对象的URL,exporter在导出报表前会做检测
 
Ø         net.sf.jasperreports.engine.JRExporterParameter.INPUT_FILE_NAME
这个参数是存储了net.sf.jasperreports.engine.JasperPrint被序列化对象的文件路径,exporter在导出报表前会做检测
注意:以上几个参数不能全部为空
 
Ø         net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_STRING_BUFFER
这个参数是java.lang.StringBuffer的对象,存储已经产生出的指定格式报表的内容
 
Ø         net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_WRITER
这个参数是java.io.Writer的对象,将指定格式报表的内容发送到一个字符流,例如Servlet的PrintWriter
 
Ø         net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_STREAM
这个参数是java.io.OutputStream的对象,将指定格式报表的内容发送到一个输出流,例如ServletOutputStream
 
Ø         net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_FILE
这个参数是java.io.FILE的对象,将指定格式报表的内容存储到文件里面
 
Ø         net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_FILE_NAME
这个参数是java.lang.String的对象,将指定格式报表的内容存储到文件里面
 
Ø         net.sf.jasperreports.engine.JRExporterParameter.CHARACTER_ENCODING
这个参数是java.lang.String的对象,指定格式报表的内容编码
 
Ø         net.sf.jasperreports.engine.JExcelApiExporterParameter.IS_FONT_SIZE_FIX_ENABLED
这个参数是java.lang.Boolean的对象,是否允许自动修正Excel每个栏位的大小  
 
Ø         net.sf.jasperreports.engine.JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET
这个参数是java.lang.Boolean的对象,每一页是否用一个Sheet  
 
Ø         net.sf.jasperreports.engine.JRXlsExporterParameter. IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS
这个参数是java.lang.Boolean的对象,是否移除行与行之间的空行  
 
Ø         net.sf.jasperreports.engine.JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND
这个参数是java.lang.Boolean的对象,页面的背景是否为白的
 
Ø         net.sf.jasperreports.engine.JRXlsExporterParameter.SHEET_NAMES
这个参数是java.lang.String的对象,Sheet的名字
 
Ø         net.sf.jasperreports.engine.JRCsvExporterParameter.FIELD_DELIMITER
这个参数是java.lang.String的对象,栏位之间的分隔符
 
Ø         net.sf.jasperreports.engine.JRCsvExporterParameter.RECORD_DELIMITER
这个参数是java.lang.String的对象,栏位之间的分隔符
 
Ø         net.sf.jasperreports.engine.JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR
这个参数是java.lang.Boolean的对象,是否输出图片到目录  
 
Ø         net.sf.jasperreports.engine.JRHtmlExporterParameter.IMAGES_DIR_NAME
这个参数是java.lang.String的对象,图片目录的绝对路径  
 
Ø         net.sf.jasperreports.engine.JRHtmlExporterParameter.IMAGES_DIR
这个参数是java.io.File的对象,图片目录
 
Ø         net.sf.jasperreports.engine.JRHtmlExporterParameter.IMAGES_URI
这个参数是java.lang.String的对象,通过Web访问时图片的URI

上面是基础知识,接下来总结一下开发中碰到的问题

IREPORT软件制作.jasper文件时注意事项

    Page Header区域是放置有哪些列,列名是什么。设计时一定要确保
列的高度和Page Header区域的高度一致。
    Detail 1区域是放置列的值,里面用动态字段表示。设计时一定要确保
列的高度和Detail 1区域的高度一致。否则编译不通过,还有可能无法循环打印出多条数据。

jasper打印时到底是用那个文件

     .jrxml是源文件,里面定义一系列的标签用于封装数据视图结构,
就像一个HTML文件,但区别于HTML文件的是他不能在浏览器中预览。
     .jasper是将.jrxml文件翻译后的文件,也是项目中真正用到的文件,
如果只用.jrxml文件还需在项目中调用jasper提供的类方法翻译成.jasper文件
     真正打印时用的是.jrprint文件或者JasperPrint对象,此文件根据.jasper文件或者JasperReport对象生成。

pdf打印时中文页面报错

     网上都说是jar包问题,确实是,但不需要像网上说的那样去重新编译jar包,
只需将安装ireport软件中D:\iReport-5.6.0\ireport\modules\ext\iTextAsian.jar添加到项目中,
并且添加到ireport的classpath中,重启ireport软件,最后重新编译出.jasper文件放入项目中,重启服务即可。

maven方式将iTextAsian.jar打入到本地仓库

     先将jar包放到一个比较方便的位置,免得cd时多打字,呵呵。

     比如:d:\report>mvn install:install-file -Dfile=iTextAsian.jar -DgroupId=com.gordon
-DartifactId=pdf-iTextAsian -Dversion=5.6.0 -Dpackagin=jar

maven_install.png
<!--导出pdf中文显示依赖-->
<dependency>
      <groupId>com.gordon</groupId>
      <artifactId>pdf-iTextAsian</artifactId>
      <version>5.6.0</version>
</dependency>
ireport_add_iTextAsian_jar.png

解决项目启动报错但却没有详细信息

在resource目录下新建logging.properties并加入如下代码,tomcat就会打印出详细信息

handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHandler

############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################

org.apache.juli.FileHandler.level = FINE
org.apache.juli.FileHandler.directory = ${catalina.base}/logs
org.apache.juli.FileHandler.prefix = error-debug.

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

解决JasperFillManager生成.jasper文件与.jrxml文件名不同

     由于偷懒将testReport.jrxml复制了一份,保存时重命名为testMapReport.jrxml。
正是这样才导致JasperCompileManager.compileReportToFile(filePath)生成.jasper文件时,文件名为testReport.jasper
为什么呢?查看源代码在生成文件时是去解析.jrxml文件,是从xml文件中去name值作为新文件的文件名。而我复制的,所以name值还是原来的那个。

JasperFillManager_生成的文件名不对问题.png

测试传入Map参数

     首先需要明确map参数对应jrxml文件中的哪些字段,在ireport软件中定义好paramters,如下图:

ireport参数定义.png
开发代码
testMapParams-1.png
结果
第一种方式结果.png
HTML图片不显示问题
设置图片以流的形式加载.png
html图片问题.png
html图片结果.png
JasperReport使用数据库
设置查询条件参数.png
jasper使用数据库方式.png
druid数据源结果.png

代码地址:https://download.csdn.net/download/qq_25507769/10654365

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

推荐阅读更多精彩内容