【问题标题】:Barby failing to generate some QR Codes - nil.rszf芭比无法生成一些二维码 - nil.rszf
【发布时间】:2010-09-26 11:16:09
【问题描述】:

在 irb 中

数据 = "2 1058 657682" 条形码 = Barby::QrCode.new(data) File.open('barcode.png', 'w+') {|f| f.writebarcode.to_png(:height => 100, :margin => 25, :xdim => 100) }

产生错误:

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'
...

而如果我将数据更改为“2 1058 657681”(将最后的“2”替换为“1”),它工作正常。

宝石:

巴比 0.4.0 png 1.1.0 (1.2.0 不断收到 String::CompilationError)

【问题讨论】:

    标签: ruby-on-rails ruby qr-code


    【解决方案1】:

    在barby-/vendor/rqrcode/lib/rqrcode/qrcode/qr_code.rb的第295行,更改

    if byte_index &lt; data.size
    

    进入

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

    玩得开心!

    【讨论】:

      【解决方案2】:

      尝试使用 Barby 0.4.2 也失败了。问题出在 RQRCode 库中,该库仍在 0.3.2 版中。

      您可以尝试传递一个 :size 参数来覆盖动态计算的参数,但它最终会在不同的字符串上失败。

      我发现绕过该问题的唯一方法是尝试一个级别,如果失败则尝试另一个级别。

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

      在一个级别中生成的错误在另一个级别中没有发生.. 奇怪但有效。

      【讨论】:

      • 谢谢!会试一试并尽快报告
      【解决方案3】:

      干杯!看起来像 rqrcode 和反过来 Barby 已经更新以修复这个错误。 toretore/barby

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多