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 中,方便报表制作、数据归档或文档共享,同时也能灵活调整样式和分页,使输出文档更加专业。

相关推荐
珍珠先生几秒前
P11 · MySQL 驱动版本过旧:Client does not support authentication protocol
java
~木雨9 分钟前
Java 并发编程架构全景:并发层的五域设计 —— 线程模型、线程池隔离、并发安全到问题治理(全体系汇总)
java·安全·架构·线程池·并发编程·高并发架构
极小狐27 分钟前
从复制粘贴到可复用组件:极狐GitLab CI/CD 组件目录实战
java·ci/cd·gitlab·devops·组件化
麻瓜code32 分钟前
【Agent】Spring AI RAG 实战:本地向量库 + 云端知识库
java·人工智能·spring
小刘在重生~1 小时前
Java 集合|Collection、List、ArrayList、LinkedList、泛型、Collections 工具类
java·数据结构·list
我不会起名字3221 小时前
一天一道算法题(29):单调栈
java·数据结构·python·算法·leetcode·golang·单调栈
XR1234567881 小时前
医院移动医护零漫游无线网络选型指南
java·后端·struts
干到60岁退休的码农1 小时前
13.构建登录接口响应数据
java·spring boot·mybatis
水巷石子2 小时前
学习langChain4j的第二天,体验springBoot中的starter
java·spring boot·学习·spring·langchain4j
ly76892 小时前
Spring Bean生命周期全流程:从BeanDefinition到销毁
java·后端·spring·bean生命周期·beandefinition·初始化回调