Java中报表导出方法详解

在Java开发中,报表导出是一个常见的功能,它允许用户将数据以表格的形式导出为不同的文件格式,如Excel、PDF等,以下是几种常用的Java报表导出方法。
使用Apache POI导出Excel报表
Apache POI是Java中处理Microsoft Office文档的一个开源库,可以用来创建和操作Excel文件。
添加依赖
在项目的pom.xml文件中添加以下依赖:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.2</version>
</dependency>
创建Excel报表
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class ExcelExport {
public static void main(String[] args) throws IOException {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("报表");
// 创建表头
Row header = sheet.createRow(0);
header.createCell(0).setCellValue("姓名");
header.createCell(1).setCellValue("年龄");
header.createCell(2).setCellValue("性别");
// 添加数据
for (int i = 1; i <= 10; i++) {
Row row = sheet.createRow(i);
row.createCell(0).setCellValue("张三" + i);
row.createCell(1).setCellValue(20 + i);
row.createCell(2).setCellValue("男");
}
// 写入文件
FileOutputStream outputStream = new FileOutputStream("报表.xlsx");
workbook.write(outputStream);
workbook.close();
outputStream.close();
}
}
下载文件
通过Spring MVC的控制器,将生成的Excel文件以附件的形式返回给客户端。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
@Controller
public class ExcelDownloadController {
@GetMapping("/downloadExcel")
@ResponseBody
public void downloadExcel(HttpServletResponse response) throws IOException {
// 调用ExcelExport类的main方法生成Excel文件
// ...
// 设置响应头
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment;filename=报表.xlsx");
// 写入文件到客户端
OutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
workbook.close();
outputStream.close();
}
}
使用Apache PDFBox导出PDF报表
Apache PDFBox是一个开源的Java库,用于创建和操作PDF文件。
添加依赖
在项目的pom.xml文件中添加以下依赖:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.18</version>
</dependency>
创建PDF报表
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import java.io.FileOutputStream;
import java.io.IOException;
public class PDFExport {
public static void main(String[] args) throws IOException {
PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);
PDPageContentStream contentStream = new PDPageContentStream(document, page);
contentStream.setFont(PDType1Font.HELVETICA, 12);
contentStream.beginText();
contentStream.newLineAtOffset(100, 700);
contentStream.showText("姓名:张三");
contentStream.newLine();
contentStream.showText("年龄:20");
contentStream.newLine();
contentStream.showText("性别:男");
contentStream.endText();
contentStream.close();
FileOutputStream outputStream = new FileOutputStream("报表.pdf");
document.save(outputStream);
document.close();
outputStream.close();
}
}
下载文件
与Excel导出类似,通过Spring MVC的控制器将生成的PDF文件以附件的形式返回给客户端。
使用JasperReports导出报表

JasperReports是一个开源的Java报表库,可以生成多种格式的报表。
添加依赖
在项目的pom.xml文件中添加以下依赖:
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.13.1</version>
</dependency>
创建JasperReports报表
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class JasperReportsExport {
public static void main(String[] args) throws IOException {
File file = new File("src/main/resources/report/jasperreport_template.jrxml");
JasperReport jasperReport = JasperCompileManager.compileReport(file);
Map<String, Object> parameters = new HashMap<>();
parameters.put("reportTitle", "报表标题");
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(/* 数据源 */);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource);
// 生成PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "报表.pdf");
// 生成Excel
JasperExportManager.exportReportToExcelFile(jasperPrint, "报表.xlsx");
}
}
下载文件
与前面两种方法类似,通过Spring MVC的控制器将生成的PDF和Excel文件以附件的形式返回给客户端。
本文介绍了Java中报表导出的几种常用方法,包括使用Apache POI导出Excel报表、使用Apache PDFBox导出PDF报表以及使用JasperReports导出报表,在实际开发中,可以根据需求选择合适的方法来实现报表导出功能。