主题
可视化拖拽报表设计器
可视化拖拽报表设计器是一款面向 Odoo 的所见即所得报表设计工具:无需编写 QWeb 代码,从调色板拖入文本、图片、条形码、二维码等元素即可设计采购订单、销售小票等各类打印单据。设计结果以 JSON 形式保存,打印时在服务端编译为 wkhtmltopdf 报表,支持毫米级精确定位、明细表格与金额公式、中文大写金额;模板保存后自动生成对应单据上的「打印」按钮。

快速上手
- 打开「报表设计器 → 报表模板」菜单,新建模板,填写模板名称、选择主模型与纸张格式;
- 点击「设计」进入可视化设计器:从调色板拖入元素,绑定字段或公式,配置明细表格;
- 点击「保存」,系统自动同步打印动作;回到对应单据,在「打印」菜单下选择模板名即可输出 PDF;
- 需要核对效果时,点击设计器工具栏「预览」,选择一条单据记录实时渲染 PDF。
报表模板
1. 模板列表
| 列 | 说明 |
|---|---|
| 模板名称 | 报表的显示名称,也是单据「打印」菜单里的入口名称 |
| 主模型 | 报表的数据来源模型(如采购订单 purchase.order) |
| 纸张格式 | 打印纸型;保存模板时自动复制一份专用纸型(见纸张格式) |
| 设计 | 一键进入设计器,仅「报表设计器管理员」组可见 |
2. 新建模板
| 属性 | 说明 | 示例 |
|---|---|---|
| 模板名称 | 报表的显示名称,必填 | 采购订单 |
| 主模型 | 报表挂载的模型,必填;决定单据上出现打印按钮的模型 | purchase.order |
| 纸张格式 | 打印纸型,可留空(默认按 A4 宽度布局) | A4 |
| 报表动作 | 只读;模板创建时自动生成主模型上的「打印」报表动作 | 采购订单 (purchase.order) |
| 设计数据 | 只读;由设计器维护的设计 JSON,一般无需手改 |
模板删除时自动级联删除关联的打印动作、薄壳视图与单据「动作」菜单里的「设计报表」入口;此前生成过的旧打印链接会返回友好的「报表已删除」提示页。
3. 预置模板
模块内置两个可直接使用或修改的示例模板:
| 模板 | 主模型 | 纸型 | 说明 |
|---|---|---|---|
| 采购订单 | purchase.order | A4 | 编号条形码 + 二维码 + 产品图片列 + 大写金额 + 签字栏 |
| 销售小票 | sale.order | 80×210mm | 窄票,编号条形码 + 大写金额 |
设计器界面
设计器分为三部分:左侧元素调色板、中间画布(页眉区 / 表格区 / 页脚区 + 标尺)、右侧属性面板。
1. 工具栏
| 按钮 / 控件 | 说明 |
|---|---|
| 返回 | 回到上一页(模板列表) |
| 撤销 / 重做 | 撤销 / 重做最近的设计修改;快捷键 Ctrl+Z、Ctrl+Shift+Z 或 Ctrl+Y |
| 缩放 | 画布缩放:50% / 75% / 100% / 150% / 200% |
| 保存 | 校验设计并保存到模板;设计不合法时提示「设计有误」 |
| 预览 | 弹出记录选择框,选中一条主模型单据后在新标签页打开 PDF |
2. 元素调色板
从左侧调色板把元素拖到画布页眉区 / 页脚区的目标位置松开即可放置(落点即元素坐标,自动钳制在画布内)。
| 元素 | 说明 |
|---|---|
| 文本(Text) | 静态文字、字段或公式内容,可设字号 / 对齐 / 加粗 |
| 图片(Image) | 绑定二进制图片字段,或上传静态图片 / 填写图片 URL |
| 条形码(Barcode) | code128 / EAN13 / code39,条宽(模块宽度)与对齐可调 |
| 二维码(QR code) | 绑定单据编号等字段生成二维码 |
| 横线(Line) | 1px 黑色横线,常用于签字栏 |
| 矩形(Rectangle) | 1px 黑色边框矩形 |
3. 画布与标尺
| 区域 | 说明 |
|---|---|
| 页眉区 | 页面顶部固定区域,元素按 mm 坐标绝对定位 |
| 表格区 | 明细表格(一对多行),走文档流,明细行数多时自动分页 |
| 页脚区 | 页面底部固定区域(大写金额、签字栏等) |
| 标尺 | 横 / 纵标尺,每 10mm 一个刻度,元素坐标精确到 mm |
| 吸附参考线 | 拖拽元素时自动吸附画布左右边缘 / 中心与其他元素的边缘 / 中心,参考线按类别区分颜色 |
| 网格 | 画布点阵网格随缩放联动 |
点击画布空白处取消选中,右侧属性面板回到「页面设置」。
4. 属性面板
未选中任何元素时显示页面级设置:
| 设置 | 说明 |
|---|---|
| 页眉高度(mm) / 页脚高度(mm) | 对应区块的高度 |
| 行高(mm) | 明细表格行高(绑定行字段后显示) |
| 字号(pt) | 表格字号(绑定行字段后显示) |
| 显示边框 | 表格单元格边框开关(绑定行字段后显示) |
5. 快捷键
| 快捷键 | 作用 |
|---|---|
| Ctrl+Z | 撤销 |
| Ctrl+Shift+Z / Ctrl+Y | 重做 |
| Delete / Backspace | 删除选中的元素或表格列 |
焦点在输入框 / 下拉框内时,快捷键保留浏览器原生行为(如输入框内 Ctrl+Z 撤销文字)。
元素详解
所有元素共享位置与样式属性,选中元素后可在右侧面板精确输入。
1. 通用属性
| 属性 | 说明 |
|---|---|
| X / Y(mm) | 元素左上角坐标,相对所在区块(页眉 / 页脚) |
| 宽 / 高(mm) | 元素尺寸 |
| 字号(pt) | 文本类元素字号 |
| 对齐 | 左 / 中 / 右 |
| 加粗 | 文本加粗 |
2. 文本
| 属性 | 说明 |
|---|---|
| 自定义文字 | 直接输入静态文本,输入后覆盖字段 / 公式绑定 |
| 绑定字段 | 从字段选择器选择主模型字段,支持点路径(如 partner_id.name) |
| 公式 | 选择内置公式(见内置公式),选公式后覆盖字段绑定 |
| 日期格式 | 绑定日期 / 日期时间字段时显示,支持预设与 strftime 自定义(见日期格式) |
三种绑定方式互斥,后设置者生效。字段值按类型自动格式化:日期 / 金额 / 选项标签 / 是·否 / 关联单据显示名等。
3. 图片
| 属性 | 说明 |
|---|---|
| 绑定字段 | 二进制图片字段,等比缩放铺满元素框 |
| 上传图片 | 选择本地图片文件存入设计数据(不选则用绑定字段) |
| 图片 URL | 填写图片外链,优先于上传文件;打印时服务端下载 |
4. 条形码
| 属性 | 说明 |
|---|---|
| 绑定字段 | 条码内容来源(如单据编号) |
| 条码类型 | code128 / EAN13 / code39 |
| 条宽(mm) | 条码模块宽度,默认 0.3;条码长度 = 内容模块数 × 条宽 |
| 对齐 | 条码按自然尺寸输出,窄于元素框时按左 / 中 / 右对齐 |
条宽建议不小于 0.25mm 以保证扫码可靠性;内容与条码类型不匹配(如 EAN13 绑定非纯数字字段)时该条码打印为空。
5. 二维码
绑定字段后按其值生成二维码,等比铺满元素框,常用于单据编号。
6. 横线与矩形
| 元素 | 说明 |
|---|---|
| 横线(Line) | 1px 黑色横线,元素高度即线所在位置;签字栏场景在横线下方配一行「制单人 / 审核」文本 |
| 矩形(Rectangle) | 1px 黑色边框矩形 |
数据绑定与公式
1. 绑定方式
| 绑定 | 说明 |
|---|---|
| 自定义文字(static) | 静态文本,适合标题、标签 |
| 字段(field) | 绑定主模型任意字段,支持点路径,按字段类型自动格式化 |
| 公式(formula) | 内置公式,取值逻辑见下表 |
2. 内置公式
| 公式 | 说明 |
|---|---|
| amount_total | 合计金额:取表格中第一个勾选「汇总」的列的合计值;没有汇总列时回退取单据的 amount_total 字段 |
| amount_in_words | 将合计金额转换为中文大写(如「壹仟贰佰叁拾肆元整」) |
| date_today | 今天的日期 |
| company_name | 单据所属公司名称;单据未设置公司时取当前公司 |
| user_name | 当前登录用户的姓名 |
| stamp | 条件图章:仅当条件满足时显示图章图片(合计 > 0,或绑定的布尔字段为真),以 85% 透明度渲染,适合「已付款」「已审核」等图章 |
stamp 公式仅适用于文本元素。图章条件为「字段为真」时,需选择主模型上的一个布尔字段。
3. 日期格式
绑定日期 / 日期时间字段的文本元素与表格列支持自定义日期格式,在属性面板(元素)或列设置面板(列)中配置:
| 选项 | 输出示例 | strftime 模式 |
|---|---|---|
| 默认(跟随语言) | 按当前用户语言默认格式显示 | — |
| 2026-08-09 | 2026-08-09 | %Y-%m-%d |
| 2026/08/09 | 2026/08/09 | %Y/%m/%d |
| 2026-08-09 10:23 | 2026-08-09 10:23 | %Y-%m-%d %H:%M |
| 2026/08/09 10:23 | 2026/08/09 10:23 | %Y/%m/%d %H:%M |
| 自定义格式... | 输入 strftime 模式,如 %Y年%m月%d日 → 2026年08月09日 | 自定义 |
常用 strftime 指令:
| 指令 | 含义 | 示例 |
|---|---|---|
| %Y / %y | 四位 / 两位年份 | 2026 / 26 |
| %m / %d | 两位月份 / 日期 | 08 / 09 |
| %H / %M / %S | 时(24 小时制)/ 分 / 秒 | 10 / 23 / 45 |
| %A / %a | 星期全称 / 缩写 | 星期一 / 周一 |
说明一:日期时间值按当前用户时区格式化(Odoo 内部按 UTC 存储,直接格式化会偏差时区)。
说明二:非法格式模式(平台无法识别的指令)不会报错,自动回退为语言默认格式。
说明三:日期格式仅对日期 / 日期时间字段值生效,其他字段类型不受影响;旧模板无需重新绑定字段,打开设计器即可设置。
明细表格
1. 绑定行字段
在表格区点击「+ 选择行字段(一对多)」,从主模型的一对多字段中选择(如采购订单的 order_line),系统自动识别行模型。
2. 添加与编辑列
| 操作 | 说明 |
|---|---|
| 添加列 | 点击「+ 添加列」,从行模型字段中选择,支持点路径(如 product_id.display_name) |
| 列标题 | 点击列头卡片,直接修改标题文字 |
| 列宽 | 拖拽列头右侧手柄调整,或选中列后在右侧面板输入精确宽度 |
| 水平对齐 | 左 / 中 / 右(未设置时默认居中) |
| 垂直对齐 | 上 / 中 / 下 |
| 汇总 | 仅数值类列(float / integer / monetary)显示「汇总」勾选框;勾选后在 PDF 表尾生成合计行 |
| 日期格式 | 日期 / 日期时间列可选预设或自定义 strftime 格式(见日期格式) |
| 图片列 | 绑定二进制图片字段时渲染为单元格缩略图(如产品图片),也支持图片 URL 文本字段 |
| 删除列 | 列头 ✕ 按钮、右侧面板「删除此列」或选中后按 Delete |
点击列头卡片选中列后,右侧面板显示列设置;移除行字段绑定会同时清空全部列。
3. 表格样式
| 属性 | 说明 |
|---|---|
| 行高(mm) | 默认 8 |
| 字号(pt) | 默认 10 |
| 显示边框 | 默认开启 |
说明一:合计行始终存在——无汇总列时首列显示「合计」字样;汇总列以加粗显示求和结果,币种取行上币种,未设置时回退公司币种。
说明二:列宽按设计比例整体缩放,铺满纸张可用宽度。
说明三:明细行数超出页高时自动分页,但第二页起不重复表头(wkhtmltopdf 渲染限制);长表建议把标题、单据信息等放在页眉区。
打印与预览
| 能力 | 说明 |
|---|---|
| 打印按钮 | 模板保存后自动生成主模型上的「打印」报表动作;单据「打印」菜单下选择模板名即可输出 PDF |
| 打印文件名 | 默认「单据名称 + 空格 + 模板名」,如 PO00001 采购订单 |
| 设计器入口 | 同时自动生成单据表单「动作」菜单下的「设计报表:<模板名>」,一步直达设计器 |
| 设计器预览 | 工具栏「预览」→ 选择一条单据 → 新标签页打开 PDF(与打印走同一渲染链路) |
纸张格式
| 主题 | 说明 |
|---|---|
| 预置纸型 | 模块提供 A5(dpi=96)与 80×210mm 小票两种纸型 |
| 自定义纸型 | 可在技术设置中创建自定义纸型(如 80×210mm 销售小票) |
| 专用纸型 | 模板保存时自动复制所选纸型为「<纸型名> - 报表设计器」:dpi=96、关闭收缩缩放、竖版,保证设计画布与 PDF 输出 1:1 对应;多个模板共享同名专用纸型 |
专用纸型被手动改坏(如方向改成横版)时,下次保存模板会自动原地修正。
权限说明
| 用户组 | 权限 |
|---|---|
| 报表设计器管理员 | 查看 / 新建 / 修改 / 删除报表模板;打开设计器(列表「设计」按钮、表单「设计」按钮与单据「动作」菜单入口均校验该组) |
| 内部用户 | 仅可查看报表模板列表,不影响单据上的打印按钮使用 |
常见问题
| 问题 | 说明 |
|---|---|
| 打印按钮在哪里? | 打开对应主模型的单据,点击顶部「打印」菜单,选择模板名;打印文件名默认「单据名称 + 模板名」 |
| 设计器提示无权限? | 当前用户需加入「报表设计器管理员」组(设置 → 用户 → 编辑所属用户组) |
| 打印内容被缩放或错位? | 确认模板「纸张格式」为专用纸型(名称含「- 报表设计器」);保存模板会自动生成或修正专用纸型 |
| 长表格第二页没有表头? | 当前渲染器分页后不重复表头,建议把关键表头信息(单据编号、标题等)放到页眉区 |
| 日期想显示成「2026年08月09日」? | 选中绑定日期字段的元素(或日期列),「日期格式」下拉选择「自定义格式...」,输入 %Y年%m月%d日(见日期格式) |
| 条码打印为空? | 检查绑定字段内容与条码类型是否匹配(如 EAN13 要求纯数字) |
| 图片列不显示? | 该行字段无图片值,或图片 URL 下载失败(服务端日志有警告) |
| 模板删除后旧打印链接? | 返回友好的「报表已删除」提示页,不影响系统其他功能 |
视频讲解
学习交流
