Odoo Report 如何在每个产品对应页面的开头放置产品字段值
自定义采购订单单产品分页打印解决方案
场景1:使用Office套件(Word/Excel)手动制作
- 核心逻辑是利用分页符强制分页,每个产品内容块前插入分页符即可
- 操作步骤:
- 先制作单产品的信息模板:顶部预留位置放条码、产品名称、产品描述字段
- 第一个产品信息录入完成后,光标移动到该产品内容块的最后一行,点击「插入」选项卡选择「分页符」
- 新页面顶部直接录入第二个产品的条码、名称、描述等信息,重复上一步插入分页符操作即可
- 若使用Excel,可在「页面布局」选项卡中设置「打印标题」,固定每页顶部的信息栏样式,再用筛选功能按产品拆分每页内容
场景2:前端页面自定义打印(JS实现)
- 核心逻辑是给每个产品块设置打印分页规则,强制每个块独占一页,内容自动对齐到页首
- 核心CSS代码:
/* 给每个产品容器添加这个类 */ .product-page { page-break-after: always; page-break-inside: avoid; margin: 0; padding: 0; } /* 清除打印时的默认页边距偏移,保证内容从页首开始 */ @media print { @page { margin: 1cm; } body { margin: 0; padding: 0; } }
- 页面结构示例:
<div class="product-page"> <img src="第一个产品条码地址" alt="产品条码"> <h3>产品A名称</h3> <p>产品A描述</p> <!-- 其他产品信息 --> </div> <div class="product-page"> <img src="第二个产品条码地址" alt="产品条码"> <h3>产品B名称</h3> <p>产品B描述</p> <!-- 其他产品信息 --> </div>
- 调用打印时直接用
window.print()即可自动实现每页开头对应一个产品信息
场景3:代码生成PDF文件(以Python为例)
- 核心逻辑是遍历产品列表时,每渲染完一个产品的信息就新增一页,新页面默认从顶部开始渲染内容
- 示例代码(使用
reportlab库):
from reportlab.pdfgen import canvas from reportlab.graphics.barcode import code128 # 产品列表数据 product_list = [ {"id": "P001", "name": "产品A", "desc": "产品A的详细描述"}, {"id": "P002", "name": "产品B", "desc": "产品B的详细描述"} ] c = canvas.Canvas("采购订单.pdf") for product in product_list: # 从页面顶部开始渲染信息,y坐标从高到低对应页面从上到下 barcode = code128.Code128(product["id"], barHeight=30, barWidth=0.8) barcode.drawOn(c, 50, 750) # 条码放在页首位置 c.drawString(50, 720, f"产品名称:{product['name']}") c.drawString(50, 700, f"产品描述:{product['desc']}") # 渲染完当前产品所有内容后新增一页,下一个产品直接从新页顶部开始渲染 c.showPage() c.save()
内容的提问来源于stack exchange,提问作者Dev Machine
相关产品推荐
相关产品推荐

