天天看點

IReport+jasperReport 列印背景實作

工具: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", "測試");
    }
}