odoo 下载大量pdf使用内存太大,异常退出,pdf 分页

发布时间 2023-08-16 17:38:03作者: 那时一个人

说白了,还是因为wkhtmltopdf工具使用的内存太大,打印200个页面就会直接内存超标,直接退出

直接改源码了,每次让pdf 转换工具只处理50个记录

        elif converter == 'pdf':
            pdfMerger = PdfFileMerger()
            import io
            pdf = io.BytesIO(b'')

            for list_docid in self.generator_five(docids,50):
                pdf_temp = report.with_context(context).render_qweb_pdf(list_docid, data=data)[0]
                pdf_temp_f = io.BytesIO(pdf_temp)
                pdfMerger.append(pdf_temp_f)
            pdfMerger.write(pdf)
            pdf.seek(0)
            data = pdf.read()
            pdfhttpheaders = [('Content-Type', 'application/pdf'), ('Content-Length', len(data))]
            return request.make_response(data, headers=pdfhttpheaders)
        elif converter == 'text':
            text = report.with_context(context).render_qweb_text(docids, data=data)[0]
            texthttpheaders = [('Content-Type', 'text/plain'), ('Content-Length', len(text))]
            return request.make_response(text, headers=texthttpheaders)
        else:
            raise werkzeug.exceptions.HTTPException(description='Converter %s not implemented.' % converter)

    @staticmethod
    def generator_five(parm, num):
        """
        将列表切分成每5个来返回
        :param parm:
        :return:
        """
        length = len(parm)

        for i in range(0, length, num):
            yield parm[i:i + num]