Odoo 12 CE中使用Pillow 6.0.0合并PNG为PDF报错排查
解决Odoo 12 CE中Pillow保存PDF报KeyError: 'PDF'的问题
我之前碰到过几乎一模一样的情况,问题根源出在Pillow的PDF保存依赖缺失或者插件未被正确加载上,下面是具体的排查和解决步骤:
核心原因分析
Pillow 6.0.0确实支持直接将图片合并保存为PDF,但这个功能依赖PyPDF2库,而且需要确保Pillow的PDF插件能正常加载。你在Odoo外部测试正常,很大概率是测试环境里已经装了PyPDF2,但Odoo的虚拟环境里漏掉了这个依赖包。
步骤1:检查并补装PyPDF2依赖
进入你的Odoo虚拟环境,先检查是否安装了PyPDF2:
pip list | grep PyPDF2
如果没有任何输出,说明没装,执行安装命令(选和Pillow 6.0.0兼容的稳定版本):
pip install PyPDF2==1.26.0
步骤2:在代码中显式加载PDF插件
有时候在Odoo的模块运行环境里,Pillow的PDF插件不会自动加载,你可以在函数开头显式导入插件:
from PIL import Image from PIL import PdfPlugin # 强制触发PDF保存插件加载
步骤3:验证Odoo环境中的Pillow功能
进入Odoo的shell环境,确认PDF支持是否正常启用:
source /path/to/your/odoo/virtualenv/bin/activate odoo shell -c /path/to/your/odoo/config.conf
在shell里执行以下代码:
from PIL import Image print(Image.SAVE_ALL.get('PDF'))
如果输出不是None,说明PDF功能已经正常生效,此时再测试你的按钮功能应该就能正常运行了。
额外注意事项
- 确保你保存PDF的路径是Odoo进程有权限写入的(比如系统临时目录
/tmp),避免后续出现权限报错。 - 确认所有要合并的图片都是RGB模式(你的代码里已经满足这一点,没问题),Pillow保存PDF不支持CMYK等其他颜色模式。
内容的提问来源于stack exchange,提问作者edward
相关产品推荐
相关产品推荐

