Generate Barcode với gem barby
Bài đăng này đã không được cập nhật trong 5 năm
1. Giới thiệu gem barby :
Barby
là 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::Barcode
vàBarby::Outputter
. Barby::Barcode
chị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::Outputter
chịu trách nhiệm export barcode được sinh ra nhờBarby::Barcode
thà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
barby
trong project, ta thêm gembarby
và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ácsymbology
kế thừa từBarby::Barcode
vàoutputter
kế thừa từBarby::Outputter
. - Tuy nhiên có 1 số
symbology
vàoutputter
để sử dụng được thì ta phải cái đặt thêm 1 số dependencies khác. - Ví dụ để sử dụng
symbology
của QR Code (classBarby::QrCode
kế thừa classBarby::Barcode
) ta phải cài đặt thêm gemrqrcode
, hay để sử dụngoutputter
của PNG (classBarby::PngOutputter
kế 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ố
symbology
sau:Barby::Code25
,Barby::Ean13
vàBarby::Ean8
cùng vớioutputter
làBarby::PngOutputter
.
b. Sử dụng các loại symbology khác nhau:
- Để tạo các loại
symbology
khác nhau, ta cần include filebarby
và file thự viện tương ứng vớisymbology
muốn tạo. - Ví dụ để tạo barcode với
symbology
làBarby::Code25
ta 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
symbology
là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::EAN13
chỉ 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::EAN8
chỉ 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
symbology
khác nhau.
c. Sử dụng các loại outputter khác nhau:
- Tương tự như
symbology
, để tạo các loạioutputter
khác nhau, ta cần include filebarby
và file thự viện tương ứng vớioutputter
muốn tạo. - Ví dụ để tạo
outputter
làBarby::PngOutputter
ta 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_png
sẽ trả về 1 chuỗiblob
chứa barcode đã được generate , ta có thể ghi chuỗiblob
này ra file và lưu lại như sau:
File.open("barcode.png", "wb") do |f|
f.write blob
end
- Hàm
to_png
có thể nhận thêm các tham sốx_dim
,margin
,height
. - Với các loại
outputter
khác thìto_png
có 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