odoo 使用打印功能

目录

1.下载 wkhtmltopdf 组件

2.报表模型

3.定义动作视图

4.定义Qweb模板

5.对接打印机,以及实现打印预览功能



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>

5.对接打印机,以及实现打印预览功能

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值