Поделиться через


Получение и распознавание данных штрихкода

В этом разделе описывается, как получить данные из сканера штрихкодов в объекте BarcodeScannerReport и понять его формат и содержимое.

После настройки сканера штрихкодов и сканирования штрихкода возникает событие DataReceived . Приложение ClaimedBarcodeScanner должно подписаться на это событие. Событие DataReceived передает объект BarcodeScannerDataReceivedEventArgs , который можно использовать для доступа к данным штрихкода.

Подписка на событие DataReceived

После получения утверждения ClaimedBarcodeScanner используйте его для подписки на событие DataReceived :

claimedBarcodeScanner.DataReceived += ClaimedBarcodeScanner_DataReceived;

Обработчик событий будет передан объект ClaimedBarcodeScanner и объект BarcodeScannerDataReceivedEventArgs. Вы можете получить доступ к данным штрихкода через свойство Report этого объекта, которое имеет тип BarcodeScannerReport.

private async void ClaimedBarcodeScanner_DataReceived(ClaimedBarcodeScanner sender, BarcodeScannerDataReceivedEventArgs args)
{
    // Parse the data
}

Получение данных

Получив barcodeScannerReport, вы можете получить доступ к данным штрихкода и проанализировать их. BarcodeScannerReport имеет три свойства:

  • ScanData: полные необработанные данные штрихкода.
  • ScanDataLabel: декодированная метка штрихкода, которая не включает заголовок, проверка sum и другие прочие сведения.
  • ScanDataType: тип декодированного метки штрихкода. Возможные значения определяются в классе BarcodeSymbologies .

Если вы хотите получить доступ к ScanDataLabel или ScanDataType, необходимо сначала задать значение true IsDecodeDataEnabled.

claimedBarcodeScanner.IsDecodeDataEnabled = true;

Получение типа данных сканирования

Получение декодированного типа метки штрихкода является довольно тривиальным— мы просто вызываем GetName в ScanDataType.

private string GetSymbology(BarcodeScannerDataReceivedEventArgs args)
{
    return BarcodeSymbologies.GetName(args.Report.ScanDataType);
}

Получение метки данных сканирования

Чтобы получить декодированную метку штрихкода, необходимо учитывать несколько вещей. Только определенные типы данных содержат закодированный текст, поэтому сначала следует проверка, если символику можно преобразовать в строку, а затем преобразовать буфер, полученный из ScanDataLabel, в закодированную строку UTF-8.

private string GetDataLabel(BarcodeScannerDataReceivedEventArgs args)
{
    uint scanDataType = args.Report.ScanDataType;

    // Only certain data types contain encoded text.
    // To keep this simple, we'll just decode a few of them.
    if (args.Report.ScanDataLabel == null)
    {
        return "No data";
    }

    // This is not an exhaustive list of symbologies that can be converted to a string.
    else if (scanDataType == BarcodeSymbologies.Upca ||
        scanDataType == BarcodeSymbologies.UpcaAdd2 ||
        scanDataType == BarcodeSymbologies.UpcaAdd5 ||
        scanDataType == BarcodeSymbologies.Upce ||
        scanDataType == BarcodeSymbologies.UpceAdd2 ||
        scanDataType == BarcodeSymbologies.UpceAdd5 ||
        scanDataType == BarcodeSymbologies.Ean8 ||
        scanDataType == BarcodeSymbologies.TfStd)
    {
        // The UPC, EAN8, and 2 of 5 families encode the digits 0..9
        // which are then sent to the app in a UTF8 string (like "01234").
        return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, args.Report.ScanDataLabel);
    }

    // Some other symbologies (typically 2-D symbologies) contain binary data that
    // should not be converted to text.
    else
    {
        return "Decoded data unavailable.";
    }
}

Получение необработанных данных сканирования

Чтобы получить полные необработанные данные из штрихкода, мы просто преобразуем буфер, полученный из ScanData в строку.

private string GetRawData(BarcodeScannerDataReceivedEventArgs args)
{
    // Get the full, raw barcode data.
    if (args.Report.ScanData == null)
    {
        return "No data";
    }

    // Just to show that we have the raw data, we'll print the value of the bytes.
    else
    {
        return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, args.Report.ScanData);
    }
}

Обычно эти данные отображаются в формате, доставляемом из сканера. Однако сведения о заголовке сообщения и трейлере удаляются, так как они не содержат полезных сведений для приложения и, скорее всего, относятся к сканеру.

Общие сведения о заголовке — это символ префикса (например, символ STX). Общие сведения о трейлере — это символ конца (например, символ ETX или CR) и блок проверка символ, если он создается сканером.

Это свойство должно содержать символьный символ, если он возвращается сканером (например, A для ПРОВЕРКИ). Он также должен включать проверка цифры, если они присутствуют в метке и возвращаются сканером. (Обратите внимание, что оба символьных символа и проверка цифры могут присутствовать или не могут присутствовать в зависимости от конфигурации сканера. Сканер вернет их, если они присутствуют, но не будут создавать или вычислять их, если они отсутствуют.)

Некоторые товары могут быть помечены дополнительным штрихкодом. Этот штрихкод обычно помещается справа от основного штрихкода и состоит из дополнительных двух или пяти символов информации. Если сканер считывает товары, содержащие как основные, так и дополнительные штрихкоды, дополнения добавляются к основным символам, а результат доставляется приложению как одна метка. (Обратите внимание, что сканер может поддерживать конфигурацию, которая включает или отключает чтение дополнительных кодов.)

Некоторые товары могут быть помечены несколькими этикетками, иногда называемыми многосимболными этикетками или многоуровневыми этикетками. Эти штрихкоды обычно упорядочены по вертикали и могут быть одинаковыми или различными символами. Если сканер считывает товары, содержащие несколько меток, каждый штрихкод доставляется приложению в виде отдельной метки. Это необходимо из-за текущего отсутствия стандартизации этих типов штрихкодов. Один не может определить все варианты на основе отдельных данных штрихкода. Поэтому приложению потребуется определить, когда был считывается несколько штрихкодов меток на основе возвращаемых данных. (Обратите внимание, что сканер может или не поддерживает чтение нескольких меток.)

Это значение задается перед событием DataReceived , которое вызывается в приложение.

Поддержка и обратная связь

Получение ответов на вопросы

Есть вопросы? Попросите нас на форуме "Документы Q&A" с тегом UWP или Stack Overflow с тегом pointofservice.

Помогите нам найти свои вопросы:

См. также