Python 实用技巧:使用 Spire.XLS 将 Excel 文件转换为 PDF
将 Excel 文件转换为 PDF 是办公自动化中的常见需求。PDF 格式能够确保文档在不同设备和操作系统上保持统一的样式和布局,非常适合打印、存档或共享敏感数据。本文将详细介绍如何使用 Python 第三方库 Spire.XLS for Python 实现这一功能,涵盖基础转换、分表导出及页面设置等核心场景。
在 Python 中使用 Spire.XLS 库将 Excel 文件转换为 PDF 的三种常见方法。包括将整个工作簿保存为单个 PDF、将每个工作表保存为独立 PDF 文件,以及针对特定工作表进行页面设置后转换。内容涵盖环境搭建、代码示例详解、页面属性配置及注意事项,帮助开发者实现文档格式的自动化处理。

将 Excel 文件转换为 PDF 是办公自动化中的常见需求。PDF 格式能够确保文档在不同设备和操作系统上保持统一的样式和布局,非常适合打印、存档或共享敏感数据。本文将详细介绍如何使用 Python 第三方库 Spire.XLS for Python 实现这一功能,涵盖基础转换、分表导出及页面设置等核心场景。
在开始之前,请确保已安装 Python 环境(建议版本 3.6+)。推荐使用虚拟环境管理依赖,以避免包冲突。
创建并激活虚拟环境
python -m venv env
# Windows: env\Scripts\activate
# macOS/Linux: source env/bin/activate
安装 Spire.XLS for Python 通过 pip 命令安装官方库:
pip install Spire.XLS
*注意:Spire.XLS 为商业组件,免费版带有水印且限制处理行数。生产环境建议使用授权版本或考虑开源替代方案(如 LibreOffice headless)。
此方法适用于需要将整个 Excel 文件的所有工作表合并到一个 PDF 文档中的场景。每个工作表将作为 PDF 中的一页。
from spire.xls import *
from spire.common import *
import os
# 初始化 Workbook 对象
workbook = Workbook()
try:
# 加载 Excel 文档
excel_file = "data.xlsx"
if not os.path.exists(excel_file):
print(f"文件 {excel_file} 不存在")
exit(1)
workbook.LoadFromFile(excel_file)
# 设置工作表适应页面宽度
workbook.ConverterSetting.SheetFitToPage = True
# 指定输出路径
output_file = "output_single.pdf"
# 转换为 PDF 并保存
workbook.SaveToFile(output_file, FileFormat.PDF)
print(f"成功生成:{output_file}")
finally:
# 释放资源
workbook.Dispose()
关键点说明:
LoadFromFile:加载本地 Excel 文件路径。ConverterSetting.SheetFitToPage:自动调整内容以适应页面大小,防止表格被截断。SaveToFile:第二个参数指定目标格式,此处为 FileFormat.PDF。当需要单独分发各个工作表时,可以遍历工作簿中的所有 Sheet 并分别保存。
from spire.xls import *
from spire.common import *
import os
workbook = Workbook()
try:
workbook.LoadFromFile("data.xlsx")
# 获取当前脚本所在目录作为输出路径
output_dir = "./pdf_output"
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 遍历所有工作表
for sheet in workbook.Worksheets:
# 构建文件名,替换非法字符
safe_name = sheet.Name.replace("/", "_").replace("\\", "_")
file_path = os.path.join(output_dir, f"{safe_name}.pdf")
# 保存为独立 PDF
sheet.SaveToPdf(file_path)
print(f"已保存:{file_path}")
finally:
workbook.Dispose()
关键点说明:
Worksheets 集合包含所有工作表对象。对于报表类文档,通常需要精确控制页边距、纸张方向和尺寸。Spire.XLS 提供了 PageSetup 类进行配置。
from spire.xls import *
from spire.common import *
workbook = Workbook()
try:
workbook.LoadFromFile("report.xlsx")
# 获取第一个工作表(索引从 0 开始)
sheet = workbook.Worksheets[0]
# 获取 PageSetup 对象
page_setup = sheet.PageSetup
# 设置页边距(单位:英寸)
page_setup.TopMargin = 0.5
page_setup.BottomMargin = 0.5
page_setup.LeftMargin = 0.5
page_setup.RightMargin = 0.5
# 设置纸张方向
page_setup.Orientation = OrientationType.Landscape
# 设置纸张尺寸 (A4)
page_setup.PaperSize = PaperSizeType.PaperA4
# 启用居中打印
page_setup.CenterHorizontally = True
page_setup.CenterVertically = True
# 设置缩放比例
page_setup.Zoom = 100
# 添加页眉页脚
page_setup.Header = "&C 财务报表 &D"
page_setup.Footer = "&L 第 &P 页 / 共 &N 页"
# 执行转换
sheet.SaveToPdf("custom_report.pdf")
finally:
workbook.Dispose()
常用 PageSetup 属性:
Orientation: Portrait (纵向) 或 Landscape (横向)。PaperSize: 支持 A3, A4, Letter 等多种标准尺寸。Header/Footer: 支持格式化字符串,如日期、页码、标题等。确保已正确安装 Spire.XLS 且 Python 版本兼容。如果是在 Linux 服务器运行,可能需要安装依赖库 libxslt 等。
检查 Excel 源文件编码,或在代码中明确指定字体。Spire.XLS 通常会自动嵌入字体,但部分旧版系统可能需要手动配置。
处理超大 Excel 文件(如超过 10 万行)时,建议分批读取或使用流式处理模式,避免一次性加载全部数据到内存。
如果无法购买 Spire.XLS 授权,可考虑以下开源方案:
LibreOffice Headless 通过命令行调用 LibreOffice 进行转换,无需额外 Python 库。
libreoffice --headless --convert-to pdf data.xlsx
缺点:部署较重,跨平台一致性略差。
xlsx2pdf 基于 xlsx 解析的轻量级工具,适合简单表格。
本文详细演示了利用 Spire.XLS for Python 实现 Excel 转 PDF 的三种典型场景。通过合理配置 PageSetup 和 ConverterSetting,可以满足大多数办公自动化需求。在实际项目中,建议结合异常处理机制和资源释放逻辑,确保程序的稳定性和健壮性。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online