Generate barcode trong ruby on rails

Giới thiệu

Trong ruby việc tạo ra một Mã số 128(barcode) trong một ứng dụng Ruby/Rails trước đây thật không đơn giản. Hầu hết kết quả tìm kiếm để về việc tạo ra barcode trên google hầu hết trả về gem barby, hay gem Gbarcode ... Nhưng những gem trên lại không thể tạo ra được mã số 128 như mong muốn.

Đã có giải pháp về để việc tạo ra Mã số 128 trong ruby đó là JRuby. JRuby cho phép chúng ta tận dụng thư viện Java và sử dụng trong ứng dụng Ruby. Barcode4J là một thư viện phổ biến trong java để tạo ra mã vạch.

Nhưng việc tích hợp thư viện java vào sử dụng trong ứng dụng rails không được thân thiện cho lắm. Với lại cấu trúc của Barcode4j khi được đưa vào trong rails là như sau.

   barcode4j_rails
   - app
   ...
   - lib
     - barcode4j
     - barcode4j.jar
     ...

Trong một ứng dụng rails lại sử dụng thư viện barcode4j.jar của java việc này chỉ được sử dụng khi không có một thư viện nào của rails có thể tạo ra được Mã số 128(barcode) thôi.

Và tất nhiên là trong rails cũng 1 gem giúp cho việc tạo ra một barcode hay cụ thể là mã số 128 một cách rất dễ dàng. Và gem đó là gem "barcodes". Một gem rất mạnh trong việc tạo ra mã vạch trong ứng dụng rails. Bây giờ chúng ta cùng bắt đầu tạo ra mã vạch trong rails sử dụng gem "barcodes".

Để cài gem thành công trước hết máy tính của bạn phải được cài.

ImageImagick (6.4.9 or later)
sudo apt-get install imagemagick

RMagick
sudo apt-get install libmagickwand-dev

Tiếp theo chúng ta cài gem "barcodes" vào dự dán của mình. Khi cài gem thành công bạn có thể bắt đầu tạo ra mã barcode của mình.

Trong project demo tôi tạo ra một controller với tên là BarcodesController và xử lý phần tạo ra mã vạch barcode trong đó

class BarcodesController < ApplicationController
  def index
    str = "1234342342"
    barcode = Barcodes.create("Code128",
    data: str, bar_width: 44, bar_height: 900)
    image_render = Barcodes::Renderer::Image.new(barcode)
    image_file = "app/assets/images/#{str}.png"
    image_render.render(image_file)
    @image = Base64.encode64(open(image_file).read)
  end
end

đoạn mã để tạo ra barcode(Code128) là str="1234342342"

Để tạo barcode định dạng ảnh trước hết bạn tạo một đối tượng Barcodes với mã Code128 data truyền vào là str, với đầy đủ kích thước của ảnh với chiều rộng và chiều dài tùy ý bạn.

barcode = Barcodes.create("Code128",
data: str, bar_width: 44, bar_height: 900)

Tiếp theo chuyển Barcode vừa tạo ra sang định dạng ảnh. Trong gem này mặc định là png

image_render = Barcodes::Renderer::Image.new(barcode)

Cuối cùng là render ảnh vào thư mục bạn muốn đặt ảnh

image_render.render(image_file)

Việc cuối cùng của bạn là lấy ra rồi dùng tùy vào mục đích của dự án.

Và đây là kết quả với str = "1234342342"

barcode.png

Tài liệu tham khảo

https://github.com/infinitetoken/barcodes https://www.sitepoint.com/generate-barcodes-with-jruby-and-barcodes4j/

Source code

https://github.com/duynq/barcode


All Rights Reserved