odoo 下载大量pdf使用内存太大,异常退出,pdf 分页
说白了,还是因为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]
懂得,原来世界如此简单!