0%

EasyExcel实现多层表头:注解与列表两种方式详解

在复杂报表场景中,多层表头(如 “基础信息” 包含 “姓名”“手机号” 等子列)能更清晰地组织数据。EasyExcel 提供了简洁的 API 支持多层表头,本文将详细讲解两种实现方式(注解方式和列表方式),并对比其适用场景,帮助你快速实现类似 Excel 数据透视表的表头结构。

多层表头的核心原理

多层表头本质是多级列标题的合并与嵌套,例如 “基础信息” 作为一级标题,其下包含 “姓名”“手机号” 等二级标题。EasyExcel 通过以下方式实现:

  • 层级定义:用数组或列表的嵌套结构表示表头层级(如 {"基础信息", "姓名"} 表示两级表头);
  • 自动合并:相同的上级标题会自动合并单元格(如 “基础信息” 会跨列合并其所有子列)。

环境准备

引入 EasyExcel 依赖(兼容 2.x 和 3.x 版本):

1
2
3
4
5
<dependency>  
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.0</version>
</dependency>

实现方式详解

注解方式(推荐用于固定表头)

通过 @ExcelProperty 注解的 value 属性定义多层表头,适用于表头结构固定的场景(如实体类与表头一一对应)。

定义实体类

在实体类的字段上使用 @ExcelProperty(value = {一级标题, 二级标题, ...}) 定义多层表头:

阅读全文 »

PDF 文件压缩实战:基于 Aspose.PDF 的高效优化方案

PDF 文档因格式统一、跨平台兼容等特性被广泛使用,但高分辨率图片、冗余数据等常导致文件体积过大,影响传输和存储。本文将介绍如何使用 aspose-pdf 库实现 PDF 压缩,包括依赖配置、核心压缩参数解析、实战代码及优化技巧,帮助你在保证文档可读性的前提下显著减小 PDF 体积。

工具选型:为何选择 Aspose.PDF?

处理 PDF 压缩的工具众多,aspose-pdf 凭借以下优势成为优选:

  • 功能全面:支持图片压缩、冗余数据清理、字体优化等多维度压缩;
  • 压缩效率高:针对图片和文本的优化算法可将体积减少 30%-70%;
  • 兼容性强:支持所有主流 PDF 版本(1.0-1.7、PDF/A 等),处理后格式兼容各类阅读器;
  • API 简洁:通过面向对象的接口快速配置压缩策略,无需深入理解 PDF 底层结构。

环境配置与依赖引入

Maven 依赖配置

aspose-pdf 需通过指定仓库引入,在 pom.xml 中添加:

阅读全文 »

图片压缩实战:基于 toolkit-image 的高效处理方案

图片压缩是 Web 开发中常见的需求,用于减少图片体积、提升加载速度(尤其在移动端场景)。toolkit-image 是一款封装了 Thumbnails 工具的 Java 库,提供简洁 API 实现图片压缩、尺寸调整等功能。本文将详细讲解其依赖配置、核心用法、优化技巧及扩展场景,帮助你快速集成图片压缩功能。

工具选型与优势

为何选择 toolkit-image?

toolkit-image 基于 Google 的 thumbnailator 封装,相比原生工具具有以下优势:

  • API 简洁:一行代码实现压缩、尺寸调整、格式转换,无需处理复杂的 IO 流;
  • 功能全面:支持按尺寸、比例、质量压缩,适配常见图片格式(PNG、JPG、GIF 等);
  • 低侵入性:轻量级依赖,无冗余组件,易于集成到 Spring Boot、普通 Java 项目。

核心依赖说明

toolkit-image 的核心功能依赖 thumbnailator(图片处理)和 commons-io(IO 工具),引入时无需手动添加这些依赖(Maven 会自动传递)。

环境配置与依赖引入

Maven 依赖配置

pom.xml 中添加 toolkit-image 依赖:

阅读全文 »

EasyExcel写入多Sheet页:分组数据的高效处理方案

在实际开发中,经常需要按分组(如城市、部门、日期)将数据分别写入 Excel 的不同 Sheet 页,既便于数据归类,也方便用户查看。EasyExcel 作为阿里巴巴开源的高效 Excel 处理工具,提供了简洁的 API 支持多 Sheet 写入。本文将详细讲解多 Sheet 写入的实现步骤、核心代码及优化技巧,以 “按城市分组写入” 为例展开说明。

核心原理

EasyExcel 写入多 Sheet 页的核心逻辑是:

  1. 创建一个全局的 ExcelWriter 对象,关联目标文件和数据模型(实体类);
  2. 为每个分组创建一个 WriteSheet 对象(指定 Sheet 索引和名称);
  3. 通过 ExcelWriter 向每个 WriteSheet 写入对应分组的数据;
  4. 所有 Sheet 写入完成后,调用 finish() 方法关闭资源,完成文件生成。

环境准备

依赖配置

在 Maven 项目的 pom.xml 中引入 EasyExcel 依赖:

阅读全文 »

Spring Security 实现用户单设备登录控制

在许多系统中,为了安全性考虑,需要限制用户只能在一个设备上登录。Spring Security 提供了完善的会话管理机制,可以轻松实现这一需求,主要通过控制用户并发会话数量来实现。

两种单设备登录策略

1. 后来者登录,顶掉之前的登录者(默认行为)

这种策略允许新登录挤掉旧登录,适用于用户可能在不同设备间切换的场景。

1
2
3
4
5
6
7
8
9
10
11
12
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.csrf().disable()
// 会话管理配置
.sessionManagement()
// 设置最大会话数为1,即同一用户只能有一个有效会话
.maximumSessions(1);
}

效果:当用户在新设备登录时,系统会自动使该用户在其他设备上的旧会话失效,旧会话的用户在后续操作时会被要求重新登录。

2. 不允许后来者登录,保留当前登录

这种策略更严格,一旦用户在某个设备登录,其他设备的登录尝试会被拒绝。

1
2
3
4
5
6
7
8
9
10
11
12
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.csrf().disable()
.sessionManagement()
.maximumSessions(1)
// 关键配置:当达到最大会话数时,阻止新的登录
.maxSessionsPreventsLogin(true);
}

效果:如果用户已经在一个设备登录,当尝试在第二个设备登录时,会收到登录失败的提示,无法成功登录。

阅读全文 »