开发者

Barby failing to generate some QR Codes - nil.rszf

开发者 https://www.devze.com 2023-01-17 10:25 出处:网络
In irb data = \"2 1058 657682\" barcode = Barby::QrCode.new(dat开发者_C百科a) File.open(\'barcode.png\', \'w+\')

In irb

data = "2 1058 657682" barcode = Barby::QrCode.new(dat开发者_C百科a) File.open('barcode.png', 'w+') {|f| f.write barcode.to_png(:height => 100, :margin => 25, :xdim => 100) }

Generates error:

ActionView::TemplateError (/Library/Ruby/Gems/1.8/gems/barby-    0.4.0/vendor/rqrcode/lib/rqrcode/qrcode/qr_code.rb:296:in `map_data': You have a nil     object when you didn't expect it!
The error occurred while evaluating nil.rszf) on line <a href="/toretore/barby/issues/#issue/1" class="internal">#1</a> of app/views/profile/ticket.rpdf:
1: pdf.font_families["Helvetica"] =
2: {
3:   "b"   => "Helvetica-Bold",
4:   "i"   => "Helvetica-Oblique"    
lib/pdf_render.rb:46:in `pdf'
barby (0.4.0) vendor/rqrcode/lib/rqrcode/qrcode/qr_code.rb:291:in `each'
barby (0.4.0) vendor/rqrcode/lib/rqrcode/qrcode/qr_code.rb:291:in `map_data'
barby (0.4.0) vendor/rqrcode/lib/rqrcode/qrcode/qr_code.rb:287:in `step'
barby (0.4.0) vendor/rqrcode/lib/rqrcode/qrcode/qr_code.rb:287:in `map_data'
barby (0.4.0) vendor/rqrcode/lib/rqrcode/qrcode/qr_code.rb:172:in `make_impl'
barby (0.4.0) vendor/rqrcode/lib/rqrcode/qrcode/qr_code.rb:196:in `get_best_mask_pattern'
barby (0.4.0) vendor/rqrcode/lib/rqrcode/qrcode/qr_code.rb:195:in `each'
barby (0.4.0) vendor/rqrcode/lib/rqrcode/qrcode/qr_code.rb:195:in `get_best_mask_pattern'
barby (0.4.0) vendor/rqrcode/lib/rqrcode/qrcode/qr_code.rb:145:in `make'
barby (0.4.0) vendor/rqrcode/lib/rqrcode/qrcode/qr_code.rb:85:in `initialize'
barby (0.4.0) lib/barby/barcode/qr_code.rb:94:in `new'
barby (0.4.0) lib/barby/barcode/qr_code.rb:94:in `rqrcode'
barby (0.4.0) lib/barby/barcode/qr_code.rb:55:in `encoding'
barby (0.4.0) lib/barby/outputter.rb:86:in `encoding'
barby (0.4.0) lib/barby/outputter/png_outputter.rb:67:in `height'
barby (0.4.0) lib/barby/outputter.rb:116:in `send'
barby (0.4.0) lib/barby/outputter.rb:116:in `with_options'
barby (0.4.0) lib/barby/outputter.rb:114:in `each'
barby (0.4.0) lib/barby/outputter.rb:114:in `inject'
barby (0.4.0) lib/barby/outputter.rb:114:in `with_options'
barby (0.4.0) lib/barby/outputter/png_outputter.rb:18:in `to_canvas'
barby (0.4.0) lib/barby/outputter/png_outputter.rb:58:in `to_png'
barby (0.4.0) lib/barby/barcode.rb:70:in `send'
barby (0.4.0) lib/barby/barcode.rb:70:in `method_missing'
(eval):107:in `pdf'
(eval):88:in `each'
(eval):88:in `pdf'
lib/pdf_render.rb:18:in `eval'
lib/pdf_render.rb:46:in `pdf'
lib/pdf_render.rb:18:in `render'
...

Whereas if I change data to "2 1058 657681" (replace the final '2' for a '1') it works fine.

Gems:

barby 0.4.0 png 1.1.0 (1.2.0 kept getting String::CompilationError)


In line 295 of barby-<version>/vendor/rqrcode/lib/rqrcode/qrcode/qr_code.rb, change

if byte_index &lt; data.size

into

if byte_index &lt; data.size &amp;&amp; ! data[byte_index].nil?

Have fun!


Tried with Barby 0.4.2 and it fails as well. The problem is in the RQRCode library which is still in version 0.3.2.

You can try and pass a :size parameter to override the dinamically calculated one but it will eventually fail on a different string.

The only way I found to bypass the problem was to try in one level and try another if it fails.

begin
  student_barcode = Barby::QrCode.new(content, :level => :q)
rescue NoMethodError
  student_barcode = Barby::QrCode.new(content, :level => :m)
end

An error generated in one level did not occur in another.. wierd but works.


Cheers! Looks like rqrcode and in turn Barby have been updated to fix this bug. toretore/barby

0

精彩评论

暂无评论...
验证码 换一张
取 消