Generate Barcode với gem barby
Bài đăng này đã không được cập nhật trong 6 năm

1. Giới thiệu gem barby :
Barbylà 1 gem giúp chúng ta generate barcode với những kiểu (symbology) khác nhau và, cung cấp những phương thức export (outputter) để export barcode được generate ra những định dạng khác nhau.- Gem
barbyđược chia thành 2 component chính làBarby::BarcodevàBarby::Outputter. Barby::Barcodechịu trách nhiệm xử lý logic, convert chuỗi kí tự thànhbars and spaces, các class đại diện cho các kiểu barcode (symbology) khác nhau đều kế thừa từ classBarby::Barcode.Barby::Outputterchịu trách nhiệm export barcode được sinh ra nhờBarby::Barcodethành các kiểu định dạng khác nhau, các class đại diện cho các định dạng khác nhau đều kế thừa từ classBarby::Outputter.
2. Cài đặt và sử dụng:
a. Cài đặt gem barby:
- Để sử dụng gem
barbytrong project, ta thêm gembarbyvào Gemfile và chạybundle install.
gem "barby"
- Sau khi cài đặt thành công gem
barby, ta có thể sử dụng hầu hết cácsymbologykế thừa từBarby::Barcodevàoutputterkế thừa từBarby::Outputter. - Tuy nhiên có 1 số
symbologyvàoutputterđể sử dụng được thì ta phải cái đặt thêm 1 số dependencies khác. - Ví dụ để sử dụng
symbologycủa QR Code (classBarby::QrCodekế thừa classBarby::Barcode) ta phải cài đặt thêm gemrqrcode, hay để sử dụngoutputtercủa PNG (classBarby::PngOutputterkế thừa classBarby::Outputter) ta phải cài đặt thêm gemchunky_png - Trong ví dụ lần này, mình sẽ sử dụng 1 số
symbologysau:Barby::Code25,Barby::Ean13vàBarby::Ean8cùng vớioutputterlàBarby::PngOutputter.
b. Sử dụng các loại symbology khác nhau:
- Để tạo các loại
symbologykhác nhau, ta cần include filebarbyvà file thự viện tương ứng vớisymbologymuốn tạo. - Ví dụ để tạo barcode với
symbologylàBarby::Code25ta có thể thực hiện như sau:
require "barby"
require "barby/barcode/code_25"
barby = Barby::Code25.new "123456"
barby = Barby::Code25.new "abcdef"
barby = Barby::Code25.new "123abc"
barby = Barby::Code25.new "123abc"
barby = Barby::Code25.new ""
barby = Barby::Code25.new nil
- Tất cả các phép khởi tạo trên đều hợp lệ.
- Để tạo barcode với
symbologylàBarby::Ean13, ta có thể thực hiện như sau:
require "barby"
require "barby/barcode/ean_13"
barby = Barby::EAN13.new "012345678912"
barby = Barby::EAN13.new "0123456789123"
barby = Barby::EAN13.new "01234567891a"
- Chỉ có phép khởi tạo thứ nhất là hợp lệ, các phép khởi tạo còn lại đều không hợp lệ.
ArgumentError: data not valid
- Nguyên nhân là
Barby::EAN13chỉ nhận data hợp lệ là 1 chuỗi 12 kí tự là số, bạn có thể thm khảo tại đây. - Tương tự
Barby::EAN8chỉ nhận data hợp lệ là là 1 chuỗi 7 kí tự là số, bạn có thể thm khảo tại đây. - Các bạn cần chú ý điều này khi khởi tạo các loại
symbologykhác nhau.
c. Sử dụng các loại outputter khác nhau:
- Tương tự như
symbology, để tạo các loạioutputterkhác nhau, ta cần include filebarbyvà file thự viện tương ứng vớioutputtermuốn tạo. - Ví dụ để tạo
outputterlàBarby::PngOutputterta có thể thực hiện như sau:
require "barby"
require "barby/outputter/png_outputter"
barby_outputter = Barby::PngOutputter.new barby
blob = barby_outputter.to_png
- Hàm
to_pngsẽ trả về 1 chuỗiblobchứa barcode đã được generate , ta có thể ghi chuỗiblobnày ra file và lưu lại như sau:
File.open("barcode.png", "wb") do |f|
f.write blob
end
- Hàm
to_pngcó thể nhận thêm các tham sốx_dim,margin,height. - Với các loại
outputterkhác thìto_pngcó thể được thay thề bằng các hàm khác nhưto_ascii,to_html, ....
3. Tài liệu và source code tham khảo:
All rights reserved
