學而時習之,不亦說乎
基於SpringBoot項目集成iReport,實現預覽、下載PDF功能。
具體步驟如下:
- 加入相關依賴
<!-- PDF打印相關依賴 -->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.17.0</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.11</version>
</dependency>
<!-- 解決中文字體顯示問題 -->
<dependency>
<groupId>cn.lesper</groupId>
<artifactId>iTextAsian</artifactId>
<version>3.0</version>
</dependency>
-
在項目的resource目錄下創建ireport文件夾,將在ireport設計器中設計好的test.jrxml文件,復制黏貼入該文件夾下。
-
提供service方法
@Autowired
private DataSource dataSource;
@Override
public void optPdf(HttpServletResponse response,String businessUuid,Integer optType) throws Exception {
String fileName = "test.jrxml";
String pdfName = "test";
//File file = ResourceUtils.getFile("classpath:ireport/" + fileName);
//jar部署方式需要以以下方式獲取文件
InputStream is = Test.class.getResourceAsStream("/ireport/" + fileName);
response.setCharacterEncoding("utf-8");
response.setContentType("application/pdf");
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(pdfName, "UTF-8") + ".pdf");
try {
//編譯jasperReport
JasperReport jasperReport = JasperCompileManager.compileReport(is);
//添加iReport入參
HashMap<String, Object> params = new HashMap<>();
params.put("uuid",businessUuid);
//獲取outputStream
OutputStream outputStream = response.getOutputStream();
if(optType == 1){
//預覽
byte[] bytes = JasperRunManager.runReportToPdf(jasperReport,params,dataSource.getConnection());
response.setContentType("application/pdf;charset=UTF-8");
response.setHeader("content-disposition","inline");
response.setContentLength(bytes.length);
outputStream.write(bytes, 0, bytes.length);
outputStream.flush();
outputStream.close();
}else{
//下載
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params,dataSource.getConnection());
JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);
}
} catch (IOException | JRException e) {
e.printStackTrace();
}
}
- 創建一個Controller類,增加相應API接口。
@ApiOperation("業務申請單PDF預覽")
@GetMapping("/showPdf")
public void showPdf(HttpServletResponse response,@RequestParam String businessUuid)throws Exception{
resourceManageService.optPdf(response,businessUuid,1);
}
@ApiOperation("業務申請單PDF下載")
@GetMapping("/downPdf")
public void downPdf(HttpServletResponse response,@RequestParam String businessUuid)throws Exception{
resourceManageService.optPdf(response,businessUuid,2);
}
- 啟動SpringBoot項目
預覽方式訪問:
http://127.0.0.1:8080/showPdf?businessUuid=1111
下載方式訪問:
