环境:
jdk1.8
Jaspersoft Studio 6.5.0
Jasperreport 6.5.0
Springboot 1.5.x
一 用Jaspersoft Studio报表设计器设计一个报表test.jrxml
此处省略
二 整合springboot实现pdf预览报表数据 采用javabean数据方式
pom.xml增加
<!-- jasperreports--> <dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports</artifactId> <version>6.5.0</version> </dependency> <dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports-fonts</artifactId> <version>6.0.0</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.0</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-pdfa</artifactId> <version>5.5.0</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> <dependency> <groupId>cn.lesper</groupId> <artifactId>iTextAsian</artifactId> <version>3.0</version> </dependency> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.4.11</version> </dependency> <!-- jasperreports end--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency>
在src/main/resources下增加jasperreport文件夹 并将test.jrxml文件放入此处
控制器部分代码
@Autowired private ApplicationContext appContext; public List<Product> getProductList() { List<Product> list = new ArrayList<>(); for (int i = 1; i <= 20; i++) { list.add(new Product(String.valueOf(i), "名称" + i)); } return list; } @RequestMapping(path = "/pdfPreview", method = RequestMethod.GET) public ModelAndView pdfPreview() { JasperReportsPdfView view = new JasperReportsPdfView(); view.setUrl("classpath:jasperreport/test.jrxml"); view.setApplicationContext(appContext); Map<String, Object> params = new HashMap<>(); //列表数据源 数据源字段名称和类型需要和报表设计的字段一致 params.put("datasource", getProductList()); //给参数赋值 params.put("Parameter1", "hello 你好"); return new ModelAndView(view, params); } //html预览 前端调用<iframe src="/htmlPreview" width="100%" height="800px"></iframe> @RequestMapping(path = "/htmlPreview", method = RequestMethod.GET) public void reportHtml(HttpServletRequest request, HttpServletResponse response) throws Exception { JRDataSource jrBeanCollectionDataSource = new JRBeanCollectionDataSource(getProductList()); Map params = new HashMap(); params.put("Parameter1", "hello 你好"); //编译jrxml文件,生成jasper文件 URL url = this.getClass().getClassLoader().getResource("jasperreport/test.jrxml"); JasperCompileManager.compileReportToFile(url.getPath()); File jasperFile = ResourceUtils.getFile("classpath:jasperreport/test.jasper"); JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperFile); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, jrBeanCollectionDataSource); JasperExportManager.exportReportToHtmlFile(jasperPrint, request.getServletContext().getRealPath("/") + "reportPreviewTemp.html"); response.sendRedirect("reportPreviewTemp.html"); } @RequestMapping(path = "/pdfExport", method = RequestMethod.GET) public String pdfExport(HttpServletRequest request, HttpServletResponse response) throws Exception { JRDataSource jrBeanCollectionDataSource = new JRBeanCollectionDataSource(getProductList()); Map params = new HashMap(); params.put("Parameter1", "hello 你好"); //编译jrxml文件,生成jasper文件 URL url = this.getClass().getClassLoader().getResource("jasperreport/test.jrxml"); JasperCompileManager.compileReportToFile(url.getPath()); File jasperFile = ResourceUtils.getFile("classpath:jasperreport/test.jasper"); JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperFile); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, jrBeanCollectionDataSource); JRPdfExporter pdf = new JRPdfExporter(); pdf.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); pdf.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream()); String fileName = new String("测试.pdf".getBytes("utf-8"), "ISO_8859_1"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName); response.setContentType("application/pdf"); response.setCharacterEncoding("utf-8"); pdf.exportReport(); return null; } //预览并浏览器自动弹出打印 @RequestMapping(path = "/previewPrint", method = RequestMethod.GET) public void previewPrint(HttpServletRequest request, HttpServletResponse response) throws Exception { JRDataSource jrBeanCollectionDataSource = new JRBeanCollectionDataSource(getProductList()); Map params = new HashMap(); params.put("Parameter1", "hello 你好"); //编译jrxml文件,生成jasper文件 URL url =