java如何做报表
使用JasperReports生成报表
JasperReports是一个流行的开源Java报表工具,支持多种数据源和输出格式(如PDF、Excel、HTML等)。需要引入依赖库如jasperreports和commons相关包。
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.20.0</version>
</dependency>
通过JRXML设计模板文件,编译后填充数据生成报表:
// 加载.jrxml模板并编译
JasperReport report = JasperCompileManager.compileReport("template.jrxml");
// 填充数据(Map或JDBC数据源)
JasperPrint print = JasperFillManager.fillReport(report, parameters, dataSource);
// 导出为PDF
JasperExportManager.exportReportToPdfFile(print, "output.pdf");
使用Apache POI处理Excel报表
Apache POI支持直接操作Excel文件(XLS/XLSX格式),适用于动态生成复杂表格。
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
创建并写入Excel文件示例:
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet1");
// 写入表头
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("姓名");
headerRow.createCell(1).setCellValue("年龄");
// 写入数据
Row dataRow = sheet.createRow(1);
dataRow.createCell(0).setCellValue("张三");
dataRow.createCell(1).setCellValue(25);
// 保存文件
try (FileOutputStream fos = new FileOutputStream("report.xlsx")) {
workbook.write(fos);
}
使用iText PDF生成报表
iText库适合生成PDF格式的报表,支持表格、图表和水印等高级功能。

<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
生成PDF基础示例:
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream("report.pdf"));
document.open();
// 添加内容
document.add(new Paragraph("报表标题"));
document.add(new Paragraph("生成时间: " + new Date()));
// 创建表格
PdfPTable table = new PdfPTable(3);
table.addCell("项目");
table.addCell("数量");
table.addCell("单价");
table.addCell("电脑");
table.addCell("1");
table.addCell("5000");
document.add(table);
document.close();
使用JFreeChart创建图表报表
JFreeChart可用于生成柱状图、饼图等可视化报表组件。
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.5.3</version>
</dependency>
生成饼图并保存为图片:

DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("产品A", 43);
dataset.setValue("产品B", 27);
JFreeChart chart = ChartFactory.createPieChart(
"销售占比", dataset, true, true, false);
ChartUtils.saveChartAsPNG(new File("chart.png"), chart, 500, 300);
使用Spring Boot集成报表工具
在Spring Boot项目中可通过Thymeleaf或Freemarker模板引擎生成HTML报表,结合上述工具导出为其他格式。
配置Freemarker模板:
spring.freemarker.template-loader-path=classpath:/templates/
Controller中渲染并导出:
@GetMapping("/export")
public void exportReport(HttpServletResponse response) throws Exception {
Map<String, Object> model = new HashMap<>();
model.put("data", fetchData());
// 渲染HTML
String html = freemarkerTemplateEngine.process("report.ftl", model);
// 转为PDF
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ITextRenderer renderer = new ITextRenderer();
renderer.setDocumentFromString(html);
renderer.layout();
renderer.createPDF(outputStream);
response.setContentType("application/pdf");
response.getOutputStream().write(outputStream.toByteArray());
}






