odoo 使用打印功能

目录

1.下载 wkhtmltopdf 组件

2.报表模型

3.定义动作视图

4.定义Qweb模板


1.下载 wkhtmltopdf 组件

下载地址:wkhtmltopdf

odoo 使用打印功能_第1张图片

将下载之后的bin目录配置到环境变量中,高级系统设置>>环境变量>>path
配置成功后启动odoo,会显示组件路径:

 

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表达式,不然打印一条记录时报错)

代码如下所示:


    打印报告
    system.book
    qweb-pdf
    
    test_report.report_book
    test_report.report_book
    
    ('%s' % (object.name))
    
    
    report

4.定义Qweb模板

只需要注意id与所定义的模型的尾缀一样就行(防止报错),代码如下:

  

你可能感兴趣的:(Odoo,前端,python,xml)