Jasperreport之与Springboot整合

本文介绍了如何在Springboot 1.5.x环境下,结合Jaspersoft Studio 6.5.0和Jasperreport 6.5.0设计报表,并解决PDF预览中文显示问题。通过在jrxml文件中设置pdfFontName, pdfEncoding和isPdfEmbedded属性,成功显示中文。同时,还提及了导出Excel时需添加maven poi依赖。" 132127045,18784123,粒子群算法在Matlab中的配电网重构实践,"['优化算法', '电力系统', 'Matlab编程', '配电网', '计算智能']
摘要由CSDN通过智能技术生成

环境:

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 = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值