首页 > 其他分享 >odoo pdf 打印任务后台运行,pdf保存在附件中, 借助queue_job模块实现后台打印

odoo pdf 打印任务后台运行,pdf保存在附件中, 借助queue_job模块实现后台打印

时间:2023-11-01 11:37:24浏览次数:30  
标签:name self 打印 report job context 后台 pdf

用户故事:

在打印大批量pdf 文件时会有较长事件的等待, 而且容易中断

原因

中断原因, 有内存及超时限制,wkhtmltopdf工具比较吃内存

解决方案:

内存限制的问题可以分批处理,比如每次只处理50条记录

代码示例,使用按钮触发的打印功能:

# model: res.partner
  
    @api.model
    def save_attachment(self, datas,report_name, file_name,res_id=None, res_model='queue.job'):
        """
        <record id="documents_vendor_bill_extract_azure_interior" model="ir.attachment">
            <field name="name">Invoice Azure Interior</field>
            <field name="datas_fname">invoice_azure_interior.pdf</field>
            <field name="datas" type="base64" file="documents/demo/files/invoice_azure_interior.pdf"/>
            <field name="folder_id" ref="documents_finance_folder"/>
        </record>
        pdf文件保存在附件中,并绑定queque_job 记录
        """
        attach = self.env['ir.attachment']
        var = dict(name=report_name,
                   datas_fname=file_name,
                   datas=base64.b64encode(datas).decode('utf-8'),
                   folder_id=self.env.ref('documents.documents_finance_folder').id,
                   res_model=res_model,
                   res_id=res_id
                   )
        attach.create([var])

    def do_button_print_statement(self):

        _logger.info('do_button_print_statement_context:{}'.format(self._context))
        report_info = self.env.ref('account_statement.report_customert_print').report_action(self)
        if self._context.get('is_backend'):
            # 用户可以选择是否后台运行打印任务
            self.save_in_attachment(report_info)
            return None
        return report_info

    @api.model
    def save_in_attachment(self, report_info):
        """
        将打印的文件保存在附件中,odoo 服务器中,不直接下载, 针对打印的pdf 数量太多的情况
        """
        report_name = report_info.get('report_name')
        name = report_info.get('name')
        report_type = report_info.get('report_type')
        report = self.env['ir.actions.report']._get_report_from_name(report_name)
        context = report_info.get('context')
        context.update(date_end = str(context.get('date_end')))

        list_pdf_bytes = []
        for list_id in list_split(self.ids, 50):
            pdf_bytes = report.with_context(context).render_qweb_pdf(list_id, data=context)[0]
            list_pdf_bytes.append(pdf_bytes)
        sum_pdf = merge_pdf(list_pdf_bytes)
        job_uid = context.get('job_uuid')
        queue = self.env['queue.job'].search([('uuid','=',job_uid)])
        self.save_attachment(sum_pdf, name, '{}.pdf'.format(name), queue.id)
        queue.message_subscribe(partner_ids=queue.user_id.partner_id.ids)
        queue.sudo().message_post(body='Report generate success!', message_type='notification', subtype='queue_job.mt_job_failed')

效果展示

  1. 后台任务完成后会发送完成提示
  2. odoo pdf 打印任务后台运行,pdf保存在附件中, 借助queue_job模块实现后台打印_odoo


  3. odoo pdf 打印任务后台运行,pdf保存在附件中, 借助queue_job模块实现后台打印_代码示例_02

  4. 附件可以在queue_job 记录中获取
  5. odoo pdf 打印任务后台运行,pdf保存在附件中, 借助queue_job模块实现后台打印_文件保存_03

  6. 附件可以在document 模块中中获取
  7. odoo pdf 打印任务后台运行,pdf保存在附件中, 借助queue_job模块实现后台打印_odoo_04

  8. 前端界面:
  9. odoo pdf 打印任务后台运行,pdf保存在附件中, 借助queue_job模块实现后台打印_代码示例_05


懂得,原来世界如此简单!



标签:name,self,打印,report,job,context,后台,pdf
From: https://blog.51cto.com/qianxunman/8120178

相关文章

  • 【专题】2021 年中国电力行业经济运行报告PDF合集分享(附原数据表)
    报告合集根据实践创新,我们提出了“云上新型电力系统”,该系统将加速电力流、信息流和价值流的融通流动,通过更灵活高效的能源资源优化配置平台,支持大规模的新能源开发和利用。这一系统将为电力业务创新、电力行业发展以及全社会的绿色生产和生活提供坚实保障,并创造无限的可能性。电......
  • 【专题】2022年中国财税数字化行业研究报告PDF合集分享(附原数据表)
    数字化是复杂系统中的一个重要驱动因素,它得到了技术进步的支持。随着以大数据、物联网、云计算、人工智能等为代表的数字技术的不断成长和成熟,企业必须应对的内外部环境发生了翻天覆地的变化。新的全球生产力革命的一个关键驱动因素是数字智能化。企业的采购、生产、经营、销售等商......
  • 【专题】中国小微企业云财税行业研究报告PDF合集分享(附原数据表)
    数字化是复杂系统中的一个重要驱动因素,它得到了技术进步的支持。随着以大数据、物联网、云计算、人工智能等为代表的数字技术的不断成长和成熟,企业必须应对的内外部环境发生了翻天覆地的变化。新的全球生产力革命的一个关键驱动因素是数字智能化。企业的采购、生产、经营、销售等商......
  • 【2023-11-01】一款基于 pdf.js 的 PDF 批注注释插件库(纯JS、高亮、画笔、多边形、历
    基于纯JavaScript和PDF.js做的一款PDF批注拓展插件-PDFMaster,一款仍能兼容支持IE11的PDF批注插件,界面美观功能强大,有无开发经验都可以快速简单快速使用。Demo及源码Demo和源码地址:https://demos.libertynlp.com功能演示视频:https://www.bilibili.com/video/BV12C4y1n7TL......
  • laravel 后台或者api框架异常钉钉告警提醒
    中间件Monitor<?phpnamespaceApp\Http\Middleware;useError;useClosure;useException;useIlluminate\Http\Request;useIlluminate\Contracts\Container\Container;useIlluminate\Contracts\Debug\ExceptionHandler;usePsy\Exception\ErrorExcep......
  • 【专题】2023年中国新消费潜力洞察蓝皮书报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34074近年来,随着中国消费升级的趋势,新兴消费品牌在市场上逐渐崭露头角。这些品牌以挑战者的身份进入市场,通过创新的供应链、产品和营销策略,以用户为核心满足新的消费需求,实现了短期内的强劲增长和销售规模的快速扩张。然而,经济环境、疫情冲击和激烈......
  • 【专题】2023文化娱乐新消费报告报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34074近年来,随着中国消费升级的趋势,新兴消费品牌在市场上逐渐崭露头角。这些品牌以挑战者的身份进入市场,通过创新的供应链、产品和营销策略,以用户为核心满足新的消费需求,实现了短期内的强劲增长和销售规模的快速扩张。然而,经济环境、疫情冲击和激烈......
  • 【专题】新消费看长沙:中国经济转型样本报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34074近年来,随着中国消费升级的趋势,新兴消费品牌在市场上逐渐崭露头角。这些品牌以挑战者的身份进入市场,通过创新的供应链、产品和营销策略,以用户为核心满足新的消费需求,实现了短期内的强劲增长和销售规模的快速扩张。然而,经济环境、疫情冲击和激烈......
  • 【专题】2022新消费增长洞察报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34074近年来,随着中国消费升级的趋势,新兴消费品牌在市场上逐渐崭露头角。这些品牌以挑战者的身份进入市场,通过创新的供应链、产品和营销策略,以用户为核心满足新的消费需求,实现了短期内的强劲增长和销售规模的快速扩张。然而,经济环境、疫情冲击和激烈......
  • 【专题】2022年中国新消费白皮书报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34074近年来,随着中国消费升级的趋势,新兴消费品牌在市场上逐渐崭露头角。这些品牌以挑战者的身份进入市场,通过创新的供应链、产品和营销策略,以用户为核心满足新的消费需求,实现了短期内的强劲增长和销售规模的快速扩张。然而,经济环境、疫情冲击和激烈......