提示:以下是本篇文章正文内容,下面案例可供参考
1.py文件
代码如下(示例):
# -*- coding: utf-8 -*-
from openerp import models, api
class PrintClass(models.AbstractModel):
_name = 'report.module.print_pdf'(report.模块名.模板id)
@api.multi
def render_html(self, data=None):
report_obj = self.env['report']
docargs = self._get_doc_args(self.ids, 'module.print_pdf')
# module.print_pdf为(模块名.模板id)
return report_obj.render('module.print_pdf', docargs)
@api.model
def _get_doc_args(self, ids, report_name):
report_obj = self.env['report']
obj = self.env['model.table.name']
# model.table.name为打印数据所在模型的名称
report = report_obj._get_report_from_name(report_name)
values= obj.browse(ids)
return {
'doc_ids': self._ids,
'doc_model': report.model,
'docs': self,
'values': values,
}
2.xml文件
代码如下(示例):
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
1.菜单
<report id="action_print_pdf"(对应动作id)
model="model.table.name"(打印数据所在模型的名称)
string="按钮名称"
report_type="qweb-pdf"
name="module.print_pdf"(模块名.模板id)
file="module.print_pdf"/>
2.纸张格式
<record id="paperformat_type" model="report.paperformat">
<field name="name">纸张名称</field>
<field name="default" eval="True"/>
<field name="format">custom</field>
<field name="page_height">100</field>(纸张高100毫米)
<field name="page_width">100</field>(纸张宽100毫米)
<field name="orientation">Portrait</field>
# 报表距离纸张边界上下左右分别为1, 2, 3, 4毫米
<field name="margin_top">1</field>
<field name="margin_bottom">2</field>
<field name="margin_left">3</field>
<field name="margin_right">4</field>
<field name="header_line" eval="False"/>
<field name="header_spacing">0</field>
<field name="dpi">80</field>
</record>
3.动作
# action_print_pdf(对应菜单id)
# module.paperformat_type(模块名.纸张id)
<record id="action_print_pdf" model="ir.actions.report.xml">
<field name="paperformat_id" ref="module.paperformat_type"/>
</record>
4.pdf模板
<template id="print_pdf">
<t t-foreach="values" t-as="a">
<div class="page">
<table>
<tr>
<td>姓名</td>
<td><span t-field="a.name"/></td>
</tr>
</table>
</div>
</t>
</template>
</data>
</openerp>
注意
- py文件在对应的__init__文件引入
- xml在__openerp__中data列表引入
初次学习写,不足之处还请见谅,缺少的细节请大家提出,看的会补充。