需求:客户部分单据使用针式打印机,纸张尺寸215mm*140mm
先看实现效果:固定的表头表尾,支持多页且带有页码
odoo打印的基础这里就不讲了,直接从关键位置开始,使用自定义打印。
关键代码:
这里需要了解,odoo打印其实是分了header、page、 footer,分别为表头、打印内容、表尾。在设置中我们也能看到是可以配置表头表尾的,这里我们引用web.basic_layout 进行自定义表头、表尾。然后使用自定义打印设置纸张尺寸。
#自定义打印的定义
<record id="EL_Needle_printing" model="report.paperformat">
<field name="name">针孔打印</field>
<field name="default" eval="True"/>
# format 打印的类型有很多种,这里使用自定义打印custom
<field name="format">custom</field>
<field name="page_height">215</field>
<field name="page_width">140</field>
<field name="orientation">Landscape</field> #Landscape横向打印
# 内容的外边距,就是内容距离顶部的距离,如果有表头这个高度需要大于表头的高度。
<field name="margin_top">28</field>
<field name="margin_bottom">8</field>
<field name="margin_left">4</field>
<field name="margin_right">5</field>
#有表头记得设置为True并设置header_spacing,不然打印内容会在表头下方显示不出来
<field name="header_line" eval="True"/>
<field name="header_spacing">25</field> #定义表头的高度
<field name="dpi">80</field>
</record>
<report
id="action_report_mrp_stock_order"
string="生产领料单"
model="mrp.production"
report_type="qweb-pdf"
name="yuanPC.report_mrp_stock_order"
file="yuanPC.report_mrp_stock_order"
print_report_name="'生产单 - %s' % (object.name)"
paperformat="EL_Needle_printing" #自定义打印的id
/>
报表xml概览:
这里讲下分页码的设置:
<div class="footer">
<div style="width:100%;">
<table style="width:100%;">
<td style="width:5%;"/>
<td style="width:25%;">
<strong>审核人:</strong>
</td>
<td style="width:25%;">
<strong>审核日期:</strong>
</td>
<td style="width:25%;">
<strong>制单人:</strong>
<span t-esc="request.env.user.name"/>
</td>
<td style="width:20%;">
# page为当前页,topage为总页码。这两个class Odoo会自动解析
第<span class="page"/>/<span class="topage"/>页
</td>
</table>
</div>
</div>
涉及到表格的一些数据计算:
# 循环输出明细行,这里每循环一次就会创建一个tr
<t t-if="o.move_raw_ids">
<tr t-foreach="o.move_raw_ids" t-as="raw_line" t-if="not raw_line.product_id.is_recoil" style="height:28px;">
<td style="border: 1px solid #000">
<span t-field="raw_line.product_id.default_code"/>
</td>
</tr>
</t>
<td style="border: 1px solid #000">
# 计算模型中的字段,这里需要通过变量进行计算,然后使用t-esc输出
<span t-set="foo" t-value="o.product_qty / o.wrap.wrap_qty * 1"/>
# t-options 输出的时候可以对输的类型/格式进行定义,这里是定义计算结果保留2位小数
<span t-esc="foo" t-options='{"widget": "float", "decimal_precision": "Product Unit of Measure"}'/>
</td>
版权声明:本文为qq_31214923原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。