料金代理収納用バーコード印字DLL マニュアル

GS1-128 の描画 DLL について
(ver. 2.0)
動作環境など
動作環境
WindowsXP、Windows Vista、Windows7、Windows8/8.1、Windows10
※ 上記 OS について、すべて日本語版を対象としております。
※ 32bit アプリケーションから呼び出される必要があります。
使用条件
プリンタの解像度 300dpi 以上
機能
・バーコードの基本幅を 1 ドット単位で指定できる
・プリンタの解像度を考慮した補正機能により黒セルが太る場合に対応
・43 桁の GS1-128 コードからチェックデジットの計算が出来る
・各種データ(メーカコード・会社コードなど)を指定することにより 44 桁の GS1-128 コードが
出来る
利用可能なメーカーコード
929023 企業負担
959879 顧客負担
929233 税
959881 料
959909 水道
929407 リアル
■ API 連携方式
外部 DLL の呼び出し宣言
外部 DLL の呼び出し宣言のサンプルコード(Microsoft Visual C# .NET の場合)
プログラムコードの先頭で
using System.Runtime.InteropServices;
が必要。
クラスの内部に以下のような外部 DLL の呼び出し宣言を加える。
//外部DLLの呼び出し(Ean128_API)
private sealed class Ean128_API
{
[DllImport("Ean128_API.dll", EntryPoint = "DrawEan128")]
public static extern int DrawEan128(IntPtr hDC, int bTani, int bPointX, int bPointY, int bHeight,
int bWidth, int bAdjust, string bEANCode);
[DllImport("Ean128_API.dll", EntryPoint = "MakeEanData")]
public static extern int MakeEanData(StringBuilder eanBuffer, string eanMakerCD,
string eanCompCD, string eanCode, string eanDueDate, int eanKingaku, int eanKijungaku);
[DllImport("Ean128_API.dll", EntryPoint = "CalCheckDigit")]
public static extern int CalCheckDigit(StringBuilder Buffer, string EanCode);
}
外部 DLL の呼び出し宣言のサンプルコード(Microsoft Visual Basic .NET の場合)
クラスの内部に以下のような外部 DLL の呼び出し宣言を加える。
'外部DLLの呼び出し(Ean128_API)
Private NotInheritable Class Ean128_API
Public
(ByVal hDC
bPointY As
bAdjust As
Declare Function DrawEan128 Lib "Ean128_API.dll" Alias "DrawEan128"
As IntPtr, ByVal bTani As Integer, ByVal bPointX As Integer, ByVal
Integer, ByVal bHeight As Integer, ByVal bWidth As Integer, ByVal
Integer, ByVal bEANCode As String) As Integer
Public Declare Function MakeEanData Lib "Ean128_API.dll" Alias "MakeEanData"
(ByVal eanBuffer As StringBuilder, ByVal eanMakerCD As String, ByVal eanCompCD As
String, ByVal eanCode As String, ByVal eanDueDate As String, ByVal eanKingaku As
Integer, ByVal eanKijungaku As Integer) As Integer
Public Declare Function CalCheckDigit Lib "Ean128_API.dll" Alias
"CalCheckDigit" (ByVal Buffer As StringBuilder, ByVal EanCode As String) As
Integer
End Class 'Ean128_API
DrawEan128
44 桁の GS1-128 コードを受け取って目視文字付きバーコードを表示
目視文字はデバイスコンテキストに選択されているフォントを使用
引数
HDC
バーコードを描画するデバイスコンテキストのハンドル
long
表示位置・高さ・基本モジュール幅の単位
0 :物理座標(ピクセル)
1 :1/1000 インチ
2 :1/100mm
long
バーコード表示左位置
long
バーコード表示上位置
long
バーコード表示高さ
long
バーコード基本モジュール幅
long
解像度によるモジュール幅の調整を行うか否か
0 :調整を行わない
1 :調整を行う
LPCSTR
GS1-128 コード
long
エラーコード
戻り値
0
:成功
8
:メモリ不足
87
:引数エラー
536870925:メーカコードエラー
536870924:試使用期限切れ
主要コードは以上ですが、ほかにもエラーコードあり
DrawEan128 利用のサンプルコード(Microsoft Visual C# .NET の場合)
private System.Drawing.Printing.PrintDocument printDocument1;
'印刷作業
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
StringBuilder bufCD = new StringBuilder();
int intErrCheck;
int w_Tani;
int w_PointX;
int w_PointY;
int w_Height;
int w_Width;
int w_Adjust;
IntPtr w_hdc;
string w_EanCD;
//サンプルプログラム画面より取得した情報を関数パラメータにセット
w_Tani = int.Parse(Tx_Tani.Text);
w_PointX = int.Parse(Tx_PointY.Text);
w_PointY = int.Parse(Tx_PointX.Text);
w_Height = int.Parse(Tx_Height.Text);
w_Width = int.Parse(Tx_Width.Text);
w_Adjust = int.Parse(Tx_Adjust.Text);
w_EanCD = Tx_EAN.Text;
//ダミー出力
e.Graphics.DrawString("", printFont, Brushes.Black, 30, 30);
//関数呼び出し
intErrCheck = Ean128_API.DrawEan128(e.Graphics.GetHdc(), w_Tani, w_PointX, w_PointY, w_Height,
w_Width, w_Adjust, w_EanCD);
//印刷データの開放
e.Graphics.ReleaseHdc();
//戻り値判定
if (intErrCheck == 8)
{
MessageBox.Show("Memory shortage"); //メモリ不足
}
else if (intErrCheck == 87)
{
MessageBox.Show("Argument Error"); //引数エラー
}
else if (intErrCheck == 536870925)
{
MessageBox.Show("MakerCode Error");
//メーカコードエラー
}
else if (intErrCheck == 536870924)
{
MessageBox.Show("Being out of Trial Period ");
//試用期限切れ
}
else if (intErrCheck != 0)
{
MessageBox.Show("Otherwise Error"); //その他のエラー
}
}
////バーコード印字
private void Command_exec_Click(object sender, EventArgs e)
{
this.printDocument1.PrintPage += new
System.Drawing.Printing.PrintPageEventHandler(this.printDocument1_PrintPage);
//結果印刷
this.printDocument1.Print();
}
注意:プログラムロジックにおいて、DrawEan128 関数より以前の処理でプリンタへの出力を何も
行っていない場合、上記サンプルにあるようなダミー出力が必要となります。
DrawEan128 利用のサンプルコード(Microsoft Visual Basic .NET の場合)
Private printDocument1 As System.Drawing.Printing.PrintDocument
'印刷作業
Private Sub printDocument1_PrintPage(ByVal sender As Object, ByVal e As
System.Drawing.Printing.PrintPageEventArgs)
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
bufCD As New StringBuilder()
intErrCheck As Integer
w_Tani As Integer
w_PointX As Integer
w_PointY As Integer
w_Height As Integer
w_Width As Integer
w_Adjust As Integer
w_EanCD As String
'サンプルプログラム画面より取得した情報を関数パラメータにセット
w_Tani = Integer.Parse(Tx_Tani.Text)
w_PointX = Integer.Parse(Tx_PointY.Text)
w_PointY = Integer.Parse(Tx_PointX.Text)
w_Height = Integer.Parse(Tx_Height.Text)
w_Width = Integer.Parse(Tx_Width.Text)
w_Adjust = Integer.Parse(Tx_Adjust.Text)
w_EanCD = Tx_EAN.Text
'ダミーデータの出力
e.Graphics.DrawString("", printFont, Brushes.Black, 30, 30)
'関数呼び出し
intErrCheck = Ean128_API.DrawEan128(e.Graphics.GetHdc(), w_Tani, w_PointX,
w_PointY, w_Height, w_Width, w_Adjust, w_EanCD)
'プリントデータの開放
e.Graphics.ReleaseHdc()
'戻り値判定
If intErrCheck = 8 Then
MessageBox.Show("Memory shortage") 'メモリ不足
ElseIf intErrCheck = 87 Then
MessageBox.Show("Argument Error") '引数エラー
ElseIf intErrCheck = 536870925 Then
MessageBox.Show("MakerCode Error") 'メーカコードエラー
ElseIf intErrCheck = 536870924 Then
MessageBox.Show("Being out of Trial Period ") '試用期限切れ
ElseIf intErrCheck <> 0 Then
MessageBox.Show("Otherwise Error") 'その他のエラー
End If
'結果印刷
End Sub
'印刷ボタン押下時
Private Sub Command_exec_Click(ByVal sender As Object, ByVal e As EventArgs)
Handles Command_exec.Click
'PrintPageイベントハンドラの追加
AddHandler printDocument1.PrintPage, AddressOf printDocument1_PrintPage
'結果印刷
Me.printDocument1.Print()
End Sub
注意:プログラムロジックにおいて、DrawEan128 関数より以前の処理でプリンタへの出力を何も
行っていない場合、上記サンプルにあるようなダミー出力が必要となります。
MakeEanData
各項目データから 44 桁の GS1-128 コードを作成
引数
LPSTR
作成 GS1-128 コード格納バッファ(45 バイト)
LPCSTR
メーカーコード
LPCSTR
会社コード
LPCSTR
コード
LPCSTR
支払期限
long
金額
long
印紙基準金額
long
エラーコード
戻り値
0
:成功
8
:メモリ不足
87
:引数エラー
536870925:メーカコードエラー
536870924:試使用期限切れ
データは以下のように編集し、44 桁の GS1-128 コードを作成
・ メーカーコードが 5 桁の場合、先頭に’9’を付加
・ 会社コードが 3 桁の場合、先頭に“00” を付加
・ コードが 11 桁の場合、末尾に”000000” を付加
・ 支払期日がない場合、”999999”を設定
・ 支払期日が 5 桁の場合、システム時刻を基に先頭に 1 桁の数値を付加
・ 印紙基準金額が-1 の場合、印紙フラグは’0’
・ 印紙基準金額 =< 金額の場合、印紙フラグは’1’
・ 印紙基準金額 > 金額の場合、印紙フラグは’0’
MakeEanData 利用のサンプルコード(Microsoft Visual C# .NET の場合)
//EANコードの作成
private void EanGen_Click(object sender, EventArgs e)
{
StringBuilder eanBuffer = new System.Text.StringBuilder(44);
int intErrCheck = 0;
int w_Amount = 0;
int w_TaxBorder = 0;
//サンプルプログラム画面より取得したバーコード情報を関数パラメータにセット
w_Amount = int.Parse(Tx_Amount.Text);
w_TaxBorder = int.Parse(Tx_TaxBorder.Text);
//関数呼び出し
intErrCheck = Ean128_API.MakeEanData(eanBuffer, Tx_MakerCD.Text,
Tx_CompCD.Text, Tx_KanyuCD.Text, Tx_PayDate.Text, w_Amount, w_TaxBorder);
//戻り値判定
if (intErrCheck == 8)
{
MessageBox.Show("Memory shortage");
//メモリ不足
}
else if (intErrCheck == 87)
{
MessageBox.Show("Argument Error");
//引数エラー
}
else if (intErrCheck == 536870925)
{
MessageBox.Show("MakerCode Error");
//メーカコードエラー
}
else if (intErrCheck == 536870924)
{
MessageBox.Show("Being out of Trial Period ");
//試用期限切れ
}
else if (intErrCheck != 0)
{
MessageBox.Show("Otherwise Error"); //その他のエラー
}
////(結果表示)チェックデジット追加済みEANコードを表示
Tx_EAN.Text = eanBuffer.ToString();
}
MakeEanData 利用のサンプルコード(Microsoft Visual Basic .NET の場合)
'EANコードの作成
Private Sub EanGen_Click(ByVal sender As Object, ByVal e As EventArgs) Handles
EanGen.Click
Dim eanBuffer = New System.Text.StringBuilder(44)
Dim intErrCheck As Integer = 0
Dim w_Amount As Integer = 0
Dim w_TaxBorder As Integer = 0
'サンプルプログラム画面より取得したバーコード情報を関数パラメータにセット
w_Amount = Integer.Parse(Tx_Amount.Text)
w_TaxBorder = Integer.Parse(Tx_TaxBorder.Text)
'関数呼び出し
intErrCheck = Ean128_API.MakeEanData(eanBuffer, Tx_MakerCD.Text,
Tx_CompCD.Text, Tx_KanyuCD.Text, Tx_PayDate.Text, w_Amount, w_TaxBorder)
'戻り値判定
If intErrCheck = 8 Then
MessageBox.Show("Memory shortage") 'メモリ不足
ElseIf intErrCheck = 87 Then
MessageBox.Show("Argument Error") '引数エラー
ElseIf intErrCheck = 536870925 Then
MessageBox.Show("MakerCode Error") 'メーカコードエラー
ElseIf intErrCheck = 536870924 Then
MessageBox.Show("Being out of Trial Period ") '試用期限切れ
ElseIf intErrCheck <> 0 Then
MessageBox.Show("Otherwise Error") 'その他のエラー
End If
'//(結果表示)チェックデジット追加済みEANコードを表示
Tx_EAN.Text = eanBuffer.ToString()
End Sub
CalCheckDigit
43 桁の GS1-128 コードからチェックデジットを計算
引数
LPSTR
チェックデジット文字の格納バッファ(2 バイト)
LPCSTR
GS1-128 コード
long
エラーコード
戻り値
0
:成功
8
:メモリ不足
87
:引数エラー
536870925:メーカコードエラー
536870924:試使用期限切れ
CalCheckDigit 利用のサンプルコード(Microsoft Visual C# .NET の場合)
////43 桁のEan128 コードからチェックデジットを計算
private void CalCheckDigit_Click(object sender, EventArgs e)
{
int intErrCheck;
StringBuilder buffer = new StringBuilder();
String eanCode = "";
//サンプルプログラム画面より取得した情報を関数パラメータにセット
eanCode = Tx_EAN.Text;
//関数呼び出し
intErrCheck = Ean128_API.CalCheckDigit(buffer, eanCode);
//戻り値判定
if (intErrCheck == 8)
{
MessageBox.Show("Memory shortage"); //メモリ不足
}
else if (intErrCheck == 87)
{
MessageBox.Show("Argument Error"); //引数エラー
}
else if (intErrCheck == 536870925)
{
MessageBox.Show("MakerCode Error");
//メーカコードエラー
}
else if (intErrCheck != 0)
{
MessageBox.Show("Otherwise Error"); //その他のエラー
}
////計算したチェックデジットを追加
Tx_EAN.Text += buffer.ToString();
}
CalCheckDigit 利用のサンプルコード(Microsoft Visual Basic .NET の場合)
'//43 桁のEan128 コードからチェックデジットを計算
Private Sub CalCheckDigit_Click(ByVal sender As Object, ByVal e As EventArgs)
Handles CalCheckDigit.Click
Dim intErrCheck As Integer
Dim buffer As New StringBuilder()
Dim eanCode As [String] = ""
'サンプルプログラム画面より取得し情報を関数パラメータにセット
eanCode = Tx_EAN.Text
'関数呼び出し
intErrCheck = Ean128_API.CalCheckDigit(buffer, eanCode)
'戻り値判定
If intErrCheck = 8 Then
MessageBox.Show("Memory shortage") 'メモリ不足
ElseIf intErrCheck = 87 Then
MessageBox.Show("Argument Error") '引数エラー
ElseIf intErrCheck = 536870925 Then
MessageBox.Show("MakerCode Error") 'メーカコードエラー
ElseIf intErrCheck <> 0 Then
MessageBox.Show("Otherwise Error") 'その他のエラー
End If
'//計算したチェックデジットを追加
Tx_EAN.Text += buffer.ToString()
End Sub