Docker环境下Odoo 10 QWeb PDF报表Unicode字体支持问题求助
解决Docker环境下Odoo 10 QWeb报表Unicode字体支持问题
这个问题我碰过好多次了——官方Odoo 10的Docker镜像默认只带了基础英文字体,没预装中文、阿拉伯文这类Unicode字体,而本地环境依赖系统自带的完整字体库,所以才会出现本地正常、Docker里报表乱码/字符不显示的情况。下面给你两个靠谱的解决办法:
方法一:自定义Docker镜像,预装所需Unicode字体
这是最稳妥的长期方案,把字体直接打包到镜像里,每次启动容器都不用额外配置:
- 新建一个
Dockerfile文件,内容如下:
# 基于官方Odoo 10镜像 FROM odoo:10 # 更新源并安装Unicode字体(这里以常用的中文微黑字体为例,你可以换成自己需要的字体,比如阿拉伯字体fonts-arabic) RUN apt-get update && apt-get install -y --no-install-recommends \ fonts-wqy-microhei \ fontconfig \ && rm -rf /var/lib/apt/lists/* # 刷新字体缓存,确保wkhtmltopdf能识别到新字体 RUN fc-cache -fv
- 构建自定义镜像:
docker build -t odoo10-with-unicode .
- 用新镜像启动容器,替换原来的
odoo:10镜像即可。
方法二:挂载本地字体到容器(临时/快速验证用)
如果不想重新构建镜像,可以直接把本地系统的字体挂载到容器里,让Odoo能访问:
- 启动容器时添加挂载参数,把本地字体目录挂载到容器的系统字体目录(比如本地字体在
/usr/share/fonts):
docker run -d \ -v /usr/share/fonts:/usr/share/fonts \ -v odoo10-data:/var/lib/odoo \ -v ./config:/etc/odoo \ -p 8069:8069 \ odoo:10
- 进入容器刷新字体缓存:
docker exec -it <你的容器ID> bash fc-cache -fv
验证是否生效
进入容器执行fc-list命令,看看输出里有没有你需要的Unicode字体。然后生成QWeb报表测试,应该就能正常显示Unicode字符了。
另外补充一句:Odoo的QWeb PDF报表是靠wkhtmltopdf生成的,所以只要容器里的wkhtmltopdf能识别到字体,报表就没问题——上面两种方法都是让wkhtmltopdf能访问到Unicode字体。
内容的提问来源于stack exchange,提问作者M.k Hasan




