栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

odoo14 生成PDF报表详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

odoo14 生成PDF报表详解

简介:项目实际开发过程中,有时会面临将前端数据下载生成报表的需求,虽然也可以通过导出数据再生成相应的报表,但是这样操作起来太复杂。odoo自身集成了将数据直接生成pdf格式文档的功能,而且可以通过自定义模板生成各种样式的报表。

1.  odoo的报表展示

选择相应记录数据,打印动作按钮下会有相应的动作按钮

PDF报表展示

 2. odoo14定义打印报表动作

1. 新建report目录-新建报表xml文件material_storage_pdf.xml

2.  定义xml文件报表参数参数

ir.actions.report报表属性

  • name:打印动作按钮下的报表名字
  • model:你的报表相关的模型,也就是说是你下载pdf中,pdf中数据的来源
  • report_type:PDF报表的qweb-pdf 或HTML的 qweb-html,就是下载的报表类型
  • groups_id:允许浏览/使用当前报表的组的Many2many 字段
  • attachment_use:若设置为True, 使用 attachment表达式所生成的名称存储为附件的报表;如果需要仅生成一次报表可以使用它 (例如出于法律原因)
  • attachment:定义报表名称的python 表达式;记录可作为 object变量访问
  • paperformat_id:定义纸张格式
    
        物料标识卡
        material.storage
        
        qweb-html
        
        quality_inspection.material_storage_pdf2
        quality_inspection.material_storage_pdf2
        
        
        
        '物料标识卡'+ str(object.name)
        
        False
        
        
        
        report
    

3. 定义报表模板

  • 报表模板在template标签中定义,定义的id的值不是随便定义的,要和report报表成映射关系
  • 所有写的报表的模板需要写在标签web.html_container下,而且,t-call是固定的(调用external_layout 会在报表上添加头部和底部。)
  • PDF内容体是 内部的内容, 因为这是一个QWeb模板,你可以访问由模板接收的docs对象的所有字段。

  • 有一些可在报表中访问的具体变量,主要有:
            ①docs针对当前报表的记录

            ②doc_ids针对 docs记录的id列表

            ③doc_model针对docs 记录的模型

            ④time对Python标准库 time的引用

            ⑤user打印报表的用户的res.user 记录

            ⑥res_company当前 user的公司的记录

  • 报表中定义页脚,div中
    表示的是一条数据所占的页数的当前页
    表示的一条数据所占的页数的总页数
    
    

4. 还可以定义pdf报表的纸张类型(默认是A4)

纸张格式是report.paperformat 记录并可包含如下属性:

  • id: id的取值和报表模板中的template的id一样,也就是相等的,相当于做的映射关联
  • name: 仅用于在某种列表中查看报表的助记内容/描述
  • description格式的简短描述
  • format是预定义格式(A0到A9, B0到 B10, 法律文书, 信件, 公报,…) 或 自定义;默认为 A4。你果定义页面大小时不能使用非自定义格式。
  • dpi输出DPI;默认为90
  • margin_top, margin_bottom, margin_left, margin_right单位为mm的边框大小page_height, page_width 单位为mm的页面大小
  • orientation横向或纵向,
  • header_line显示头部线的布尔值
  • header_spacing 单位为mm的头部间距
 
        物料卡纸张定义
        
        
        A4
        
        Landscape
        

        
        10
        10
        20
        10
        


        
        
        
        0
        90
    

以上内容均定义在material_storage_pdf.xml文件中

3. 在manifest文件中引入material_storage_pdf.xml文件
    # data: 加载XML文件。有先后顺序,如果有调用需要将被调用的放在前面
    'data': [
        'security/quality_inspection_security.xml',
        'security/ir.model.access.csv',
        'wizard/material_storage_wizard_view.xml',
        'views/inspection_manual_view.xml',
        'views/incoming_inspection_view.xml',

        'report/quality_inspection_report_pdf.xml',
        'report/material_storage_report_pdf.xml',
        'report/material_storage_report_pdf2.xml',
4.  定义报表模型 (自己测试发现可以不用定义,直接写xml文件也能实现,定义了操作起数据反而更麻烦,全部需要自己写,但这里还是写出定义方法)

@api.model
    def _get_report_values(self, docids, data=None):
        pass

这个方法是必须继承的,也就是必须要写的 ,return的值是给template里面来用的,可以自己写,该方法里面一般写的就是报表的处理逻辑。

该方法中的参数:
① docids:是你打印时候选的几个数据,这块就是几个数据的id,组成的列表
②data是报表的类型,后台打印出这两个参数的值为

from odoo import models, api, fields
  

class QualityInspectionReport(models.AbstractModel):
    # _name内容由三部分构成,report. + 关联模块名. + xml文件模板id组成(quality_inspection_report_pdf.xml的template id="quality_inspection_pdf")
    _name = 'report.quality_inspection.quality_inspection_pdf'
    _description = '质检报告pdf'

    @api.model
    def _get_report_values(self, docids, data=None):
        report_ids = self.env['purchase.record'].browse(docids)
        docs = []
        for record in report_ids:
            record_dic = {
                'name': record.name,

            }
        docs.append(record_dic)
        docargs = {
            'doc_ids': docids,
            'doc_model': 'purchase.record',
            'docs': docs,
        }
        return docargs

定义完记得在init文件中导入 模型

5. 效果

 

odoo14 wkhtmltopdf 安装参考:odoo14 pdf报表 wkhtmltopdf 安装

 若有不足之处,欢迎一起讨论。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027822.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号