IRONSOFTWAREHOME
USING IRONBARCODE

如何在.NET中构建条形码阅读器SDK?

Curtis Chau
Curtis Chau
Updated: 2026年6月28日

IronBarcode允许.NET开发人员以最少的代码向其应用程序添加条形码读取功能。 它支持多种格式,包括一维和二维条形码、各种图像源,并利用基于机器学习的检测技术,为生产环境提供高精度。

条形码扫描对于许多应用至关重要,从库存管理到零售和物流。 通过将条形码读取功能集成到.NET应用程序中,您可以简化数据采集、自动化工作流程并提高效率。 在评估条形码阅读器解决方案时,请考虑支持的格式、处理速度和集成复杂性等因素。 IronBarcode库提供完全的跨平台兼容性和卓越的容错功能。

IronBarcode是一个高效的.NET库,可以简化条形码的处理。 借助此工具,您可以读取图像PDF 文件中的条形码,还可以使用C# QR 码生成器生成 QR 码。 本文将向您展示如何将条形码扫描集成到您的.NET应用程序中,重点介绍如何创建 API 或 Web 应用程序集成来公开条形码扫描功能。 该库支持各种条形码格式,包括一维和二维条形码,并具有高级生成功能样式选项

IronBarcode集成的最佳应用场景有哪些?

IronBarcode在以下情况下表现出色:

*库存管理系统– 支持多条形码读取多页 TIFF/GIF,实现产品跟踪自动化 *物流应用– 使用高速读取和可自定义输出格式处理运输条形码 *零售POS系统– 使用Code 39一维条形码生成验证交易 *文档处理– 使用自定义阅读器设置PDF 发票中提取数据 *医疗保健应用– 使用二维格式读取患者 ID 并进行错误纠正 *生产质量控制– 运行带有可配置条形码边距的批量处理

如何在.NET中创建条形码读取器SDK?

要创建可作为服务在应用程序中提供的条形码阅读器,请将IronBarcode集成到 REST API 或 Web 应用程序中。架构选择取决于您的处理需求:单张图像处理适用于偶尔扫描,批量处理适用于文档工作流程,流处理适用于连续扫描应用程序。 以下是一个使用ASP.NET Core并充分考虑线程安全的示例。 该图书馆的阅读功能包括先进的图像创建过滤器,以实现最佳精度。

  1. 使用NuGet包安装用于在 C# 中读取条形码的.NET库
  2. 创建一个可重用的条形码扫描类,并具备完善的错误处理机制。
  3. 开发从不同来源读取条形码的方法
  4. 使用改进设置将条形码图像读取功能集成到您的应用程序中
  5. 通过阅读速度选项测试和改进性能

开始之前我需要准备什么?

如果您还没有下载IronBarcode ,请立即下载到您的项目中。 请确保您拥有适用于您预期用途的正确许可证密钥。 请注意,通过公共 API 公开 IronBarcode 的功能或将其作为独立服务转售需要额外的许可(SDK、OEM 或 SaaS)。 请务必在继续操作前了解许可选项。 对于开发环境,您可以先使用免费试用版,然后在准备好投入生产环境时应用您的许可证密钥。 查看变更日志以获取最新更新和里程碑信息

为了获得最佳性能,请考虑您的部署环境。 IronBarcode支持跨平台兼容性,包括WindowsLinuxmacOSDocker以及AzureAWS Lambda等云平台。 移动开发者可以通过Blazor集成获得对AndroidiOS 的支持。 对于.NET MAUI应用程序,请按照条形码扫描器阅读器教程进行操作。

如何创建条形码扫描器类?

在设置IronBarcode并将其安装到项目中之后,您可以创建一个可重用的条形码扫描器类,该类集成了 IronBarcode 的功能并将其公开为 API 端点。 该实现方案包括性能优化和图像校正,以应对具有挑战性的场景,并进行方向校正。 如果条形码位置可预测,可以考虑实施作物区域划分以加快处理速度:

using IronBarCode;
using System.IO;
using System.Collections.Concurrent;
using System.Threading.Tasks;

namespace BarcodeIntegration
{
    public class BarcodeScanner
    {
        private static readonly ConcurrentDictionary<string, BarcodeReaderOptions> _optionsCache = new();
        
        static BarcodeScanner()
        {
            // Set the license key
            IronBarCode.License.LicenseKey = "Your-License-Key";
        }

        // Method to read a barcode from an image file with performance optimization
        public string ReadBarcodeFromImage(string imagePath, BarcodeReadingSpeed speed = BarcodeReadingSpeed.Balanced)
        {
            try
            {
                var options = GetCachedOptions(speed);
                // Try to read the barcode from the given image path
                var barcode = BarcodeReader.Read(imagePath, options);
                return barcode?.ToString() ?? "No Barcode Found"; // Return the barcode string or indicate no barcode was found
            }
            catch (Exception ex)
            {
                // Return an error message if an exception occurs
                return $"Error reading barcode: {ex.Message}";
            }
        }

        // Method to read a barcode from a stream (e.g., file upload or memory stream)
        public async Task<string> ReadBarcodeFromStreamAsync(Stream inputStream)
        {
            try
            {
                var options = GetCachedOptions(BarcodeReadingSpeed.Detailed);
                // Enable image correction for better accuracy
                options.ImageFilters = new[] { 
                    new SharpenFilter(), 
                    new ContrastFilter() 
                };
                
                // Try to read the barcode from the given stream
                var barcode = await Task.Run(() => BarcodeReader.Read(inputStream, options));
                return barcode?.ToString() ?? "No barcode found";
            }
            catch (Exception ex)
            {
                return $"Error reading barcode: {ex.Message}";
            }
        }

        // Method to read a barcode from a PDF file with batch processing support
        public async Task<List<string>> ReadBarcodesFromPdfAsync(string filePath)
        {
            try
            {
                var options = new BarcodeReaderOptions
                {
                    ExpectMultipleBarcodes = true,
                    Speed = BarcodeReadingSpeed.Detailed
                };
                
                // Try to read barcodes from the given PDF file path
                var barcodes = await Task.Run(() => BarcodeReader.ReadPdf(filePath, options));
                return barcodes.Select(b => b.ToString()).ToList();
            }
            catch (Exception ex)
            {
                return new List<string> { $"Error reading barcode: {ex.Message}" };
            }
        }
        
        // Cache reader options for performance
        private BarcodeReaderOptions GetCachedOptions(BarcodeReadingSpeed speed)
        {
            return _optionsCache.GetOrAdd(speed.ToString(), _ => new BarcodeReaderOptions
            {
                Speed = speed,
                AutoRotate = true,
                RemoveFalsePositive = true
            });
        }
    }
}

改进的BarcodeScanner类通过选项缓存进行性能优化,异步处理以提高可扩展性,以及图像滤镜以提高准确性。 该实现遵循 SOLID 原则,并提供可用于生产环境的错误处理。 如需更多功能,请考虑使用System.Drawing 集成导出为流。 您还可以创建具有自定义条形码样式二维码样式的条形码图像

读取不同来源的条形码应该使用哪些方法?

每种方法都针对特定用例和处理要求进行了改进:

  • ReadBarcodeFromImage(string imagePath): 从图像文件读取条形码。
  • ReadBarcodeFromStream(Stream inputStream): 从输入流(例如,文件上传或内存流)读取条形码。
  • ReadBarcodeFromPdf(string filePath): 从PDF文件读取条形码。

对于大批量生产场景,如果条形码位置可预测,可以考虑使用作物区域来提高处理速度,最高可达 5 倍。 您还可以创建条形码图像或以各种格式保存条形码。 该库支持从 System.Drawing 对象读取数据,并可将条形码导出为 HTMLPDF 文档

如何通过 REST API 公开条形码读取功能?

要允许外部应用程序使用您的条形码扫描功能,请使用ASP.NET Core将其公开为 REST API。 该实现方案包括适当的错误处理、验证以及对多种输入格式的支持。 您还可以使用C# 条形码图像生成器生成条形码,或探索条形码快速入门示例。 处理 PDF 文件时,可考虑在现有 PDF 文件上添加条形码以进行文档跟踪:

using Microsoft.AspNetCore.Mvc;
using System.IO;
using Microsoft.AspNetCore.Http;
using BarcodeIntegration;

[ApiController]
[Route("api/barcode")]
public class BarcodeController : ControllerBase
{
    private readonly BarcodeScanner _barcodeScanner;
    private readonly ILogger<BarcodeController> _logger;

    public BarcodeController(ILogger<BarcodeController> logger)
    {
        _barcodeScanner = new BarcodeScanner();
        _logger = logger;
    }

    // POST endpoint to read barcode from an uploaded image
    [HttpPost("read-from-image")]
    public async Task<IActionResult> ReadFromImage(IFormFile file)
    {
        if (file == null || file.Length == 0)
            return BadRequest(new { Error = "No file uploaded" });
            
        // Validate file type
        var allowedTypes = new[] { "image/jpeg", "image/png", "image/gif", "image/bmp", "image/tiff" };
        if (!allowedTypes.Contains(file.ContentType.ToLower()))
            return BadRequest(new { Error = "Unsupported file type" });
            
        try
        {
            using var stream = file.OpenReadStream();
            var result = await _barcodeScanner.ReadBarcodeFromStreamAsync(stream);
            
            _logger.LogInformation($"Barcode read successfully from {file.FileName}");
            return Ok(new { Barcode = result, FileName = file.FileName });
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Error processing barcode");
            return StatusCode(500, new { Error = "Internal server error" });
        }
    }
    
    // POST endpoint for batch processing
    [HttpPost("read-batch")]
    public async Task<IActionResult> ReadBatch(List<IFormFile> files)
    {
        var results = new List<object>();
        
        foreach (var file in files)
        {
            using var stream = file.OpenReadStream();
            var result = await _barcodeScanner.ReadBarcodeFromStreamAsync(stream);
            results.Add(new { FileName = file.FileName, Barcode = result });
        }
        
        return Ok(new { Results = results, Count = results.Count });
    }

    // POST endpoint to generate barcode from data
    [HttpPost("generate")]
    public IActionResult GenerateBarcode([FromBody] BarcodeGenerationRequest request)
    {
        try
        {
            // Create barcode with specified data and format
            var barcode = BarcodeWriter.CreateBarcode(request.Data, request.Format ?? BarcodeWriterEncoding.Code128);
            
            // Apply custom styling if requested
            if (request.Width.HasValue && request.Height.HasValue)
                barcode.ResizeTo(request.Width.Value, request.Height.Value);
                
            if (!string.IsNullOrEmpty(request.ForegroundColor))
                barcode.ChangeBarCodeColor(System.Drawing.ColorTranslator.FromHtml(request.ForegroundColor));
                
            // Return as base64 encoded image
            using var ms = barcode.ToStream();
            var bytes = ms.ToArray();
            return Ok(new { 
                Image = Convert.ToBase64String(bytes),
                Format = request.Format?.ToString() ?? "Code128",
                Data = request.Data 
            });
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Error generating barcode");
            return BadRequest(new { Error = "Failed to generate barcode" });
        }
    }
}

public class BarcodeGenerationRequest
{
    public string Data { get; set; }
    public BarcodeWriterEncoding? Format { get; set; }
    public int? Width { get; set; }
    public int? Height { get; set; }
    public string ForegroundColor { get; set; }
}

在 Swagger UI 中,API 的显示效果如何?

Swagger UI显示BarcoderScannerSDK API,其中包含两个用于从图像和PDF读取条形码的POST端点,具有文件上传界面和请求配置选项

API响应是什么样的?

API文档显示成功的POST请求到条形码读取端点,该请求返回'Hello World!',并带有200 OK响应状态

此 API 公开 POST 端点,您可以在其中上传条形码图像,API 将返回条形码数据。 该实现方案包括适当的验证、错误处理和日志记录,以满足生产环境的需求。 对于移动应用程序,可以考虑添加针对更小图像尺寸和更快响应时间进行改进的端点。 您还可以从数据创建条形码,或将其导出为HTMLPDF 。 对于高对比度要求,生成1-BPP 条形码图像。## 我可以添加哪些高级功能?

为了进一步改进您的 SDK,请考虑使用 IronBarcode 的完整API 参考来实现这些可用于生产环境的功能。 浏览功能概述并查看演示以了解实际应用:

如何支持多种条形码类型?

IronBarcode支持同时读取多个条形码。 您可以配置 SDK,使其能够一次接受多个条形码,并进行特定的格式筛选。 该库支持编写包含中文和阿拉伯字符的Unicode条形码。 对于特殊应用,可以探索Code 39 读取功能创建具有自定义样式的二维码

public async Task<List<BarcodeResult>> ReadMultipleBarcodesAsync(string imagePath, BarcodeEncoding[] expectedTypes = null)
{
    try
    {
        var options = new BarcodeReaderOptions()
        {
            ExpectMultipleBarcodes = true,
            ExpectBarcodeTypes = expectedTypes ?? BarcodeEncoding.All,
            Speed = BarcodeReadingSpeed.Detailed,
            MaxParallelThreads = Environment.ProcessorCount,
            Multithreaded = true
        };
        
        // Apply confidence threshold for machine learning accuracy
        options.Confidence = Confidence.High;
        
        var results = await Task.Run(() => BarcodeReader.Read(imagePath, options));
        
        return results.Select(barcode => new BarcodeResult
        {
            Value = barcode.ToString(),
            Format = barcode.BarcodeType.ToString(),
            Confidence = barcode.Confidence,
            Position = barcode.Rect
        }).ToList();
    }
    catch (Exception ex)
    {
        _logger.LogError(ex, "Error reading multiple barcodes");
        throw;
    }
}

我还应该考虑哪些其他改进措施?

***错误处理:**实现完整的错误处理,包括MSI 条形码识别 ***批量处理:**创建用于异步批量处理1-BPP 条形码图像的方法 ***性能监控:**添加读取速度配置指标 ***缓存:**对频繁扫描的条形码实施结果缓存 **图像预处理:**使用方向校正对比度滤波器 ***格式特定优化:**配置GS1-128新格式的设置

对于生产环境部署,可以考虑实施置信度阈值,以减少误报并确保数据准确性。 基于机器学习的检测方法可以根据您的具体使用场景进行微调。 创建部署包时,请按照MSI 安装程序指南进行操作,并解决任何缺失的 DLL 问题。 对于 AWS 部署,请注意潜在的运行时问题。 考虑创建具有各种输出数据格式的条形码,并探索条形码读取教程

我应该注意哪些许可方面的注意事项?

如前所述,IronBarcode SDK是为了集成到您的内部应用程序中,通过API公开需要额外的许可。 在将IronBarcode作为服务的一部分(例如公共 API)公开之前,您必须获得必要的许可(SDK、OEM 或 SaaS)。 对于Enterprise部署,请考虑使用可用的许可扩展来增加席位或改进支持。 查看升级选项,以扩展您的部署规模。

未经许可,请勿将IronBarcode作为独立 SDK 转售,或通过面向公众的 API 公开,除非您已确保您的许可涵盖此用途。 对于 Web 应用程序,您可能需要在 web.config 中配置许可证密钥才能正确激活。 随时了解安全 CVE 更新,并遵循运行时复制例外的最佳实践。 对于技术问题,请考虑提交工程请求。 查看有关编写 Unicode 条形码的资源,并探索读取条形码教程

我今天为什么要尝试IronBarcode ?

体验IronBarcode的全新功能。 试用我们的免费试用版,体验适用于.NET应用程序的流畅条形码生成、读取和编辑功能。 凭借高级功能、卓越的性能和用户友好的界面,IronBarcode是满足您所有条码需求的终极解决方案。 请浏览我们的完整文档、查看代码示例并观看实时演示,以了解其全部功能。 查看有关读取条形码的教程,并了解MicroQR 和 rMQR支持。 了解适用于不同部署场景的NuGet包选项。 您还可以查阅IronBarcode文档,了解有关我们完整条形码解决方案的更多信息。 立即开始免费试用,提升您的项目质量。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

...
阅读更多

相关文章

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户