GS1-128 の描画 DLL について (ver. 2.1) 動作環境など 動作環境 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 :調整を行う(解像度が 300 DPI 以下ならばスペースを 1 ドッ ト広げ、300 DPI を超えるならば、バーを 1 ドット狭める) 2 :調整を行う(解像度にかかわらずスペースを 1 ドット広げ、 かつ、バーを 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
© Copyright 2024 Paperzz