Java使用iText生成复杂PDF表格详解
本文解析一段使用Java和iText库生成复杂PDF表格的代码,试用各种需求导出功能。通过逐行分析,帮助读者掌握关键知识点。
一、代码功能概述
该方法用于生成耕地地力保护补贴分户信息的PDF报表,包含以下核心功能:
- 从服务层获取数据
- 设置HTTP响应头实现文件下载
- 创建PDF文档并设置中文格式
- 构建复杂表头(多行合并)
- 动态填充表格数据
- 添加备注说明
二、核心知识点解析
1. HTTP响应设置
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=\"XXXXXXXXXXX登记表.pdf\"");
作用:
setContentType:指定响应内容为PDF格式Content-Disposition:触发浏览器下载行为,指定默认文件名- 中文文件名需要URL编码处理(示例未展示)
2. 初始化PDF文档
Document document = new Document(PageSize.A4.rotate());
PdfWriter writer = PdfWriter.getInstance(document, response.getOutputStream());
document.open();
关键点:
PageSize.A4.rotate()设置横向A4页面- 通过
response.getOutputStream()获取输出流 - 必须执行
document.open()和document.close()
3. 中文字体处理
BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
Font font = new Font(baseFont, 12);
说明:
STSong-Light是常用中文字体UniGB-UCS2-H指定中文编码EMBEDDED将字体嵌入PDF,确保跨系统显示一致
4. 复杂表头构建
表格结构:
PdfPTable table = new PdfPTable(23);
float[] columnWidths = {5,10,10,...}; //23列宽定义
table.setWidths(columnWidths);
合并技巧:
- 通过
setRowspan()和setColspan()实现单元格合并 - 三行表头结构:
- 基础信息(合并3行)
- 补贴面积相关(合并2行)
- 扣除面积明细
示例代码片段:
// 合并3行的单元格
PdfPCell cell = new PdfPCell(new Phrase("序号", font));
cell.setRowspan(3);
table.addCell(cell);
// 合并12列的标题
PdfPCell mainTitle = new PdfPCell(new Phrase("2023年耕地地力保护补贴", font));
mainTitle.setColspan(12);
5. 动态数据填充
数据遍历:
for (int i = 0; i < list.size(); i++) {
AuditCityAreadetail detail = list.get(i);
// 添加23列数据...
}
安全处理:
String nullSafeToString(Object obj) {
return obj != null ? obj.toString() : "";
}
// 身份证脱敏
DesensitizedUtil.desensitizedIdNumber(detail.getIDCard())
单元格样式:
BiConsumer<String, Font> addCell = (text, fontStyle) -> {
PdfPCell cell = new PdfPCell(new Phrase(text, fontStyle));
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
table.addCell(cell);
};
6. 异常处理
try {
// 主要逻辑
} catch (Exception e) {
e.printStackTrace(); // 生产环境应记录日志
} finally {
if(document.isOpen()) document.close();
}
优化建议:
- 使用日志框架(Log4j/SLF4J)记录错误
- 添加具体异常处理(IOException等)
- 返回错误信息给前端
三、完整流程总结
- 数据准备:从Service层获取列表和汇总数据
- 响应配置:设置PDF下载头信息
- 文档初始化:创建横向A4文档
- 内容构建:
- 添加主标题
- 插入单位信息(含当前日期)
- 构建复杂表格
- 填充动态数据
- 添加备注说明
- 资源释放:关闭文档和输出流
示例代码地址:导出PDF
掌握这些技巧后,您可以轻松生成包含复杂中文表格的PDF文档。欢迎在评论区交流使用心得!

3051

被折叠的 条评论
为什么被折叠?



