1-引入POM
<!-- PDF打印-jasper -->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.12.2</version>
<exclusions>
<exclusion>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
2-打印代码
controller层:
@ApiOperation(value = "打印PDF", notes = "print")
@GetMapping("/print")
public void print(String search, HttpServletResponse response) {
try {
List<JasperPrint> list = new ArrayList<>();
JasperPrint jasperPrint = pdfService.userTablePrint(search);
list.add(jasperPrint);
OutputStream os = response.getOutputStream();
// 使用JRPdfExproter导出器导出pdf
JRPdfExporter exporter = new JRPdfExporter();
// response.addHeader("Content-Disposition","inline");
response.setContentType("application/pdf");
// 设置JasperPrintList
exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT_LIST, list);
// 设置导出流
exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, os);
// 开始导出
exporter.exportReport();
os.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
serviceImpl层:
@Override
public JasperPrint userTablePrint(String search) throws Exception {
List<UserTablePDF> list = new ArrayList<>();
UserTablePDF mainData = getDataFromCenter(search);
list.add(mainData);
//
Map<String, Object> parameters = new HashMap<String, Object>();
final String User_main_jasper = "jasper/user/Coffee.jasper";
final String User_detail_jasper = "jasper/user/User_PDF_A4.jasper";
final String coffee = "jasper/user/coffee.jpg";
final String coffee_stain = "jasper/user/coffee_stain.png";
//
ClassPathResource user_detail = new ClassPathResource(User_detail_jasper);
InputStream user_detail_stream = user_detail.getInputStream();
parameters.put("User_PDF_A4", user_detail_stream);
//
ClassPathResource coffee_jpg = new ClassPathResource(coffee);
InputStream coffee_jpg_stream = coffee_jpg.getInputStream();
parameters.put("coffee", coffee_jpg_stream);
//
ClassPathResource coffee_stain_pang = new ClassPathResource(coffee_stain);
InputStream coffee_stain_pang_stream = coffee_stain_pang.getInputStream();
parameters.put("coffee_stain", coffee_stain_pang_stream);
//
JRDataSource jrDataSource = new JRBeanCollectionDataSource(list);
ClassPathResource resource = new ClassPathResource(User_main_jasper);
InputStream jasperResource = resource.getInputStream();
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperResource);
return JasperFillManager.fillReport(jasperReport, parameters, jrDataSource);
}
private UserTablePDF getDataFromCenter(String search) {
LambdaQueryWrapper<User> wrapper = Wrappers.<User>lambdaQuery();
if (StrUtil.isNotBlank(search)) {
wrapper.like(User::getNickName, search);
}
List<User> userKList = userMapper.selectList(wrapper);
UserTablePDF result = new UserTablePDF();
List<UserTablePDFDetail> details = new ArrayList<>();
for (User item : userKList) {
UserTablePDFDetail detail = new UserTablePDFDetail();
detail.setUserName(item.getUsername());
detail.setNickName(item.getNickName());
detail.setAge(item.getAge());
detail.setAddress(item.getAddress());
detail.setRole(item.getRole()==0?"管理员":"普通用户");
detail.setSex(item.getSex());
//detail.setPortrait(item.getPortrait());
detail.setPortrait("头像");
details.add(detail);
}
result.setDetails(details);
return result;
}
3-模板位置
模板使用TIBCO Jaspersoft Studio-6.6.0进行绘制,
下载地址:Jaspersoft® Studio | Jaspersoft Community