Python 高效实现 Word 转 PDF:告别 Office 依赖

在工作中,经常会遇到需要把 Word 文档转换成 PDF 的情况。比如生成报表、分发文档、或者做归档保存,PDF 格式在排版和跨平台显示上更稳定。

传统的做法往往依赖 Microsoft Office 或 LibreOffice 等软件来完成转换,但在自动化环境(如服务器、Docker 容器、Linux 系统)中,这类方式会遇到一些限制:需要额外安装软件、依赖复杂,甚至存在兼容性问题。

因此,很多开发者更希望使用无依赖的 Python 库来完成转换。本文将介绍如何借助 Spire.Doc for Python库,在不依赖 Office 的情况下,实现 doc 转 pdf、docx 转 pdf,并支持批量转换与多种转换设置。


一、安装 Spire.Doc for Python

在使用之前,需要先安装库。可以直接使用以下 pip 命令来安装:

pip install spire-doc

安装完成后,就可以在 Python 代码中使用 from spire.doc import * 导入该库的模块来处理和转换 Word 文档。


二、Python Word 转 PDF 基本示例

下面是 Word 转 PDF 一个最基础的示例。只需要两步:加载文件、保存为 PDF。

from spire.doc import *# 创建文档对象
doc = Document()# 加载 Word 文件
doc.LoadFromFile("input.docx")# 转换并保存为 PDF
doc.SaveToFile("output.pdf", FileFormat.PDF)# 关闭文档,释放资源
doc.Close()

代码说明

  • Document():创建一个 Word 文档对象。
  • LoadFromFile("input.docx"):加载指定路径的 Word 文件。
  • SaveToFile("output.pdf", FileFormat.PDF):将文档保存为 PDF 格式。
  • Close():关闭文档,释放资源。

三、批量转换 Word 文档为 PDF

如果有大量 Word 文件需要转换,可以将它们放在一个目录下,然后遍历目录并批量转换。以下是具体的代码示例:

import os
from spire.doc import *input_dir = "word_files"
output_dir = "pdf_files"
os.makedirs(output_dir, exist_ok=True)for file in os.listdir(input_dir):if file.endswith(".doc") or file.endswith(".docx"):doc = Document()doc.LoadFromFile(os.path.join(input_dir, file))pdf_path = os.path.join(output_dir, file.rsplit(".", 1)[0] + ".pdf")doc.SaveToFile(pdf_path, FileFormat.PDF)doc.Close()

代码说明

  • os.listdir(input_dir):遍历文件夹中的所有文件。
  • file.endswith(".doc") or file.endswith(".docx"):只处理 Word (.doc 或 .docx)文件。
  • os.makedirs(output_dir, exist_ok=True):如果目标文件夹不存在,则自动创建。
  • 每次处理完一个文档后调用 Close(),避免内存占用过多。

四、转换设置与优化

在不同的应用场景下,生成的 PDF 可能需要不同的属性,例如文件体积更小、排版更精细、符合归档标准等。Spire.Doc for Python 提供了可调节的参数来满足这些需求。

1. 图片优化(减小 PDF 大小)

# 将图像压缩到原始质量的40%
doc.JPEGQuality = 40# 保留原始图像质量 (图片质量参数:0-100)
# doc.JPEGQuality = 100

这样可以有效减小 PDF 文件大小,适合包含大量图片的 Word 文档。

2. 字体嵌入处理(避免乱码)

# 创建 ToPdfParameterList 类的对象
parameter = ToPdfParameterList()# 将字体嵌入到生成的PDF中
parameter.IsEmbeddedAllFonts = True# 将文档保存为PDF
document.SaveToFile("output.pdf", parameter)

避免目标设备缺少字体时,导致 PDF 显示异常。

3. PDF/A 合规标准

# 创建 ToPdfParameterList 类的对象
parameters = ToPdfParameterList()# 设置 PDF/A 合规标准
parameters.PdfConformanceLevel = PdfConformanceLevel.Pdf_A1A# 将文档保存为 PDF/A-1a 文件
document.SaveToFile("output.pdf", parameters)

用于生成符合 PDF/A 标准的文件,常用于档案归档。

4. 加密与权限控制

# 创建 ToPdfParameterList 类的对象
parameter = ToPdfParameterList()# 设置打开密码和权限密码,并用其保护生成的 PDF 文件
openPsd = "abc123"
permissionPsd = "E-iceblue"
parameter.PdfSecurity.Encrypt(openPsd, permissionPsd, PdfPermissionsFlags.Default, PdfEncryptionKeySize.Key128Bit)# 将文档保存为加密的PDF
document.SaveToFile("output.pdf", parameter)

可以为 PDF 设置打开密码,并限制打印、复制等操作。


五、异常处理

import os
from spire.doc import *input_dir = "word_files"
output_dir = "pdf_files"
os.makedirs(output_dir, exist_ok=True)for file in os.listdir(input_dir):if file.endswith(".doc") or file.endswith(".docx"):try:doc = Document()doc.LoadFromFile(os.path.join(input_dir, file))pdf_path = os.path.join(output_dir, file.rsplit(".", 1)[0] + ".pdf")doc.SaveToFile(pdf_path, FileFormat.PDF)print(f"成功转换: {file} → {pdf_path}")except Exception as e:print(f"转换失败: {file}, 错误信息: {str(e)}")finally:if 'doc' in locals():doc.Close()

代码说明

  • try ... except ... finally:保证即使出错,程序也能继续执行。
  • print(f"..."):方便输出日志,便于排查问题。
  • finally 确保即使出错,也会关闭文档,避免内存泄漏。

六、适用场景

  • 自动化报表生成:将 Word 报表定时转换为 PDF。
  • 文档归档:统一转换为 PDF/A,方便长期保存。
  • 在线服务:搭建“上传 Word → 下载 PDF”的 Web 接口。
  • 批量处理:快速将大量 Word 文件转换为 PDF,提升工作效率。

七、总结

本文介绍了在 Python 中使用 Spire.Doc 实现 Word 文档到 PDF 的转换方法。通过实例演示了:

  • 单文件和批量文件的转换流程;
  • 转换过程中可配置的参数,如图像压缩、字体嵌入、PDF/A 合规性和加密设置;
  • 异常处理与资源释放的注意事项,确保在批量或自动化场景下程序稳定运行。

总体来看,利用 Spire.Doc 可以在不依赖 Office 的环境中完成高效、稳定的 Word 到 PDF 转换,并且转换选项灵活,可根据具体需求调整。上述方法适合在报表生成、文档归档或在线文档处理等场景中应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96695.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96695.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL优化简单思路

1. 背景 在实际生产中,因为SQL较慢、SQL关联不合理、不了解索引的性质、不熟悉mysql执行计划分析,可能会出现一些生产事故,本文会简单说明SQL通常的优化分析思路。 基本的优化原则: 先优化SQL再优化mysql server最后优化硬件 2. 优…

软考 系统架构设计师系列知识点之杂项集萃(144)

接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(143) 第268题 甲、乙、丙、丁4人加工A、B、C、D四种工件所需工时如下表所示。指派每人加工一种工件,四人加工四种工件其总工时最短的最优方案中,工件B应由()加工。 A B C D 甲

P1168 中位数

题目描述给定一个长度为 N 的非负整数序列 A,对于前奇数项求中位数。输入格式第一行一个正整数 N。第二行 N 个正整数 A1…N​。输出格式共 ⌊2N1​⌋ 行,第 i 行为 A1…2i−1​ 的中位数。输入输出样例输入 #1复制7 1 3 5 7 9 11 6输出 #11 3 5 6输入 #…

【CE】图形化CE游戏教程通关手册

【CE】图形化CE游戏教程通关手册 文章目录【CE】图形化CE游戏教程通关手册导读需求1️⃣ 第一关提示操作总结2️⃣ 第二关(代码共享)提示操作验证3️⃣ 第三关提示提示总结导读 需求 除了Tutorial-x86_64.exe教程外,CE还提供了图形化教程gtu…

leetcode 2785. 将字符串中的元音字母排序 中等

给你一个下标从 0 开始的字符串 s &#xff0c;将 s 中的元素重新 排列 得到新的字符串 t &#xff0c;它满足&#xff1a;所有辅音字母都在原来的位置上。更正式的&#xff0c;如果满足 0 < i < s.length 的下标 i 处的 s[i] 是个辅音字母&#xff0c;那么 t[i] s[i] 。…

支付子系统架构及常见问题

支付流程对于支付系统来说&#xff0c;它最重要的其实是安全&#xff0c;所以整个支付流程采用秘钥加签的方式进行操作&#xff0c;一共四对秘钥&#xff0c;以支付宝在线支付为例子&#xff0c;首先通过RSA2算法生成商户公钥以及商户私钥&#xff0c;同时支付宝平台会提供支付…

内存传输速率MT/s

1 0 0 0 0 0 0 0 0 010 9 8 7 6 5 4 3 2 1十 亿 千 百 十 万 千 百 十 个亿 万 万 万传输速率 …

.env文件的作用和使用方法

目录 什么是 .env 文件&#xff1f; 为什么要使用 .env 文件&#xff1f;&#xff08;好处&#xff09; 如何使用 .env 文件&#xff1f; 通用步骤&#xff1a; 具体技术栈中的实现&#xff1a; 最佳实践和注意事项 总结 什么是 .env 文件&#xff1f; .env 文件&#x…

深度拆解 Python 装饰器参数传递:从装饰器生效到参数转交的每一步

在 Python 装饰器的学习中&#xff0c;“被装饰函数的参数如何传递到装饰器内层函数”是一个高频疑问点。很多开发者能写出装饰器的基本结构&#xff0c;却对参数传递的底层逻辑一知半解。本文将以一段具体代码为例&#xff0c;把参数传递过程拆成“装饰器生效→调用触发→参数…

【Vue2 ✨】Vue2 入门之旅 · 进阶篇(七):Vue Router 原理解析

在前几篇文章中&#xff0c;我们介绍了 Vue 的性能优化机制、组件缓存等内容。本篇将深入解析 Vue Router 的原理&#xff0c;了解 Vue 如何管理路由并进行导航。 目录 Vue Router 的基本概念路由模式&#xff1a;hash 和 history路由匹配原理导航守卫Vue Router 的路由过渡动…

Linux磁盘级文件/文件系统理解

Linux磁盘级文件/文件系统理解 1. 磁盘的物理结构 磁盘的核心是一个利用磁性介质和机械运动进行数据读写的、非易失性的存储设备。 1.1 盘片 盘片是传统机械硬盘中最核心的部件&#xff0c;它是数据存储的物理载体。盘片是一个坚硬的、表面极度光滑的圆形碟片&#xff0c;被安装…

【星海出品】rabbitMQ - 叁 应用篇

rabbitMQ 的基础知识这里就不阐述了,可以参看我早年写的文章 -> rabbitMQ 入门 https://blog.csdn.net/weixin_41997073/article/details/118724779 Celery 官网:http://www.celeryproject.org/ Celery 官方文档英文版:http://docs.celeryproject.org/en/latest/index.h…

C# 每个chartArea显示最小值、平均值、最大值

private void AddStatisticsAnnotations(ChartArea chartArea, int channelIndex) {RemoveExistingAnnotations(channelIndex);// 获取ChartArea的相对坐标&#xff08;百分比&#xff09;float chartAreaX chartArea.Position.X; // X坐标&#xff08;百分比&#xff09;floa…

打破“不可能三角”:WALL-OSS开源,具身智能迎来“安卓时刻”?

目录 引言&#xff1a;当“大脑”学会思考&#xff0c;机器人才能走出实验室 一、具身智能的“不可能三角”&#xff1a;机器人“大脑”的核心困境 二、WALL-OSS的四把重锤&#xff1a;如何系统性地破解难题&#xff1f; 2.1 第一锤&#xff1a;更聪明的“大脑”架构 —— …

SigNoz分布式追踪新体验:cpolar实现远程微服务监控

前言 SigNoz是一款开源的应用性能监控工具&#xff0c;专为微服务架构设计&#xff0c;集成了指标、追踪和日志分析功能。它能够全面监控分布式系统的性能&#xff0c;帮助开发团队快速定位问题根源。SigNoz支持OpenTelemetry协议&#xff0c;可以无缝集成各种编程语言和框架&…

python编程原子化多智能体综合编程应用(下)

上述代码实现了基于Mesa框架的诊断智能体类,包含以下核心功能: 模块化设计:通过类属性分离数据与行为,支持不同专科智能体的扩展 状态管理:实现idle/processing/error等状态转换,支持任务调度 诊断推理:集成机器学习模型,支持症状提取与多分类诊断 错误处理:包含模型加…

QT M/V架构开发实战:QSqlQueryModel/ QSqlTableModel/ QSqlRelationalTableModel介绍

目录[TOC](目录)前言一、初步介绍二、QSqlQueryModel1.基础定位2.特点3.核心接口4.典型用法5.优缺点三、QSqlTableModel1.基础定位2.特点3.核心接口4.典型用法5.优缺点四、QSqlRelationalTableModel1.基础定位2.特点3.核心接口4.典型用法 (示例&#xff1a;employees表有 dept_…

Terraform 从入门到实战:历史、原理、功能与阿里云/Azure 上手指南

前言&#xff1a;在云时代&#xff0c;企业的IT基础设施早已从“几台服务器”演变为“横跨多云的复杂网络、计算、存储集群”。但随之而来的&#xff0c;是管理复杂度的爆炸式增长&#xff1a;开发环境和生产环境不一致、手动配置容易出错、多云平台操作方式各异、资源变更难以…

【计算机网络 | 第10篇】信道复用技术

文章目录信道复用技术&#xff1a;高效利用通信资源的智慧方案一、频分复用&#xff08;FDM&#xff09;&#xff1a;按频率划分的并行通道二、时分复用&#xff08;TDM&#xff09;&#xff1a;按时间分割的轮流占用三、统计时分复用&#xff08;STDM&#xff09;&#xff1a;…

安卓13_ROM修改定制化-----禁用 Android 导航按键的几种操作

Android 设备的导航按键通常包括后退键(Back)、主页键(Home)和最近键(Recents),这些按键位于屏幕底部或设备实体区域。禁用导航按键可以帮助在特定应用场景(如信息亭模式或儿童锁模式)中限制用户操作。安卓设备上禁用底部虚拟导航键(返回、主页、多任务键)有多种方法…