Bỏ qua để đến Nội dung
Menu
Câu hỏi này đã bị gắn cờ
4 Trả lời
11809 Lượt xem

I want output a Code128 barcode without margins on a odoo8 qweb report.

Barcodes generated with http://127.0.0.1:8069/report/barcode/?type=Code128&value=10123&width=600&height=100

have a oversized white left and right marigin, together ca. 40% of the image.

 

 

Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

/report/barcode/?type=%s&value=%s&quiet=0' % ('Code128', 'text')

Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

I presume this is the default report you're using?
You could always write your own report or modify the existing one.

Code for default barcode:

<img t-att-src="'/report/barcode/QR/%s' % 'My text in qr code'"/>

Code for custom barcode:

<img t-att-src="'/report/barcode/? type=%s&value=%s&width=%s&height=%s'%('QR', 'text', 200, 200)"/>

With the custom version you can set extra parameters which sounds exactly like what you need. 
You can find more details about Odoo barcodes and reports here: https://github.com/odoo/odoodays-2014/blob/master/v8_reporting_engine/index.rst

Note: I haven't tested the white borders myself, but I'm pretty sure this'll help you a good way along.

Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

You can do it by adding the following code to your py and xml

In report.py

from reportlab.graphics.barcode import createBarcodeDrawing

    def barcode(self, type, value, width=400, height=100, humanreadable=0):
        width, height, humanreadable = int(width), int(height), bool(humanreadable)
        barcode_obj = createBarcodeDrawing(type, value=value, format='png', width=width, height=height,humanReadable = humanreadable,quiet=False)
        return base64.encodestring(barcode_obj.asString('png'))

In XML

<img  t-att-src="'data:image/png;base64,%s' % barcode('Code128',o.name)"/>

Note:

Check whether you have installed report lab


Regards,

Leelapriskila

Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

This is quite old but I have found a different solution.

Odoo uses a library to generate code128 images, and this library has an option to avoid this big white margins to the left and right of barcode. You are right, it uses about 30-40% of all space and when there is no much space, it's a problem.

The option is called "quiet" and by default it's values is "1". You can set it as "0" but not in Odoo, because it's not prepared to pass such parameter to librery.

 The only way I see is to edit code128.py file of library. You can find it in reportlab/graphics/barcode.

Or to inherit and modify the way Odoo calls this library.


Of course Herbert, If you found a different solution, I will appreciate to know about it.

Regards.

Ảnh đại diện
Huỷ bỏ

/report/barcode/?type=%s&amp;value=%s&amp;quiet=0' % ('Code128', o.delivery_reference_id)

Bài viết liên quan Trả lời Lượt xem Hoạt động
2
thg 7 19
6734
1
thg 9 18
7720
1
thg 5 16
6786
1
thg 3 16
4512
1
thg 4 25
1227