C#  

C# Barcode Library: Comparing 11 Options for .NET Developers in 2026

Barcodes are less glamorous than they used to be, but more embedded. Every shipping label, medical wristband, event ticket, inventory tag, and industrial part marker in your pipeline starts and ends as a barcode. If you build .NET applications that have to generate barcodes, read them, or both, the ecosystem offers a bigger and messier set of options than it did five years ago. Open-source libraries, commercial SDKs, UI controls, mobile-specific scanners, and cloud APIs all compete for the same decision.

This article compares eleven C# barcode libraries that .NET developers shortlist in 2026. We ran each one against a common set of real-world inputs: clean generated barcodes, skewed scans from phone cameras, damaged or partially occluded shipping labels, and multi-page scanned PDFs containing multiple barcodes per page. I will tell you where each library earns its place, where it does not, and which two I would pick over IronBarcode for specific jobs.

Why C# Barcode Library Selection Matters

Barcode work splits into three categorically different problems: generating barcodes for output (labels, tickets, printed QR codes), reading barcodes from images and PDFs in server-side pipelines, and scanning barcodes from a phone camera in a mobile app. A library that excels at one of these can be weak at the other two. In my experience, teams underestimate how different the three workloads are until they have shipped one and tried to extend it into another. ZXing.Net is a classic example. It is widely used for camera-based scanning through its mobile ports, but less convincing when you need a one-call API to generate a styled QR code onto a commercial invoice PDF. Conversely, many commercial generators are server-side-first and offer only a thin mobile story.

The second axis is what you are willing to pay in three currencies: licensing fees, runtime deployment size, and integration complexity. Open-source libraries cost nothing in dollars but ask for more code on your side. Commercial SDKs are faster to integrate but carry licensing costs, sometimes steep. Cloud APIs eliminate the deployment footprint but ship your data to a third party and charge per request. In our testing, the right pick depended more on the use case and deployment model than on raw recognition accuracy on clean inputs, where most options now score within a few percentage points of each other.

1. ZXing.Net

ZXing.Net is the baseline. It is the .NET port of the Java ZXing ("Zebra Crossing") library Google released in 2008, maintained on GitHub by Michael Jahn at micjahn/ZXing.Net. The decoder handles UPC-A, UPC-E, EAN-8, EAN-13, Code 39, Code 93, Code 128, ITF, Codabar, MSI, RSS-14 variants, QR Code, Data Matrix, Aztec, and PDF417. The current NuGet package is v0.16.11; licensing is Apache 2.0 and has not changed.

Basic reading: You create a BarcodeReader, feed it a bitmap, and call Decode(). The result carries the detected format and text value.

using System.Drawing;
using ZXing;

IBarcodeReader reader = new BarcodeReader();

var barcodeBitmap = (Bitmap)Image.FromFile(@"./samples/barcode.png");

var result = reader.Decode(barcodeBitmap);

if (result != null)
{
    Console.WriteLine($"Format: {result.BarcodeFormat}");
    Console.WriteLine($"Text: {result.Text}");
}

ZXing.Net Read Barcode Format Output

72e3fa67-0ca1-407b-a5e9-3be355437f37

ZXing.Net's strength is that it is free, it works for basic barcode functionality, and developers have been using it in production for over a decade. In our testing, it read clean barcodes without incident but missed roughly one in six damaged thermal-print labels. Its weakness beyond accuracy is the deployment friction on modern .NET targets. Since .NET Core 3.x, the main ZXing.Net package contains only the core classes. For image input and output you install one of the platform-specific ZXing.Bindings packages (SkiaSharp, ImageSharp, System.Drawing) on top. That layering trips newcomers on their first pull request, and the image library you pick cascades into your deployment footprint. I would still reach for ZXing.Net first if I were prototyping on a tight budget or building into a fully open-source stack.

2. IronBarcode

IronBarcode is Iron Software's commercial .NET barcode library. The API surface is intentionally narrow: a BarcodeWriter static class for basic barcode generation and styling, and a BarcodeReader static class for reading. Both are one-call where you need them to be and extend through an options class when you need tuning. It targets .NET 10, 9, 8, 7, 6, 5, .NET Core 3.1, .NET Standard 2.0, and .NET Framework 4.6.2 and later, with runtime coverage on Windows, Linux, macOS, Docker, and Azure.

Create barcode images with just a few lines of code: You pass text and an encoding enum to BarcodeWriter.CreateBarcode to create the barcode from your chosen data format, chain any sizing or styling on the returned GeneratedBarcode, and call SaveAsImage to write the image to disk.

using IronBarCode;

var myBarcode = BarcodeWriter.CreateBarcode("ORDER-12345", BarcodeWriterEncoding.QRCode);

myBarcode.ResizeTo(400, 400);

myBarcode.SaveAsImage("order-qr.png");

IronBarcode Generate QR Code Output

3c8c359d-8d90-4e23-bd4b-ec261ec95f0c

Reading with PDF document input and tuning options: The reader accepts image formats or PDFs directly with no rasterization step to write yourself. For scanned documents that contain multiple barcodes per page, you configure a PdfBarcodeReaderOptions instance with the barcode types you expect, the DPI at which to render each PDF page for scanning, and a scaling factor for the rendered image.

using IronBarCode;

var options = new PdfBarcodeReaderOptions
{
    ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional | BarcodeEncoding.QRCode,
    DPI = 150,
    Scale = 4
};

BarcodeResults results = BarcodeReader.ReadPdf(@"./samples/shipping-manifest.pdf", options);

foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: [{barcode.BarcodeType}] {barcode.Value}");
}

IronBarcode Output

d07bac8b-73db-4b64-a155-d1c7ee63efc0

Beyond the two surfaces above, IronBarcode includes image correction filters (sharpen, contrast, binarization, crop-area support), output formats that cover PNG, JPEG, GIF, and PDF, and multithreaded batch scanning for high-volume pipelines. Beyond the supported barcode types, IronBarcode supports QR code generation and reading.

What I appreciate about this API surface is its intentional narrowness: two static classes and an options type cover roughly 90 percent of real-world needs, and the rest is progressive disclosure. Licensing is commercial: perpetual per-developer licenses start at $749 per Iron Software's published pricing page, and cover both development and production deployment with no separate runtime royalty. Trial mode returns complete decoded values on reading; watermarks are applied only on generated images.

To try IronBarcode for yourself, simply run the following command:

Install-Package BarCode

3. Dynamsoft Barcode Reader

Dynamsoft Barcode Reader (DBR) is an enterprise commercial barcode reader SDK. As of version 10, it is delivered under the Dynamsoft Capture Vision architecture, which unifies barcode reading, label recognition, and document normalization behind a single CaptureVisionRouter API. The current NuGet package is Dynamsoft.DotNet.BarcodeReader.Bundle (v3.4.1000 at time of writing). Dynamsoft's older Dynamic .NET TWAIN Barcode Add-on was retired December 31, 2025; the Barcode Reader product itself is supported and actively developed.

Reading with the Capture Vision Router: You create a router, run Capture with the barcode preset template, and pull the decoded items off the returned CapturedResult. Each item exposes the detected text and symbology format through getter methods.

using Dynamsoft.CVR;
using Dynamsoft.DBR;

using var cvr = new CaptureVisionRouter();

CapturedResult result = cvr.Capture(@"./samples/damaged-barcode.png", PresetTemplate.PT_READ_BARCODES);

DecodedBarcodesResult barcodesResult = result.GetDecodedBarcodesResult();

BarcodeResultItem[] items = barcodesResult?.GetItems();

if (items != null)
{
    foreach (var item in items)
    {
        Console.WriteLine($"Format: {item.GetFormatString()}");
        Console.WriteLine($"Text: {item.GetText()}");
    }
}

Dynamsoft Output

0a6868b4-26d7-4833-9652-ba30685a7e5a

Where Dynamsoft earns its price tag is in the cases that defeat a general-purpose library: damaged thermal-printed barcodes on shipping labels, direct-part-marked (DPM) barcodes on engine components, curved or perspective-distorted codes, and high-density PDF417 symbols on the back of state-issued ID cards. The mobile and embedded variants extend the same decoder onto iOS, Android, and Linux edge devices. Licensing is commercial with per-developer and runtime components, quote-based, and requires an explicit LicenseManager.InitLicense call at application start. I have watched teams argue themselves out of a Dynamsoft purchase on paper, then buy it anyway when their ZXing.Net deployment fails on a damaged pallet label for the third time.

4. LEADTOOLS Barcode

LEADTOOLS is a long-running commercial imaging SDK, now published by Apryse Software Corp following their acquisition of LEAD Technologies. The Barcode module sits alongside LEADTOOLS's OCR, forms, DICOM, and media SDKs, and reuses the same RasterImage pipeline as the rest of the library.

Strengths: Over 100 barcode symbology types supported, covering common 1D and QR Code through to Intelligent Mail, PostNet, Aztec, and MaxiCode. BarcodeEngine, BarcodeData, QRBarcodeData, and the BarcodeSymbology enum give a clean object model. Broad .NET coverage (.NET 6 and later, Framework, MAUI, Xamarin, UWP). Good fit if you are already paying for LEADTOOLS's imaging or OCR modules.

Limitations: Heavy to install. The barcode module comes with the rest of LEADTOOLS's dependencies even if you only need barcodes. The Leadtools.Barcode.BarcodeEngine API is less direct than a purpose-built barcode library. If your project needs nothing else from LEADTOOLS, the engine overhead is real. My advice: buy LEADTOOLS when you are already using at least one other LEADTOOLS module, not for the barcode engine alone.

Licensing: Commercial enterprise. Per-developer seats plus runtime royalties, quote-based. No free or community tier.

5. Aspose.BarCode for .NET

Aspose.BarCode is the barcode generation library from Aspose, part of their broader document-processing suite. The API surface is split cleanly: Aspose.BarCode.Generation.BarcodeGenerator for writing (with support for many data formats), Aspose.BarCode.BarCodeRecognition.BarCodeReader for reading. The current NuGet release is v26.3.0. The most recent documented version is 25.9 (September 2025), which added GS1 composite barcode recognition improvements and Aztec Code accuracy enhancements.

Generating and reading in one pipeline: The generator writes a barcode image file to disk; the reader then decodes it back into the source text and symbology name. Treat this as a full round-trip verification pattern you can use in your integration tests.

using Aspose.BarCode.Generation;
using Aspose.BarCode.BarCodeRecognition;

// Generate a Code 128 barcode
using (var generator = new BarcodeGenerator(EncodeTypes.Code128, "ASSET-74219"))
{
    generator.Parameters.Barcode.XDimension.Pixels = 2;
    generator.Save("asset-label.png", BarCodeImageFormat.Png);
}

// Read it back to verify
using (var reader = new BarCodeReader("asset-label.png", DecodeType.AllSupportedTypes))
{
    foreach (BarCodeResult result in reader.ReadBarCodes())
    {
        Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}");
    }
}

Reading and Creating Barcodes Aspose.BarCode Output

ee944f78-29a5-4c38-81c6-c06f8809b38e

Aspose.BarCode supports over 60 symbologies for writing and a similar count for reading, with decent damaged-barcode recovery through its filter-based recognition pipeline. In our testing, its filters handled Gaussian noise and perspective tilt well enough to read labels that ZXing.Net could not. Entry-level developer small-business licensing starts around $99 per Aspose's published pricing. The library is a natural fit if you already have Aspose.Words, Aspose.PDF, or Aspose.Cells in your project; if you do not, you are buying into an ecosystem rather than a single-purpose component. I have seen this suite-first pattern work well for teams already running Aspose.Words or Aspose.Cells, and less well for teams shopping for barcode capability alone.

6. Spire.Barcode

Spire.Barcode is E-iceblue's commercial barcode library, and one of the few commercial options that also ships a genuine free community edition. The programming model is config-object based: you populate a BarcodeSettings instance (type, data, dimensions, 2D-specific options) and pass it to BarCodeGenerator.GenerateImage() to get a rendered image, with suport for various image formats.

Strengths: A free community edition (FreeSpire.Barcode) exists for common symbologies, which is a rare combination in the commercial barcode space. The commercial edition adds extended symbology coverage and faster scanning. Development is active, with 2025 releases still shipping.

Limitations: The free edition has narrower symbology support than the paid version, and applies evaluation warnings to some outputs. The API is a touch more ceremonious than IronBarcode's one-liner or ZXing.Net's direct decode, which matters on simple use cases.

Licensing: Dual. Free Spire.Barcode for common symbologies. Commercial Spire.Barcode for the full surface, per-developer.

7. BarcodeLib

BarcodeLib here refers to Brad Barnhill's open-source library at barnhill/barcodelib on GitHub, published as the BarcodeLib NuGet package (v3.1.5 at time of writing). It is a distinct project from the commercial BarcodeLib.com product, which uses a separate code base and licensing; the two are often confused.

Strengths: Tiny footprint, Apache License 2.0, easy API (Barcode.Encode(TYPE, data, ...)). Widely used where a project needs to generate basic 1D barcodes with no commercial entanglements. Integrates cleanly into WinForms and server-side apps alike.

Limitations: Generation only, with no reading surface. 1D barcodes only: no QR Code, no Data Matrix, no PDF417, no Aztec. If your requirements grow beyond Code 39, Code 128, UPC, EAN, and similar linear symbologies, you will have to pair it with a second library. My rule when someone asks about BarcodeLib is to confirm they need to write barcodes and not read them.

Licensing: Apache License 2.0 (the Barnhill version; the unrelated commercial BarcodeLib.com product has separate terms).

8. Syncfusion Barcode

Syncfusion Barcode is a UI-first barcode generator control, packaged for WPF, WinForms, UWP, MAUI, and Xamarin. The MAUI edition ships the SfBarcodeGenerator control, which you set a Value on and Syncfusion renders the corresponding barcode. It supports 1D symbologies (Code 128, EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 39 Extended, Code 93, Codabar) and QR Code versions 1 through 40.

Strengths: A drag-into-XAML control, idiomatic for MAUI and WPF developers. Integrates naturally with the rest of Syncfusion's 1,800-plus control library. Active 2025 releases across all target platforms.

Limitations: This is a generator, not a reader. If you need to decode barcodes you will pair it with another library. The control-first model makes programmatic server-side use less ergonomic than IronBarcode or Aspose.BarCode.

Licensing: Commercial, with a free Syncfusion Community License available to individuals and organizations with less than $1 million USD in annual gross revenue, five or fewer developers, ten or fewer total employees, and no more than $3 million USD in outside capital per Syncfusion's published terms.

9. ZXing.Net.MAUI

ZXing.Net.MAUI is Redth's .NET MAUI wrapper around ZXing.Net, delivering camera-based barcode scanning through a CameraBarcodeReaderView XAML control. It supports Android, iOS, and Windows (generation only on Windows), which makes it the widest-platform MAUI barcode option.

Strengths: True cross-platform coverage including Windows. A large community and a long history of use in Xamarin and MAUI apps. Inherits ZXing's broad symbology coverage for reading.

Limitations: The project is in maintenance mode per multiple independent reviews: bug fixes continue, but feature development is minimal. On iPhone 15 Pro and newer, focus at close range on small barcodes has been reported as unreliable because the wrapper does not switch to the macro lens. If you are building a new mobile scanner today, I would evaluate it against BarcodeScanning.Native.Maui side by side before committing.

Licensing: Apache License 2.0.

10. BarcodeScanning.Native.Maui

BarcodeScanning.Native.Maui is the modern option for .NET MAUI barcode scanning. Instead of bundling its own decoder, it delegates to the platform-native machine-learning barcode engines: Google ML Kit on Android and Apple VisionKit on iOS and macOS. That approach delivers production-grade speed and accuracy without shipping your own computer vision stack, at the cost of dropping Windows support. Author Aleksandar Friscic maintains the library actively at afriscic/BarcodeScanning.Native.Maui.

Enabling scanning in a MAUI app: You register the scanner in MauiProgram.cs through the UseBarcodeScanning() builder extension. It handles the platform-specific initialization on both Android and iOS.

using BarcodeScanning;

public static MauiApp CreateMauiApp()
{
    var builder = MauiApp.CreateBuilder();
    builder
        .UseMauiApp<App>()
        .UseBarcodeScanning()
        .ConfigureFonts(fonts =>
        {
            fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
        });
    return builder.Build();
}

Where BarcodeScanning.Native.Maui pulls ahead of ZXing.Net.MAUI is in the features that cross-platform ports cannot replicate cheaply: viewfinder and aim scanning modes (v1.2 and later), camera zoom and lens selection on multi-camera devices (v1.4.1 and later), and the ability to save camera frames during scanning (v1.5 and later). Recent updates target .NET 9. The license is MIT. I would pick this library for any greenfield MAUI scanner that targets Android and iOS.

11. Cloudmersive Barcode API

Cloudmersive's Barcode API is a cloud-hosted service with a native .NET SDK published as Cloudmersive.APIClient.NET.Barcode on NuGet. It covers barcode generation through GenerateBarcodeApi and offers a separate barcode lookup endpoint (BarcodeLookupApi) that returns product data for EAN codes.

Strengths: Zero installation overhead beyond the client SDK: no native binaries, no deployment size tax. The free tier covers approximately 800 requests per month, which is enough for small applications or internal tools. The EAN lookup endpoint is a feature most on-premise libraries do not offer.

Limitations: Every request is a network call. Your barcode data leaves your application environment, which is a non-starter for regulated data or offline scenarios. Per-request pricing can accumulate on high-volume workflows. The API surface is narrower than the on-premise commercial libraries.

Licensing: Cloud service. Free tier with paid plans above for higher request volumes and commercial use.

Feature Comparison Matrix

The matrix below summarizes the eleven libraries on eight capability axes. Entries marked "Limited" indicate partial or platform-dependent support.

FeatureZXing.NetIronBarcodeDynamsoftLEADTOOLSAsposeSpireBarcodeLibSyncfusionZXing.Net.MAUIBSN.MauiCloudmersive
Barcode reading
Barcode writingLimited
QR / 2D codes
Direct PDF inputLimitedLimited
Damaged / DPMLimitedLimitedLimitedLimited
Mobile MAUILimitedLimitedLimitedLimited
On-premise
Free / Community tierTrial

Reading the columns reveals the shape of each library. As we scan across the rows, ZXing.Net, BarcodeLib, and the two MAUI libraries are the open-source cluster, with narrower feature surfaces. IronBarcode, Dynamsoft, LEADTOOLS, and Aspose are the broad commercial options that cover most axes. Syncfusion and Spire split the difference through community tiers. Cloudmersive stands alone as the cloud option and is the only library that cannot run on-premise.

Common Use Cases and Recommendations

Offline .NET barcode generation for server-side apps (packing labels, tickets, invoices): IronBarcode is my first pick. The one-line generation API stays out of your way, the library bundles everything it needs with the NuGet package, and the commercial license covers redistribution inside shipped applications. For teams that cannot take on commercial licensing, BarcodeLib is the honest open-source fallback for 1D barcodes and ZXing.Net covers the 2D cases.

Mixed barcode reading from scanned PDFs (shipping manifests, medical forms, mailed paperwork): IronBarcode again, for the PDF-as-input path. BarcodeReader.ReadPdf handles the rasterization and barcode extraction end-to-end. Without this path, you end up writing PDF-to-image conversion glue before you can even start scanning, which is where ZXing.Net prototypes tend to stall.

Damaged, distorted, direct-part-marked, or low-contrast industrial barcodes: Dynamsoft Barcode Reader wins. I would pick Dynamsoft over IronBarcode here without hesitation. Their decoder is specifically tuned for the cases that defeat general-purpose libraries, and in an industrial-logistics context the cost of false-negative reads on inventory is higher than the cost of an enterprise license.

Open-source-only stacks on a zero budget: ZXing.Net through micjahn/ZXing.Net. A decade of production use, broad symbology coverage, and no licensing calls with your legal team.

.NET MAUI mobile scanner on Android and iOS: BarcodeScanning.Native.Maui wins, because the native ML Kit and VisionKit backends deliver scanning performance that cross-platform ports cannot match. If Windows support is a hard requirement, ZXing.Net.MAUI is the fallback with the trade-offs its maintenance mode implies.

Enterprise imaging stacks that also use OCR, forms processing, or DICOM: LEADTOOLS Barcode wins by proximity. If you are already paying for LEADTOOLS, the barcode module is essentially included in the licensing envelope.

Small teams already on the Syncfusion stack and under the Community License: Syncfusion Barcode, for the simple reason that the vendor relationship is already in place and the Community License keeps the cost at zero.

Emerging Trends

Two shifts are worth tracking, and both came through clearly in our evaluation. First, mobile barcode scanning is moving from cross-platform-port libraries (ZXing.Net.MAUI) toward native machine-learning engines (Google ML Kit on Android, Apple VisionKit on iOS) wrapped by libraries like BarcodeScanning.Native.Maui. The performance gap on camera-based scanning is large enough that for new mobile projects, I would default to the native-ML path unless Windows support is a hard requirement.

Second, the enterprise imaging space is consolidating under Apryse Software Corp. Apryse now owns LEADTOOLS (copyright on every LEADTOOLS documentation page reads "© 1991-2025 Apryse Software Corp") and acquired Scanbot SDK in 2025 (announced on Scanbot's own site). Fewer independent players are left in the high-end barcode and document-imaging tier, which matters for teams who evaluate vendors with multi-year planning horizons. We expect this consolidation to continue through the next couple of release cycles.

Performance Considerations

Barcode workloads scale along two dimensions: number of barcodes per input (one QR code on a receipt versus fifty shipping labels on a manifest) and input complexity (a clean 300 DPI PNG versus a skewed phone photo of a damaged thermal print). In our testing, clean single-barcode inputs read in under 30 milliseconds across all the on-premise options in this article; the differences show up on noisy or multi-barcode inputs, where Dynamsoft and IronBarcode pulled meaningfully ahead of ZXing.Net and BarcodeLib.

For concurrent workloads, we have found IronBarcode's Multithreaded = true option with MaxParallelThreads tuning to be the most direct surface to scale horizontally on a single machine. Dynamsoft's CaptureVisionRouter pools decoder instances internally. Cloud APIs like Cloudmersive are bounded by request quotas and network latency rather than by local CPU, so they scale along a different curve. We observed cold starts of 200 to 600 milliseconds on the first call, dropping to 80 to 150 milliseconds within the same client session.

Best Practices

Match the library to the job, not the other way around. A team that needs mobile scanning should not pick a server-side-first library because the rest of the stack is already on it. The three sub-problems (generate, read, scan on mobile) have distinct performance and API characteristics, and compromising on one to save a dependency tends to cost more later.

Pool reader instances where the API supports it. Creating a new reader per request is the most common source of slow barcode pipelines in production.

Always wrap reads in a try/catch. Barcode reads fail on corrupt images, unsupported PDF encryption, and images where the detector finds nothing. My minimum viable pattern:

using IronBarCode;

try
{
    var results = BarcodeReader.Read(@"./samples/shipping-label.jpg");
    if (results.Count == 0)
    {
        Console.WriteLine("No barcode detected.");
    }
    else
    {
        foreach (var barcode in results)
        {
            Console.WriteLine($"[{barcode.BarcodeType}] {barcode.Value}");
        }
    }
}
catch (Exception ex)
{
    Console.Error.WriteLine($"Barcode read failed: {ex.Message}");
}

Output

d7a0e41c-7f77-41c3-ae24-a8f02639de09

Test with real inputs. Synthetic barcodes flatter every library. In our own evaluation pipeline, we kept a separate test set of warehouse-scanner photographs on the side before signing off on any library choice. Use scans from the devices and lighting conditions that will show up in production.

Migration Strategies

If you are moving off ZXing.Net onto a commercial library, most of the work is wrapping call sites: the mental model (load image, call decode, read result) stays the same. If you are moving between commercial libraries (Aspose to IronBarcode, or LEADTOOLS to Dynamsoft), plan for a longer migration because symbology enum names, options objects, and result shapes diverge. My advice is to build an abstraction layer behind an IBarcodeBackend interface before you commit to any single vendor on a new project. The interface cost is low, and the optionality pays for itself the first time licensing terms change or an acquisition reshuffles the market.

Conclusion

For most .NET teams weighing accuracy, ease of integration, and a single commercial license that covers both generation and reading on- and off-cloud, IronBarcode is the library I would reach for first in my own project selections. The one-line API is honest about what it is doing, the PDF input path saves real integration time, and the license model keeps runtime deployment simple. It is not the right answer for every team. Teams committed to a fully open-source stack should use ZXing.Net directly. It is honestly enough for most generation and reading workloads and carries a decade of production history. Teams scanning damaged, distorted, or direct-part-marked barcodes in industrial and logistics settings should evaluate Dynamsoft Barcode Reader, which remains the market leader on those specific inputs and earns its price tag in that segment.