フッターコンテンツにスキップ
IRONBARCODEの使用

C# USB BarCodeスキャナ:IronBarcode完全統合ガイド

USB バーコード スキャナーはキーボード入力デバイスとして機能し、スキャンしたデータを C# アプリケーションに自動的に送信します。 IronBarcode はこの入力を処理して形式を検証し、構造化データを抽出し、新しいバーコードを生成し、展開の複雑さを最小限に抑えながら在庫管理システム用の完全なスキャン ソリューションを作成します。

小売、倉庫、在庫管理業務は、効率的なバーコードスキャンに依存します。 IronBarcodeとその効果的な検証および生成機能を使用すると、開発者は単純なデータキャプチャを超えた信頼性の高い USB バーコード スキャナー アプリケーションを構築できます。 ライブラリはバーコード データを検証し構造化された情報を抽出し新しいバーコードを即座に生成します

このガイドでは、C# で USB バーコード スキャナーをIronBarcodeと統合する方法を説明します。 その結果、.NET Framework と .NET アプリケーションの両方で動作するリアルタイム スキャン ソリューションが実現し、チームが在庫を管理し、アイテムを効率的に追跡できるようになります。 販売時点管理システムを構築する場合でも、企業の在庫管理ソリューションを構築する場合でも、IronBarcode のクロスプラットフォーム互換性により、アプリケーションはWindowsLinux 、またはmacOSでスムーズに実行されます。

USBバーコードスキャナーはIronBarcodeとどのように連携するか?

統合においてキーボード ウェッジ モードが重要なのはなぜですか?

ほとんどの USB バーコード スキャナーは HID キーボード ウェッジ モードで動作し、キーボード入力をエミュレートして簡単にコードをスキャンできます。 バーコードをスキャンする場合、スキャナーはデータを"入力"し、その後に Enter キーを押します。 IronBarcode は、フォーマットを検証し、構造化データを抽出し、スキャンに応じて即座にバーコードを生成できるようにすることで、この生の入力を改善します

さまざまなスキャナー通信モードを理解することは、エンタープライズ アプリケーションに役立ちます。 プロフェッショナル スキャナーは、キーボード ウェッジ モードを超えてシリアル通信と直接 USB HID モードをサポートします。

// Example: Handling different scanner input modes
public interface IScannerInput
{
    event EventHandler<string> BarcodeScanned;
    void StartListening();
    void StopListening();
}

// Keyboard wedge implementation
public class KeyboardWedgeScanner : IScannerInput
{
    public event EventHandler<string> BarcodeScanned;
    private readonly TextBox _inputBox;

    public KeyboardWedgeScanner(TextBox inputBox)
    {
        _inputBox = inputBox;
        _inputBox.KeyPress += OnKeyPress;
    }

    private void OnKeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.Enter)
        {
            BarcodeScanned?.Invoke(this, _inputBox.Text);
            _inputBox.Clear();
        }
    }

    public void StartListening() => _inputBox.Focus();
    public void StopListening() => _inputBox.Enabled = false;
}

// Serial port implementation for professional scanners
public class SerialPortScanner : IScannerInput
{
    public event EventHandler<string> BarcodeScanned;
    private System.IO.Ports.SerialPort _port;

    public SerialPortScanner(string portName, int baudRate = 9600)
    {
        _port = new System.IO.Ports.SerialPort(portName, baudRate);
        _port.DataReceived += OnDataReceived;
    }

    private void OnDataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        string data = _port.ReadLine().Trim();
        BarcodeScanned?.Invoke(this, data);
    }

    public void StartListening() => _port.Open();
    public void StopListening() => _port.Close();
}
// Example: Handling different scanner input modes
public interface IScannerInput
{
    event EventHandler<string> BarcodeScanned;
    void StartListening();
    void StopListening();
}

// Keyboard wedge implementation
public class KeyboardWedgeScanner : IScannerInput
{
    public event EventHandler<string> BarcodeScanned;
    private readonly TextBox _inputBox;

    public KeyboardWedgeScanner(TextBox inputBox)
    {
        _inputBox = inputBox;
        _inputBox.KeyPress += OnKeyPress;
    }

    private void OnKeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.Enter)
        {
            BarcodeScanned?.Invoke(this, _inputBox.Text);
            _inputBox.Clear();
        }
    }

    public void StartListening() => _inputBox.Focus();
    public void StopListening() => _inputBox.Enabled = false;
}

// Serial port implementation for professional scanners
public class SerialPortScanner : IScannerInput
{
    public event EventHandler<string> BarcodeScanned;
    private System.IO.Ports.SerialPort _port;

    public SerialPortScanner(string portName, int baudRate = 9600)
    {
        _port = new System.IO.Ports.SerialPort(portName, baudRate);
        _port.DataReceived += OnDataReceived;
    }

    private void OnDataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        string data = _port.ReadLine().Trim();
        BarcodeScanned?.Invoke(this, data);
    }

    public void StartListening() => _port.Open();
    public void StopListening() => _port.Close();
}
Imports System
Imports System.Windows.Forms
Imports System.IO.Ports

' Example: Handling different scanner input modes
Public Interface IScannerInput
    Event BarcodeScanned As EventHandler(Of String)
    Sub StartListening()
    Sub StopListening()
End Interface

' Keyboard wedge implementation
Public Class KeyboardWedgeScanner
    Implements IScannerInput

    Public Event BarcodeScanned As EventHandler(Of String) Implements IScannerInput.BarcodeScanned
    Private ReadOnly _inputBox As TextBox

    Public Sub New(inputBox As TextBox)
        _inputBox = inputBox
        AddHandler _inputBox.KeyPress, AddressOf OnKeyPress
    End Sub

    Private Sub OnKeyPress(sender As Object, e As KeyPressEventArgs)
        If e.KeyChar = ChrW(Keys.Enter) Then
            RaiseEvent BarcodeScanned(Me, _inputBox.Text)
            _inputBox.Clear()
        End If
    End Sub

    Public Sub StartListening() Implements IScannerInput.StartListening
        _inputBox.Focus()
    End Sub

    Public Sub StopListening() Implements IScannerInput.StopListening
        _inputBox.Enabled = False
    End Sub
End Class

' Serial port implementation for professional scanners
Public Class SerialPortScanner
    Implements IScannerInput

    Public Event BarcodeScanned As EventHandler(Of String) Implements IScannerInput.BarcodeScanned
    Private _port As SerialPort

    Public Sub New(portName As String, Optional baudRate As Integer = 9600)
        _port = New SerialPort(portName, baudRate)
        AddHandler _port.DataReceived, AddressOf OnDataReceived
    End Sub

    Private Sub OnDataReceived(sender As Object, e As SerialDataReceivedEventArgs)
        Dim data As String = _port.ReadLine().Trim()
        RaiseEvent BarcodeScanned(Me, data)
    End Sub

    Public Sub StartListening() Implements IScannerInput.StartListening
        _port.Open()
    End Sub

    Public Sub StopListening() Implements IScannerInput.StopListening
        _port.Close()
    End Sub
End Class
$vbLabelText   $csharpLabel

開発者はどのようにしてスキャナーの入力をキャプチャして検証できるのでしょうか?

// Capture scanner input and validate with IronBarcode
private async void ProcessScannerInput(string scannedData)
{
    try
    {
        // Validate the scanned data format
        var validationBarcode = BarcodeWriter.CreateBarcode(scannedData, BarcodeEncoding.Code128);
        var results = await BarcodeReader.ReadAsync(validationBarcode.ToBitmap());

        if (results.Any())
        {
            var result = results.First();

            // Extract metadata for enterprise systems
            var scanMetadata = new ScanMetadata
            {
                BarcodeType = result.BarcodeType,
                Value = result.Value,
                Confidence = result.Confidence,
                ScanTimestamp = DateTime.UtcNow,
                ScannerDevice = GetCurrentScannerInfo()
            };

            await ProcessValidBarcode(scanMetadata);
        }
        else
        {
            HandleInvalidScan(scannedData);
        }
    }
    catch (Exception ex)
    {
        LogScanError(ex, scannedData);
    }
}
// Capture scanner input and validate with IronBarcode
private async void ProcessScannerInput(string scannedData)
{
    try
    {
        // Validate the scanned data format
        var validationBarcode = BarcodeWriter.CreateBarcode(scannedData, BarcodeEncoding.Code128);
        var results = await BarcodeReader.ReadAsync(validationBarcode.ToBitmap());

        if (results.Any())
        {
            var result = results.First();

            // Extract metadata for enterprise systems
            var scanMetadata = new ScanMetadata
            {
                BarcodeType = result.BarcodeType,
                Value = result.Value,
                Confidence = result.Confidence,
                ScanTimestamp = DateTime.UtcNow,
                ScannerDevice = GetCurrentScannerInfo()
            };

            await ProcessValidBarcode(scanMetadata);
        }
        else
        {
            HandleInvalidScan(scannedData);
        }
    }
    catch (Exception ex)
    {
        LogScanError(ex, scannedData);
    }
}
Imports System
Imports System.Linq
Imports System.Threading.Tasks
Imports IronBarCode

Private Async Sub ProcessScannerInput(scannedData As String)
    Try
        ' Validate the scanned data format
        Dim validationBarcode = BarcodeWriter.CreateBarcode(scannedData, BarcodeEncoding.Code128)
        Dim results = Await BarcodeReader.ReadAsync(validationBarcode.ToBitmap())

        If results.Any() Then
            Dim result = results.First()

            ' Extract metadata for enterprise systems
            Dim scanMetadata As New ScanMetadata With {
                .BarcodeType = result.BarcodeType,
                .Value = result.Value,
                .Confidence = result.Confidence,
                .ScanTimestamp = DateTime.UtcNow,
                .ScannerDevice = GetCurrentScannerInfo()
            }

            Await ProcessValidBarcode(scanMetadata)
        Else
            HandleInvalidScan(scannedData)
        End If
    Catch ex As Exception
        LogScanError(ex, scannedData)
    End Try
End Sub
$vbLabelText   $csharpLabel

このコードは、さまざまな方法でスキャナーの入力をキャプチャし、 IronBarcode の非同期読み取り機能を使用して、UI スレッドをブロックせずにスキャンされたデータを検証します。 信頼しきい値機能により、実稼働環境では高品質のスキャンのみが処理されるようになります。

バーコードスキャナープロジェクトをどのように設定するか?

必須の依存関係と構成は何ですか?

まず、デスクトップ シナリオ用に Visual Studio で Windows フォーム アプリケーションを作成するか、Web ベースのスキャン アプリケーションの場合はBlazor を検討してください。 モバイル在庫ソリューションの場合、 .NET MAUI はAndroidおよびiOS 機能による優れたクロスプラットフォーム サポートを提供します。 次に、NuGet パッケージ マネージャー コンソールからIronBarcode をインストールします

Install-Package BarCode

コンテナ化されたデプロイメントの場合、 IronBarcode は Docker とシームレスに連携し、エンタープライズ環境向けのデプロイメント マニフェストを提供します。

クイックスタート: C# で QR コード画像を作成する

QR コードを作成すると、スキャン可能な四角形にデータをエンコードした視覚的な表現が生成されます。

Nuget Icon今すぐ NuGet で PDF を作成してみましょう:

  1. NuGet パッケージ マネージャーを使用して IronBarcode をインストールします

    PM > Install-Package BarCode

  2. このコード スニペットをコピーして実行します。

    using IronBarCode;
    
    // Generate QR code from scanned inventory data
    string inventoryCode = "INV-2025-001";
    var qrCode = BarcodeWriter.CreateQrCode(inventoryCode);
    
    // Apply styling for professional labels
    qrCode.ResizeTo(300, 300);
    qrCode.SetMargins(10);
    qrCode.ChangeQrCodeColor(IronSoftware.Drawing.Color.DarkBlue);
    
    // Add logo for branding
    qrCode.AddLogoToQrCode("company_logo.png", 60, 60);
    
    // Save as high-quality image
    qrCode.SaveAsPng("inventory_qr.png");
    
    // Alternative: Save as PDF for printing
    qrCode.SaveAsPdf("inventory_qr.pdf");
  3. 実際の環境でテストするためにデプロイする

    今すぐ無料トライアルでプロジェクトに IronBarcode を使い始めましょう
    arrow pointer

アプリケーションにはどの名前空間を含める必要がありますか?

ドキュメントの例とともに、次の重要な名前空間をフォームに追加します。

using IronBarCode;
using System.Drawing;
using System.Linq;
using System.Threading.Tasks;
using System.IO.Ports; // For serial scanners
using System.Diagnostics; // For performance monitoring
using IronBarCode;
using System.Drawing;
using System.Linq;
using System.Threading.Tasks;
using System.IO.Ports; // For serial scanners
using System.Diagnostics; // For performance monitoring
Imports IronBarCode
Imports System.Drawing
Imports System.Linq
Imports System.Threading.Tasks
Imports System.IO.Ports ' For serial scanners
Imports System.Diagnostics ' For performance monitoring
$vbLabelText   $csharpLabel

開発者はスキャナー入力フォームをどのように構成すればよいでしょうか?

エンタープライズ アプリケーションは、複数のスキャナー ブランドをサポートする柔軟なスキャナー構成システムの恩恵を受けます。

public class ScannerConfiguration
{
    public string ScannerType { get; set; } // "KeyboardWedge", "Serial", "USB-HID"
    public string PortName { get; set; } // For serial scanners
    public int BaudRate { get; set; } = 9600;
    public string Terminator { get; set; } = "\r\n";
    public bool EnableBeep { get; set; } = true;

    // Brand-specific settings
    public Dictionary<string, string> BrandSettings { get; set; } = new();

    // Common scanner brand configurations
    public static ScannerConfiguration GetHoneywellConfig()
    {
        return new ScannerConfiguration
        {
            ScannerType = "Serial",
            BaudRate = 115200,
            BrandSettings = new Dictionary<string, string>
            {
                {"Prefix", "STX"},
                {"Suffix", "ETX"},
                {"TriggerMode", "Manual"}
            }
        };
    }

    public static ScannerConfiguration GetSymbolConfig()
    {
        return new ScannerConfiguration
        {
            ScannerType = "KeyboardWedge",
            BrandSettings = new Dictionary<string, string>
            {
                {"ScanMode", "Continuous"},
                {"BeepVolume", "High"}
            }
        };
    }
}
public class ScannerConfiguration
{
    public string ScannerType { get; set; } // "KeyboardWedge", "Serial", "USB-HID"
    public string PortName { get; set; } // For serial scanners
    public int BaudRate { get; set; } = 9600;
    public string Terminator { get; set; } = "\r\n";
    public bool EnableBeep { get; set; } = true;

    // Brand-specific settings
    public Dictionary<string, string> BrandSettings { get; set; } = new();

    // Common scanner brand configurations
    public static ScannerConfiguration GetHoneywellConfig()
    {
        return new ScannerConfiguration
        {
            ScannerType = "Serial",
            BaudRate = 115200,
            BrandSettings = new Dictionary<string, string>
            {
                {"Prefix", "STX"},
                {"Suffix", "ETX"},
                {"TriggerMode", "Manual"}
            }
        };
    }

    public static ScannerConfiguration GetSymbolConfig()
    {
        return new ScannerConfiguration
        {
            ScannerType = "KeyboardWedge",
            BrandSettings = new Dictionary<string, string>
            {
                {"ScanMode", "Continuous"},
                {"BeepVolume", "High"}
            }
        };
    }
}
Option Strict On



Public Class ScannerConfiguration
    Public Property ScannerType As String ' "KeyboardWedge", "Serial", "USB-HID"
    Public Property PortName As String ' For serial scanners
    Public Property BaudRate As Integer = 9600
    Public Property Terminator As String = vbCrLf
    Public Property EnableBeep As Boolean = True

    ' Brand-specific settings
    Public Property BrandSettings As Dictionary(Of String, String) = New Dictionary(Of String, String)()

    ' Common scanner brand configurations
    Public Shared Function GetHoneywellConfig() As ScannerConfiguration
        Return New ScannerConfiguration With {
            .ScannerType = "Serial",
            .BaudRate = 115200,
            .BrandSettings = New Dictionary(Of String, String) From {
                {"Prefix", "STX"},
                {"Suffix", "ETX"},
                {"TriggerMode", "Manual"}
            }
        }
    End Function

    Public Shared Function GetSymbolConfig() As ScannerConfiguration
        Return New ScannerConfiguration With {
            .ScannerType = "KeyboardWedge",
            .BrandSettings = New Dictionary(Of String, String) From {
                {"ScanMode", "Continuous"},
                {"BeepVolume", "High"}
            }
        }
    End Function
End Class
$vbLabelText   $csharpLabel

IronBarcodeを使用してスキャンバーコードをどのように検証するか?

バーコード検証に最適なアプローチは何ですか?

IronBarcode は、さまざまな形式のバーコード データの検証と解析に優れています。 ライブラリは、Code 128EAN-13Code 39などの1D バーコードに加えて、 QR コードData Matrixなどの2D 形式もサポートしています。 検証の改善アプローチは次のとおりです。

public class BarcodeValidator
{
    private readonly Dictionary<BarcodeType, Func<string, bool>> _validators;

    public BarcodeValidator()
    {
        _validators = new Dictionary<BarcodeType, Func<string, bool>>
        {
            { BarcodeType.Code128, ValidateCode128 },
            { BarcodeType.EAN13, ValidateEAN13 },
            { BarcodeType.UPCA, ValidateUPCA },
            { BarcodeType.QRCode, ValidateQRCode }
        };
    }

    public async Task<ValidationResult> ValidateScannedBarcodeAsync(string scannedText)
    {
        var result = new ValidationResult();

        try
        {
            // Attempt multiple barcode formats for flexibility
            var encodings = new[] { 
                BarcodeEncoding.Code128, 
                BarcodeEncoding.EAN13,
                BarcodeEncoding.UPCA,
                BarcodeEncoding.QRCode 
            };

            foreach (var encoding in encodings)
            {
                try
                {
                    var barcode = BarcodeWriter.CreateBarcode(scannedText, encoding);
                    var validationResults = await BarcodeReader.ReadAsync(barcode.ToBitmap());

                    if (validationResults.Any())
                    {
                        var validated = validationResults.First();
                        result.IsValid = true;
                        result.Format = validated.BarcodeType;
                        result.Value = validated.Value;
                        result.Confidence = validated.Confidence;

                        // Apply format-specific validation
                        if (_validators.ContainsKey(validated.BarcodeType))
                        {
                            result.PassesBusinessRules = _validators___PROTECTED_LINK_35___;
                        }

                        break;
                    }
                }
                catch { /* Try next format */ }
            }

            // Handle GS1-128 for supply chain applications
            if (!result.IsValid && IsGS1Format(scannedText))
            {
                result = await ValidateGS1BarcodeAsync(scannedText);
            }
        }
        catch (Exception ex)
        {
            result.Error = ex.Message;
        }

        return result;
    }

    private bool ValidateEAN13(string value)
    {
        // EAN-13 checksum validation
        if (value.Length != 13) return false;

        int sum = 0;
        for (int i = 0; i < 12; i++)
        {
            int digit = int.Parse(value[i].ToString());
            sum += (i % 2 == 0) ? digit : digit * 3;
        }

        int checkDigit = (10 - (sum % 10)) % 10;
        return checkDigit == int.Parse(value[12].ToString());
    }
}
public class BarcodeValidator
{
    private readonly Dictionary<BarcodeType, Func<string, bool>> _validators;

    public BarcodeValidator()
    {
        _validators = new Dictionary<BarcodeType, Func<string, bool>>
        {
            { BarcodeType.Code128, ValidateCode128 },
            { BarcodeType.EAN13, ValidateEAN13 },
            { BarcodeType.UPCA, ValidateUPCA },
            { BarcodeType.QRCode, ValidateQRCode }
        };
    }

    public async Task<ValidationResult> ValidateScannedBarcodeAsync(string scannedText)
    {
        var result = new ValidationResult();

        try
        {
            // Attempt multiple barcode formats for flexibility
            var encodings = new[] { 
                BarcodeEncoding.Code128, 
                BarcodeEncoding.EAN13,
                BarcodeEncoding.UPCA,
                BarcodeEncoding.QRCode 
            };

            foreach (var encoding in encodings)
            {
                try
                {
                    var barcode = BarcodeWriter.CreateBarcode(scannedText, encoding);
                    var validationResults = await BarcodeReader.ReadAsync(barcode.ToBitmap());

                    if (validationResults.Any())
                    {
                        var validated = validationResults.First();
                        result.IsValid = true;
                        result.Format = validated.BarcodeType;
                        result.Value = validated.Value;
                        result.Confidence = validated.Confidence;

                        // Apply format-specific validation
                        if (_validators.ContainsKey(validated.BarcodeType))
                        {
                            result.PassesBusinessRules = _validators___PROTECTED_LINK_35___;
                        }

                        break;
                    }
                }
                catch { /* Try next format */ }
            }

            // Handle GS1-128 for supply chain applications
            if (!result.IsValid && IsGS1Format(scannedText))
            {
                result = await ValidateGS1BarcodeAsync(scannedText);
            }
        }
        catch (Exception ex)
        {
            result.Error = ex.Message;
        }

        return result;
    }

    private bool ValidateEAN13(string value)
    {
        // EAN-13 checksum validation
        if (value.Length != 13) return false;

        int sum = 0;
        for (int i = 0; i < 12; i++)
        {
            int digit = int.Parse(value[i].ToString());
            sum += (i % 2 == 0) ? digit : digit * 3;
        }

        int checkDigit = (10 - (sum % 10)) % 10;
        return checkDigit == int.Parse(value[12].ToString());
    }
}
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Threading.Tasks

Public Class BarcodeValidator
    Private ReadOnly _validators As Dictionary(Of BarcodeType, Func(Of String, Boolean))

    Public Sub New()
        _validators = New Dictionary(Of BarcodeType, Func(Of String, Boolean)) From {
            {BarcodeType.Code128, AddressOf ValidateCode128},
            {BarcodeType.EAN13, AddressOf ValidateEAN13},
            {BarcodeType.UPCA, AddressOf ValidateUPCA},
            {BarcodeType.QRCode, AddressOf ValidateQRCode}
        }
    End Sub

    Public Async Function ValidateScannedBarcodeAsync(scannedText As String) As Task(Of ValidationResult)
        Dim result As New ValidationResult()

        Try
            ' Attempt multiple barcode formats for flexibility
            Dim encodings = {BarcodeEncoding.Code128, BarcodeEncoding.EAN13, BarcodeEncoding.UPCA, BarcodeEncoding.QRCode}

            For Each encoding In encodings
                Try
                    Dim barcode = BarcodeWriter.CreateBarcode(scannedText, encoding)
                    Dim validationResults = Await BarcodeReader.ReadAsync(barcode.ToBitmap())

                    If validationResults.Any() Then
                        Dim validated = validationResults.First()
                        result.IsValid = True
                        result.Format = validated.BarcodeType
                        result.Value = validated.Value
                        result.Confidence = validated.Confidence

                        ' Apply format-specific validation
                        If _validators.ContainsKey(validated.BarcodeType) Then
                            result.PassesBusinessRules = _validators(validated.BarcodeType).Invoke(validated.Value)
                        End If

                        Exit For
                    End If
                Catch
                    ' Try next format
                End Try
            Next

            ' Handle GS1-128 for supply chain applications
            If Not result.IsValid AndAlso IsGS1Format(scannedText) Then
                result = Await ValidateGS1BarcodeAsync(scannedText)
            End If
        Catch ex As Exception
            result.Error = ex.Message
        End Try

        Return result
    End Function

    Private Function ValidateEAN13(value As String) As Boolean
        ' EAN-13 checksum validation
        If value.Length <> 13 Then Return False

        Dim sum As Integer = 0
        For i As Integer = 0 To 11
            Dim digit As Integer = Integer.Parse(value(i).ToString())
            sum += If(i Mod 2 = 0, digit, digit * 3)
        Next

        Dim checkDigit As Integer = (10 - (sum Mod 10)) Mod 10
        Return checkDigit = Integer.Parse(value(12).ToString())
    End Function
End Class
$vbLabelText   $csharpLabel

複数ページのドキュメントの場合、IronBarcode はPDFおよび複数ページの TIFF ファイルからバーコードを読み取ることができます。

アプリケーションはどのバーコード形式を検証できますか?

この検証方法は、すべての主要な1D バーコード形式2D バーコード形式をサポートしています。 特殊なアプリケーション向けに、IronBarcode は、サプライ チェーン管理で一般的に使用されるMSI バーコードGS1-128形式もサポートしています。

スキャンされた入力からレスポンスバーコードを生成する方法は?

アプリケーションはいつスキャン データから新しいバーコードを作成する必要がありますか?

生産準備が整った機能を使用して、スキャンしたデータをラベル付け、追跡、在庫管理用の新しいバーコードに変換します。 IronBarcode の生成機能は、さまざまなデータ タイプからバーコードを作成することをサポートします。 バーコードを画像PDFHTML 、またはストリームとしてエクスポートします。

public class InventoryBarcodeGenerator
{
    private readonly string _labelPath = "labels";

    public InventoryBarcodeGenerator()
    {
        // Ensure proper licensing for production use
        IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
        System.IO.Directory.CreateDirectory(_labelPath);
    }

    public async Task<GeneratedBarcode> GenerateInventoryLabelAsync(string productCode, InventoryAction action)
    {
        try
        {
            // Generate structured inventory code
            var inventoryCode = GenerateStructuredCode(productCode, action);

            // Create high-quality barcode with production settings
            var barcode = BarcodeWriter.CreateBarcode(inventoryCode, BarcodeEncoding.Code128);

            // Apply enterprise styling
            barcode.ResizeTo(400, 120);
            barcode.SetMargins(10);
            barcode.AddAnnotationTextAboveBarcode(inventoryCode, IronSoftware.Drawing.Font.Arial, 12);
            barcode.ChangeBarCodeColor(IronSoftware.Drawing.Color.Black);

            // Add data matrix for redundancy in warehouse environments
            var dataMatrix = BarcodeWriter.CreateBarcode(inventoryCode, BarcodeEncoding.DataMatrix);
            dataMatrix.ResizeTo(100, 100);

            // Save with error handling
            var timestamp = DateTime.Now.ToString("yyyyMMddHHmmss");
            var fileName = $"{inventoryCode}_{timestamp}";

            // Save as multiple formats for flexibility
            await Task.Run(() =>
            {
                barcode.SaveAsPng($"{_labelPath}\\{fileName}.png");
                barcode.SaveAsPdf($"{_labelPath}\\{fileName}.pdf");
                barcode.SaveAsSvg($"{_labelPath}\\{fileName}.svg");
            });

            return new GeneratedBarcode
            {
                Code = inventoryCode,
                LinearBarcodePath = $"{_labelPath}\\{fileName}.png",
                DataMatrixPath = $"{_labelPath}\\{fileName}_dm.png",
                Timestamp = DateTime.UtcNow
            };
        }
        catch (Exception ex)
        {
            throw new BarcodeGenerationException($"Failed to generate barcode for {productCode}", ex);
        }
    }

    private string GenerateStructuredCode(string productCode, InventoryAction action)
    {
        // Implement GS1 Application Identifiers for enterprise compatibility
        var ai = action switch
        {
            InventoryAction.Receive => "10", // Batch/Lot number
            InventoryAction.Ship => "400", // Customer purchase order
            InventoryAction.Count => "37", // Quantity
            _ => "91" // Internal use
        };

        return $"({ai}){DateTime.Now:yyMMdd}{productCode}";
    }
}
public class InventoryBarcodeGenerator
{
    private readonly string _labelPath = "labels";

    public InventoryBarcodeGenerator()
    {
        // Ensure proper licensing for production use
        IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
        System.IO.Directory.CreateDirectory(_labelPath);
    }

    public async Task<GeneratedBarcode> GenerateInventoryLabelAsync(string productCode, InventoryAction action)
    {
        try
        {
            // Generate structured inventory code
            var inventoryCode = GenerateStructuredCode(productCode, action);

            // Create high-quality barcode with production settings
            var barcode = BarcodeWriter.CreateBarcode(inventoryCode, BarcodeEncoding.Code128);

            // Apply enterprise styling
            barcode.ResizeTo(400, 120);
            barcode.SetMargins(10);
            barcode.AddAnnotationTextAboveBarcode(inventoryCode, IronSoftware.Drawing.Font.Arial, 12);
            barcode.ChangeBarCodeColor(IronSoftware.Drawing.Color.Black);

            // Add data matrix for redundancy in warehouse environments
            var dataMatrix = BarcodeWriter.CreateBarcode(inventoryCode, BarcodeEncoding.DataMatrix);
            dataMatrix.ResizeTo(100, 100);

            // Save with error handling
            var timestamp = DateTime.Now.ToString("yyyyMMddHHmmss");
            var fileName = $"{inventoryCode}_{timestamp}";

            // Save as multiple formats for flexibility
            await Task.Run(() =>
            {
                barcode.SaveAsPng($"{_labelPath}\\{fileName}.png");
                barcode.SaveAsPdf($"{_labelPath}\\{fileName}.pdf");
                barcode.SaveAsSvg($"{_labelPath}\\{fileName}.svg");
            });

            return new GeneratedBarcode
            {
                Code = inventoryCode,
                LinearBarcodePath = $"{_labelPath}\\{fileName}.png",
                DataMatrixPath = $"{_labelPath}\\{fileName}_dm.png",
                Timestamp = DateTime.UtcNow
            };
        }
        catch (Exception ex)
        {
            throw new BarcodeGenerationException($"Failed to generate barcode for {productCode}", ex);
        }
    }

    private string GenerateStructuredCode(string productCode, InventoryAction action)
    {
        // Implement GS1 Application Identifiers for enterprise compatibility
        var ai = action switch
        {
            InventoryAction.Receive => "10", // Batch/Lot number
            InventoryAction.Ship => "400", // Customer purchase order
            InventoryAction.Count => "37", // Quantity
            _ => "91" // Internal use
        };

        return $"({ai}){DateTime.Now:yyMMdd}{productCode}";
    }
}
Imports System
Imports System.IO
Imports System.Threading.Tasks
Imports IronBarCode

Public Class InventoryBarcodeGenerator
    Private ReadOnly _labelPath As String = "labels"

    Public Sub New()
        ' Ensure proper licensing for production use
        IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
        Directory.CreateDirectory(_labelPath)
    End Sub

    Public Async Function GenerateInventoryLabelAsync(productCode As String, action As InventoryAction) As Task(Of GeneratedBarcode)
        Try
            ' Generate structured inventory code
            Dim inventoryCode = GenerateStructuredCode(productCode, action)

            ' Create high-quality barcode with production settings
            Dim barcode = BarcodeWriter.CreateBarcode(inventoryCode, BarcodeEncoding.Code128)

            ' Apply enterprise styling
            barcode.ResizeTo(400, 120)
            barcode.SetMargins(10)
            barcode.AddAnnotationTextAboveBarcode(inventoryCode, IronSoftware.Drawing.Font.Arial, 12)
            barcode.ChangeBarCodeColor(IronSoftware.Drawing.Color.Black)

            ' Add data matrix for redundancy in warehouse environments
            Dim dataMatrix = BarcodeWriter.CreateBarcode(inventoryCode, BarcodeEncoding.DataMatrix)
            dataMatrix.ResizeTo(100, 100)

            ' Save with error handling
            Dim timestamp = DateTime.Now.ToString("yyyyMMddHHmmss")
            Dim fileName = $"{inventoryCode}_{timestamp}"

            ' Save as multiple formats for flexibility
            Await Task.Run(Sub()
                               barcode.SaveAsPng($"{_labelPath}\{fileName}.png")
                               barcode.SaveAsPdf($"{_labelPath}\{fileName}.pdf")
                               barcode.SaveAsSvg($"{_labelPath}\{fileName}.svg")
                           End Sub)

            Return New GeneratedBarcode With {
                .Code = inventoryCode,
                .LinearBarcodePath = $"{_labelPath}\{fileName}.png",
                .DataMatrixPath = $"{_labelPath}\{fileName}_dm.png",
                .Timestamp = DateTime.UtcNow
            }
        Catch ex As Exception
            Throw New BarcodeGenerationException($"Failed to generate barcode for {productCode}", ex)
        End Try
    End Function

    Private Function GenerateStructuredCode(productCode As String, action As InventoryAction) As String
        ' Implement GS1 Application Identifiers for enterprise compatibility
        Dim ai As String = action Select Case action
            Case InventoryAction.Receive
                ai = "10" ' Batch/Lot number
            Case InventoryAction.Ship
                ai = "400" ' Customer purchase order
            Case InventoryAction.Count
                ai = "37" ' Quantity
            Case Else
                ai = "91" ' Internal use
        End Select

        Return $"({ai}){DateTime.Now:yyMMdd}{productCode}"
    End Function
End Class
$vbLabelText   $csharpLabel

特殊な要件の場合、開発者は高コントラスト印刷用の1 BPP バーコード イメージを作成したり既存の PDF にバーコードをスタンプしたりできます。

生成されたバーコードにはどのようなカスタマイズ オプションがありますか?

IronBarcode は、色の変更余白の設定、ロゴを埋め込んだQR コードのスタイル設定など、幅広いカスタマイズ オプションを提供します。

IronBarcode のデュアル バーコード生成機能を示す Windows フォーム アプリケーション インターフェイス。 インターフェイスには、在庫番号INV-20250917-helloworldの Code 128 線形バーコードと QR コードの両方が正常に生成されたことが示されています。 上部の入力フィールドでは、カスタム在庫コードを入力し、生成ボタンをクリックするとバーコードが作成されます。 アイテムは正常に処理されました - ラベルが生成されましたという成功メッセージにより、操作が完了したことが確認されます。 Code 128バーコードは主要な在庫追跡フォーマットとしてラベル付けされており、下のQRコードはモバイルフレンドリーな代替フォーマットとしてラベル付けされています。このアプリケーションは、明確な視覚的階層構造を備えたプロフェッショナルなグレーの背景を使用しており、IronBarcodeを使用することで、開発者が包括的な在庫管理のためのマルチフォーマットバーコード生成システムを構築できることを実証しています。

完全なバーコードスキャンアプリケーションをどのように構築するか?

実稼働対応のスキャナー実装とはどのようなものですか?

完全なエラー処理とパフォーマンスの最適化を備えたエンタープライズ グレードの実装をご紹介します。 このアプローチでは、IronBarcode のパフォーマンス機能非同期機能を使用してスループットを向上させます。

using IronBarCode;
using System;
using System.Collections.Concurrent;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace EnterpriseBarcodeScanner
{
    public partial class HighVolumeScanner : Form
    {
        private readonly ConcurrentQueue<ScanData> _scanQueue = new();
        private readonly SemaphoreSlim _processingSemaphore;
        private readonly CancellationTokenSource _cancellationTokenSource = new();
        private IScannerInput _activeScanner;
        private int _maxConcurrentProcessing = Environment.ProcessorCount;

        public HighVolumeScanner()
        {
            InitializeComponent();
            _processingSemaphore = new SemaphoreSlim(_maxConcurrentProcessing);
            InitializeScanner();
            StartProcessingQueue();
        }

        private void InitializeScanner()
        {
            // Auto-detect scanner type
            if (SerialPort.GetPortNames().Any(p => p.Contains("COM")))
            {
                _activeScanner = new SerialPortScanner("COM3", 115200);
            }
            else
            {
                _activeScanner = new KeyboardWedgeScanner(txtScanner);
            }

            _activeScanner.BarcodeScanned += OnBarcodeScanned;
            _activeScanner.StartListening();
        }

        private void OnBarcodeScanned(object sender, string barcode)
        {
            // Queue for async processing to maintain scanner responsiveness
            _scanQueue.Enqueue(new ScanData 
            { 
                RawData = barcode, 
                ScanTime = DateTime.UtcNow 
            });
        }

        private async void StartProcessingQueue()
        {
            while (!_cancellationTokenSource.Token.IsCancellationRequested)
            {
                if (_scanQueue.TryDequeue(out var scanData))
                {
                    await _processingSemaphore.WaitAsync();

                    _ = Task.Run(async () =>
                    {
                        try
                        {
                            await ProcessScanAsync(scanData);
                        }
                        finally
                        {
                            _processingSemaphore.Release();
                        }
                    }, _cancellationTokenSource.Token);
                }
                else
                {
                    await Task.Delay(10); // Prevent CPU spinning
                }
            }
        }

        private async Task ProcessScanAsync(ScanData scanData)
        {
            try
            {
                // Validate with timeout for performance
                using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(2));
                var validationTask = ValidateAndProcessBarcodeAsync(scanData.RawData);
                var completedTask = await Task.WhenAny(validationTask, Task.Delay(Timeout.Infinite, cts.Token));

                if (completedTask == validationTask)
                {
                    var result = await validationTask;

                    if (result.Success)
                    {
                        // Update UI thread-safe
                        BeginInvoke(new Action(() =>
                        {
                            AddToInventory(result);
                            GenerateLabelsIfNeeded(result);
                        }));
                    }
                    else
                    {
                        LogScanError(scanData, result.Error);
                    }
                }
                else
                {
                    LogScanTimeout(scanData);
                }
            }
            catch (Exception ex)
            {
                LogCriticalError(ex, scanData);
            }
        }

        private async Task<ProcessingResult> ValidateAndProcessBarcodeAsync(string rawData)
        {
            // Implement smart caching for repeated scans
            if (BarcodeCache.TryGetCached(rawData, out var cachedResult))
            {
                return cachedResult;
            }

            // Use IronBarcode with optimized settings
            var barcodeOptions = new BarcodeReaderOptions
            {
                Speed = ReadingSpeed.Balanced,
                ExpectMultipleBarcodes = false,
                ExpectBarcodeTypes = BarcodeEncoding.Code128 | BarcodeEncoding.QRCode,
                MaxParallelThreads = 1 // Single barcode, no need for parallel
            };

            // Generate and validate
            var testBarcode = BarcodeWriter.CreateBarcode(rawData, BarcodeEncoding.Code128);
            var results = await BarcodeReader.ReadAsync(testBarcode.ToBitmap(), barcodeOptions);

            var result = new ProcessingResult
            {
                Success = results.Any(),
                BarcodeData = results.FirstOrDefault(),
                ProcessingTime = DateTime.UtcNow
            };

            BarcodeCache.Add(rawData, result);
            return result;
        }
    }
}
using IronBarCode;
using System;
using System.Collections.Concurrent;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace EnterpriseBarcodeScanner
{
    public partial class HighVolumeScanner : Form
    {
        private readonly ConcurrentQueue<ScanData> _scanQueue = new();
        private readonly SemaphoreSlim _processingSemaphore;
        private readonly CancellationTokenSource _cancellationTokenSource = new();
        private IScannerInput _activeScanner;
        private int _maxConcurrentProcessing = Environment.ProcessorCount;

        public HighVolumeScanner()
        {
            InitializeComponent();
            _processingSemaphore = new SemaphoreSlim(_maxConcurrentProcessing);
            InitializeScanner();
            StartProcessingQueue();
        }

        private void InitializeScanner()
        {
            // Auto-detect scanner type
            if (SerialPort.GetPortNames().Any(p => p.Contains("COM")))
            {
                _activeScanner = new SerialPortScanner("COM3", 115200);
            }
            else
            {
                _activeScanner = new KeyboardWedgeScanner(txtScanner);
            }

            _activeScanner.BarcodeScanned += OnBarcodeScanned;
            _activeScanner.StartListening();
        }

        private void OnBarcodeScanned(object sender, string barcode)
        {
            // Queue for async processing to maintain scanner responsiveness
            _scanQueue.Enqueue(new ScanData 
            { 
                RawData = barcode, 
                ScanTime = DateTime.UtcNow 
            });
        }

        private async void StartProcessingQueue()
        {
            while (!_cancellationTokenSource.Token.IsCancellationRequested)
            {
                if (_scanQueue.TryDequeue(out var scanData))
                {
                    await _processingSemaphore.WaitAsync();

                    _ = Task.Run(async () =>
                    {
                        try
                        {
                            await ProcessScanAsync(scanData);
                        }
                        finally
                        {
                            _processingSemaphore.Release();
                        }
                    }, _cancellationTokenSource.Token);
                }
                else
                {
                    await Task.Delay(10); // Prevent CPU spinning
                }
            }
        }

        private async Task ProcessScanAsync(ScanData scanData)
        {
            try
            {
                // Validate with timeout for performance
                using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(2));
                var validationTask = ValidateAndProcessBarcodeAsync(scanData.RawData);
                var completedTask = await Task.WhenAny(validationTask, Task.Delay(Timeout.Infinite, cts.Token));

                if (completedTask == validationTask)
                {
                    var result = await validationTask;

                    if (result.Success)
                    {
                        // Update UI thread-safe
                        BeginInvoke(new Action(() =>
                        {
                            AddToInventory(result);
                            GenerateLabelsIfNeeded(result);
                        }));
                    }
                    else
                    {
                        LogScanError(scanData, result.Error);
                    }
                }
                else
                {
                    LogScanTimeout(scanData);
                }
            }
            catch (Exception ex)
            {
                LogCriticalError(ex, scanData);
            }
        }

        private async Task<ProcessingResult> ValidateAndProcessBarcodeAsync(string rawData)
        {
            // Implement smart caching for repeated scans
            if (BarcodeCache.TryGetCached(rawData, out var cachedResult))
            {
                return cachedResult;
            }

            // Use IronBarcode with optimized settings
            var barcodeOptions = new BarcodeReaderOptions
            {
                Speed = ReadingSpeed.Balanced,
                ExpectMultipleBarcodes = false,
                ExpectBarcodeTypes = BarcodeEncoding.Code128 | BarcodeEncoding.QRCode,
                MaxParallelThreads = 1 // Single barcode, no need for parallel
            };

            // Generate and validate
            var testBarcode = BarcodeWriter.CreateBarcode(rawData, BarcodeEncoding.Code128);
            var results = await BarcodeReader.ReadAsync(testBarcode.ToBitmap(), barcodeOptions);

            var result = new ProcessingResult
            {
                Success = results.Any(),
                BarcodeData = results.FirstOrDefault(),
                ProcessingTime = DateTime.UtcNow
            };

            BarcodeCache.Add(rawData, result);
            return result;
        }
    }
}
Imports IronBarCode
Imports System
Imports System.Collections.Concurrent
Imports System.Threading
Imports System.Threading.Tasks
Imports System.Windows.Forms

Namespace EnterpriseBarcodeScanner
    Partial Public Class HighVolumeScanner
        Inherits Form

        Private ReadOnly _scanQueue As New ConcurrentQueue(Of ScanData)()
        Private ReadOnly _processingSemaphore As SemaphoreSlim
        Private ReadOnly _cancellationTokenSource As New CancellationTokenSource()
        Private _activeScanner As IScannerInput
        Private _maxConcurrentProcessing As Integer = Environment.ProcessorCount

        Public Sub New()
            InitializeComponent()
            _processingSemaphore = New SemaphoreSlim(_maxConcurrentProcessing)
            InitializeScanner()
            StartProcessingQueue()
        End Sub

        Private Sub InitializeScanner()
            ' Auto-detect scanner type
            If SerialPort.GetPortNames().Any(Function(p) p.Contains("COM")) Then
                _activeScanner = New SerialPortScanner("COM3", 115200)
            Else
                _activeScanner = New KeyboardWedgeScanner(txtScanner)
            End If

            AddHandler _activeScanner.BarcodeScanned, AddressOf OnBarcodeScanned
            _activeScanner.StartListening()
        End Sub

        Private Sub OnBarcodeScanned(sender As Object, barcode As String)
            ' Queue for async processing to maintain scanner responsiveness
            _scanQueue.Enqueue(New ScanData With {
                .RawData = barcode,
                .ScanTime = DateTime.UtcNow
            })
        End Sub

        Private Async Sub StartProcessingQueue()
            While Not _cancellationTokenSource.Token.IsCancellationRequested
                Dim scanData As ScanData = Nothing
                If _scanQueue.TryDequeue(scanData) Then
                    Await _processingSemaphore.WaitAsync()

                    _ = Task.Run(Async Function()
                                     Try
                                         Await ProcessScanAsync(scanData)
                                     Finally
                                         _processingSemaphore.Release()
                                     End Try
                                 End Function, _cancellationTokenSource.Token)
                Else
                    Await Task.Delay(10) ' Prevent CPU spinning
                End If
            End While
        End Sub

        Private Async Function ProcessScanAsync(scanData As ScanData) As Task
            Try
                ' Validate with timeout for performance
                Using cts As New CancellationTokenSource(TimeSpan.FromSeconds(2))
                    Dim validationTask = ValidateAndProcessBarcodeAsync(scanData.RawData)
                    Dim completedTask = Await Task.WhenAny(validationTask, Task.Delay(Timeout.Infinite, cts.Token))

                    If completedTask Is validationTask Then
                        Dim result = Await validationTask

                        If result.Success Then
                            ' Update UI thread-safe
                            BeginInvoke(New Action(Sub()
                                                       AddToInventory(result)
                                                       GenerateLabelsIfNeeded(result)
                                                   End Sub))
                        Else
                            LogScanError(scanData, result.Error)
                        End If
                    Else
                        LogScanTimeout(scanData)
                    End If
                End Using
            Catch ex As Exception
                LogCriticalError(ex, scanData)
            End Try
        End Function

        Private Async Function ValidateAndProcessBarcodeAsync(rawData As String) As Task(Of ProcessingResult)
            ' Implement smart caching for repeated scans
            Dim cachedResult As ProcessingResult = Nothing
            If BarcodeCache.TryGetCached(rawData, cachedResult) Then
                Return cachedResult
            End If

            ' Use IronBarcode with optimized settings
            Dim barcodeOptions As New BarcodeReaderOptions With {
                .Speed = ReadingSpeed.Balanced,
                .ExpectMultipleBarcodes = False,
                .ExpectBarcodeTypes = BarcodeEncoding.Code128 Or BarcodeEncoding.QRCode,
                .MaxParallelThreads = 1 ' Single barcode, no need for parallel
            }

            ' Generate and validate
            Dim testBarcode = BarcodeWriter.CreateBarcode(rawData, BarcodeEncoding.Code128)
            Dim results = Await BarcodeReader.ReadAsync(testBarcode.ToBitmap(), barcodeOptions)

            Dim result As New ProcessingResult With {
                .Success = results.Any(),
                .BarcodeData = results.FirstOrDefault(),
                .ProcessingTime = DateTime.UtcNow
            }

            BarcodeCache.Add(rawData, result)
            Return result
        End Function
    End Class
End Namespace
$vbLabelText   $csharpLabel

パフォーマンスを向上させるには、特定の画像領域のスキャンに焦点を合わせるためにトリミング領域を実装します。 バーコード リーダーの設定により、さまざまなドキュメント タイプに合わせて微調整できます。

チームはどのようにフォールバックメカニズムを実装できますか?

このエンタープライズ対応のスキャナー アプリケーションは、いくつかの重要なパターンを実装しています。

1.非同期キュー処理: 非同期操作を使用してUIのブロックを防止します 2.並行処理:複数のスレッドを使用して並列検証を行う 3.スマートキャッシング: 頻繁に使用されるアイテムの冗長処理を削減 4.パフォーマンス監視:読み取り速度オプションを使用してスキャン速度を追跡します 5.柔軟なスキャナサポート: 利用可能なハードウェアを自動検出

*無効なフォーマット:* BarcodeWriter がサポートされていないデータに遭遇したときに例外をキャッチします スキャナの切断:スキャナの取り外しを処理するために TextBox のフォーカス管理を実装します データ検証: IronBarcode のフォーマット固有のエンコードを使用してデータの互換性を確保します 生成の失敗:**バーコード生成をtry-catchブロックで囲む *タイムアウト処理:スキャナとキーボード入力を区別するためにキーストロークのタイミングを実装することを検討してください

IronBarcode のリアルタイム在庫追跡機能を紹介するプロフェッショナル Windows フォーム バーコード スキャナー アプリケーション。 インターフェースは、洗練されたダークブルーのヘッダーを備えたすっきりとした 2 パネル デザインを特徴としています。 左側のパネルには、正確なタイムスタンプとスキャン ステータス インジケーターとともに、正常にスキャンされた 4 つの在庫項目 (INV-001 から INV-004) を示すスキャン履歴リストが表示されます。 各アイテムには、バーコードの種類や信頼度レベルなどの詳細なメタデータが含まれています。 右側のパネルには、プロフェッショナルなスタイルと適切な余白でItems: 4を表示する、動的に生成された概要バーコードが表示されます。 下部にあるアクション ボタンには、リストのクリア、データのエクスポート、ラベルの印刷があり、完全な在庫管理が可能です。 ステータスバーにスキャナ: 接続済みと表示されます | モード: 連続 | 最終スキャン: 2 秒前という表示は、IronBarcode が実稼働在庫システムに提供するアプリケーションのリアルタイム監視機能とプロフェッショナルなエンタープライズ対応設計を実証しています。

バーコード スキャナー プロジェクトの次のステップは何ですか?

IronBarcode は、シンプルな USB バーコード スキャンをインテリジェントなデータ処理アプリケーションに変換します。 ハードウェア スキャナーの入力と IronBarcode の検証生成、および形式変換機能を組み合わせることで、開発者はあらゆる業界向けの信頼性の高いスキャン ソリューションを構築できます。 ライブラリの非同期操作マルチスレッドのサポートにより、拡大するビジネス ニーズに合わせてアプリケーションを拡張できます。

クラウド展開の場合、IronBarcode はAWS LambdaAzure Functionsの優れたサポートを提供し、大規模なサーバーレスバーコード処理を可能にします。 このライブラリは、マイクロサービス アーキテクチャ用のDocker コンテナーとシームレスに統合されます。

エンタープライズ在庫システムを実装する場合は、次のアーキテクチャ パターンを考慮してください。

1.マイクロサービス: Docker 上の IronBarcodeを使用してスキャンを別のサービスとしてデプロイする 2.モバイル統合: AndroidおよびiOSをサポートするデバイスに拡張

  1. Webアプリケーション: Blazor統合によるブラウザベースのスキャンの構築 4.高可用性:複数の読み取りオプションで冗長性を実装する

今すぐ無料トライアルを開始して、C# アプリケーションにプロフェッショナルなバーコード スキャンを実装してください。 関連機能については、バーコード スキャン ワークフローを補完するテキスト認識機能を備えたIronOCR をご覧ください。

よくある質問

IronBarcodeとは何であり、それはUSBバーコードスキャナーとどのように関連していますか?

IronBarcodeは、USBバーコードスキャニングのための堅牢なC#アプリケーションを開発者が構築できるライブラリです。バーコード検証、データ抽出、およびバーコード生成などの機能を提供します。

IronBarcodeはUSBスキャナーからのバーコードデータを検証できますか?

はい、IronBarcodeは、USBスキャナーからキャプチャしたバーコードデータを検証し、C#アプリケーションのデータ整合性と精度を確保します。

IronBarcodeはバーコード生成をどのように扱っていますか?

IronBarcodeは、新しいバーコードをオンザフライで生成し、C#アプリケーション内で簡単にバーコードを作成し印刷できるようにします。

IronBarcodeにはUSBバーコードスキャニング用のエラーハンドリングサポートがありますか?

はい、IronBarcodeには、USBバーコードスキャニングと処理中に発生する一般的な問題を管理するための包括的なエラーハンドリングが含まれています。

IronBarcodeを使用してスキャンできるバーコードの種類は何ですか?

IronBarcodeはQRコード、UPC、Code 39など、多くのバーコードシンボロジーのスキャニングをサポートしており、さまざまなアプリケーションにおいて多用途です。

IronBarcodeはスキャンされたバーコードから構造化情報を抽出できますか?

はい、IronBarcodeはスキャンされたバーコードから構造化情報を抽出し、効率的なデータ処理と管理を支援します。

C#でUSBバーコードスキャナーアプリケーションの構築を始めるにはどうすればいいですか?

C#でUSBバーコードスキャナーアプリケーションの構築を始めるには、IronBarcodeと提供されたコード例とドキュメントを利用し、開発プロセスをガイドにします。

Jordi Bardia
ソフトウェアエンジニア
Jordiは、最も得意な言語がPython、C#、C++であり、Iron Softwareでそのスキルを発揮していない時は、ゲームプログラミングをしています。製品テスト、製品開発、研究の責任を分担し、Jordiは継続的な製品改善において多大な価値を追加しています。この多様な経験は彼を挑戦させ続け、興味を持たせており、Iron Softwareで働くことの好きな側面の一つだと言います。Jordiはフロリダ州マイアミで育ち、フロリダ大学でコンピュータサイエンスと統計学を学びました。