import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import com.htf.ap.security.operatelog.annotation.OperateLog;
import com.htf.common.businessconfig.invoice.InvoicePrintModel;
import com.htf.framework.webutil.xwork.annotation.Action;
import com.opensymphony.webwork.ServletActionContext;

import net.sf.jasperreports.engine.JRDataSource;
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.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.util.JRLoader;

public class JasperPrintUtil {

/**
* 生成JasperPrint
*
* @param list 数据源
* @param pathMap报表
* @return JasperPrint list
*/
public static <T> List<JasperPrint> createJasperPrint(List<T> list,
Map<String, String> pathMap, String path, Map<String, Object> paramMap) {
List<JasperPrint> printList = new ArrayList<JasperPrint>();
if (list != null && pathMap != null) {
List<T> dataList = new ArrayList<T>();
try {
for (String kn : pathMap.keySet()) {
dataList.addAll(list);
ServletContext context = ServletActionContext.getRequest().getSession()
.getServletContext();
String file = context.getRealPath(pathMap.get(kn));
JasperReport report = (JasperReport) JRLoader.loadObject(file);
JRDataSource source = new JRBeanCollectionDataSource(dataList);
Map<String, Object> imgMap = paramMap;
JasperPrint print = JasperFillManager.fillReport(report, imgMap, source);
if (print != null) printList.add(print);
//imgMap.clear();
dataList.clear();
}
} catch (JRException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
return printList;
}

/**
* 打印JasperPrint 修改:打印有返回值,以方便调用时判断传递不同的打印参数
*
* @param JasperPrint list
* @return
*/
public static int print(List<JasperPrint> list) {
int flag = -1;// 默认打印失败,1打印成功
ServletOutputStream out = null;
try {
if (list == null) {
return flag;
}
HttpServletResponse response = ServletActionContext.getResponse();
out = response.getOutputStream();
response.setContentType("application/pdf");
JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, list);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
exporter.exportReport();
out.flush();
flag = 1;
return flag;
} catch (JRException e) {
e.printStackTrace();
return flag;
} catch (IOException e) {
e.printStackTrace();
return flag;
} /*finally {刘燕明注释:方便上层调用此方法时可以重新判断打印
IOUtil.close(out);
}*/
}

}

/**
* 打印贷款申请审批表

* @date 2017-3-18
*/
@SuppressWarnings("unchecked")
@OperateLog(moduleName="打印贷款申请审批表", content = "打印贷款申请审批表")
@Action(name="LoanApplyAction_goLoanApplyAppPrint")
public String goLoanApplyAppPrint() {
Long tempId = model.getTempId();
Long stateId = model.getStateId();
//stateId = 4310441L;
// InvoicePrintModel invoicePrintModel = loanApplyBPO.findLoanApplyAppPrintContext(tempId, stateId);
InvoicePrintModel invoicePrintModel = new InvoicePrintModel();
List<String> list = new ArrayList<String>();
list.add("aa");
invoicePrintModel.setDataList(list);
//定义Map集
Map<String, String> pathMap = new HashMap<String, String>();
pathMap.put("a1", "/gjj-pl/pages/g3/gjj/pl/jasper/LoanApplyAppReport1.jasper");
pathMap.put("a2", "/gjj-pl/pages/g3/gjj/pl/jasper/LoanApprove.jasper");
//调用打印方法
JasperPrintUtil.print(JasperPrintUtil.createJasperPrint(
invoicePrintModel.getDataList(), pathMap, null,
invoicePrintModel.getContext()));
//this.print(this.createJasperPrint(invoicePrintModel.getDataList(), pathMap, null,invoicePrintModel.getContext()));
return NONE;
}

流程 创建jasper  然后调用export方法打印jasper对象。

Jasper打印示例的更多相关文章

  1. JASPER打印单据,标签开发培训, 界面开发培训

    JASPER打印单据,标签开发培训软件:TIBC JASPER Studio.Jaspersoft Studio是一个专为JasperReports报表引擎而开发的报表设计器,是 iReport设计器 ...

  2. C# 标签打印示例 1

    初次写博客,有哪些不足的地方,还请多多指点,给予建议,谢谢! 如若想要源码,请留言.        本实例是在Webservice 中通过excel做模板来打印标签.具体需求是:一个订单一页纸打印4行 ...

  3. jasper打印实例2 ----通过文件字节流获得PDF格式图片

    public class IspReportUtil { public static String exportReportToByte(CommonReportHandler handler)thr ...

  4. Qt5.3 打印示例时出现错误

    说明:今天我在用Qt5.3写打印文档的时候,编译出错了,出错代码为: C:\Users\joe\Desktop\5-9\myPrint\mainwindow.cpp:35: error: undefi ...

  5. Python win32打印示例

    # -*- coding:utf-8 -*- # Author: Pete Yim<xpHook@gmail.com> # Date : 13-8-22 # Copyright (c) 2 ...

  6. jasper打印文件出现空白页面

    EG:打印文件结果打印出一片空白 原因:使用了null的数据源而不是JREmptyDataSource 以下为正确代码 public <T> List<JasperPrint> ...

  7. 吉特仓库管理系统-.NET打印问题总结

    在仓储系统的是使用过程中避免不了的是打印单据,仓库系统中包含很多单据:入库单,出库单,盘点单,调拨单,签收单等等,而且还附带着很多的条码标签的打印.本文在此记录一下一个简单的打印问题处理方式.处理问题 ...

  8. 重新想象 Windows 8 Store Apps (41) - 打印

    [源码下载] 重新想象 Windows 8 Store Apps (41) - 打印 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 打印 示例1.需要打印的文档Pr ...

  9. gridcontrol显示行号,总行,打印,导出Excel,设置标头及内容居中方法

    1.一般为了表格显示数据更直观,经常会显示行号以及总数.让gridcontrol显示行号,首先你需要设置一下显示行号的宽度,也就是IndicatorWith.默认值为-1,可根据实际数值需要设置宽度, ...

随机推荐

  1. 来分析一个UVC的摄像头的枚举信息

    使用到工具USBlyzer导出数据,但是会发现一些还有部分解析未完全.我们将借助UVCView.x86(https://files.cnblogs.com/files/libra13179/77772 ...

  2. OWASP安全编码规范快速参考指南

    0x00 原则 概览 开发安全的软件需要对安全原则有基本的了解.虽然对于安全原则的全面评估超出了本指南的范围,但是我们还是提供了一个快速的概览.软件安全的目标是要维护信息资源的 保密性 ,  完整性 ...

  3. Delphi Locate 详解1 转

    TDataSet控件以及它的继承控件,例如TSimpleDataSet/TClientDataSet等都可以使用Locate方法在结果数据集中查寻数据.程序首先必须使用SQL命令从后端数据库中取得数据 ...

  4. centos下同时启动多个tomcat

    1.解压apache-tomcat-7.0.69.tar.gz到/usr/local目录 .tar.gz -C /usr/local 2.新建目录tomcat7_1和tomcat7_2 tomcat7 ...

  5. Emac

    https://emacs-china.org/ 启动 console模式的emacs,$emacs -nw 学习参考: 1)<21天精通emacs> 2)Emacs常用命令简集. 3)& ...

  6. Haskell语言学习笔记(86)字符串格式化与插值

    String 的格式化 Text.Printf 这个模块用来处理字符串格式化. printf :: PrintfType r => String -> r printf 用于格式化字符串, ...

  7. jndi 小案例

    JNDI就是为JAVA中命名和目录服务定义的JAVA API,是命名服务的抽象机制.在J2EE中,JNDI的目的是用来查找J2EE服务器的注册资源.只要该对象在命名服务器上注册过,且你知道命名服务器的 ...

  8. ansj

    Ansj中文分词使用教程 Ansj中文分词使用教程:https://blog.csdn.net/a822631129/article/details/52331202 ansj分词史上最详细教程:ht ...

  9. python错题整理

    1.列表list去重 l1 = [1,1,2,3,5,5,4,4,4,5,6] set1 = set(l1) # print(set1) # set是集合 l2 = list(set1) # 将集合转 ...

  10. 微信小程序生命周期——小程序的生命周期及页面的生命周期。

    最近在做微信小程序开发,也发现一些坑,分享一下自己踩过的坑. 生命周期是指一个小程序从创建到销毁的一系列过程. 在小程序中 ,通过App()来注册一个小程序 ,通过Page()来注册一个页面. 首先来 ...