2016-08-05 113 views
2

我可以在報表打印靜態圖像是這樣的:如何在Odoo/OpenERP中的mako報告中打印條形碼?

<img src="data:image/png;base64,${obj.company_id.logo}"/> 

而且我可以打印用base64編碼的圖像是這樣的:從一個url

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAABkCAIAAADVI9l0AAAC/0lEQVR4nO3Vr0vjcRzH8XFF1gw2WRUMFrGvjWFbtdhk2PYnmASTsCSsr1hNwpIwVu1iG9aB/a5+7iP34b7cheNej0f9vD8/vt/y7H3/l2w2m97PttttOTCdTsvV8XhcnbC3t9f7tYuLi07vmc/n5fbBYNCev7m5adz+1f39fbl9tVpVA7vdrtODK+fn5+VpV1dX5erHx0d13Xq97nT+0dFRuf3u7q5cfXl5aX/+YrHodN1kMmmctr+/X80Ph8NyYDablatvb2/VCa+vr53eU7m+vi5PG41G1UC/3y8HlstlubpcLsvVfr9fbR+NRo3PPzw8rObPzs4a8ycnJ+3Pmc1m5fxwOGzPX15elvOTyaQ9X1ksFuX2g4ODTtu/Oj4+Lg+8vb0tV9frdePn9Hq9h4eHcv7p6ak9//j42HjMbrer5lerVWP+/f29fV3l9PS0OmEwGJQD8/m8XH1+fq5O+Pz8/K3f+gvj8bg8bTqdlqvb7ba6brPZ/Ml1f923Tr8bAP4zQghANCEEIJoQAhBNCAGIJoQARBNCAKIJIQDRhBCAaEIIQDQhBCCaEAIQTQgBiCaEAEQTQgCiCSEA0YQQgGhCCEA0IQQgmhACEE0IAYgmhABEE0IAogkhANGEEIBoQghANCEEIJoQAhBNCAGIJoQARBNCAKIJIQDRhBCAaEIIQDQhBCCaEAIQTQgBiCaEAEQTQgCiCSEA0YQQgGhCCEA0IQQgmhACEE0IAYgmhABEE0IAogkhANGEEIBoQghANCEEIJoQAhBNCAGIJoQARBNCAKIJIQDRhBCAaEIIQDQhBCCaEAIQTQgBiCaEAEQTQgCiCSEA0YQQgGhCCEA0IQQgmhACEE0IAYgmhABEE0IAogkhANGEEIBoQghANCEEIJoQAhBNCAGIJoQARBNCAKIJIQDRhBCAaEIIQDQhBCCaEAIQTQgBiCaEAEQTQgCiCSEA0YQQgGhCCEA0IQQgmhACEE0IAYgmhABEE0IAogkhANGEEIBoQghANCEEINoP1gJ3cMlMpaoAAAAASUVORK5CYII=" style="width:300px;height:50px" /> 

但我怎麼能打印圖像?有沒有辦法在呈現報表時動態地將圖像編碼爲base64?

<img src="img/logo.png" /> 

其實我想要做的是在用mako創建的報告中打印條形碼。條形碼是使用url創建的控制器,所以我需要創建如下條形碼圖像:

<img src="/report/barcode/?type=EAN13&amp;value=5546903283256&amp;width=600&amp;height=100" style="width:300px;height:50px"/> 

我該如何實現這一目標?

更新:我也試過這種

<img src="/report/barcode/?type=EAN13&value=5546903283256&width=600&height=100" style="width:300px;height:50px"/> 

如果我嘗試這兩個最後的選項,然後我得到這個錯誤:

ERROR dnname openerp.service.report: Exception: ('Webkit error', "The command 'wkhtmltopdf' failed with error code = 1. Message: The following diagnosis message was provided:\nExit with code 1 due to network error: ContentNotFoundError\n") 
Traceback (most recent call last): 
    File "/opt/odoo/odoo_pan/src/openerp/service/report.py", line 93, in go 
    result, format = openerp.report.render_report(cr, uid, ids, object, datas, context) 
    File "/opt/odoo/odoo_pan/src/openerp/report/__init__.py", line 40, in render_report 
    return registry['ir.actions.report.xml'].render_report(cr, uid, ids, name, data, context) 
    File "/opt/odoo/odoo_pan/src/openerp/api.py", line 268, in wrapper 
    return old_api(self, *args, **kwargs) 
    File "/opt/odoo/odoo_pan/src/addons/base/ir/ir_actions.py", line 156, in render_report 
    return new_report.create(cr, uid, res_ids, data, context) 
    File "/opt/odoo/odoo_pan/src/addons/report_webkit/webkit_report.py", line 377, in create 
    result = self.create_source_pdf(cursor, uid, ids, data, report_xml, context) 
    File "/opt/odoo/odoo_pan/src/openerp/report/report_sxw.py", line 462, in create_source_pdf 
    return self.create_single_pdf(cr, uid, ids, data, report_xml, context) 
    File "/opt/odoo/odoo_pan/src/addons/report_webkit/webkit_report.py", line 358, in create_single_pdf 
    pdf = self.generate_pdf(bin, report_xml, head, foot, htmls) 
    File "/opt/odoo/odoo_pan/src/addons/report_webkit/webkit_report.py", line 220, in generate_pdf 
    _("The command 'wkhtmltopdf' failed with error code = %s. Message: %s") % (status, error_message)) 
except_orm: ('Webkit error', "The command 'wkhtmltopdf' failed with error code = 1. Message: The following diagnosis message was provided:\nExit with code 1 due to network error: ContentNotFoundError\n") 
+0

哪裏控制器相對定位您希望將圖像放入文檔中? – zodo

+0

如果我直接在瀏覽器中加載地址,圖像被加載,則url地址是正確的。我從根加載'/',所以有一個絕對地址 – ChesuCR

+0

我更新了答案,錯誤@zodo – ChesuCR

回答

0

最後,我創建了一個新的計算領域,以獲得以base64編碼

class StockMove(models.Model): 
    _inherit = "stock.move" 

    barcode_image = fields.Text(
     string='Barcode image', 
     compute='_compute_barcode_image', 
    ) 

    @api.one 
    @api.depends('product_id') 
    def _compute_barcode_image(self): 
     if self.product_id.product_tmpl_id.ean13: 
      try: 
       barcode = self.env['report'].barcode(
        'EAN13', 
        self.product_id.product_tmpl_id.ean13, 
        width=300, 
        height=50, 
        humanreadable=0 
       ) 
      except (ValueError, AttributeError): 
       raise Warning(_('Cannot convert into barcode.')) 
      barcode_base64 = base64.b64encode(barcode) 
      self.barcode_image = 'data:image/png;base64,' + barcode_base64 
     else: 
      self.barcode_image = None 

而且我將此添加到灰鯖報告:

%if line.product_id and line.product_id.ean13: 
    <span> 
     <img src="${line.barcode_image}" 
      style="width:300px; height:50px" /> 
    </span> 
%endif 
0

這可能只是一個格式錯誤。嘗試更改「& amp;」爲 '& ':

<img src="/report/barcode/?type=EAN13&value=5546903283256&width=600&height=100" style="width:300px;height:50px;"/> 

多個GET參數由' &' 分離。

順便說一句:你爲​​什麼不使用的參數,以獲得圖像的大小合適,而不需要事後造型吧:

<img src="/report/barcode/?type=EAN13&value=5546903283256&width=300&height=50" /> 
+0

當然,我已經試過了。我已經嘗試了很多東西,但他們沒有工作;)謝謝 – ChesuCR

相關問題