3

私は現在、ラッパーgemhas_barcodeでBarbygemを使用して、私が持っている文字列のバーコードを生成しています:j5xvvcz。

Gemfile gems(主にこのソリューションに不慣れな人向け)

#for barcode generation
gem "barby", "~> 0.5.0"
gem "has_barcode", "~> 0.2.0"
gem "rqrcode", "~> 0.4.2" #for qr code support

モデルにあるコード

include HasBarcode

has_barcode :barcode,
            :outputter => :svg,
            :type => :code_93,
            :value => Proc.new { |p| "#{p.number}" }

画面にレンダリングする場所:

qr_codeまたはcode_93を生成しようとすると、すべて機能しますが、code_128またはcode_39も機能せず、データが無効なメッセージが表示されます。私の心配は、code_93がそれほど広く採用されていないように見えるため、一部のデバイスで認識されないことです(ここで読んだものから、 128がこれに最適なソリューションです)

ここでテストしたように、コードはcode_128に対して有効であるため、これは私が間違っている可能性があることのようです。

誰かが私のアプローチの何が悪いのか知っていますか?

4

1 に答える 1

1

どうやらcode_128のモード「A」はBarbyのスモールキャップには適していません。

そのため、モードBを機能させる必要がありました。

現在公開されているhas_barcodeのgemバージョンはモード「A」を強制するため、githubに提案を追加しながら、小さな「ホームパッチ」を追加しました。

これが私の最終的なhas_barcode.rbファイルです:

require "rubygems"
require "i18n"
require "active_support"
require "active_support/hash_with_indifferent_access.rb"
require "active_support/inflector.rb"
require "barby"

require "has_barcode/configuration"

module HasBarcode
  def self.included(base)
    base.send(:extend, ClassMethods)
  end

  module ClassMethods
    def has_barcode(*args)
      options = args.extract_options!
      @@barcode_configurations ||= {}
      @@barcode_configurations[args.first] = HasBarcode::Configuration.new(options)

      define_method args.first do
        if options[:type] == :code_128
          @@barcode_configurations[args.first].barcode_class.new(options[:value].call(self), options[:code128])
        else
          @@barcode_configurations[args.first].barcode_class.new(options[:value].call(self))
        end
      end

      define_method "#{args.first}_data" do |opts|
        if opts
          send(args.first).send("to_#{options[:outputter]}", opts)
        else
          send(args.first).send("to_#{options[:outputter]}")
        end
      end

    end

    def barcode_configurations
      @@barcode_configurations
    end
  end

end

私のモデル:

has_barcode :barcode,
              outputter: :svg,
              type: :code_128,
              code128: 'B',
              value: Proc.new { |p| "#{p.number}" }

と私の見解:

<%= my_model.barcode_data(xdim:2, height:60).html_safe %>

現在の日付(2012-12-05)では、現在のgemは、xdimやheightなどの出力引数を渡すことができる最新の変更で更新されていないことに注意してください。

この回答は、最新のコード更新(問題関連)と私自身の提案に基づいており、ここで見つけることができます

このソリューションはhas_barcodegemに組み込まれていませんが、Barbyを直接使用します。

私のモデルに追加:

def get_barcode(number)
     require 'barby'
     require 'barby/barcode/qr_code'
     require 'barby/outputter/svg_outputter'

     barcode = Barby::Code128B.new("#{number}")

     barcode.to_svg(xdim:2, height:60)
  end

ビューで:

<%= my_model.get_barcode(my_model.number).html_safe %>
于 2012-12-05T16:04:52.990 に答える