web-dev-qa-db-ja.com

ZPLバーコードを中央に配置する方法(コード128)

バーコードコード128を中央に配置する方法を知りたいのですが、画像上で、今は左揃えになっていることがわかります。 Label

私のzpl:

^XA
^LH10,10
^FO0,0^XGE:SWESE001.GRF^FS
^FO440,0^XGE:SWESE000.GRF^FS
^FO0,70^FB550,50,0,C,0^AQN,25,30^FDSpraynozzle 50mm^FS
^FO0,130^BY2^BCN,30,Y,Y,N,N^FDS/N:941001-0114-0001^FS
^FO180,170^AQN,23,20^FDwww.swepro.com^FS
^XZ
11
darkdog

誰かがそれを探している場合に備えて、私は自分の解決策を投稿しています。 E_Sが言及しているように、バーコードをラベルの中央に配置するには、次の手順に従ってコードでバーコードを計算する必要があります。

  • 狭いバー幅を確認してください。あなたの場合は2 _(^BY2)_
  • ラベルの全幅をドットで確認します。このためには、プリンタの解像度_(eg: 8 dots / mm)_を知る必要があります。したがって、_80 mm_ワイドラベルがある場合は、_80 * 8 = 640 dots_
  • 以下に指定するように、呼び出しコードとチェックディジットを含むバーコードの各文字を数えます。呼び出しコードの詳細については、以下を参照してください。 https://www.zebra.com/content/dam/zebra/manuals/en-us/software/zpl-zbi2-pm-en.pdf (ページ95 )
  • 呼び出しコード_(">:", ">5", etc.)_は1文字としてカウントされ、_mode C_の文字はペアで格納されることに注意してください。 _mode C_の詳細については、 http://en.wikipedia.org/wiki/Code_128 を参照してください。
  • バーコードが_>:S/N:941001-0114-0001_の場合、[開始コードB] + [20文字] + [チェックディジット] = 22をカウントする必要があります
  • バーコードが_>:S/N:>5941001>6->50114>6->50001_の場合、_[start code B] + [4 characters for 'S/N:'] + [mode C invocation] + [3 characters for '941001'] + [mode B invocation] + [1 characters for '-'] + [mode C invocation] + [2 characters for '0114'] + [mode B invocation] + [1 characters for '-'] + [mode C invocation] + [2 characters for '0001'] + [check digit] = 20_を数える必要があります
  • スペースとバーが混在する11ユニットを占めるのは、2つの追加ユニット(合計13)がある_stop code_を除くすべての文字です。
  • ここに良いものがあります...バーコードの幅は次のとおりです:_((chars counted [22 or 20] * 11) + (stop char * 13)) * narrow bar width = 510 dots or 466 dots_
  • これで、round((label width - barcode width) / 2)を実行し、それを使用して_^FT_でバーコードを配置するだけです。

それでおしまい!それが誰かを助けることを願っています!

19

コードを中央揃えにするZPLコマンドはありません。 ZPLを生成するプログラムは、コードのサイズと座標を使用した位置に基づいて位置を自動計算する必要があります。

3
Elton Saunders

この問題のもう1つの解決策は、Nicolas Garfinkielほどエレガントではありませんが、はるかに簡単です。次の解決策があります。

基本的に、Code 128の問題は、幅が可変であるということです。しかし、実際の状況では、私たちはとにかく固定幅として使用します。これには説明が必要です。コードをどこかに配置し、expect幅がいくつかより広くない場合、収まりませんand許可されているスペースを予約(空のまま)する必要があります埋める。したがって、幅が可変であっても、常にラベルの領域に割り当てる必要があります固定

したがって、センタリングの問題の解決策は、Code128を固定長にすることです。

これがサブセットC(数字のペア)の場合、次のものが必要です。

  1. 100000 ...の形式で十分な大きさの数値を取得すると、合計で偶数桁数になります。
  2. それにコードを追加します。

たとえば、コードが94100101140001の場合、10 ^ 16で追加すると、次のようになります。

10000000000000000
   94100101140001
=================
10094100101140001

したがって、コードは固定幅になり、ハードセンターにすることができます。

コードがサブセットCでなく、テキストが含まれている場合は、(擬似コードで)次のようにします。

my_code = "S/N:941001-0114-0001"
const_max_code_length = 24  (for example)
if my-code.length > const_max_code_length then error
padding_char = "="
result = ""
for (0..(const_max_code_length - my_code.length)) do
    result += padding_char
end_for
result += my_code

コードの場合、次のように生成されます。

====S/N:941001-0114-0001

そうすれば、どのテキストを入力しても、常に固定長になるため、一貫して配置されます。

この投稿を見つける前に、私はそれを自分で使用しました。それは大丈夫ではありません、それはハックです、そしてニコラス・ガーフィンキエルが提案したことはより正しいです。ただし、最も適切な解決策は、ZPL自体がコードのセンタリングをサポートする場合ですが、残念ながらサポートしていません。

0
Leonid Titov