打印信息,通过.jasper工具将集合输出到PDF文件 然后利用打印机打印文件
我们上一次成功的利用iReport工具制作了一张报表,并且预览了报表最后的效果,也生成了格式为“jrpxml”、“jrxml”与“jasper”的文件。这次,我们使用jasper提供的java的api去利用在iReport中制作的报表jasper文件来生成真正的报表文件。
本文以生成pdf格式的报表文件为例,该报表文件包含所有男用户的信息。
首先我们打开MyEclipse,在其中创建一个java工程:
新建一个lib文件夹,然后在lib中加入我们准备好的jar包:
然后将这些jar包全部添加到环境中(右键build path)
然后编写获取数据库连接的类,用于连接数据库并获取相应连接对象,以便于后期操作数据库:
- package com.cn.org.ireport.test;
- import java.sql.Connection;
- import java.sql.DriverManager;
- public class JDBCConnection {
- public static Connection getConnection(){
- try {
- String url = "jdbc:mysql://localhost:3306/db_film";
- Class.forName("org.gjt.mm.mysql.Driver");
- Connection con = DriverManager.getConnection(url, "root", "1234");
- return con;
- }catch(Exception e){
- e. printStackTrace();
- }
- return null;
- }
- }
接下来编写dataSource类(也就是数据填充类),实现JRDataSource接口,通过放在list里面的Map对象迭代实现数据对应:
- package com.cn.org.ireport.test;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import net.sf.jasperreports.engine.JRDataSource;
- import net.sf.jasperreports.engine.JRException;
- import net.sf.jasperreports.engine.JRField;
- /**
- * dataSource类(也就是数据填充类),实现JRDataSource接口
- * 通过放在list里面的Map对象迭代,实现数据对应
- */
- public class ReportDataSource implements JRDataSource{
- private Iterator iter;
- //创建一个,map对象用与数据对应
- Map map = new HashMap();
- //无参的构造函数
- public ReportDataSource(){
- }
- //以sex为参数的有参构造函数,用于数据初始化
- public ReportDataSource(String sex){
- //通过性别获取相应用户的数据
- List datas=DateSourceBaseFactory.createBeanCollection(sex);
- //要将List中的数据迭代,需要使用Iterator迭代对象
- iter=datas.iterator();
- }
- //通过key获取value值
- public Object getFieldValue(JRField arg0) throws JRException {
- return map.get(arg0.getName());
- }
- //接口JRDataSource的方法,判断是否有下一个数据
- public boolean next() throws JRException {
- if(iter.hasNext()){
- map=(Map)iter.next();
- return true;
- }
- return false;
- }
- }
接下来实现上个类中的DateSourceBaseFactory(提供数据的数据源工厂),它是实际从数据库中取出相应数据,然后将其封装在map中,然后又将相应的map装在List容器中。
- package com.cn.org.ireport.test;
- import java.sql.Connection;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- /**
- * Map中的键值要与模板中的file值对应
- * */
- public class DateSourceBaseFactory {
- public static List createBeanCollection(String sex) {
- int num=0;
- if(sex.equals("男")){
- num=1;
- }else{
- num=2;
- }
- ResultSet rs=null;
- Statement st=null;
- Connection con=null;
- List datas=new ArrayList();
- try {
- con=JDBCConnection.getConnection();
- st=con.createStatement();
- rs=st.executeQuery("select name,brithday,province,Email from user where sex="+num);
- while(rs.next()){
- Map attris=new HashMap();
- attris.put("name", rs.getString("name"));
- attris.put("brithday", rs.getString("brithday"));
- attris.put("province", rs.getString("province"));
- attris.put("Email", rs.getString("Email"));
- datas.add(attris);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }finally{
- try {
- if(rs!=null) rs.close();
- if(st!=null) st.close();
- if(con!=null) con.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- return datas;
- }
- }
接下来编写dataSource的javaBean类。用于创建模板
- package com.cn.org.ireport.test;
- import java.io.Serializable;
- public class DataSoruceBean implements Serializable{
- private static final long serialVersionUID = 1L;
- private String name;
- private String brithday;
- private String province;
- private String Email;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getBrithday() {
- return brithday;
- }
- public void setBrithday(String brithday) {
- this.brithday = brithday;
- }
- public String getProvince() {
- return province;
- }
- public void setProvince(String province) {
- this.province = province;
- }
- public String getEmail() {
- return this.Email;
- }
- public void setEmail(String email) {
- this.Email = email;
- }
- }
接下来是重头戏,编写测试入口类,生成pdf文件。JasperFillManager中有多个生成文件的方法
,除了可以生成pdf文件外还可以生成ofice文档文件。这里我们就将取出的数据打印到报表中去:
- package com.cn.org.ireport.test;
- import java.io.ByteArrayOutputStream;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.util.HashMap;
- import java.util.Map;
- import net.sf.jasperreports.engine.JRAbstractExporter;
- import net.sf.jasperreports.engine.JRException;
- import net.sf.jasperreports.engine.JRExporterParameter;
- import net.sf.jasperreports.engine.JasperFillManager;
- import net.sf.jasperreports.engine.JasperPrint;
- import net.sf.jasperreports.engine.export.JRPdfExporter;
- import net.sf.jasperreports.engine.export.JRPdfExporterParameter;
- public class TestReportHere {
- public static void main(String[] args) {
- Map parameters=new HashMap();
- ByteArrayOutputStream outPut=new ByteArrayOutputStream();
- FileOutputStream outputStream=null;
- File file=new File("F:/Temp/report.pdf");
- String reportModelFile="C:/Users/jack/report2.jasper";
- try {
- JasperPrint jasperPrint=JasperFillManager.fillReport(reportModelFile,
- parameters,new ReportDataSource("男"));
- JRAbstractExporter exporter=new JRPdfExporter();
- //创建jasperPrint
- exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
- //生成输出流
- exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outPut);
- //屏蔽copy功能
- exporter.setParameter(JRPdfExporterParameter.IS_ENCRYPTED,Boolean.TRUE);
- //加密
- exporter.setParameter(JRPdfExporterParameter.IS_128_BIT_KEY,Boolean.TRUE);
- exporter.exportReport();
- outputStream=new FileOutputStream(file);
- outputStream.write(outPut.toByteArray());
- } catch (JRException e) {
- e.printStackTrace();
- }catch (Exception e) {
- e.printStackTrace();
- }finally{
- try {
- outPut.flush();
- outPut.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- }
我们点击右键“Run JavaAppliacrion”,来执行我们的报表生成样例。
运行结果,我们在F盘下的Temp下发现了新生成的pdf文件:
双击打开,就是我们之前需要的数据的报表信息。
注意:报表Pdf时,会出现中文无法显示问题,可以设置相关组件的以下属性。需同时设置,其他字体,可自行尝试。
1、Font name :宋体
2、pdf Font name is now deprecated:STSong-Light
3、pdf Encoding : UniGB-UCS2-H(China Simplified)
至此我们实现了使用jasper提供的java的api来实现封装数据打印报表的功能。
直接在网页上下载这个PDF格式文件
/**
* 输出jasper 报表
*
* @param reportHanderImpi
* @throws AppException
*/
public void exportReport(ReportHanderImpl reportHanderImpl)
throws AppException {
this.getRequest().setAttribute(ReportConstants.REPORT_FLAG, "0");
this.getRequest().setAttribute(ReportConstants.REPORT_PATH_SYMBOL,
reportHanderImpl.getReportFile());
if(reportHanderImpl instanceof CommonReportHandler){
// 报表文件的输入流
this.getRequest().setAttribute(ReportConstants.REPORT_INPUTSTREAM,
((CommonReportHandler)reportHanderImpl).getReportInputStream());
}
List datalist = reportHanderImpl.getDataList();
JRDataSource dataSource = null;
if (datalist != null && datalist.size()>0) {
dataSource = new JRBeanCollectionDataSource(datalist);// 获取数据集
} else {
dataSource = new JREmptyDataSource();
}
this.getRequest().setAttribute(
ReportConstants.REPORT_DATASOURCE_SYMBOL, dataSource);
this.getRequest().setAttribute(ReportConstants.DISPLAY_FIELDS_SYMBOL,
reportHanderImpl.getDisplayStr());
//获取报表类型(表格 or 图形)
this.getRequest().setAttribute( ReportConstants.REPORT_TYPE_SYMBOL, reportHanderImpl.getReportType());
//报表输出格式类型(PDF or EXCEL ,HTML)
this.getRequest().setAttribute( ReportConstants.REPORT_OUT_FORMAT_SYMBOL, reportHanderImpl.getFormatType());
this.getRequest().setAttribute(ReportConstants.REPORT_PARAMETER_SYMBOL,
reportHanderImpl.getParamMap());
try {
this.getRequest().getRequestDispatcher("/JReportServlet").forward(
ServletActionContext.getRequest(),
ServletActionContext.getResponse());
} catch (ServletException e) {
new AppException(e);
} catch (IOException e) {
new AppException(e);
}
}
EG2:
@SuppressWarnings("rawtypes")
public void exportReportList1(CommonReportHandler commonReportHandler)
throws AppException {
List lst = commonReportHandler.getDataSourceList();
List<Object> dataSourceList = null;
try {
if (lst != null && lst.size() > 0) {
dataSourceList = new ArrayList<Object>();
JRDataSource dataSource = null;
for (int i = 0; i < lst.size(); i++) {
List datalist = (List) lst.get(i);
if (datalist != null && datalist.size() > 0) {
dataSource = new JRBeanCollectionDataSource(datalist);// 获取数据集
} else {
dataSource = new JREmptyDataSource();
}
dataSourceList.add(dataSource);// 组装数据源集合
}
}
this.getRequest().setAttribute(ReportConstants.REPORT_FLAG, "1");
// 设置路径
this.getRequest().setAttribute(
ReportConstants.REPORT_PATHLIST_SYMBOL,
commonReportHandler.getReportFiles());
// 获取报表类型(表格 or 图形)
this.getRequest().setAttribute("ReportType", "GraphicsReport");
// 报表输出格式类型(PDF or EXCEL ,HTML)
this.getRequest().setAttribute(
ReportConstants.REPORT_OUT_FORMAT_SYMBOL,
commonReportHandler.getFormatType());
// 设置数据源LIST
this.getRequest().setAttribute(
ReportConstants.REPORT_DATASOURCELIST_SYMBOL,
dataSourceList);
// 设置MAP参数
this.getRequest().setAttribute(
ReportConstants.REPORT_PARAMETER_SYMBOL,
commonReportHandler.getParamMap());
this.getRequest()
.getRequestDispatcher("/JReportServlet")
.forward(ServletActionContext.getRequest(),
ServletActionContext.getResponse());
} catch (ServletException e) {
throw new AppException(e);
} catch (IOException e) {
throw new AppException(e);
}
}
打印信息,通过.jasper工具将集合输出到PDF文件 然后利用打印机打印文件的更多相关文章
- .net上传文件,利用npoi读取文件信息到datatable里
整理代码,.net上传文件,利用npoi读取文件到datatable里,使用了FileUpload控件,代码如下: protected void Button1_Click(object sender ...
- Java开发工具类集合
Java开发工具类集合 01.MD5加密工具类 import java.security.MessageDigest; import java.security.NoSuchAlgorithmExce ...
- linux 压缩解压打包工具大集合
压缩.解压缩及归档工具有很多,今天小编就整理几个大家较为常用的. compress gzip bzip2 xz zip tar cpio 一.压缩.解压工具 用法 压缩 工具 压缩后 压缩包格式 解 ...
- linux命令:压缩解压打包工具大集合
目录 (1)zip 压缩.解压缩及归档工具有很多,今天小编就整理几个大家较为常用的. compress gzip bzip2 xz zip tar cpio 一.压缩.解压工具 用法 压缩 工具 压 ...
- 集合类——集合输出、栈和队列及Collections集合
1.集合输出 在之前我们利用了toString()及get()方法对集合进行了输出,其实那都不是集合的标准输出,集合输出有四种方式:Iterator.ListIterator.Enumeration. ...
- 干货!IT小伙伴们实用的网站及工具大集合!持续更新!
1.Git 还在担心自己辛辛苦苦写的代码被误删了吗?还在担心自己改错了代码不能挽回吗?还在苦恼于多人开发合作找不到一个好的工具吗?那么用Git就对 了,Git是一个开源的分布式版本控制系统,用以有效. ...
- Mininet在创建拓扑的过程中为什么不打印信息了——了解Mininet的log系统
前言 写这篇博客是为了给我的愚蠢和浪费的6个小时买单! 过程原因分析 我用Mininet创建过不少拓扑了,这次创建的拓扑非常简单,如下图,创建拓扑的代码见github.在以前的拓扑创建过程中,我都是用 ...
- gc 辅助打印信息
cat xx.xml|grep GC <jvm-arg>-XX:+PrintGCDetails</jvm-arg> <jvm-arg>-XX:+PrintGCDat ...
- OK335xS 网络连接打印信息 hacking
/*********************************************************************** * OK335xS 网络连接打印信息 hacking ...
随机推荐
- Apache通过配置.htaccess文件禁止访问.git、.svn等目录
如果你用过Git.SVN等代码版本控制工具的话,那肯定会知道,如果你需要拉去最新的代码到本地时,会自动生成一个.git或者.svn文件夹,里面包含一些项目相关的信息,如果在部署项目是,把这些文件公开暴 ...
- mysqldump: Got error: 1066: Not unique table/alias
mysqldump: Got error: 1066: Not unique table/alias myql 导出时提示如下: [root@localhost mysql]# mysqldump ...
- Servlet3模块化应用中,@Controller没有被注入,导致出现:No mapping found for HTTP request with URI [/xxx/xxx] in DispatcherServlet with name 'springmvc'
问题描述:Servlet3模块化应用中,@Controller没有被注入,导致出现: org.springframework.web.servlet.DispatcherServlet noHandl ...
- Block 语法
Block,代码块,^符号是block的语法标记. 比如说,一个block的参数列表是一个UIView,返回值是个CGFloat,block名称是testBlock 可以定义为 CGFloat (^ ...
- MemSQL 架构初探(转)
MemSQL 自称是最快的内存数据库.目前已发布了2.5版本. MemSQL 具有以下特点 1 高效的并行,尤其是分布式的MemSQL. 2 高效的并发,采用lock-free的内存数据结构skip ...
- Linux命令:ssh-add
ssh-add帮助 SSH-ADD() BSD General Commands Manual SSH-ADD() NAME ssh-add — adds private key identities ...
- RH_KABI_RESERVE的使用
struct mm_struct { .......... #if defined(__GENKSYMS__) || !defined(CONFIG_SPAPR_TCE_IOMMU) /* We're ...
- debian9 下编译安装tengine2.2.1
首先下载tengine的源码包,这个大家都会下载吧 wget http://tengine.taobao.org/download/tengine-2.2.1.tar.gz 然后解压缩 tar zxf ...
- js 改变颜色值
/** * 获取颜色值 */ const color2RGB = (color) => { if (typeof color !== 'string' || (color.length !== ...
- 找某個ColumnName在那些Tables
想找ColumnName叫CRE_USR的欄位在那些Table呢? (For SQL Server) SELECT o.name, o.* FROM syscolumns c INNER JOIN s ...