Mac OS下如何用Python将docx转pdf?遇权限问题求解决方案
Python修改docx后转PDF的解决方案
我之前折腾过python-docx转PDF的问题,碰到过和你一模一样的docx2pdf权限报错,给你几个亲测有效的方案:
方案一:修复docx2pdf的权限问题
你遇到的报错大概率是Word进程占用文件或者权限不足导致的,可以试试这几个调整:
- 关闭所有打开的Word窗口,后台残留的Word进程可能会锁定文件,导致无法读取。
- 运行Python脚本时右键选择“以管理员身份运行”,避免系统权限限制。
- 确保文件路径没有特殊字符(比如中文、空格),如果有,用引号包裹路径,或者换成纯英文路径。
- 试试添加
keep_active=True参数,让Word进程保持活跃,有时候能解决临时文件锁定的问题:
from docx2pdf import convert convert(r'/my/folder/myChangedDocument.docx', r'/my/folder/myChangedDocument.pdf', keep_active=True)
方案二:用Win32COM直接调用Word(Windows专属)
这个方法稳定性比docx2pdf高,因为直接调用Word的原生接口,绕过了docx2pdf的封装问题:
import win32com.client as win32 from docx import Document # 打开并修改文档 doc = Document('./myDocument.docx') # 你的修改代码放在这里 doc.save(r'/my/folder/myChangedDocument.docx') # 调用Word COM接口转PDF word_app = win32.gencache.EnsureDispatch('Word.Application') word_app.Visible = False # 后台运行,不弹出Word窗口 try: word_doc = word_app.Documents.Open(r'/my/folder/myChangedDocument.docx') # 17是PDF格式的常量编号,Word COM接口固定值 word_doc.SaveAs(r'/my/folder/myChangedDocument.pdf', FileFormat=17) word_doc.Close() finally: word_app.Quit()
注意:路径前加r避免转义字符问题,运行前确保你的电脑安装了Microsoft Word。
方案三:跨平台方案(Windows/Linux/Mac)—— LibreOffice
如果需要跨平台运行,推荐用LibreOffice的命令行工具转换,不需要依赖Word:
- 先安装LibreOffice(官网下载对应系统版本)
- 用subprocess调用转换命令:
import subprocess from docx import Document # 修改并保存docx文档 doc = Document('./myDocument.docx') doc.save(r'/my/folder/myChangedDocument.docx') # 调用LibreOffice转PDF # Windows下注意把soffice换成完整路径,比如r"C:\Program Files\LibreOffice\program\soffice.exe" subprocess.run([ "soffice", "--headless", # 无头模式,不显示界面 "--convert-to", "pdf", "--outdir", r"/my/folder", r"/my/folder/myChangedDocument.docx" ], check=True)
如果是Linux系统,可能需要先安装libreoffice-writer包(比如apt install libreoffice-writer)。
内容的提问来源于stack exchange,提问作者Jem




