Top > OOobbs2 > 81
** [[OOobbs2/81]] [#vb5c9dbb]
-''サマリ'': 郵便のカスタマーバーコードを OOo で
-''環境'': General
-''状態'': 投稿
-''投稿者'': [[はにゃ?]]
-''投稿日'': 2007-10-31 (水) 18:58:06

*** 質問 [#ic98c4f6]
バーコードを利用するには OOoMacros にある OOoBarcode (GNU Barcode を利用する) 方法があるが、日本の郵便のカスタマーバーコードには利用できない。英国で利用されているものと同じ(?)らしいが、住所からバーコードデータを取得する必要があるので日本語が処理できないと使えない。

#contents
**フォント [#ba1497fc]
カスタマーバーコード用フォントは商用は多数存在するらしい。フリーのものもある。しかし、どうやら文字コードと記号の割り当てが決まっていないため適合しないと使えないことになる。

そのため、新しく作成する。調べてみると、あるプリンターの文字コードと記号の表があったのでこれと同じ配置にする (別のものとも一致しているので)。

フォントの作成は FontForge

-10pt で印刷したときに丁度よいサイズになるように ~
フォント深さ+フォント高さ

&ref(font-1.png,nolink);

文字コードと配置

&ref(font-2.png,nolink);

Dec, HEX: ascii コード, CHR: 一般的なフォントでの文字, CB: CB での記号, CBC: CB での値, CN: check digit 計算時の値

&ref(nycbf_code.ods,nolink);

10 pt に設定したときのサイズ

&ref(font-3.png,nolink);
**サービス [#f7838fac]
郵便番号と住所からカスタマーバーコード (以下 CB) を生成するサービスを作成。

-サービス名
--mytools.Nycb
-インターフェース
--mytools.XConvert

--XConvert インターフェースのメソッド
---string ''convert''( [in] string aPostalCode, [in] string aAddress )~
文字列で 郵便番号 aPostalCode、住所 aAddress を与えると上記フォントのコードに対応した CB 文字列を戻す。

***使い方 [#t89547b5]
サービスを利用した変換

OOo Basic で書くと
 sPostalCode = "123-4567"
 sAddress = "3丁目30-8 郵便ビル403号"
 oNycb = CreateUnoService("mytools.Nycb")
 sCBCode = oNycb.convert( sPostalCode, sAddress )
郵便番号にハイフンが含まれていても、いなくてもどちらでもよい。住所は県名などが含まれていても問題ない。住所のみから生成はできません。

複数のものを変換するときには一度インスタンス化したサービスを何度も利用できます。
 For i = 0 To 10
   sCode = oNycb.convert( ....
 Next i
下記のテスト用ファイルに上記を利用した OOo Basic のマクロが含まれています。
**Calc 関数 [#rfa884f7]
Calc 上で利用できる (実際はどこでも利用できる) 関数を作成。変換は上記サービスと同じでよいので、クラスを Calc AddIn として利用できるようなものを別に作成。

-サービス名
--mytools.sheet.addin.NycbAddInFn
-インターフェース
--mytools.sheet.addin.XNycbAddInFn
--メソッド (関数)
---string nycb( [in] string aPostalCode, [in] string aAddress )

***使い方 [#ze2aca88]
セルに普通の関数と同様に入力します。
 =NYCB(A1;B1)
一つ目の引数: 郵便番号を文字列で、二つ目の引数: 住所を文字列で指定します。もちろんセルを参照できます。
関数の結果は同じセルに (26300233-30-8-403DDD5) などのように表示されるので、上記フォント (nycbf) をセルに設定してやるとコードが表示されます。
**ファイル [#f2c15c95]

※ライセンス: ライセンス事項はありませんが、保障もありません。読み取れないコードが生成されたり、PC などに悪影響があったとしても責任を取る人はいません。

-フォント
--このフォントを利用して正しく読み取れるコードが印刷できるかどうか未確認です。
--&ref(nycbf.zip);

-サービス拡張機能ファイル
--&ref(nycb.oxt);

-AddIn 関数
--&ref(NycbAddInFn.oxt);


-テスト用ファイル (サービス、AddIn 関数共用)
--&ref(nycb_test.ods);
**インストール [#w13f73f2]

***フォント [#d7c33d3f]
nycbf.zip ファイルを解凍し、nycbf.ttf を環境に応じてインストール。同梱の nycbf.sfd ファイルは FontForge 用のファイルで、フォントを変更したい方以外は不要です。

フォント名は nycbf です。指定するときは前述をフォント名として設定してください。また、10 pt に設定したとき許容範囲内に収まるように作成されています。ですが、環境に応じて微調整が必要なこともあります。
***サービス [#j92b39e6]
※OOo 2.x 以降に Py-UNO がインストールされていないと動作しません。

nycb.oxt ファイルを OOo のツール - 拡張機能マネージャからインストールしてください。インストール後は OOo を再起動する必要があります。
***AddIn 関数 [#c3ac7ebc]
※OOo 2.x Py-UNO がインストールされていないと動作しません。

NycbAddInFn.oxt ファイルを OOo のツール - 拡張機能マネージャからインストールしてください。インストール後は OOo を再起動する必要があります。

***テスト用ファイル [#hd808d0e]
上記フォント、サービス、AddIn 関数が正しく配置、インストールできておれば以下のように表示されます。OOo で書かれたマクロが含まれています。実行するとセル範囲の郵便番号と住所から列CとD にコードを書き込みます。

&ref(test.png,,60%);
***アンインストール [#h2852cc1]
フォントは環境に応じて削除してください。

サービスおよび AddIn 関数はツール - 拡張機能マネージャから削除してください。正しく動作させるために OOo を一度再起動させるほうが無難です。
*** 回答 [#t7653832]

#comment


*** 感想,コメント,メモ [#x09199ba]

#comment

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes