报表 PDF Java报表 JasperReports IReport

1.报表模板设计器

报表设计器IReport : https://sourceforge.net/projects/ireport/files/?source=navbar
注意:该设计器如果打不开,则检查一下IReport的ireport.conf 文件,将里面的 #jdkhome="" 改为自己的jdk7的路径(即: jdkhome="C:\Program Files\Java\jdk1.7.0_80\jre" ),注意是“jdk7”,不支持jdk8。  

iReport也是开源组织sf.net中的一款免费软件,是为JasperReport设计的强大的,直观的,易于使用的可视化报表设计器,采用纯Java开发。这个工具允许用户可视化编辑包含charts、图片、子报表等的复杂报表。iReport 还集成了JFreeChart图表制作包,允许用户可视化地编辑XML(JasperDesign)文件。用于打印的数据可以通过多种方式获取包括:JDBC,TableModels, JavaBeans, XML,Hibernate(支持HQL查询语言), CSV等。它支持多种输出格式包括:PDF,RTF,XML,XLS,CSV,HTM。

iReport报表绘制

不同版本的iReport在界面上会存在一些差异,以下文档基于iReport-5.6.0编写

1) 新建报表

【文件】à【New…】

\

 


选择一个模版,【Openthis Template】

\

 

 


通过【Browse】选择文件保存位置,并填写报表名称【Report name】

 

\

 

 

 


完成

 

 \

 

 

 

 

 

 

 

2) 创建Database Sources


点击【ReportDatasources】图标

\

 

【New】

 \

 

 


选择一个datasourcetype,这里选【Database JDBC connection】

\

填写数据库连续的相关信息,并保存

\

 

 

勾选默认Datasources,并关闭窗口

\

 

3) 
设置报表主要SQL \

输入主要SQL,相应的结果集的列会出现在下方

 \

 

4) 报表结构

\

5) 在Detail中使用SQL结果

\

 

 

6) 使用iReport内置变量

 \

 

7) 使用报表外部参数

右键【Parameters】,选择【添加Parameter】

 \

 

 

通过右侧的【属性面板】修改参数名称,并拖动到报表中

\

 

 

8) 使用Dateset 创建汇总报表 (次要SQL)

 

 

 右键【报表名称】(比如report_test002),选择【Add Dataset】 

\

 

填写Dataset名称,【下一步】

 

\

 选择DataSources,并填写SQL语句

 

\

 

 

 

选择要使用的列,并【下一步】

\

 

 

使用Group组自动Group up,也可通过SQL进行Group up

 \

 

 

通过【窗口à组件面板】打开组件面板

\

 

 


拖动Chart图标到报表中

\

 

 


选择一个图表类型,【OK】

 \

 

 


选择要使用的DataSet(比如上文刚刚创建的myDataSet1)

 

 \

 

 

填写Series描述

\

 

 

 

通过右侧按钮填写横坐标分组组名,即分组值

\

 

9) 预览报表


通过【预览】图标查看报表结果

\

 

如果有外部参数,将会弹出提示框要求录入

\

 


看到报表结果,可以通过【Designer】图标返回到设计界面

 \

 

 

10)编译报表


通过【编译】图标,可以对报表进行编译

\

编译后,同个目录下,可以找到编译后的文件:

比如,report_test002.jasper

 

 

 

接入到Spring mvc项目中

 由于jasperreports的主包,直接用gradle去maven repository拿会出现olap4j.jar找不到的问题。所以,这里直接去jasperreports的官网下载 http://community.jaspersoft.com/project/jasperreports-library 

然后将olap4j-0.9.7.309-JS-3.jar和jasperreports-6.2.1.jar 放到项目里面的文件夹(新建lib/jasperreports文件夹),再在gradle的build文件里面进行配置,如下:

fileTree(dir: "${rootProject.projectDir}/lib/jasperreports", include: '*.jar'),
"commons-digester:commons-digester:1.7",
"org.codehaus.groovy:groovy-all:2.4.7",
"com.lowagie:itext:4.2.1",
"com.itextpdf:itextpdf:5.4.3",
"com.itextpdf:itext-asian:5.2.0",

这里凭证完成后,还会出现中文不显示的问题,jasperreports6之前的版本用itext-asian.jar就可以解决,但是6.0以上的就只能手动添加字体问题,步骤如下:

找到刚刚下载的jasperreports-6.2.1.jar,用解压工具查看字体目录(jasperreports-6.1.1\demo\fonts\net\sf\jasperreports\fonts\dejavu),将下载好的simsun.ttf和simsun.ttc文件copy到dejavu目录,并修改fonts文件夹下的jasperreports-fonts.xml文件。加入下列配置(用IReport设计报表时,font name要设置成“宋体”):

<fontFamily name="宋体">
        <normal>net/sf/jasperreports/fonts/dejavu/simsun.ttf</normal>
        <bold>net/sf/jasperreports/fonts/dejavu/simsun.ttf</bold>
        <italic>net/sf/jasperreports/fonts/dejavu/simsun.ttf</italic>
        <boldItalic>net/sf/jasperreports/fonts/dejavu/simsun.ttf</boldItalic>
        <pdfEncoding>Identity-H</pdfEncoding>
        <pdfEmbedded>true</pdfEmbedded>
        <exportFonts>
            <export key="net.sf.jasperreports.html">'宋体', Arial, Helvetica, sans-serif</export>
            <export key="net.sf.jasperreports.xhtml">'宋体', Arial, Helvetica, sans-serif</export>
        </exportFonts>     
    </fontFamily>

JAVA代码如下:
package com.glory.venus.admin.controller;

import net.sf.jasperreports.engine.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

@RequestMapping("/pdf")
@RestController
public class PDFGeneratorController {
@Autowired
DataSource dataSource;

@RequestMapping(value = "/build", method = RequestMethod.GET)
public void buildPDF(HttpServletResponse response) {
try {
//设定报表所需要的外部参数内容
Map<String, Object> rptParameters = new HashMap<>();
rptParameters.put("id", 32L);
rptParameters.put("archive_no", "161103001");
//传入报表源文件绝对路径,外部参数对象,DB连接,得到JasperPring对象
JasperPrint jasperPrint = JasperFillManager.fillReport("C:\\Users\\Administrator\\MentalReport.jasper", rptParameters, dataSource.getConnection());
//导出PDF文件
JasperExportManager.exportReportToPdfFile(jasperPrint, "F:\\192.168.2.231\\source\\trunk\\venus\\venus V2.0\\admin\\src\\main\\resources\\jasperReport\\test.pdf");
} catch (JRException ex) {
//执行结束
System.out.println("Export failed!!");
}catch (SQLException ex){
System.out.println("Export failed!!");
}
//执行结束
System.out.println("Export success!!");
}
}


 
   

用JAVABean做数据源

1、创建一个javabean对象

import Java.io.Serializable;
public class GoodPrint implements Serializable{
   ...............................................

......................

..............................
}

2、工具--》选项--》classpath--》Add JAR,导入JavaBean和工厂方法所在的jar包,编译一定要选择一致的jdk版本,当前IReport用的是jdk1.7,所以新建一个项目,然后把主项目里面的类文件copy到新项目,专门作为生成IReport模板用。



3、创建域字段,如下:



一、用ireport创建数据源,如下:

创建一个工厂类,如下:

public class GoodsFactory {
private static GoodPrint[] data={new GoodPrint("GOO1","A","GOO1A",new BigDecimal(10),"M"),
new GoodPrint("GOO2","B","GOO2B",new BigDecimal(20),"PCS")}; 
public static Object[] getBeanArray() {
     return data;
}
public static Collection<?> getBeanCollection() {
        return Arrays.asList(data);
    }
}

导入工厂类


创建Text报表,如下:



二、后台创建数据源如下,如下:

                           String root_path=request.getRootPath();
  String reportFilePath = root_path + "report/Test.jasper";
  List goodList=new ArrayList<Goods>();
  goodList.add(new GoodPrint("GOO1","A","GOO1A",new BigDecimal(10),"M"));
  goodList.add(new GoodPrint("GOO2","B","GOO2B",new BigDecimal(20),"PCS"));
//   JRDataSource dataSource = this.createDataSource();
  JRDataSource dataSource = new JRBeanCollectionDataSource(goodList);;
//   Map<String, Object> parameters = new HashMap<String, Object>();
//   List dataList =new ArrayList();
//   parameters.put("dataList", dataList);
  JasperReport report = (JasperReport)JRLoader.loadObject(reportFilePath);
  JasperPrint jasperPrint = JasperFillManager.fillReport(report, null, dataSource);
  String repTpl="123";
  JasperExportManager.exportReportToPdfFile(jasperPrint,root_path+"report/123.pdf");
// JasperRunManager.runReportToHtmlFile(root_path+"report/123.pdf",null,null);
//如果创建报表成功,则转向该报表,其实可以把报表套在框架内,这样实现比较有意义的报表格式。
response.sendRedirect("report2.html");
//   JasperFillManager.fillReport(report, parameters, dataSource);
// OutputStream ouputStream = response.getOutputStream();  
// response.setContentType("application/pdf");
// response.setCharacterEncoding("UTF-8");  
// String repName=URLEncoder.encode("物料报表", "UTF-8");
// response.setHeader("Content-Disposition", "attachment; filename=\""+repName+"\".pdf"); 
//              
//         // 使用JRPdfExproter导出器导出pdf  
//         JRPdfExporter exporter = new JRPdfExporter();  
//         exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
//         exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);  
//         exporter.exportReport();
// ouputStream.close(); 




复杂类型的JAVABean作为数据源





转载于:https://www.cnblogs.com/tonyzeng/p/7429067.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值