如何在无Word环境的虚拟机中用Python实现含图片的RTF转PDF?
无Word环境下Python转换含图片RTF到PDF的可行方案
之前尝试的两种方法局限性很明显:reportlab搭配RTF插件对嵌入式图片的支持不完善,win32com完全依赖Office环境。这里提供一个不需要Word、能处理带图片RTF的方案,核心是利用LibreOffice的无界面模式完成转换。
步骤1:安装LibreOffice
LibreOffice是开源办公套件,支持跨平台无界面(headless)运行,能完美处理RTF中的图片和格式。
- Linux(Debian/Ubuntu):
sudo apt update && sudo apt install libreoffice libreoffice-writer - Linux(CentOS/RHEL):
sudo yum install libreoffice libreoffice-writer - Windows:
下载静默安装包后,用命令行完成无交互安装:LibreOffice_XX.X.X_Win_x64.msi /qn
步骤2:Python调用LibreOffice Headless转换
用subprocess模块直接调用LibreOffice的命令行工具,无需额外依赖库。
示例代码:
import subprocess import os def convert_rtf_to_pdf(rtf_file_path, output_directory): # 创建输出目录(不存在则自动生成) os.makedirs(output_directory, exist_ok=True) # 根据系统指定LibreOffice可执行文件路径 # Windows示例路径:"C:\\Program Files\\LibreOffice\\program\\soffice.exe" soffice_executable = "soffice" # Linux/macOS默认路径 # 构建转换命令 conversion_cmd = [ soffice_executable, "--headless", # 无界面模式 "--convert-to", "pdf", # 目标格式 "--outdir", output_directory, # 输出目录 rtf_file_path ] try: # 执行命令并捕获输出 subprocess.run(conversion_cmd, check=True, capture_output=True, text=True) pdf_output_path = os.path.join( output_directory, os.path.splitext(os.path.basename(rtf_file_path))[0] + ".pdf" ) print(f"转换完成,输出文件:{pdf_output_path}") return pdf_output_path except subprocess.CalledProcessError as e: print(f"转换出错:{e.stderr}") return None # 使用示例 if __name__ == "__main__": convert_rtf_to_pdf("sample.rtf", "./pdf_output")
注意事项
- Windows系统必须替换
soffice_executable为实际安装路径,比如"C:\\Program Files\\LibreOffice\\program\\soffice.exe" - 若转换后格式有偏差,可尝试添加
--norestore参数避免残留进程干扰 - 确保LibreOffice版本≥7.0,提升RTF兼容性
内容的提问来源于stack exchange,提问作者Rakhmatjon Nurmatov
相关产品推荐
相关产品推荐

