展开菜单
首页 精品内容 本月促销 装机必备 Windows macOS软件 IOS软件 Android AI PDF教程 专题
全部分类

当前位置:

首页 > 编程开发 > Python结合Spire.XLS for Python实现将CSV转为PDF

Python结合Spire.XLS for Python实现将CSV转为PDF

CSV文件以纯文本形式存储表格数据,通用性确实很强,但一到了正式场合——比如向客户交付数据报表、归档项目文档或者打印材料——它的短板就暴露无遗了:没有格式、列宽不均、分页混乱,阅读体验大打折扣。 PDF则恰好弥补了这些缺陷。它固定排版,跨平台显示一致,是正式文档的首选格式。这里介绍一种简单直接的方法

CSV文件以纯文本形式存储表格数据,通用性确实很强,但一到了正式场合——比如向客户交付数据报表、归档项目文档或者打印材料——它的短板就暴露无遗了:没有格式、列宽不均、分页混乱,阅读体验大打折扣。

PDF则恰好弥补了这些缺陷。它固定排版,跨平台显示一致,是正式文档的首选格式。这里介绍一种简单直接的方法:利用 Spire.XLS for Python 库,将CSV文件加载为工作簿,调整表格样式,再导出为规整的PDF文档。整个过程只需十几行代码,无需安装Microsoft Excel。

Python结合Spire.XLS for Python实现将CSV转为PDF

准备工作

在开始编码之前,先安装所需的依赖库:

pip install Spire.XLS

Spire.XLS for Python 是一个功能强大的Excel操作库,支持读取、写入、转换等多种操作,且不依赖任何本地Excel组件。

完整代码实现

下面是一段完整的转换代码,涵盖加载、样式调整和导出三个核心步骤:

from spire.xls import *
from spire.xls.common import *
# 创建 Workbook 对象
workbook = Workbook()
# 加载 CSV 文件(参数:文件路径, 分隔符, 起始行, 起始列)
workbook.LoadFromFile("sample.csv", ",", 1, 1)
# 设置页面缩放,确保内容适配一页
workbook.ConverterSetting.SheetFitToPage = True
# 获取第一个工作表
sheet = workbook.Worksheets[0]
# 自动调整每一列的列宽,避免内容被截断
i = 1
while i < sheet.Columns.Length:
    sheet.AutoFitColumn(i)
    i += 1
# 导出为 PDF
workbook.SaveToFile("CSVToPDF.pdf", FileFormat.PDF)
workbook.Dispose()

关键步骤解析

加载CSV文件:Workbook 是操作的核心类。LoadFromFile 方法除了传入文件路径外,还支持指定分隔符、起始读取行和起始读取列。例如 ",", 1, 1 表示以逗号为分隔符,从第一行第一列开始读取。如果你的CSV文件使用制表符或分号分隔,只需替换为 "\t"";" 即可。

一页完整显示:workbook.ConverterSetting.SheetFitToPage = True 是一个容易被忽略却至关重要的设置。如果不开启此项,当表格列数较多时,导出的PDF可能会将内容拆分到多页,阅读时需要来回翻页,非常不便。开启后,PDF页面会自动缩放,保证所有列在一页内完整呈现。

自动调整列宽:通过循环调用 sheet.AutoFitColumn(i),让每一列的宽度根据该列最长文本内容自动调整。这样既能避免文字重叠或显示为"####",也能让表格看起来更加整洁专业。

导出为PDF:最后调用 SaveToFile 并指定 FileFormat.PDF,即可生成PDF文件。Dispose 方法用于释放资源,养成良好习惯。

进一步美化表格

上面的示例已经能满足基本需求,但如果你希望PDF的样式更加精致,Spire.XLS 还提供了更多定制选项。例如,设置字体、字号、对齐方式,或调整页面方向:

# 设置全局字体和字号
sheet.AllocatedRange.Style.Font.FontName = "Arial"
sheet.AllocatedRange.Style.Font.Size = 14
# 设置水平居中对齐
sheet.AllocatedRange.Style.HorizontalAlignment = HorizontalAlignType.Center
# 将页面方向调整为横向
sheet.PageSetup.Orientation = PageOrientationType.Landscape

这些设置能让导出的PDF更加符合正式文档的要求。

适用场景

这一方案尤其适合以下场景:

  • 批量生成报表:定期从数据库导出CSV,自动转换为PDF归档。
  • 数据交付:向客户或合作方提供格式固定的数据文档,避免因软件版本不同导致排版错乱。
  • 无Excel环境的服务器:Spire.XLS 不依赖本地Excel,可在Linux服务器上稳定运行。

知识扩展

方法一:使用 Pandas + Matplotlib(将表格转为图片 PDF)

这种方法将数据框绘制为 Matplotlib 表格,然后保存为 PDF(本质是图片)。优点是代码简单,缺点是生成的 PDF 不可选择文本,且缩放可能模糊。

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.table import Table
def csv_to_pdf_matplotlib(csv_path, pdf_path, title='数据报表'):
    """
    将 CSV 文件转为 PDF(表格图片形式)
    """
    df = pd.read_csv(csv_path)
    fig, ax = plt.subplots(figsize=(12, len(df) * 0.4 + 2))
    ax.axis('off')
    ax.set_title(title, fontsize=16, pad=20)
    # 创建表格
    tb = Table(ax, bbox=[0, 0, 1, 1])
    nrows, ncols = df.shape
    col_width = 1.0 / ncols
    row_height = 1.0 / (nrows + 1)
    # 添加表头(背景色浅蓝)
    for j, col_name in enumerate(df.columns):
        tb.add_cell(0, j, col_width, row_height,
                    text=col_name, loc='center',
                    facecolor='#4472C4', text_props=dict(color='white', weight='bold'))
    # 添加数据行
    for i, row in df.iterrows():
        for j, val in enumerate(row):
            tb.add_cell(i + 1, j, col_width, row_height,
                        text=str(val), loc='center')
    ax.add_table(tb)
    plt.savefig(pdf_path, dpi=300, bbox_inches='tight')
    plt.close()
    print(f'✅ PDF 已保存至: {pdf_path}')
# 使用示例
csv_to_pdf_matplotlib('trades.csv', 'trades_report.pdf')

方法二:使用 ReportLab(生成真正的 PDF 表格,可复制文本)

ReportLab 是 Python 生成 PDF 的专业库,能产生矢量文本,样式可控性强,适合需要高质量打印或正式报告的场景。

import pandas as pd
from reportlab.lib.pagesizes import A4, landscape
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont  # 用于中文
def csv_to_pdf_reportlab(csv_path, pdf_path, title='交易记录报表'):
    """
    使用 ReportLab 将 CSV 转为可复制文本的 PDF
    """
    # 注册中文字体(如果需要)
    try:
        pdfmetrics.registerFont(TTFont('SimHei', 'SimHei.ttf'))  # 请确保字体文件存在
        cn_font = 'SimHei'
    except:
        cn_font = 'Helvetica'  # 回退,中文可能显示为方框
    df = pd.read_csv(csv_path)
    # 创建 PDF 文档(横向 A4)
    doc = SimpleDocTemplate(pdf_path, pagesize=landscape(A4),
                            rightMargin=30, leftMargin=30,
                            topMargin=30, bottomMargin=30)
    # 构建内容列表
    elements = []
    # 标题样式
    styles = getSampleStyleSheet()
    title_style = ParagraphStyle(
        'CustomTitle',
        parent=styles['Heading1'],
        fontName=cn_font,
        fontSize=18,
        alignment=TA_CENTER,
        spaceAfter=20
    )
    elements.append(Paragraph(title, title_style))
    elements.append(Spacer(1, 12))
    # 准备表格数据:将 DataFrame 转为列表,并插入表头
    data = [df.columns.tolist()] + df.values.tolist()
    # 创建表格(样式)
    table = Table(data, repeatRows=1)  # 表头在每页重复
    # 设置表格样式
    style = TableStyle([
        ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#4472C4')),
        ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
        ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
        ('FONTNAME', (0, 0), (-1, 0), cn_font),
        ('FONTSIZE', (0, 0), (-1, 0), 10),
        ('FONTNAME', (0, 1), (-1, -1), cn_font),
        ('FONTSIZE', (0, 1), (-1, -1), 8),
        ('BOTTOMPADDING', (0, 0), (-1, 0), 8),
        ('TOPPADDING', (0, 0), (-1, 0), 8),
        ('GRID', (0, 0), (-1, -1), 0.5, colors.grey),
        ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
        ('BACKGROUND', (0, 1), (-1, -1), colors.beige),
        ('ROWBACKGROUNDS', (0, 1), (-1, -1), [colors.whitesmoke, colors.lightgrey]),
    ])
    table.setStyle(style)
    # 如果数据量很大,可启用分页
    elements.append(table)
    doc.build(elements)
    print(f'✅ PDF 已保存至: {pdf_path}')
# 使用示例
csv_to_pdf_reportlab('trades.csv', 'trades_report.pdf')

注意:如果需要显示中文,请确保系统中有中文字体文件(如 SimHei.ttf),并放置在可访问路径,或者直接指定系统字体路径(如 /System/Library/Fonts/PingFang.ttc)。

总结

利用 Spire.XLS for Python,只需十几行代码即可完成CSV到PDF的转换,同时还能对表格样式进行灵活控制。SheetFitToPageAutoFitColumn 的组合使用,是保证输出页面整洁美观的关键。如果你正被CSV的"素颜"困扰,不妨试试这个方案。

本文内容来源于互联网,如有侵权请联系删除。
作者最新文章
编程开发 Python
相关文章 更多
精品专题 更多
本月促销

正软商城本月促销专区,汇集办公、设计、安全、影音、系统工具及AI软件等正版软件优惠活动,提供限时折扣、特价授权和优惠购买信息,活动库存及价格以页面实时展示为准。

装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

IOS软件

正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

AI

正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
灵活计算器
灵活计算器

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

图几
图几

图几是一款适用于 macOS 的截图、标注与美化工具,支持离线操作保障隐私。界面整理和高频系统操作被放到一起考虑,桌面或窗口内容一多时,管理起来会更省心。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

Mountain Duck
Mountain Duck

Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

Menuist
Menuist

Menuist 是一款面向 macOS 的 Finder 右键菜单增强工具,主要用来补充新建文件、快捷导航等常用操作,让日常文件管理和访问路径时更高效、更顺手。

Mole
Mole

Mole 是一款专为 Mac 设计的深度清理优化工具,涵盖缓存清理、应用管理及实时状态监控等功能。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

WINDOWS 更多
Windows 10
Windows 10

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

傲梅轻松备份
傲梅轻松备份

傲梅轻松备份是一款专业易用的数据备份软件,为重要数据提供安全保障。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

Wise Folder Hider Pro
Wise Folder Hider Pro

Wise Folder Hider Pro 是一款专业级文件和文件夹隐藏加密软件,为私密数据添加多重保护。高频操作更强调就近处理,浏览、整理和跨目录移动文件时,来回切换和重复点击都会少很多。

WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

PinStack
PinStack

PinStack是一款轻量级的Windows平台剪贴板管理工具,优化您的剪贴板使用体验。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

Mountain Duck
Mountain Duck

Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

Seer
Seer

Seer是一款在Win平台下的空格键功能增强效率工具,只需轻敲空格键,就能预览几乎任何格式的文件。它更适合把零散的小功能集中起来使用,处理高频琐碎任务时会更省事。