目录
1.下载 wkhtmltopdf 组件
下载地址:wkhtmltopdf
将下载之后的bin目录配置到环境变量中,高级系统设置>>环境变量>>path
配置成功后启动odoo,会显示组件路径:
linux 安装:
官网下载deb包安装,然后安装依赖
sudo apt-get install wkhtmltox
Linux 的默认安装路径是 /usr/local/bin
odoo.conf 文件中可以配置路径
webkit_path = /usr/local/bin/wkhtmltopdf
安装字体库:
sudo apt-get install fonts-wqy-zenhei
2.报表模型
模型需要继承model.AbstractModel,模型的名字以 report.模块名.自定义名 的形式,
需要重写 _get_report_values 方法,用以传递数据给前端,代码如下所示:
class BookReport(models.AbstractModel):
_name = 'report.test_report.report_book'
@api.model
def _get_report_values(self, docids, data=None):
docs = self.env['system.book'].browse(docids)
print(type(docs))
return {
'doc_ids': docids,
'doc_model': "system.book",
'docs': docs,
'data':data
}
其中的report_book 是模型的名字一般和前端的qweb模板id定义成一样,前端需要使用,docids是选中的记录的id列表,返回值以字典的形式,例如以上的 docs 可以在qweb模板语法中使用t-foreach遍历。
3.定义动作视图
动作视图的定义有两种方法:使用report标签和record标签,这里介绍record标签的使用。
name属性:
(1)name——在前端显示的动作名
(2)model——所连接的模型
(3)report_type——报表形式
(4)paperformat_id——纸张的格式,ref为外部标识符(不加的话应该是默认的)
(5)report_name与report_file——一般定义成一样的,防止出错,形式为: 模块名.模板id
(6)print_report_name——输出的pdf文件名(格式为python表达式,不然打印一条记录时报错)
代码如下所示:
<record id="book_report" model="ir.actions.report">
<field name="name">打印报告</field>
<field name="model">system.book</field>
<field name="report_type">qweb-pdf</field>
<field name="paperformat_id" ref="maono_quality_extend.quality_check_report_A4"/>
<field name="report_name">test_report.report_book</field>
<field name="report_file">test_report.report_book</field>
<field name="print_report_name">
('%s' % (object.name))
</field>
<field name="binding_model_id" ref="booksystem.model_system_book"/>
<field name="binding_type">report</field>
</record>
4.定义Qweb模板
只需要注意id与所定义的模型的尾缀一样就行(防止报错),代码如下:
<template id="report_book" name="book info">
<t t-call="web.basic_layout" t-foreach="docs" t-as="doc">
<div class="page">
<tr>
<td>
<t t-esc="doc.name" />
</td>
</tr>
</div>
</t>
</template>