thinreports icon indicating copy to clipboard operation
thinreports copied to clipboard

Barcode

Open hidakatsuya opened this issue 9 years ago • 1 comments


これは v1.0 における 機能の実装コンセプト であり、この内容を基にユーザからのフィードバックを得てよりよい仕様を議論し、 導き出すことが目的。コメント欄での議論により、内容は適宜更新される。また、技術的な制約など、実際の機能が必ずしもコンセプト通りになるとは限らない。


モチベーション

仮説

  • バーコードを印字したいという要望が多い
  • その中でも JAN (EAN) とカスタマーバーコードのニーズが高い

現状

  • Thinreports 自体にバーコードを描画する機能はない
  • barby などのライブラリを使ってバーコード画像を作成し、イメージブロックで埋め込むことは可能

問題点

  • バーコード画像の生成方法にもよるが、遅い・メモリ消費大のため大量ページ印刷には向かない
  • Ruby のバーコードライブラリで良さそうなものがない
  • カスタマーバーコードに対応しているバーコードライブラリがない

機能

概要

  • バーコード機能のネイティブサポート
  • 受け取った値からバーコードを描画する

1.0 時点で対応するバーコード

  • JAN-13(EAN)
    • 追加シンボル(アドオンコード)には対応しない
  • JAN-8
  • カスタマーバーコード
    • 縦(上から下)は対応しない

流れ

1. レイアウト

editor-1

editor-3

2. コード

report = Thinreports::Report.new layout: 'barcode-sample'
report.start_new_page do |page|
  page.item(:jan_13).value = '4912345678904'
  page.item(:jan_8).value = '49123494'
  # e.g. 東京都台東区台東5-6-3 ABCビル10F
  page.item(:customer).value = 'STC11000165-6-3-10CC4CC4CC4CC4CC49SPC'
end

機能詳細

バーコードオブジェクトのプロパティ

説明 初期値 動的に変更
左位置・上位置 左・上の座標 x
バーコードの幅。規格外の幅も指定できる。 x
高さ バーコードの高さ。規格外の高さも指定できる。 x
表示 初期の可視状態 o
ID オブジェクトの ID。必須 barcode x
説明 オブジェクトの説明。レイアウト定義ファイルに表示される。 x

Generator での操作

  • テキストブロックと同様に、 ID を指定して値をセットする:
page.item(:jan_8).value = '12345678'
  • 値がセットされなかったバーコードは表示されない
  • プロパティやスタイルの操作も、他のオブジェクトと同様
page.item(:jan_8).hide
page.item(:jan_8).show
page.item(:jan_8).visible(true)

オブジェクトスキーマ

{
  "id": "",
  "type": "barcode",
  "format": "jan-13" or "jan-8" or "customer",
  "x": 0.0,
  "y": 0.0,
  "width": 0.0,
  "height": 0.0,
  "description": "Description for shape",
  "style": {
    "display": true
  }
}

参考資料

hidakatsuya avatar Aug 03 '15 07:08 hidakatsuya

バーコードオブジェクトの描画方法とカスタマーバーコードのコードを追記しました。

maeda-m avatar Aug 06 '15 05:08 maeda-m