工具:iReport-5.1.0,百度网盘下载链接:https://pan.baidu.com/s/14yBidyPVqnBD2NWHe5hMVA 提取码:2hd4
jdk7(jdk8无法打开iReport编辑工具)
模板制作,请参考:https://blog.csdn.net/u014704879/article/details/49613775
pom.xml引入jar
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.2.0</version>
</dependency>
打印工具类:JasperReportsUtil
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRAbstractExporter;
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.data.JRMapArrayDataSource;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.ooxml.JRDocxExporter;
import net.sf.jasperreports.engine.util.FileBufferedOutputStream;
import net.sf.jasperreports.engine.util.JRLoader;
import org.apache.commons.lang.StringUtils;
@SuppressWarnings("deprecation")
public class JasperReportsUtil {
public static String basePath="/jasper/";
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void JRPDFConnect(HttpServletRequest request,
HttpServletResponse response, Map parameters, Connection conn,
String jasperName) throws ServletException, IOException {
// 创建文件
File jasperFile = new File(request.getSession().getServletContext()
.getRealPath(basePath + jasperName));
JasperPrint jasperPrint = null;
try {
// 加载
JasperReport jasperReport = (JasperReport) JRLoader
.loadObject(jasperFile);
if(conn != null){
jasperPrint = JasperFillManager.fillReport(jasperReport,
parameters, conn);
}else{
jasperPrint = JasperFillManager.fillReport(jasperReport,
parameters);
}
} catch (JRException e) {
e.printStackTrace();
}
if (null != jasperPrint) {
FileBufferedOutputStream fbos = new FileBufferedOutputStream();
JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, fbos);// 生成输出流
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);// 创建jasperPrint
try {
exporter.exportReport();
fbos.close();
if (fbos.size() > 0) {
response.setContentType("application/pdf");
response.setContentLength(fbos.size());
ServletOutputStream ouputStream = response
.getOutputStream();
try {
fbos.writeData(ouputStream);
fbos.dispose();
ouputStream.flush();
} finally {
if (null != ouputStream) {
ouputStream.close();
}
}
}
} catch (JRException e) {
e.printStackTrace();
} finally {
if (null != fbos) {
fbos.close();
fbos.dispose();
}
}
}
}
/**
* 简要说明:打印
*
* @param request
* @param response
* @param parameters
* map参数
* @param dataList
* 对象
* @param jasperName
* jasper文件名称
* @throws ServletException
* @throws IOException
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void JRPDF(HttpServletRequest request,
HttpServletResponse response, Map parameters, List dataList,
String jasperName) throws ServletException, IOException {
// 创建文件
File jasperFile = new File(request.getSession().getServletContext()
.getRealPath(basePath+ jasperName));
JasperPrint jasperPrint = null;
try {
// 加载
JasperReport jasperReport = (JasperReport) JRLoader
.loadObject(jasperFile);
if (dataList != null && dataList.size() > 0) {
// 将实体对象集合格式化:实体与报表一致
JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(
dataList);
jasperPrint = JasperFillManager.fillReport(jasperReport,
parameters, beanColDataSource);
} else {
jasperPrint = JasperFillManager.fillReport(jasperReport,
parameters);
}
} catch (JRException e) {
e.printStackTrace();
}
if (null != jasperPrint) {
FileBufferedOutputStream fbos = new FileBufferedOutputStream();
JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, fbos);// 生成输出流
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);// 创建jasperPrint
try {
exporter.exportReport();
fbos.close();
if (fbos.size() > 0) {
response.setContentType("application/pdf");
response.setContentLength(fbos.size());
ServletOutputStream ouputStream = response
.getOutputStream();
try {
fbos.writeData(ouputStream);
fbos.dispose();
ouputStream.flush();
} finally {
if (null != ouputStream) {
ouputStream.close();
}
}
}
} catch (JRException e) {
e.printStackTrace();
} finally {
if (null != fbos) {
fbos.close();
fbos.dispose();
}
}
}
}
/**
* 简要说明:PDF 导出
*
* @param request
* @param response
* @param parameters
* @param dataList
* @param jasperName
* @param exportName
* @throws IOException
* @throws ServletException
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void exportPDF(HttpServletRequest request,
HttpServletResponse response, Map parameters, List dataList,
String jasperName, String exportName) throws IOException,
ServletException {
File jasperFile = new File(request.getSession().getServletContext()
.getRealPath(basePath+ jasperName));
JasperPrint jasperPrint = null;
try {
JasperReport jasperReport = (JasperReport) JRLoader
.loadObject(jasperFile);
// 实体与报表一直
JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(
dataList);
jasperPrint = JasperFillManager.fillReport(jasperReport,
parameters, beanColDataSource);
} catch (JRException e) {
e.printStackTrace();
}
if (jasperPrint != null) {
FileBufferedOutputStream fbos = new FileBufferedOutputStream();
JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, fbos);// 生成输出流
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);// 创建jasperPrint
try {
exporter.exportReport();
fbos.close();
if (fbos.size() > 0) {
if (!StringUtils.isEmpty(exportName)) {
exportName = exportName + ".pdf";
} else {
exportName = "export.pdf";
}
exportName = new String(exportName.getBytes("gbk"),
"ISO-8859-1");
String headStr = "attachment; filename=" + exportName;
response.reset();
response.setContentType("bin");
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition", headStr);
response.setContentLength(fbos.size());
ServletOutputStream ouputStream = response
.getOutputStream();
try {
fbos.writeData(ouputStream);
fbos.dispose();
ouputStream.flush();
} finally {
if (null != ouputStream) {
ouputStream.close();
}
}
}
} catch (JRException e) {
e.printStackTrace();
} finally {
if (null != fbos) {
fbos.close();
fbos.dispose();
}
}
}
}
/**
* 简要说明:excel导出
*
* @param request
* @param response
* @param parameters
* @param dataList
* @param jasperName
* @param exportName
* @throws IOException
* @throws ServletException
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void exportExcel(HttpServletRequest request,
HttpServletResponse response, Map parameters, List dataList,
String jasperName, String exportName) throws IOException,
ServletException {
File jasperFile = new File(request.getSession().getServletContext()
.getRealPath( basePath+ jasperName));
JasperPrint jasperPrint = null;
try {
JasperReport jasperReport = (JasperReport) JRLoader
.loadObject(jasperFile);
// 实体与报表一直
JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(
dataList);
jasperPrint = JasperFillManager.fillReport(jasperReport,
parameters, beanColDataSource);
/*
* 设置头信息
*/
response.setContentType("application/vnd.ms-excel");
if (!StringUtils.isEmpty(exportName)) {
exportName = exportName + ".xls";
} else {
exportName = "export.xls";
}
exportName = new String(exportName.getBytes("gbk"), "ISO-8859-1");
response.setHeader("Content-disposition", "attachment; filename="
+ exportName);
ServletOutputStream ouputStream = response.getOutputStream();
JRXlsExporter exporter = new JRXlsExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,
ouputStream);
// exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE);
// exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.FALSE);
// exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boolean.FALSE);
exporter.exportReport();
ouputStream.flush();
ouputStream.close();
} catch (JRException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void exportWord(HttpServletRequest request,
HttpServletResponse response, Map parameters, List dataList,
String jasperName, String exportName) throws IOException,
ServletException {
File jasperFile = new File(request.getSession().getServletContext()
.getRealPath(basePath + jasperName));
JasperPrint jasperPrint = null;
try {
JasperReport jasperReport = (JasperReport) JRLoader
.loadObject(jasperFile);
// 实体与报表一直
JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(
dataList);
jasperPrint = JasperFillManager.fillReport(jasperReport,
parameters, beanColDataSource);
response.setContentType("application/msword;charset=utf-8");
if (!StringUtils.isEmpty(exportName)) {
exportName = exportName + ".doc";
} else {
exportName = "export.doc";
}
exportName = new String(exportName.getBytes("gbk"), "ISO-8859-1");
response.setHeader("Content-disposition", "attachment; filename="
+ exportName);
JRAbstractExporter exporter = new JRDocxExporter();// 可以替换成不同的文件类型
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,
response.getOutputStream());
exporter.exportReport();
} catch (JRException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@SuppressWarnings("rawtypes")
public static void batchJRPDF(HttpServletRequest request,
HttpServletResponse response, List dataList,
String jasperName) throws ServletException, IOException {
List<JasperPrint> printList = getPrintStream(request, dataList, jasperName);
if (printList != null && printList.size() > 0) {
FileBufferedOutputStream fbos = new FileBufferedOutputStream();
JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, fbos);// 生成输出流
exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, printList);
try {
exporter.exportReport();
fbos.close();
if (fbos.size() > 0) {
response.setContentType("application/pdf");
response.setContentLength(fbos.size());
ServletOutputStream ouputStream = response
.getOutputStream();
try {
fbos.writeData(ouputStream);
fbos.dispose();
ouputStream.flush();
} finally {
if (null != ouputStream) {
ouputStream.close();
}
}
}
} catch (JRException e) {
e.printStackTrace();
} finally {
if (null != fbos) {
fbos.close();
fbos.dispose();
}
}
}
}
@SuppressWarnings({ "rawtypes", "unchecked" })
private static List<JasperPrint> getPrintStream(HttpServletRequest request, List dataList, String jasperName) {
List printList = new ArrayList();
Map mapFormValue = new HashMap();
if(dataList != null && dataList.size() > 0){
for(int i=0; i<dataList.size(); i++){
mapFormValue = (Map) dataList.get(i);
File jasperFile = new File(request.getSession().getServletContext()
.getRealPath("/jasper/" + jasperName));
try {
JasperReport report = (JasperReport) JRLoader.loadObject(jasperFile);
JRDataSource dataSource = createReportDataSource(mapFormValue);
JasperPrint jasperPrint = JasperFillManager.fillReport(report,
null, dataSource);
printList.add(jasperPrint);
} catch (Exception e) {
}
}
}
return printList;
}
@SuppressWarnings("rawtypes")
private static JRDataSource createReportDataSource(Map dataMap) {
Map[] reportRows = { dataMap };
JRMapArrayDataSource dataSource = new JRMapArrayDataSource(reportRows);
return dataSource;
}
}
调用controller
import com.guodi.frame.system.BaseController;
import com.guodi.plan.common.util.JasperReportsUtil;
import com.guodi.plan.system.persistence.entity.PlanClueInfo;
import com.guodi.plan.system.persistence.entity.PlanClueSend;
import com.guodi.plan.system.persistence.entity.PlanClueSource;
import com.guodi.plan.system.persistence.entity.PlanClueViolationType;
import com.guodi.plan.system.service.warning.clue.PlanClueInfoService;
import com.guodi.plan.system.service.warning.clue.PlanClueSendService;
import com.guodi.plan.system.service.warning.clue.PlanClueSourceService;
import com.guodi.plan.system.service.warning.clue.PlanClueViolationTypeService;
import com.guodi.redis.constant.ConvertConst;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.springframework.stereotype.Controller;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("Pdf")
public class PdfController extends BaseController {
@Resource
private PlanClueInfoService planClueInfoService;
@Resource
private PlanClueViolationTypeService planClueViolationTypeService;
@Resource
private PlanClueSendService planClueSendService;
@Resource
private PlanClueSourceService planClueSourceService;
@RequestMapping("/JRPDF")
public void JRPDF(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List dataList = new ArrayList();
Map<String, Object> map = new HashMap<String, Object>();
map.put("jsgm", "1000");
File file = ResourceUtils.getFile("classpath:jasper/csdljcss.png");
FileInputStream inputStream = new FileInputStream(file);
map.put("photo", inputStream);
dataList.add(map);
JasperReportsUtil.JRPDF(request, response, null, dataList, “jasper/xxx.jasper");
}
@RequestMapping("/exportPDF")
public void exportPDF(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List dataList = new ArrayList();
Map<String, Object> map = new HashMap<String, Object>();
map.put("jsgm", "1000");
File file = ResourceUtils.getFile("classpath:jasper/csdljcss.png");
FileInputStream inputStream = new FileInputStream(file);
map.put("photo", inputStream);
dataList.add(map);
JasperReportsUtil.exportPDF(request, response, null, dataList, "jasper/xxx.jasper", "测试");
}
}