使用IRONBARCODE 如何使用IronBarcode在C#中構建條碼掃描器API Jordi Bardia 發表日期:9月 29, 2025 Download IronBarcode NuGet 下載 DLL 下載 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article 在 .NET 中構建 C# 掃描器 API 傳統上需要複雜的掃描器 SDK 集成或受限的軟件庫。 使用IronBarcode,開發人員可以在幾分鐘內創建一個強大且準備投產的條碼掃描器 API。 這些可以輕鬆地從圖像、PDF 甚至損壞的掃描輸入中處理條碼數據。 本教程展示了如何使用 ASP.NET Core 在 Windows 上構建 RESTful 掃描器 API,提供一個可擴展的硬件掃描器設備替代方案,同時保持企業級準確性。 該 API 能夠處理多種類型的掃描器,處理二進制數據,並從任何支持的矩陣或表格格式中提取條碼值。 如何安裝和設置 IronBarcode? 使用 IronBarcode 的入門過程就像安裝一個 NuGet 包一樣簡單。 打開您的 ASP.NET Core 項目,並在包管理器控制台中運行此命令: Install-Package BarCode 安裝後,將 IronBarcode 命名空間添加到您的控制器中,並使用這段一行代碼示例來測試該庫: using IronBarCode; // Simple test to verify installation var result = BarcodeReader.Read("test-barcode.png"); Console.WriteLine($"Scanned: {result.First().Value}"); using IronBarCode; // Simple test to verify installation var result = BarcodeReader.Read("test-barcode.png"); Console.WriteLine($"Scanned: {result.First().Value}"); IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 此代碼讀取條碼圖像並輸出其值。 BarcodeReader.Read() 方法自動檢測條碼格式並返回結果集合,使從任何支持的圖像中提取條碼數據(jpeg、bmp、png、tiff)以及使用數組或二進制數據格式變得極其簡單。 我如何構建完整的掃描器 API 控制器? 使用 ASP.NET Core 創建掃描器 API 涉及設置具有接受各種輸入源的參數的控制器。 這裡是一個完整的實現: using Microsoft.AspNetCore.Mvc; using IronBarCode; using System.Drawing; namespace BarcodeScannerAPI.Controllers { [ApiController] [Route("api/[controller]")] public class ScannerController : ControllerBase { // Model for API responses public class ScanResult { public bool Success { get; set; } public List<string> BarcodeValues { get; set; } = new List<string>(); public string BarcodeFormat { get; set; } public string ErrorMessage { get; set; } } [HttpPost("scan-file")] public async Task<ActionResult<ScanResult>> ScanFile(IFormFile file) { if (file == null || file.Length == 0) return BadRequest(new ScanResult { Success = false, ErrorMessage = "No file uploaded" }); try { using var stream = new MemoryStream(); await file.CopyToAsync(stream); // Configure scanner options for better accuracy var options = new BarcodeReaderOptions { Speed = ReadingSpeed.Balanced, ExpectMultipleBarcodes = true, ExpectBarcodeTypes = BarcodeEncoding.All }; // Read barcodes from the uploaded file var results = BarcodeReader.Read(stream.ToArray(), options); if (results.Any()) { return Ok(new ScanResult { Success = true, BarcodeValues = results.Select(r => r.Value).ToList(), BarcodeFormat = results.First().BarcodeType.ToString() }); } return Ok(new ScanResult { Success = false, ErrorMessage = "No barcodes found" }); } catch (Exception ex) { return StatusCode(500, new ScanResult { Success = false, ErrorMessage = $"Processing error: {ex.Message}" }); } } [HttpPost("scan-base64")] public ActionResult<ScanResult> ScanBase64([FromBody] string base64Image) { try { // Convert Base64 string to byte array byte[] imageBytes = Convert.FromBase64String(base64Image); // Process with IronBarcode var results = BarcodeReader.Read(imageBytes); return ProcessResults(results); } catch (Exception ex) { return BadRequest(new ScanResult { Success = false, ErrorMessage = $"Invalid Base64 data: {ex.Message}" }); } } private ScanResult ProcessResults(BarcodeResults results) { if (results.Any()) { return new ScanResult { Success = true, BarcodeValues = results.Select(r => r.Value).ToList(), BarcodeFormat = results.First().BarcodeType.ToString() }; } return new ScanResult { Success = false, ErrorMessage = "No barcodes detected" }; } } } using Microsoft.AspNetCore.Mvc; using IronBarCode; using System.Drawing; namespace BarcodeScannerAPI.Controllers { [ApiController] [Route("api/[controller]")] public class ScannerController : ControllerBase { // Model for API responses public class ScanResult { public bool Success { get; set; } public List<string> BarcodeValues { get; set; } = new List<string>(); public string BarcodeFormat { get; set; } public string ErrorMessage { get; set; } } [HttpPost("scan-file")] public async Task<ActionResult<ScanResult>> ScanFile(IFormFile file) { if (file == null || file.Length == 0) return BadRequest(new ScanResult { Success = false, ErrorMessage = "No file uploaded" }); try { using var stream = new MemoryStream(); await file.CopyToAsync(stream); // Configure scanner options for better accuracy var options = new BarcodeReaderOptions { Speed = ReadingSpeed.Balanced, ExpectMultipleBarcodes = true, ExpectBarcodeTypes = BarcodeEncoding.All }; // Read barcodes from the uploaded file var results = BarcodeReader.Read(stream.ToArray(), options); if (results.Any()) { return Ok(new ScanResult { Success = true, BarcodeValues = results.Select(r => r.Value).ToList(), BarcodeFormat = results.First().BarcodeType.ToString() }); } return Ok(new ScanResult { Success = false, ErrorMessage = "No barcodes found" }); } catch (Exception ex) { return StatusCode(500, new ScanResult { Success = false, ErrorMessage = $"Processing error: {ex.Message}" }); } } [HttpPost("scan-base64")] public ActionResult<ScanResult> ScanBase64([FromBody] string base64Image) { try { // Convert Base64 string to byte array byte[] imageBytes = Convert.FromBase64String(base64Image); // Process with IronBarcode var results = BarcodeReader.Read(imageBytes); return ProcessResults(results); } catch (Exception ex) { return BadRequest(new ScanResult { Success = false, ErrorMessage = $"Invalid Base64 data: {ex.Message}" }); } } private ScanResult ProcessResults(BarcodeResults results) { if (results.Any()) { return new ScanResult { Success = true, BarcodeValues = results.Select(r => r.Value).ToList(), BarcodeFormat = results.First().BarcodeType.ToString() }; } return new ScanResult { Success = false, ErrorMessage = "No barcodes detected" }; } } } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 該控制器提供兩個端點:一個用于文件上傳,另一個用于 Base64 編碼圖像。 ScanFile 端點接受多部分表單數據,非常適合用戶直接上傳圖像的 Web 應用程序。 流處理確保高效的內存使用,而 BarcodeReaderOptions 配置在速度和精度之間取得了平衡。 ScanBase64 端點處理將圖像作為 Base64 字符串傳輸的情況,這在移動應用程序和 API 到 API 通信中是標準的。 它可以從上傳的圖像或流中讀取 1D 和 2D(矩陣)條碼。 輸出 首先,我們使用 Swagger 測試我們的端點。 在這裡,您可以看到掃描器 API 端點: 現在,我們來測試它們並查看輸出。 就本示例而言,我將使用一個簡單字符串值“Hello World”編碼的示例條碼圖像。 如您在此處所見,我們的程式正確地掃描了條碼並檢索到了其中的數據。 掃描器可以處理哪些不同的輸入源? IronBarcode 的靈活性在於處理各種輸入格式時大放異彩。 除了標準圖像,掃描器 API 處理 PDF、上傳流和多種圖形格式: // Scanning PDFs with multiple pages [HttpPost("scan-pdf")] public async Task<ActionResult<ScanResult>> ScanPdf(IFormFile pdfFile { using var stream = new MemoryStream(); await pdfFile.CopyToAsync(stream); // ReadPdf method handles multi-page documents var results = BarcodeReader.ReadPdf(stream.ToArray()); return ProcessResults(results); } // Processing from URL [HttpPost("scan-url")] public async Task<ActionResult<ScanResult>> ScanFromUrl([FromBody] string imageUrl) { using var client = new HttpClient(); var imageBytes = await client.GetByteArrayAsync(imageUrl); var results = BarcodeReader.Read(imageBytes); return ProcessResults(results); } // Scanning PDFs with multiple pages [HttpPost("scan-pdf")] public async Task<ActionResult<ScanResult>> ScanPdf(IFormFile pdfFile { using var stream = new MemoryStream(); await pdfFile.CopyToAsync(stream); // ReadPdf method handles multi-page documents var results = BarcodeReader.ReadPdf(stream.ToArray()); return ProcessResults(results); } // Processing from URL [HttpPost("scan-url")] public async Task<ActionResult<ScanResult>> ScanFromUrl([FromBody] string imageUrl) { using var client = new HttpClient(); var imageBytes = await client.GetByteArrayAsync(imageUrl); var results = BarcodeReader.Read(imageBytes); return ProcessResults(results); } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel ReadPdf 方法自動掃描 PDF 文檔中的所有頁面,提取運單標籤、發票或多頁報告中的條碼。 對於基於 URL 的掃描,API 獲取遠程圖像並在不需要本地存儲的情況下處理它們,非常適合與雲存儲服務集成或處理來自外部系統的圖像。 現在,您將能夠看到我們的新端點更新後的 Swagger UI: 為了測試我們的新方法,我使用了包含兩個示例條碼的示例 PDF 。 第一個是帶有 URL 的基本條碼,第二個是我們上個示例中的基本字符串編碼條碼。 這是我們的 PDF 通過端點處理後的輸出: 如您所見,它已正確檢測到兩個條碼並從掃描的條碼中提取了數據。 如何優化條碼掃描器的性能和準確性 針對特定用例進行調整可顯著提高速度和準確性: var optimizedOptions = new BarcodeReaderOptions { // Speed settings: Faster, Balanced, Detailed, ExtremeDetail Speed = ReadingSpeed.Detailed, // Specify expected barcode types to reduce processing time ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128, // Enable parallel processing for batch operations Multithreaded = true, MaxParallelThreads = 4, // Define scanning area to focus on specific regions CropArea = new Rectangle(100, 100, 400, 200), // Optional: define specific scanning area // Apply image corrections for damaged barcodes ImageFilters = new ImageFilterCollection() { new SharpenFilter(), new ContrastFilter() } }; var optimizedOptions = new BarcodeReaderOptions { // Speed settings: Faster, Balanced, Detailed, ExtremeDetail Speed = ReadingSpeed.Detailed, // Specify expected barcode types to reduce processing time ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128, // Enable parallel processing for batch operations Multithreaded = true, MaxParallelThreads = 4, // Define scanning area to focus on specific regions CropArea = new Rectangle(100, 100, 400, 200), // Optional: define specific scanning area // Apply image corrections for damaged barcodes ImageFilters = new ImageFilterCollection() { new SharpenFilter(), new ContrastFilter() } }; IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 注意:CropArea 屬性允許掃描器聚焦於圖像內的特定矩陣或表格區域。 然而,一些對象或條碼位置可能會超出定義的區域,導致掃描器失敗。 如果出現這種情況,只需刪除或註釋掉 CropArea 屬性。 IronBarcode 將會識別並解碼圖像中的所有條碼數據,確保掃描器能夠處理任何 Windows 或 Microsoft 運行環境場景。 對已知掃描器類型使用經過優化的選項可減少處理時間。嵌入式圖像濾鏡增強了低質量輸入的條碼可讀性。 開發人員可以配置掃描器 SDK,列舉可用掃描器,並集成 UI 組件或視頻捕獲設備。 總結 使用 IronBarcode 構建 C# 掃描器 API 將複雜的條碼處理轉化為簡單的 REST 端點。 該庫處理從完美的數碼條碼到具有挑戰性的現實世界捕獲的所有問題,提供企業級準確性且不依賴於硬件。 通過支持多種輸入格式、先進的圖像校正和優化的性能設置,開發人員可以在幾分鐘內部署準備投產的掃描解決方案。 Get started with a free trial to implement your scanner API today, or explore the complete 文檔中的進階功能如批次處理和機器學習驅動的檢測。 常見問題解答 使用IronBarcode來構建C#掃描器API的主要好處是什麼? IronBarcode允許開發人員以最少的複雜性快速創建功能強大的、可投入生產的條碼掃描器API。它通過消除對複雜掃描器SDK整合的需求來簡化該過程。 IronBarcode能處理損壞的條碼輸入嗎? 可以,IronBarcode被設計為即使是損壞的掃描輸入也可處理條碼數據,確保高可靠性應用於現實世界應用程序中。 IronBarcode在C#掃描器API中能處理哪種類型的輸入? IronBarcode能處理來自圖像和PDF等多種輸入的條碼數據,提供不同掃描需求的多樣化解決方案。 是否有教程供使用IronBarcode構建條碼掃描器API? 有的,該網頁提供了全面的教程,配有代碼範例,指導開發人員使用IronBarcode建立RESTful條碼掃描端點。 使用IronBarcode可以多快設置條碼掃描器API? 使用IronBarcode,開發人員可以在幾分鐘內設置條碼掃描器API,精簡開發時間和精力。 IronBarcode是否需要任何複雜的SDK整合? 不,IronBarcode不需要複雜的掃描器SDK整合,這使得開發人員更容易實現條碼掃描功能。 使用IronBarcode構建掃描器API的編程語言是什麼? IronBarcode使用C#來構建掃描器API,利用.NET框架提供強大的性能。 Jordi Bardia 立即與工程團隊聊天 軟體工程師 Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担产品测测试,产品开发和研究的责任时,Jordi 为持续的产品改进增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。 相關文章 發表日期 10月 19, 2025 如何使用VB.NET在Crystal Reports中打印條碼 在VB.NET中使用IronBarcode SDK在Crystal Reports中生成和打印條碼的分步教程,確保可靠的條碼集成。 閱讀更多 發表日期 9月 29, 2025 IronBarcode對比.NET中的開源條碼閱讀器 了解如何使用IronBarcode在C#中讀取條碼 閱讀更多 發表日期 9月 29, 2025 如何在ASP.NET應用程式中掃描條碼 了解如何在ASP.NET中使用IronBarcode掃描條碼 閱讀更多 如何在C#中整合條碼.NET組件如何使用IronBarcode創建MAUI...
發表日期 10月 19, 2025 如何使用VB.NET在Crystal Reports中打印條碼 在VB.NET中使用IronBarcode SDK在Crystal Reports中生成和打印條碼的分步教程,確保可靠的條碼集成。 閱讀更多