Java 高效实现 CSV 转 PDF

在企业和开发场景中,CSV 文件是最常见的数据存储格式之一,但纯文本的表格数据在展示和共享时往往缺乏美观性和可读性。相比之下,PDF 文件不仅支持整齐的表格布局,还能保证内容只读、兼容性强,非常适合报表、数据归档和文档共享。

本文将介绍使用Java将CSV文件转换为PDF文档的完整解决方案:从依赖库安装,到单文件转换、样式设置,再到批量处理。

为什么要将 CSV 转为 PDF

将 CSV 转换为 PDF 有几个显著优势:

  • 更易阅读:CSV 文件通常是纯文本,缺乏排版,而 PDF 可以通过表格形式展示数据,让内容更清晰直观。

  • 文档安全:PDF 文件默认只读,分享时无需担心数据被随意修改。

  • 兼容性强:PDF 能在大多数设备和操作系统上打开,不依赖表格软件。

  • 便于归档:PDF 格式适合长期保存,方便报告或文档归档管理。

步骤 1:安装 CSV 转 PDF 库

要在 Java 中处理 CSV 并生成 PDF,需要引入支持 CSV 转 PDF 的库。本文示例所使用的是 Spire.XLS for Java。如果你使用 Maven 管理依赖,可以在 pom.xml 中添加:

java 复制代码
<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.xls</artifactId>
        <version>15.12.15</version>
    </dependency>
</dependencies>

依赖添加完成后,即可在项目中使用该库的 API 来加载 CSV 并导出 PDF。

步骤 2:单文件 CSV 转 PDF

将单个CSV文件转换为PDF的核心思路是先加载 CSV 文件到 Workbook 对象,然后调用saveToPdf方法将其保存为 PDF。

java 复制代码
import com.spire.xls.Workbook; 
import com.spire.xls.Worksheet;

public class ConvertCsvToPdf {
    public static void main(String []args) {
        // 创建 Workbook 实例
        Workbook wb = new Workbook();
        
        // 加载 CSV 文件
        wb.loadFromFile("Sample.csv", ",");
        
        // 设置 PDF 页面自适应
        wb.getConverterSetting().setSheetFitToPage(true);
        
        // 获取第一个工作表
        Worksheet sheet = wb.getWorksheets().get(0);
        
        // 自动调整列宽
        for (int i = 1; i < sheet.getColumns().length; i++) {
            sheet.autoFitColumn(i);
        }
        
        // 保存为 PDF
        sheet.saveToPdf("toPDF.pdf");
        
        System.out.println("PDF 已生成:toPDF.pdf");
    }
}

步骤 3:设置样式(可选)

为了让 PDF 更美观易读,可以对单元格进行样式设置:

  • 调整字体大小并加粗

  • 添加边框或背景颜色

  • 控制分页显示,避免表格超出页面

示例:

java 复制代码
import com.spire.xls.*;

Workbook wb = new Workbook();
wb.loadFromFile("Sample.csv", ",");

Worksheet sheet = wb.getWorksheets().get(0);
CellRange range = sheet.getRange("A1:C10");

// 设置字体加粗和字号
range.getStyle().getFont().setBold(true);
range.getStyle().getFont().setSize(12);

// 添加边框和背景颜色
range.getStyle().getBorders().setAllBorders(BorderLineStyle.Thin);
range.getStyle().setColor(java.awt.Color.LIGHT_GRAY);

sheet.saveToPdf("styled_output.pdf");

步骤 4:批量转换 CSV 文件

如果需要处理多个 CSV 文件,可以遍历文件夹并依次生成 PDF:

java 复制代码
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;
import java.io.File;

public class BatchCsvToPdf {
    public static void main(String[] args) {
        String inputDir = "csv_files";
        String outputDir = "pdf_files";
        new File(outputDir).mkdirs();

        File folder = new File(inputDir);
        for (File csvFile : folder.listFiles((d, name) -> name.endsWith(".csv"))) {
            Workbook wb = new Workbook();
            wb.loadFromFile(csvFile.getAbsolutePath(), ",");
            wb.getConverterSetting().setSheetFitToPage(true);

            Worksheet sheet = wb.getWorksheets().get(0);
            for (int i = 1; i < sheet.getColumns().length; i++) {
                sheet.autoFitColumn(i);
            }

            String pdfFile = outputDir + "/" + csvFile.getName().replace(".csv", ".pdf");
            sheet.saveToPdf(pdfFile);
        }

        System.out.println("批量 CSV 转 PDF 完成!");
    }
}

这种方法适合生成大量报表或数据文件,极大提高处理效率。

优化建议

  • 保持 CSV 数据整洁:避免空行、合并单元格或特殊字符,确保 PDF 输出整齐。

  • 调整列宽和字体:提高 PDF 可读性。

  • 检查分页效果:大数据表格需确认跨页显示是否合理。

  • 生成后预览:在 PDF 阅读器中查看排版效果,如有需要再调整样式。

总结

本文介绍了在 Java 中将 CSV 文件转换为 PDF 的完整方法,包括单文件转换、样式设置以及批量处理。通过这些操作,CSV 数据可以以整齐美观的表格形式呈现在 PDF 中,方便报表制作、数据归档或文档共享,同时也能灵活调整样式和分页,使输出文档更加专业。

相关推荐
隐形喷火龙14 小时前
SpringBoot 异步任务持久化方案:崩溃重启不丢任务的完整实现
java·spring boot·后端
我是koten14 小时前
K8s启动pod失败,日志报非法的Jar包排查思路(Invalid or corrupt jarfile /app/xxxx,jar)
java·docker·容器·kubernetes·bash·jar·shell
WX-bisheyuange14 小时前
基于Spring Boot的库存管理系统的设计与实现
java·spring boot·后端
YanDDDeat14 小时前
【JVM】类初始化和加载
java·开发语言·jvm·后端
码农水水14 小时前
阿里Java面试被问:单元测试的最佳实践
java·面试·单元测试
indexsunny14 小时前
互联网大厂Java面试实战:Spring Cloud微服务与Redis缓存在电商场景中的应用
java·spring boot·redis·spring cloud·微服务·消息队列·电商
hunter145014 小时前
2026.1.4 html简单制作
java·前端·笔记·html
枫叶丹414 小时前
【Qt开发】Qt系统(三)->事件过滤器
java·c语言·开发语言·数据库·c++·qt
程序员阿明14 小时前
spring boot 3.5+flowable7+java 21流程引擎测试程序
java·spring boot·后端