Search 1.9 billion lines of Odoo code on GitHub

lodop

Author: Zhang Jie
License: no license
Branch: 10.0
Repository: JZ10UJS/extra-addons
Dependencies: web
Languages: JavaScript (226, 74.6%), Markdown (36, 11.9%), Python (16, 5.3%), and XML (25, 8.3%)

<p>主要是用来直接调用打印机打印, 普通打印需要下载PDF, 然后再本地调用打印机. 这样可以直接调用打印机</p> <ol> <li>有坑, 如果odoo跑了多个db, 那么在lodop打印html的时候是获取不到html中样式文件. 因为lodop是单独请求的静态文件, 在它请求的session中没有指定db</li> <li>如果是最普通的连打快递面单则简单的多, 需要用js画lodop的模板, 返回的rend_data给需要打印的关键数据, 然后options.type</li> <li>如果强行要用lodop打印html, 我的建议是放弃odoo默认的report.html_container, 尤其是后期附件数量多了之后(t-call-assets在后期是个巨坑!!), wkhtmltopdf渲染的pdf简直慢到爆炸, 直接写最简单的html,然后内联样式,最后render出来用返回给前端lodop打印,贼快 ```python</li> </ol> <p>class SaleOrder(models.Model): _inherit = &#39;sale.order&#39;</p> <pre><code>@api.multi def lodop_print_quotation(self): self.filtered(lambda s: s.state == &#39;draft&#39;).write({&#39;state&#39;: &#39;sent&#39;}) base_url = self.env[&#39;ir.config_parameter&#39;].get_param(&#39;web.base.url&#39;).encode(&#39;utf-8&#39;) iu = self.env.ref(&#39;sale.report_saleorder&#39;) rend_data_list = [] for so in self: html = iu.render({&#39;editable&#39;: False, &#39;docs&#39;: so}) # 由于拿到html之后,是lodop调用打印,所以如果html中的静态文件需要指定base_url,lodop才能准确的拿到静态文件等 print_html = re.sub(r&#39;&lt;head&gt;&#39;, &#39;&lt;head&gt;&lt;base href=&quot;%s&quot;/&gt;&#39; % base_url, html) rend_data_list.append({ &#39;rend_data&#39;: print_html, &#39;options&#39;: { &#39;pagesize&#39;: {&#39;width&#39;: 2100, &#39;height&#39;: 2970}, # A4纸张, 以mm为单位 &#39;printer&#39;: False, # 打印机的名称, 不设置就会被lodop调用默认打印机 &#39;print_init_name&#39;: &#39;报价单(%s)&#39; % so.name, &#39;type&#39;: False, # 不设置就是默认html打印, 否则就是自己在js那边画lodop模板 } }) return { &#39;type&#39;: &#39;ir.actions.client&#39;, &#39;tag&#39;: &#39;lodop_print_main_menu&#39;, &#39;target&#39;: &#39;new&#39;, &#39;context&#39;: { &#39;rend_data_list&#39;: rend_data_list, }, } </code></pre> <p>```</p>