主要功能点:
Spring Boot Web 整合 JasperReports,在浏览器地址栏输入访问地址会直接下载 PDF 报表文件;整合过程中遇到的两个比较费时间的问题:
org.springframework.boot
spring-boot-starter-web
net.sf.jasperreports
jasperreports
6.19.1
com.lowagie
itext
net.sf.jasperreports
jasperreports-fonts
6.19.1
com.lowagie
itext
2.1.7
报表文件名称:employees-details.jrxml
报表文件路径:src\main\resources\employees-details.jrxml
<?xml version="1.0" encoding="UTF-8"?>
字体文件位置:src\main\resources\static\font\chinese.stsong.ttf
字体配置文件位置:src\main\resources\static\font\fonts.xml
配置文件内容
<?xml version="1.0" encoding="UTF-8"?>
static/font/chinese.stsong.ttf
static/font/chinese.stsong.ttf
static/font/chinese.stsong.ttf
static/font/chinese.stsong.ttf
Identity-H
true
'华文宋体', Arial, Helvetica, sans-serif
'华文宋体', Arial, Helvetica, sans-serif
在 classpath 路径下(application.properties 同级)创建 Jasper 拓展文件 jasperreports_extension.properties
net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.lobstertwo=static/font/fonts.xml@Data
@NoArgsConstructor
public class Employee {
private int id;
private String name;
private String role;
private String address;
public Employee(int id, String name, String role, String address) {
this.id = id;
this.name = name;
this.role = role;
this.address = address;
}
}@RestController
public class EmployeeController {
@GetMapping("/employee/records/report")
public ResponseEntity getEmployeeRecordReport() {
try {
// 测试数据
List empLst = createTestData();
// 报表需要的动态参数
Map empParams = new HashMap();
empParams.put("CompanyName", "Spring Boot 整合 JasperReports");
empParams.put("employeeData", new JRBeanCollectionDataSource(empLst));
// 编译
JasperReport jasperReport = JasperCompileManager.compileReport(
ResourceUtils.getFile("classpath:employees-details.jrxml").getAbsolutePath()
);
// 填充数据
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, empParams, new JREmptyDataSource());
// 导出报表
HttpHeaders headers = new HttpHeaders();
// 设置响应格式:PDF
headers.setContentType(MediaType.APPLICATION_PDF);
// 设置文件名称
headers.setContentDispositionFormData("filename", "employees-details.pdf");
return new ResponseEntity(JasperExportManager.exportReportToPdf(jasperPrint), headers, HttpStatus.OK);
} catch (Exception e) {
e.printStackTrace();
return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
private List createTestData() {
List resultList = new ArrayList<>();
resultList.add(new Employee(1, "汪小成", "程序员", "山东省济宁市任城区"));
resultList.add(new Employee(2, "孙小顺", "部门经理", "安徽省合肥市蜀山区"));
return resultList;
}
} 在谷歌浏览器地址栏输入 http://localhost:9000/employee/records/report 会直接弹出保存文件的对话框,实际效果如下:
itext-2.1.7.js8.jar 可以在如下地址下载:
https://jaspersoft.jfrog.io/ui/native/third-party-ce-artifacts/com/lowagie/itext/2.1.7.js8/
| 留言与评论(共有 0 条评论) “” |