ゴール
既存のデータテーブルから出荷指図を表すバーコードイメージファイルを生成して、その後、受注を示すイメージファイルから単一または複数のバーコードを読み取る Visual Basic (VB.NET) プログラムを作成します。
要件
Microsoft Windows 7 それ以降
Microsoft Visual Studio
Accusoft Barcode Xpress .NET 開発ツールキット (無料試用版のダウンロードはこちら)
プログラミングスキル
Visual Basic の中級レベル
VB.NET でバーコード生成と読み取りプログラムを作成します。 Accusoft Barcode Xpress は、30種類以上のバーコードをサポートするバーコード生成および読み取りライブラリで、破損または低解像度でスキャンされた場合でもバーコードを正確に読み取ることができます。 このチュートリアルでは、VB.NET でのバーコードの作成と読み取りを実演するための簡単な注文の発送と受注のサンプルの作成を行います。
[ヒント]
Barcode Xpress .NET の評価版には、プログラミング初級の方でも Visual Studio 2010/2012/2013/2015/2017 でそのままビルドして、実行できる VB.NET と C# の GUI ベースのサンプル プロジェクトが含まれていますので、そちらのサンプルを参考にしてください。
VB.NET バーコード生成と読み取りのサンプルコード
ここで Visual Basic サンプルコードをダウンロードできます。 Barcode Xpress .NET の無償評価版を使用するマシンにインストールする必要があります。
プロジェクトをセットアップする
この例では、Microsoft Visual Studio を使用してプロジェクトファイルを生成します。 Barcode Xpress .Net SDK をインストールしたら、Visual Basic プロジェクトを開始します。 このプログラムが正しく生成されるためには、Framework System.Drawing と Extension Accusoft Barcode Xpress 12 .Net がプロジェクトに追加されていることを確認してください。 最も簡単な方法は、Visual Studio のソリューションエクスプローラで [参照] を右クリックし、次に [フレームワーク] をクリックして System.Drawing を選択することです。
次に、[拡張] をクリックし、[Accusoft Barcode Xpress 12 .NET] を選択します。
Visual Basic プロジェクトのコードで、ライブラリにコードをインポートする次のコマンドを配置します。
[vb]{
Imports Accusoft.BarcodeXpressSd
Imports System.Draw
}[/vb]
データを使用して始める
この例では、注文がデータベース内で追跡されている環境を想定します。 これを表現するために、シンプルな表を使用して、出荷のために追跡する必要のある注文を表示し、受け取ったことを確認することができます。 この例では、次のデータが生成されます。
shippingID Integer | shippingOrder String | shipped Boolean | shippingDateString | received Boolean | received Date String |
1 | A123456 | False | False | ||
2 | B156826 | False | False | ||
3 | C158282 | False | False | ||
4 | A333799 | False | False | ||
5 | B150583 | False | False | ||
6 | C266760 | False | False | ||
7 | C971943 | False | False | ||
8 | B121839 | False | False | ||
9 | C110092 | False | False | ||
10 | A374971 | False | False |
この例では、Order Numbers (注文番号) が一意の値であるという前提のもとで作業します。
VB.NETData にバーコードを生成
出荷を追跡するために、出荷ラベルに添付されるバーコードを生成することができます。 Barcode Xpressでは、これは簡単な作業です。 まず、出荷テーブルと出荷されていない注文 (出荷された商品は False) を確認し、shippingOrder フィールドを取得して GenerateBarCodes 関数に渡します。
[vb]{
For Each row As DataRow In trackingList.Rows
If (row(“shipped”) = False) Then
‘If we were able to create the file, then set order to Shipped
If (GenerateBarCodes(row(“shippingOrder”))) Then
row(“shipped”) = True
row(“shippingDate”) = DateTime.Now.ToString
End If
End If
Next
}[/vb]
GenerateBarCodes 関数は Barcode Xpress を利用します。 Barcode Xpress は、多数のバーコードタイプをサポートしています。これらのバーコードタイプは、http://help.accusoft.com/BarcodeXpress/v12.0/dotnet/webframe.html#Supported_Barcode_Types.html ですべて確認できます。 この例では、Code 39 標準を使用してバーコードを生成します。
実際に BarcodeXpress オブジェクトを作成してオプションを更新する方法は次のとおりです。
[vb]{
Using BarcodeXpress1 As New BarcodeXpress
‘Set Code39Barcode as the option to write to’
BarcodeXpress1.writer.BarcodeType = BarcodeType.Code39Barcode
‘Store the value of the barcode into the system
BarcodeXpress1.writer.BarcodeValue = currentShippingOrder
}[/vb]
ここで行ったことは、BarcodeXpress オブジェクトを作成して Code39Barcode 標準に設定し、バーコード値を現在の shippingOrder 値に設定することです。 残っているのは、バーコードイメージ自体を生成してファイルに保存することだけです。 その後、ファイルはラベルとして印刷し、文書に埋め込むことができます。 Visual Basic オブジェクトSystem.Drawing.Bitmap を利用して、そのことを行うことができます。
[vb]{
‘Now export the file
Using barCodeImage As Bitmap = BarcodeXpress1.writer.CreateBitmap()
Try
barCodeImage.Save(currentShippingOrder + “.png”, Drawing.Imaging.ImageFormat.Png)
GenerateBarCodes = True
Catch ex As Exception
‘There must have been a problem
GenerateBarCodes = False
End Try
End Using
}[/vb]
これでおしまいです! 数行のコードで、A123456 に等しい shippingOrder で GenerateBarCode 関数を呼び出すと、結果は次のようになります。
[vb]{
GenerateBarcodes("A123456")
}[/vb]
サンプルプログラムの場合、バーコードファイルの生成には数ミリ秒かかり、出荷準備が整います。 関数が成功すると、関数はブール値を返し、コードは “出荷済み”を true に設定し、データのテーブルに日付と時刻を設定します。
VB.NET でのバーコード読み取り/スキャン
バーコードを生成して出荷しました。 しかし、それを受け取るのはどうでしょうか? 同じ Barcode Xpress オブジェクトを使用して、システムがバーコードでスキャンし、バーコードからデータを取得し、テーブル内で注文を見てから、注文が受信された時刻と発生した時刻を示すテーブルを更新できます。 イメージの受信方法によっては、セットアップによって異なりますが、この例では、テストするために手動で 2つのファイルを設定しています。
ここでは、生成したバーコードファイルの 1つを使用した簡単な例を示します。
このプログラムにはコマンドラインスイッチがあります。 コマンドラインオプションを指定せずに実行すると、次のようになります。
[vb]{
BarCodeXpressSandRExample.exe
}[/vb]
その後、テーブルからバーコードファイルを生成するだけです。 このように実行してください:
[vb]{
BarCodeXpressSandRExample.exe imagefile
}[/vb]
imagefile は、内部にバーコードが入っているビットマップイメージです(例えば “C266760.png”など)。 メインプログラムからこれを選択します:
[vb]{
‘Start with getting the command line arguments.
Dim cliArgs() As String = Environment.GetCommandLineArgs()
Dim scanFile As String
If (cliArgs.Count() = 2) Then
scanFile = cliArgs(1)
End If
}[/vb]
これで、次のコマンドでファイルをスキャンできます。
ここでできることは、Accusoft.BarcodeXpressSdk.Result オブジェクトの配列を生成し、そこから値を抽出することです。 関数 ReadBarCodes はこのメソッドで呼び出すことができます:
[vb]{
‘Read the file into our barcodeResults object
If (scanFile IsNot Nothing) Then
barCodeResults = ReadBarCodes(scanFile)
End If
}[/vb]
この関数は、送信されたファイル名を Bitmap オブジェクトにロードしてから、同じ BarcodeXpress オブジェクトを使用して開始します。 今回は、バーコードイメージを作成するのではなく、ビットマップイメージから読み取り、その結果を Result オブジェクトに格納することができます。
[vb]{
Using barCodeImage As System.Drawing.Bitmap = System.Drawing.Image.FromFile(currentFileName, True)
‘We have the information in the image file – let’s parse it
Using BarcodeXpress1 As New Accusoft.BarcodeXpressSdk.BarcodeXpress
‘We’re using Code39Barcode as the default type
Dim currentBarcodeTypes As System.Array = New Accusoft.BarcodeXpressSdk.BarcodeType(1) {}
currentBarcodeTypes.SetValue(Accusoft.BarcodeXpressSdk.BarcodeType.Code39Barcode, 0)
BarcodeXpress1.reader.BarcodeTypes = currentBarcodeTypes
‘Read the image file
currentBarCodes = BarcodeXpress1.reader.Analyze(barCodeImage)
Return currentBarCodes
End Using
End Using
}[/vb]
上記のバーコードをスキャンすると、値が 1つの配列(この例の出荷用のバーコードデータ C266760) が返されます。この注文が受信されたことと、スキャンした日付/時刻を示す値表を更新できます。
[vb]{
‘If we found a barcode in the file
If (barCodeResults.Length > 0) Then
For i = 0 To barCodeResults.Length – 1 Step 1
Dim curResult As Accusoft.BarcodeXpressSdk.Result = CType(barCodeResults.GetValue(i), Accusoft.BarcodeXpressSdk.Result)
‘Console.WriteLine(“Symbol # ” + i.ToString() + Chr(13) + “Type = ” + curResult.BarcodeName + Chr(13))
‘Console.WriteLine(“Value=” + curResult.BarcodeValue + Chr(13))
Dim receivedRow() As Data.DataRow
receivedRow = trackingList.Select(“shippingOrder = ‘” + curResult.BarcodeValue + “‘”)
receivedRow(0)(“received”) = True
receivedRow(0)(“receivedDate”) = DateTime.Now.ToString
Next
End If
}[/vb]
しかし、以下のようにイメージの中にバーコードが複数ある場合は:
複数のバーコードがあるだけでなく、ひとつが斜めになっています。 このサンプルは “received_002.jpg” です。
斜めのバーコードですが、大丈夫でしょうか? 問題ありません。 実際には、ファイルをスキャンする前後にテーブルを表示することでこれをテストできます。
成功です!
違う角度のものであっても正確に検出されました。 Barcode Xpress は、画像が劣化している場合でも、複数の角度からさまざまな標準およびフォーマットでバーコードをスキャンできます。
始める準備ができましたか?
Accusoft Barcode Xpress の無料試用版(https://www.accusoft.com/products/barcode-xpress/overview/)を試してみてください。 Visual Basic や.Net ではない? Barcode Xpress には、Java、Linux、お気に入りのモバイルデバイスのバージョンも用意されています。