You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Odoo 12使用py3o_report打印docx等格式时出现FileNotFoundError求助

嘿,我来帮你解决这个Odoo py3o_report生成docx报错的问题!从你描述的情况来看,生成.odt正常但docx找不到/tmp里的文件,大概率是docx格式转换依赖缺失或者配置/权限问题,结合你的代码,我整理了几个排查方向和修复步骤:

1. 检查py3o生成docx的核心依赖是否安装

py3o_report生成docx格式需要依赖LibreOffice(或OpenOffice)以及unoconv工具——这俩是用来把ODT模板转换为DOCX的关键。如果没装这些依赖,系统根本完不成转换,自然会出现/tmp里找不到生成文件的情况。

  • 以Ubuntu系统为例,安装LibreOffice:sudo apt-get install libreoffice
  • 安装unoconv:sudo apt-get install unoconv
  • 测试依赖是否可用:在Odoo服务器上手动执行unoconv --version,能正常输出版本信息就说明没问题

2. 修正你的Report配置代码

你的代码里先定义了一个report_type="qweb-pdf"的报表,接着又在ir.actions.report里修改为py3o类型,这种重复定义很容易导致配置冲突。建议直接统一成下面的写法:

<odoo>
    <record id="my_module.action_report_hr_expense" model="ir.actions.report">
        <field name="name">Expense</field>
        <field name="model">hr.expense</field>
        <field name="report_type">py3o</field>
        <field name="py3o_filetype">docx</field>
        <field name="module">my_module</field>
        <field name="py3o_multi_in_one">True</field>
        <!-- 确保这个odt模板确实存在于你的模块或依赖模块中 -->
        <field name="py3o_template_fallback">hr_expense.odt</field>
    </record>
</odoo>
  • 删掉原来的<report>标签,直接用ir.actions.report记录定义报表,避免类型冲突
  • 确认py3o_template_fallback指向的hr_expense.odt模板路径和文件名完全正确

3. 检查/tmp目录的权限

Odoo运行的用户(比如默认的odoo用户)得有读写/tmp目录的权限。你可以用下面的命令排查:

# 查看/tmp的权限设置
ls -ld /tmp
# 查看Odoo进程的运行用户
ps aux | grep odoo

一般来说/tmp默认是777权限,但如果你的系统做了权限限制,就得调整/tmp权限,或者确保Odoo用户属于有权限的用户组。

4. 启用py3o调试日志定位细节问题

要是上面的步骤还没解决,你可以在Odoo配置文件里开启py3o的调试日志,看看具体的错误信息:

odoo.conf里添加:

log_level = debug
log_handler = py3o.report:DEBUG

重启Odoo后再尝试打印报表,日志里会输出转换过程的细节,能帮你精准定位问题(比如LibreOffice调用失败的具体原因)

按照这些步骤排查,应该能解决你遇到的docx生成问题。

内容的提问来源于stack exchange,提问作者m0r7y

火山引擎 最新活动