Odoo 13升级views2pdf模块后PDF打印按钮不显示问题排查
Odoo 13视图PDF打印按钮不显示问题排查
背景
从Odoo 12的views2pdf模块升级到13版本,已修改manifest、assets和视图XML文件,模块安装无报错,但FORM、TREE、KANBAN、PIVOT、GRAPH、Calendar视图的PDF打印按钮始终不出现。现有相关文件如下:
Assets文件
<?xml version="1.0" encoding="utf-8"?> <odoo> <data> <template id="assets_backend" name="popup_reminder assets" inherit_id="web.assets_backend"> <xpath expr="." position="inside"> <!-- css --> <link rel="stylesheet" href="/views2pdf/static/src/css/views2pdf.css"/> <!-- js --> <script type="text/javascript" src="/views2pdf/static/src/js/jspdf.min.js"></script> <script type="text/javascript" src="/views2pdf/static/src/js/saveSvgAsPng.js"></script> <script type="text/javascript" src="/views2pdf/static/src/js/views2pdf.js"></script> </xpath> </template> </data> </odoo>
视图文件
<?xml version="1.0" encoding="UTF-8"?> <odoo> <template> <!-- extend FormView widget --> <t t-extend="FormView.buttons"> <t t-jquery="div.o_form_buttons_view" t-operation="append"> <button type="button" id="create_pdf" class="btn btn-sm btn-success"> Print <span class="fa fa-print"></span> </button> </t> </t> <!-- extend ListView widget --> <t t-extend="ListView.buttons"> <t t-jquery="div.o_list_buttons" t-operation="append"> <button type="button" id="create_pdf" class="btn btn-sm btn-success"> Print <span class="fa fa-print"></span> </button> </t> </t> <!-- extend KanbanView widget --> <t t-extend="KanbanView.buttons"> <t t-jquery="div" t-operation="append"> <button type="button" id="create_pdf" class="btn btn-sm btn-success"> Print <span class="fa fa-print"></span> </button> </t> </t> <!-- extend PivotView widget --> <t t-extend="PivotView.buttons"> <t t-jquery="button[title='Download xls']" t-operation="after"> <button type="button" id="create_pdf" class="btn btn-sm btn-success"> Print <span class="fa fa-print"></span> </button> </t> </t> <!-- extend GraphView widget --> <t t-extend="GraphView.buttons"> <t t-jquery="button[data-mode='pie']" t-operation="after"> <button type="button" id="create_pdf" class="btn btn-sm btn-success"> Print <span class="fa fa-print"></span> </button> </t> </t> <!-- extend CalendarView widget --> <t t-extend="CalendarView.buttons"> <t t-jquery="div.o_calendar_buttons" t-operation="append"> <button type="button" id="create_pdf" class="btn btn-sm btn-success"> Print <span class="fa fa-print"></span> </button> </t> </t> </template> </odoo>
遗漏的修改点
1. 视图按钮模板命名空间变更
Odoo 13重构了前端组件命名规则,原有的FormView.buttons这类模板路径已失效,必须改为带web命名空间的新路径:
- Form视图:
web.FormView.Buttons - List(Tree)视图:
web.ListView.Buttons - Kanban视图:
web.KanbanView.Buttons - Pivot视图:
web.PivotView.Buttons - Graph视图:
web.GraphView.Buttons - Calendar视图:
web.CalendarView.Buttons
原模板直接写FormView.buttons会找不到目标模板,导致按钮无法注入。
2. 部分视图jQuery选择器失效
- Kanban视图:原选择器
t-jquery="div"范围太宽泛,会匹配多个无关元素,需改为精准的按钮容器选择器div.o_kanban_buttons - Pivot视图:Odoo 13中"Download xls"按钮的
title文本可能已调整,建议改用更稳定的类选择器.o_pivot_export_xls - Graph视图:
button[data-mode='pie']在Odoo 13的视图结构中可能不存在,建议改为向按钮容器.o_graph_buttons内追加按钮
3. 资产模板命名与路径检查
- 原assets模板的
name属性为popup_reminder assets,属于复制错误,应改为views2pdf assets避免命名混淆 - 确认静态文件路径
/views2pdf/static/src/...与模块实际目录结构完全一致,路径错误会导致JS/CSS无法加载
4. JS文件适配Odoo 13前端架构
Odoo 13采用OWL组件框架,和Odoo 12的前端逻辑差异较大:
- 原
views2pdf.js中通过$('#create_pdf').click()的jQuery绑定方式,在组件化架构下无法正确获取元素,需改为通过Odoo组件扩展方式绑定事件 - 需适配视图组件的生命周期,确保按钮渲染完成后再绑定PDF生成逻辑
- 检查
jspdf.min.js和saveSvgAsPng.js的版本是否兼容Odoo 13的前端环境,旧版本可能存在API冲突
5. 视图模板结构优化
原视图文件中的<template>标签未指定唯一ID,虽不影响安装,但建议添加id="views2pdf_buttons",方便后续维护与排查
修改示例(Form视图部分)
<t t-extend="web.FormView.Buttons"> <t t-jquery="div.o_form_buttons_view" t-operation="append"> <button type="button" id="create_pdf_form" class="btn btn-sm btn-success"> 打印PDF <span class="fa fa-print"></span> </button> </t> </t>
内容的提问来源于stack exchange,提问作者SH EB
相关产品推荐
相关产品推荐

