java ireport_JasperReport和iReport的java集成大全

好久没更新了,最近在研究java开源报表

JasperReports和 iReport

实际使用效果还不错,美中不足的是没有自带补空行的功能(通过给报表数据增加null值可以实现)和文字旋转(好像不支持带@的旋转字体)

不过应付日常简单报表已经绰绰有余,还是值得记录一下!!!

通过 iReport设计报表请自己学习,比较容易上手,我只贴出调用报表预览打印的相关代码

先上 pom.xml

org.springframework.boot

spring-boot-starter-web

net.sf.jasperreports

jasperreports

6.10.0

com.itextpdf

itextpdf

5.4.3

com.itextpdf

itext-pdfa

5.4.3

com.itextpdf

itext-asian

5.2.0

org.codehaus.groovy

groovy-all

2.4.13

org.apache.poi

poi

4.1.2

mysql

mysql-connector-java

runtime

org.springframework.boot

spring-boot-starter-test

test

org.junit.vintage

junit-vintage-engine

使用jdbc数据源示例

不带参数

1 @RequestMapping("/report2")2 public void createtopdf(HttpServletRequest request, HttpServletResponse response) throwsException {3 Resource resource = new ClassPathResource("templates/report2.jasper");4 FileInputStream fis = newFileInputStream(resource.getFile());5 ServletOutputStream os =response.getOutputStream();6 try{7 Map parameters = new HashMap<>();8 Connection conn =getConnection();9 JasperPrint print =JasperFillManager.fillReport(fis, parameters, conn);10 JasperExportManager.exportReportToPdfStream(print, os);11 } catch(JRException e) {12 e.printStackTrace();13 } finally{14 os.flush();15 }16 }17    /**

18 * 返回一个mysql的数据连接对象19 *20 *@return

21 *@throwsException22 */

23 publicConnection getConnection() {24 String url = "jdbc:mysql://localhost:3306/xxxx?serverTimezone=UTC";25 try{26 Class.forName("com.mysql.cj.jdbc.Driver");27 Connection conn = DriverManager.getConnection(url, "root", "root");28 returnconn;29 } catch(ClassNotFoundException e) {30 e.printStackTrace();31 } catch(SQLException e) {32 e.printStackTrace();33 }34 return null;35 }

带有参数可以进行数据筛选的

设计报表时设置相应的参数如下

65a45d3d5d543ddfcdce21544ebacfc1.png

核心代码如下:

/*** 可以带有参数筛选的JDBC连接源填充

*

*@paramrequest

*@paramresponse

*@paramparams

*@throwsException*/@RequestMapping("/params")public void createpdf33(HttpServletRequest request, HttpServletResponse response, String params) throwsException {

Resource resource= new ClassPathResource("templates/hasparams.jasper");

FileInputStream fis= newFileInputStream(resource.getFile());

ServletOutputStream os=response.getOutputStream();try{

Map parameters = new HashMap<>();

parameters.put("id", params);

Connection conn=getConnection();

JasperPrint print=JasperFillManager.fillReport(fis, parameters, conn);

JasperExportManager.exportReportToPdfStream(print, os);

}catch(JRException e) {

e.printStackTrace();

}finally{

os.flush();

}

}

使用javabean作为数据源填充数据调用示例:

/*** 使用javabean填充数据

*

*@paramrequest

*@paramresponse

*@throwsException*/@RequestMapping("/bean2")public void javabeantest222(HttpServletRequest request, HttpServletResponse response) throwsException {

Resource resource= new ClassPathResource("templates/bean2.jasper");

FileInputStream fis= newFileInputStream(resource.getFile());

ServletOutputStream os=response.getOutputStream();try{

Map parameters = new HashMap<>();

List list =getuser();

JRBeanCollectionDataSource ds= newJRBeanCollectionDataSource(list);//Connection conn = getConnection();

JasperPrint print =JasperFillManager.fillReport(fis, parameters, ds);

JasperExportManager.exportReportToPdfStream(print, os);

}catch(JRException e) {

e.printStackTrace();

}finally{

os.flush();

}

}

使用LIst>填充数据调用方式:

/*** 使用List>集合填充数据

*

*@paramrequest

*@paramresponse

*@throwsException*/@RequestMapping("/testmap")public void testmapcollection(HttpServletRequest request, HttpServletResponse response) throwsException {

Resource resource= new ClassPathResource("templates/javabean.jasper");

FileInputStream fis= newFileInputStream(resource.getFile());

ServletOutputStream os=response.getOutputStream();try{

Map parameters = new HashMap<>();

List> list =getMapmodel();

System.out.println(list.toString());

JRBeanCollectionDataSource ds= newJRBeanCollectionDataSource(list);//Connection conn = getConnection();

JasperPrint print =JasperFillManager.fillReport(fis, parameters, ds);

String filename= "javabean";

response.setContentType("application/pdf");//response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8") + ".pdf");

JasperExportManager.exportReportToPdfStream(print, os);

}catch(JRException e) {

e.printStackTrace();

}finally{

os.flush();

}

}

使用HTML方式预览报表调用代码:

/*** 预览html格式

*

*@paramrequest

*@paramresponse

*@throwsException*/@RequestMapping("/html")public void testhtml(HttpServletRequest request, HttpServletResponse response) throwsException {

Resource resource= new ClassPathResource("templates/javabean.jasper");

FileInputStream fis= newFileInputStream(resource.getFile());

ServletOutputStream os=response.getOutputStream();try{

Map parameters = new HashMap<>();

List> list =getMapmodel();

JRBeanCollectionDataSource ds= newJRBeanCollectionDataSource(list);//Connection conn = getConnection();

JasperPrint print =JasperFillManager.fillReport(fis, parameters, ds);//JasperExportManager.exportReportToPdfStream(print,os);

JasperExportManager.exportReportToHtmlFile(print, request.getServletContext().getRealPath("/") + "test.html");

response.sendRedirect("test.html");

}catch(JRException e) {

e.printStackTrace();

}finally{

os.flush();

}

}

在服务器端批量转成word代码示例:

/*** 在服务器端批量导出生成word文件,可以一次性导出多个JasperPrint

*@paramrequest

*@paramresponse

*@throwsException*/@RequestMapping("/report.doc")public void testword(HttpServletRequest request, HttpServletResponse response) throwsException {

Resource resource= new ClassPathResource("templates/javabean.jasper");

FileInputStream fis= newFileInputStream(resource.getFile());

ServletOutputStream os=response.getOutputStream();try{

Map parameters = new HashMap<>();

List> list =getMapmodel();

JRBeanCollectionDataSource ds= newJRBeanCollectionDataSource(list);//Connection conn = getConnection();

JasperPrint print =JasperFillManager.fillReport(fis, parameters, ds);//JasperExportManager.exportReportToPdfStream(print,os);//JasperExportManager.exportReportToHtmlFile(print, request.getServletContext().getRealPath("/") + "test.html");//response.sendRedirect("test.html");

JRDocxExporter exporter = newJRDocxExporter();

List plist = new ArrayList<>();

plist.add(print);

exporter.setExporterInput(SimpleExporterInput.getInstance(plist));

exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(new File("D:/javabean.doc")));

exporter.exportReport();

System.out.println("批量导出word文件成功");

}catch(JRException e) {

e.printStackTrace();

}finally{

os.flush();

}

}

直接使用 .jrxml模板先进行代码编译然后调用示例:

/*** 把jrxml文件编译成 jrasper文件,之后填充数据

*@paramrequest

*@paramresponse

*@throwsIOException

*@throwsSQLException*/@RequestMapping("/compile")public void Compilejrxml(HttpServletRequest request,HttpServletResponse response)throwsIOException,SQLException {

String path= "D:\\Idea Projects\\jasper\\src\\main\\resources\\templates\\report6.jrxml";

File file= newFile(path);

String parentPath=file.getParent();

String jrxmlDestSourcePath= parentPath+"/report9.jasper";try{

JasperCompileManager.compileReportToFile(path,

jrxmlDestSourcePath);

}catch(JRException e) {

e.printStackTrace();

}

File jfile= new File(parentPath+"\\report9.jasper");

FileInputStream fis= newFileInputStream(jfile);

ServletOutputStream os=response.getOutputStream();try{

Map parameters = new HashMap<>();

List> list =getMapmodel11();

System.out.println(list.toString());

JRBeanCollectionDataSource ds= newJRBeanCollectionDataSource(list);

JasperPrint print=JasperFillManager.fillReport(fis, parameters, ds);

JasperExportManager.exportReportToPdfStream(print, os);

}catch(JRException e) {

e.printStackTrace();

}finally{

os.flush();

}

}

报表生成pdf并在客户端下载示例:

/*** 下载报表pdf格式

*@paramrequest

*@paramresponse

*@throwsException*/@RequestMapping("/downloadpdf")public void testmapcollection1234(HttpServletRequest request, HttpServletResponse response) throwsException {

Resource resource= new ClassPathResource("templates/javabean.jasper");

FileInputStream fis= newFileInputStream(resource.getFile());

ServletOutputStream os=response.getOutputStream();try{

Map parameters = new HashMap<>();

List> list =getMapmodel();

System.out.println(list.toString());

JRBeanCollectionDataSource ds= newJRBeanCollectionDataSource(list);

JasperPrint print=JasperFillManager.fillReport(fis, parameters, ds);

response.setContentType("application/pdf");

response.setCharacterEncoding("UTF-8");

String filename= "javabean";

response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8") + ".pdf");

JRPdfExporter exporter= newJRPdfExporter();

exporter.setExporterInput(newSimpleExporterInput(print));

exporter.setExporterOutput(newSimpleOutputStreamExporterOutput(os));

SimplePdfExporterConfiguration configuration= newSimplePdfExporterConfiguration();

exporter.setConfiguration(configuration);

exporter.exportReport();

}catch(JRException e) {

e.printStackTrace();

}finally{

os.flush();

}

}

报表生成Excel并下载至客户端代码:

/*** 报表下载xls格式

*@paramrequest

*@paramresponse

*@throwsException*/@RequestMapping("/downloadxls")public void testmapcollection12342(HttpServletRequest request, HttpServletResponse response) throwsException {

Resource resource= new ClassPathResource("templates/javabean.jasper");

FileInputStream fis= newFileInputStream(resource.getFile());

ServletOutputStream os=response.getOutputStream();try{

Map parameters = new HashMap<>();

List> list =getMapmodel();

System.out.println(list.toString());

JRBeanCollectionDataSource ds= newJRBeanCollectionDataSource(list);

JasperPrint print=JasperFillManager.fillReport(fis, parameters, ds);

response.setContentType("application/xls");

response.setCharacterEncoding("UTF-8");

String filename= "javabean";

response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8") + ".xls");

JRXlsExporter exporter= newJRXlsExporter();

exporter.setExporterInput(newSimpleExporterInput(print));

exporter.setExporterOutput(newSimpleOutputStreamExporterOutput(os));

SimpleXlsExporterConfiguration configuration= newSimpleXlsExporterConfiguration();

exporter.setConfiguration(configuration);

exporter.exportReport();

}catch(JRException e) {

e.printStackTrace();

}finally{

os.flush();

}

}

报表生成word格式并下载至客户端代码示例:

/*** 报表下载word(DOC)格式

*@paramrequest

*@paramresponse

*@throwsException*/@RequestMapping("/downloadword")public void testmapcollection1232342(HttpServletRequest request, HttpServletResponse response) throwsException {

Resource resource= new ClassPathResource("templates/javabean.jasper");

FileInputStream fis= newFileInputStream(resource.getFile());

ServletOutputStream os=response.getOutputStream();try{

Map parameters = new HashMap<>();

List> list =getMapmodel();

System.out.println(list.toString());

JRBeanCollectionDataSource ds= newJRBeanCollectionDataSource(list);

JasperPrint print=JasperFillManager.fillReport(fis, parameters, ds);

response.setContentType("application/ms-word");

response.setCharacterEncoding("UTF-8");

String filename= "javabean";

response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8") + ".doc");

JRDocxExporter exporter= newJRDocxExporter();

exporter.setExporterInput(newSimpleExporterInput(print));

exporter.setExporterOutput(newSimpleOutputStreamExporterOutput(os));

SimpleDocxExporterConfiguration configuration= newSimpleDocxExporterConfiguration();

exporter.setConfiguration(configuration);

exporter.exportReport();

}catch(JRException e) {

e.printStackTrace();

}finally{

os.flush();

}

}

JasperReports生成的PDF报表会存在中文显示的问题,需要自行设置字体

处理如下

在项目的 resources文件夹下新建文件:

fonts.xml

jasperreports_extension.properties

然后下载ttf的字体文件,放在同级目录下,我下载的时 STSong.ttf 即为宋体

fonts.xml如下

STSONG.TTF

STSONG.TTF

STSONG.TTF

STSONG.TTF

Identity-H

true

'仿宋', Arial, Helvetica, sans-serif

'仿宋', Arial, Helvetica, sans-serif

jasperreports_extension.properties的内容如下

net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory

net.sf.jasperreports.extension.simple.font.families.lobstertwo=fonts.xml

项目的层级如下:

ebfea4d2e4374be55be30ac450042b72.png

至此,日常简单报表应该已经能彻底满足需求了,代码也比较详细,谢谢大家,有问题可以留言(反正我也不会给你答疑哈哈哈哈)!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值