Dynamsoft 條碼閱讀器與 IronBarcode:C# 條碼庫對比
Dynamsoft 條碼閱讀器在其設計用途方面確實非常出色:以每秒 30 幀的速度從即時攝影機畫面中讀取條碼。 演算法速度快,符號支援範圍廣,而且在 iOS 和 Android 上封裝它的行動 SDK 是該領域中較好的選擇之一。 如果你的產品是倉庫掃描應用程序,工人將手機對準托盤標籤,並期望在 100 毫秒內完成識別,那麼 Dynamsoft 是一個可靠的選擇。
如果您的條碼位於無法存取網際網路的伺服器上的 PDF 檔案中,則該程式庫與使用情境不符—許可證驗證會在每次啟動時提醒您。 BarcodeReader.InitLicense 會向 Dynamsoft 的授權伺服器發起網路呼叫。 在與互聯網物理隔離的資料中心、隔離的 VPC 或任何限制出站互聯網存取的環境中,即使沒有解碼任何條碼,該呼叫也會失敗。 離線替代方案-從 Dynamsoft 支援部門取得與 UUID 關聯的裝置特定授權文件-雖然可行,但會增加大多數文件處理工作流程未預算的作業開銷。
此比較著重於用例匹配度,而非庫的品質。 Dynamsoft 建立了一個以相機為中心的庫,並且建立得很好。 問題是,以攝影機為先的假設是否適用於伺服器端文件處理工作流程。
了解 Dynamsoft 條碼閱讀器
Dynamsoft 的架構體現了其攝影機產業的淵源。 啟動序列需要線上許可證驗證,設定模型包含針對即時影格處理最佳化的逾時值,API 公開了諸如 DeblurLevel 之類的概念,這些概念專門針對手持相機的可變焦距和運動模糊條件:
// Dynamsoft: license server call required at startup
using Dynamsoft.DBR;
// This call contacts Dynamsoft's license server — fails in air-gapped environments
int errorCode = BarcodeReader.InitLicense("YOUR-LICENSE-KEY", out string errorMsg);
if (errorCode != (int)EnumErrorCode.DBR_OK)
throw new InvalidOperationException($"License validation failed: {errorMsg}");
var reader = new BarcodeReader();
// Settings tuned for camera frame processing
var settings = reader.GetRuntimeSettings();
settings.DeblurLevel = 5; // compensates for camera motion blur
settings.ExpectedBarcodesCount = 1; // camera focus: one barcode at a time
settings.Timeout = 100; // 100ms — optimized for 30fps video pipeline
reader.UpdateRuntimeSettings(settings);
// Dynamsoft: license server call required at startup
using Dynamsoft.DBR;
// This call contacts Dynamsoft's license server — fails in air-gapped environments
int errorCode = BarcodeReader.InitLicense("YOUR-LICENSE-KEY", out string errorMsg);
if (errorCode != (int)EnumErrorCode.DBR_OK)
throw new InvalidOperationException($"License validation failed: {errorMsg}");
var reader = new BarcodeReader();
// Settings tuned for camera frame processing
var settings = reader.GetRuntimeSettings();
settings.DeblurLevel = 5; // compensates for camera motion blur
settings.ExpectedBarcodesCount = 1; // camera focus: one barcode at a time
settings.Timeout = 100; // 100ms — optimized for 30fps video pipeline
reader.UpdateRuntimeSettings(settings);
Imports Dynamsoft.DBR
' Dynamsoft: license server call required at startup
' This call contacts Dynamsoft's license server — fails in air-gapped environments
Dim errorCode As Integer = BarcodeReader.InitLicense("YOUR-LICENSE-KEY", errorMsg:=Nothing)
If errorCode <> CType(EnumErrorCode.DBR_OK, Integer) Then
Throw New InvalidOperationException($"License validation failed: {errorMsg}")
End If
Dim reader As New BarcodeReader()
' Settings tuned for camera frame processing
Dim settings = reader.GetRuntimeSettings()
settings.DeblurLevel = 5 ' compensates for camera motion blur
settings.ExpectedBarcodesCount = 1 ' camera focus: one barcode at a time
settings.Timeout = 100 ' 100ms — optimized for 30fps video pipeline
reader.UpdateRuntimeSettings(settings)
這是一個設計精良的API,完全符合其用途。 當您以每秒 30 幀的速度處理來自攝影機的畫面,並且不能承受在單個幀上花費 500 毫秒的時間時,Timeout = 100 設定就很有意義。 對於處理上傳的 PDF 檔案的伺服器而言,100 毫秒的逾時限制毫無意義,並且可能導致讀取密度較高的條碼失敗。
基於實例的設計 — new BarcodeReader(), reader.Dispose() — 遵循相機會話語義:開啟會話,處理幀,關閉會話。 對於文件處理而言,此生命週期增加了樣板程式碼,卻沒有帶來任何好處。
PDF問題
Dynamsoft 條碼閱讀器本身不支援 PDF 檔案。 當輸入為 PDF 檔案時,您的程式碼必須先將每一頁渲染成影像,然後將該影像傳遞給 Dynamsoft。 這需要一個單獨的 PDF 渲染庫——通常使用 PdfiumViewer——它會增加一個 NuGet 依賴項、一個本地二進位依賴項(Windows 上的 pdfium.dll 或 Linux 上的 libpdfium),並且每個 PDF 操作都會增加一個渲染循環:
// Dynamsoft PDF processing — requires PdfiumViewer (external dependency)
// dotnet add package PdfiumViewer
// dotnet add package PdfiumViewer.Native.x86_64.v8-xfa (platform-specific)
using PdfiumViewer;
using System.Drawing.Imaging;
using Dynamsoft.DBR;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var results = new List<string>();
using (var pdfDoc = PdfDocument.Load(pdfPath))
{
for (int page = 0; page < pdfDoc.PageCount; page++)
{
// Render each page at 300 DPI
using var image = pdfDoc.Render(page, 300, 300, true);
using var ms = new MemoryStream();
image.Save(ms, ImageFormat.Png);
byte[] imageBytes = ms.ToArray();
// Now pass rendered image bytes to Dynamsoft
TextResult[] barcodes = reader.DecodeFileInMemory(imageBytes, "");
foreach (var b in barcodes)
results.Add(b.BarcodeText);
}
}
return results;
}
// Dynamsoft PDF processing — requires PdfiumViewer (external dependency)
// dotnet add package PdfiumViewer
// dotnet add package PdfiumViewer.Native.x86_64.v8-xfa (platform-specific)
using PdfiumViewer;
using System.Drawing.Imaging;
using Dynamsoft.DBR;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var results = new List<string>();
using (var pdfDoc = PdfDocument.Load(pdfPath))
{
for (int page = 0; page < pdfDoc.PageCount; page++)
{
// Render each page at 300 DPI
using var image = pdfDoc.Render(page, 300, 300, true);
using var ms = new MemoryStream();
image.Save(ms, ImageFormat.Png);
byte[] imageBytes = ms.ToArray();
// Now pass rendered image bytes to Dynamsoft
TextResult[] barcodes = reader.DecodeFileInMemory(imageBytes, "");
foreach (var b in barcodes)
results.Add(b.BarcodeText);
}
}
return results;
}
Imports PdfiumViewer
Imports System.Drawing.Imaging
Imports Dynamsoft.DBR
Public Function ReadBarcodesFromPdf(pdfPath As String) As List(Of String)
Dim results As New List(Of String)()
Using pdfDoc = PdfDocument.Load(pdfPath)
For page As Integer = 0 To pdfDoc.PageCount - 1
' Render each page at 300 DPI
Using image = pdfDoc.Render(page, 300, 300, True)
Using ms As New MemoryStream()
image.Save(ms, ImageFormat.Png)
Dim imageBytes As Byte() = ms.ToArray()
' Now pass rendered image bytes to Dynamsoft
Dim barcodes As TextResult() = reader.DecodeFileInMemory(imageBytes, "")
For Each b In barcodes
results.Add(b.BarcodeText)
Next
End Using
End Using
Next
End Using
Return results
End Function
它有三個依賴項(Dynamsoft、PdfiumViewer 和一個平台特定的本地二進位檔案),一個逐頁渲染循環,並且對於多頁文件來說會產生大量的記憶體開銷。
IronBarcode 直接讀取 PDF 檔案:
// IronBarcode: PDF is native — no extra library, no render loop
// NuGet: dotnet add package IronBarcode
var results = BarcodeReader.Read("invoice.pdf");
foreach (var result in results)
{
Console.WriteLine($"{result.Format}: {result.Value}");
}
// IronBarcode: PDF is native — no extra library, no render loop
// NuGet: dotnet add package IronBarcode
var results = BarcodeReader.Read("invoice.pdf");
foreach (var result in results)
{
Console.WriteLine($"{result.Format}: {result.Value}");
}
' IronBarcode: PDF is native — no extra library, no render loop
' NuGet: dotnet add package IronBarcode
Dim results = BarcodeReader.Read("invoice.pdf")
For Each result In results
Console.WriteLine($"{result.Format}: {result.Value}")
Next
一個電話。 沒有PDF渲染器。 無需逐頁循環。無需針對特定平台的原生 PDF 支援二進位檔案。
許可證複雜性
當伺服器能夠存取互聯網時,線上許可證驗證非常簡單。 當網路策略沒有明確規定出站主機的允許範圍時,或當網路策略要求明確列出出站主機的允許範圍時,驗證失敗的面積就會增加:
// Dynamsoft: error code pattern required
int errorCode = BarcodeReader.InitLicense("YOUR-LICENSE-KEY", out string errorMsg);
if (errorCode != (int)EnumErrorCode.DBR_OK)
{
// Handle: network timeout, license server unreachable, invalid key,
// expired key, device count exceeded, etc.
throw new InvalidOperationException($"Dynamsoft license failed [{errorCode}]: {errorMsg}");
}
// Dynamsoft: error code pattern required
int errorCode = BarcodeReader.InitLicense("YOUR-LICENSE-KEY", out string errorMsg);
if (errorCode != (int)EnumErrorCode.DBR_OK)
{
// Handle: network timeout, license server unreachable, invalid key,
// expired key, device count exceeded, etc.
throw new InvalidOperationException($"Dynamsoft license failed [{errorCode}]: {errorMsg}");
}
Imports System
' Dynamsoft: error code pattern required
Dim errorCode As Integer = BarcodeReader.InitLicense("YOUR-LICENSE-KEY", errorMsg:=Nothing)
If errorCode <> CType(EnumErrorCode.DBR_OK, Integer) Then
' Handle: network timeout, license server unreachable, invalid key,
' expired key, device count exceeded, etc.
Throw New InvalidOperationException($"Dynamsoft license failed [{errorCode}]: {errorMsg}")
End If
使用 Dynamsoft 的離線授權需要單獨的工作流程。 您呼叫 BarcodeReader.OutputLicenseToString() 來擷取裝置 UUID,將該 UUID 傳送給 Dynamsoft 支援以取得特定於裝置的授權文件,然後使用 InitLicenseFromLicenseContent 進行啟動:
// Dynamsoft offline license — device UUID required
string uuid = BarcodeReader.OutputLicenseToString();
// Send uuid to Dynamsoft support → receive licenseContent string
int errorCode = BarcodeReader.InitLicenseFromLicenseContent("YOUR-LICENSE-KEY", licenseContent, uuid, out string errorMsg);
// Dynamsoft offline license — device UUID required
string uuid = BarcodeReader.OutputLicenseToString();
// Send uuid to Dynamsoft support → receive licenseContent string
int errorCode = BarcodeReader.InitLicenseFromLicenseContent("YOUR-LICENSE-KEY", licenseContent, uuid, out string errorMsg);
' Dynamsoft offline license — device UUID required
Dim uuid As String = BarcodeReader.OutputLicenseToString()
' Send uuid to Dynamsoft support → receive licenseContent string
Dim errorCode As Integer = BarcodeReader.InitLicenseFromLicenseContent("YOUR-LICENSE-KEY", licenseContent, uuid, errorMsg)
在 Docker 環境中,容器是短暫的,每次部署時 UUID 都會改變,這會產生持續的維運工作。 每個容器啟動可能需要向 Dynamsoft 支援部門註冊一個新的 UUID。
IronBarcode 許可證啟動是本地評估的單一分配:
// IronBarCode: local validation, no network required
IronBarCode.License.LicenseKey = "YOUR-KEY";
// IronBarCode: local validation, no network required
IronBarCode.License.LicenseKey = "YOUR-KEY";
' IronBarCode: local validation, no network required
IronBarCode.License.LicenseKey = "YOUR-KEY"
沒有錯誤代碼可供檢查。 無需網路連線。 無需按設備註冊。 同一行程式碼可以在開發機器、CI/CD 管線、Docker 容器和實體隔離的伺服器上運作。
相機與檔案使用案例
客觀來說,Dynamsoft 和IronBarcode針對不同的主要應用場景進行了最佳化。 下表對此進行了清晰的描述,而不是斷言某個庫在各方面都更勝一籌:
| 工作場景 | Dynamsoft 條碼閱讀器 | IronBarcode |
|---|---|---|
| 即時相機畫面(30幀/秒) | 非常出色-針對即時性進行了最佳化 | 並非主要用例 |
| 行動 SDK(iOS/Android) | 完整版 SDK 可用 | 僅限 .NET |
| 伺服器端文件處理 | 可行,但需要一些變通方法。 | 主要用例 |
| PDF條碼讀取 | 需要外部 PDF 渲染器 | 原生支援 |
| 氣隙部署 | 需要設備 UUID 和 Dynamsoft 支持 | 開箱即用 |
| Docker/臨時容器 | 每個容器的 UUID 管理 | 單一環境是 |
| 離線許可證 | 來自 Dynamsoft 支援團隊的設備特定文件 | 標準許可證密鑰 |
| ASP.NET Core API | 作品(額外授權模板) | 運行流暢 |
| Azure 功能 | license.dynamsoft.com 需要網路策略 | 無需網絡 |
| 條碼生成 | 不——僅供閱讀 | 是的——一代與閱讀 |
| 二維碼生成 | 無 | 是的-二維碼寫入器 |
了解 IronBarcode
IronBarcode 是一個用於產生和讀取條碼的 .NET 函式庫。 該 API 是靜態的——沒有實例,沒有釋放調用,沒有會話生命週期。 許可證啟動在本地進行。 內建PDF支援:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// License — local validation, no network call
IronBarCode.License.LicenseKey = "YOUR-KEY";
// Read from an image file
var results = BarcodeReader.Read("label.png");
foreach (var result in results)
Console.WriteLine($"{result.Format}: {result.Value}");
// Read from a PDF — native, no extra library
var pdfResults = BarcodeReader.Read("manifest.pdf");
// Read with options for high-accuracy or high-throughput scenarios
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
最大並行線程數 = 4
};
var multiResults = BarcodeReader.Read("multi-barcode-sheet.png", options);
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// License — local validation, no network call
IronBarCode.License.LicenseKey = "YOUR-KEY";
// Read from an image file
var results = BarcodeReader.Read("label.png");
foreach (var result in results)
Console.WriteLine($"{result.Format}: {result.Value}");
// Read from a PDF — native, no extra library
var pdfResults = BarcodeReader.Read("manifest.pdf");
// Read with options for high-accuracy or high-throughput scenarios
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
最大並行線程數 = 4
};
var multiResults = BarcodeReader.Read("multi-barcode-sheet.png", options);
Imports IronBarCode
' License — local validation, no network call
IronBarCode.License.LicenseKey = "YOUR-KEY"
' Read from an image file
Dim results = BarcodeReader.Read("label.png")
For Each result In results
Console.WriteLine($"{result.Format}: {result.Value}")
Next
' Read from a PDF — native, no extra library
Dim pdfResults = BarcodeReader.Read("manifest.pdf")
' Read with options for high-accuracy or high-throughput scenarios
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True,
.最大並行線程數 = 4
}
Dim multiResults = BarcodeReader.Read("multi-barcode-sheet.png", options)
生成過程同樣簡單明了:
// Generate Code 128
BarcodeWriter.CreateBarcode("SHIP-7734-X", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("shipping-label.png");
// Generate QR with error correction and embedded logo
QRCodeWriter.CreateQrCode("https://track.example.com/7734", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
.AddBrandLogo("company-logo.png")
.SaveAsPng("tracking-qr.png");
// Get bytes for HTTP response
byte[] bytes = BarcodeWriter.CreateBarcode("ITEM-001", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.ToPngBinaryData();
// Generate Code 128
BarcodeWriter.CreateBarcode("SHIP-7734-X", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("shipping-label.png");
// Generate QR with error correction and embedded logo
QRCodeWriter.CreateQrCode("https://track.example.com/7734", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
.AddBrandLogo("company-logo.png")
.SaveAsPng("tracking-qr.png");
// Get bytes for HTTP response
byte[] bytes = BarcodeWriter.CreateBarcode("ITEM-001", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.ToPngBinaryData();
Imports System
' Generate Code 128
BarcodeWriter.CreateBarcode("SHIP-7734-X", BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.SaveAsPng("shipping-label.png")
' Generate QR with error correction and embedded logo
QRCodeWriter.CreateQrCode("https://track.example.com/7734", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest) _
.AddBrandLogo("company-logo.png") _
.SaveAsPng("tracking-qr.png")
' Get bytes for HTTP response
Dim bytes As Byte() = BarcodeWriter.CreateBarcode("ITEM-001", BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.ToPngBinaryData()
功能比較
| 特點 | Dynamsoft 條碼閱讀器 | IronBarcode |
|---|---|---|
| 條碼讀取 | 是的——針對相機進行了最佳化 | 是的——文件和文件優化 |
| 條碼生成 | 無 | 是 |
| 二維碼生成 | 無 | 是的-二維碼寫入器 |
| 原生 PDF 支援 | 否——需要外部渲染器 | 是的-BarcodeReader.Read(pdf) |
| 許可證驗證 | 線上(許可證伺服器) | 當地的 |
| 實體隔離/離線 | 需要設備 UUID 和 Dynamsoft 支持 | 標準金鑰,可離線使用 |
| Docker/容器 | 每個容器實例的 UUID 管理 | 單一環境變數 |
| Azure 功能 | 需要出站網路策略 | 無需網絡 |
| AWS Lambda。 | 需要出站網路策略 | 無需網絡 |
| 行動 SDK | iOS 和 Android 版本皆可使用 | 僅限 .NET |
| 即時攝影機(30fps) | 主要設計目標 | 並非為此而設計 |
| 代碼 128 | 是 | 是 |
| QR 圖碼 | 是的(閱讀) | 是的(閱讀和生成) |
| 數據矩陣 | 是 | 是 |
| PDF417 | 是 | 是 |
| 阿茲特克 | 是 | 是 |
| EAN/UPC | 是 | 是 |
| 實例管理 | 新條碼讀取器() + 釋放() | 靜態 — 無實例 |
| 多條碼讀取 | 預期條碼數量 | ExpectMultipleBarcodes = true |
| 閱讀速度控制 | 超時 + 去模糊級別 | 閱讀速度枚舉 |
| 平行閱讀 | 手動穿線 | 最大並行線程數 |
| 定價模式 | 訂閱 | 永久 749 美元起 |
| .NET 支持 | .NET Standard、.NET 5+ | .NET 4.6.2 至 .NET 9 |
| 平台 | Windows, Linux, macOS | Windows、Linux、macOS、Docker、Azure、AWS Lambda |
API 對應參考。
對於擁有 Dynamsoft 程式碼且需要了解概念如何轉換的團隊:
| Dynamsoft 條碼閱讀器 | IronBarcode |
|---|---|
BarcodeReader.InitLicense(key, out errorMsg) |
IronBarCode.License.LicenseKey = "key" |
errorCode != (int)EnumErrorCode.DBR_OK 檢查 |
不需要 |
BarcodeReader.OutputLicenseToString() (UUID) |
不需要 |
BarcodeReader.InitLicenseFromLicenseContent(content, uuid) |
不需要 |
new BarcodeReader() |
靜態 — 無實例 |
reader.Dispose() |
不需要 |
reader.DecodeFile(imagePath, "") |
BarcodeReader.Read(imagePath) |
reader.DecodeFileInMemory(bytes, "") |
BarcodeReader.Read(imageBytes) |
TextResult[].BarcodeText |
result.Value |
TextResult[].BarcodeFormat |
result.Format |
PublicRuntimeSettings 透過 GetRuntimeSettings() |
new BarcodeReaderOptions { ... } |
settings.Timeout = 100 |
Speed = ReadingSpeed.Balanced |
settings.ExpectedBarcodesCount = 1 |
ExpectMultipleBarcodes = false(預設) |
reader.UpdateRuntimeSettings(settings) |
傳遞給 Read() 的參數 |
| 外部 PDF 庫 + 頁面渲染循環 | BarcodeReader.Read("doc.pdf") |
當球隊切換
伺服器端文檔處理,而非攝影機掃描。最常見的遷移場景是:團隊基於 Dynamsoft 的聲譽選擇了它,整合後才發現其以攝影機為中心的 API 和 PDF 相容性問題導致文件處理工作流程十分繁瑣。 在 Web 應用程式中從上傳的 PDF 讀取條碼是一個核心用例,在 Dynamsoft 中需要變通方法,但在IronBarcode中只需一次呼叫即可完成。
網路環境採用實體隔離或受限模式。金融機構、醫療系統和政府機構通常會禁止應用程式伺服器連接外部互聯網。 在這些環境下,Dynamsoft 的線上授權驗證會失敗。 離線設備 UUID 工作流程雖然功能齊全,但會增加支援依賴性的開銷。 這些環境中的團隊經常遷移到 IronBarcode,正是因為其許可證驗證功能沒有網路元件。
Docker 和 Kubernetes 的臨時容器。容器化部署中執行個體頻繁的擴展和縮減使得基於設備的離線授權難以管理。 根據基礎設施的不同,每個新容器都可以有不同的 UUID。IronBarcode的許可證金鑰作為標準環境變數使用,無需針對每個實例進行註冊。
既需要產生也需要讀取。 Dynamsoft是唯讀的。 需要產生條碼標籤、列印產品二維碼或建立具有嵌入式條碼的運輸清單的應用程式需要第二個庫。 在這種情況下,團隊通常會合併到IronBarcode系統,以避免管理兩個獨立的條碼依賴項。
簡化維運架構。從必須可存取的外部相依性清單中移除 Dynamsoft 許可證伺服器,移除 PDF 渲染庫,並將實例管理替換為靜態調用,從而減少了生產環境中可能出現的問題。
結論
Dynamsoft 條碼閱讀器是一個高品質的庫,非常適合其預期的用途:基於相機的即時條碼掃描,尤其是在行動應用程式中。 這些演算法針對手持掃描的條件進行了很好的調整——光照變化、運動模糊、部分遮蔽。 如果你的使用場景符合這個條件,Dynamsoft 是一款很有競爭力的產品。
對於伺服器端文件處理——例如從 PDF 讀取條碼、生成條碼標籤、在隔離環境中運行或部署在臨時 Docker 容器中——該庫的架構在每個環節都造成了阻礙。線上許可證驗證、缺少 PDF 支援、針對相機優化的超時設定以及設備 UUID 離線工作流程,都是為移動相機使用而設計的必然結果。 它們不是蟲子; 這是針對不同背景而刻意做出的設計選擇。
IronBarcode 是為文件和伺服器端環境而設計的。 本機授權驗證、原生 PDF 閱讀、靜態 API 和產生支援都是一流的功能,而不是權宜之計。 遷移決策最終取決於條碼實際存在於哪個環境中。
常見問題解答
什麼是Dynamsoft條碼閱讀器?
Dynamsoft Barcode Reader 是一個 .NET 條碼庫,用於在 C# 應用程式中產生和讀取條碼。它是開發人員在為 .NET 專案選擇條碼解決方案時評估的幾個替代方案之一。
Dynamsoft條碼閱讀器和IronBarcode的主要差異是什麼?
IronBarcode 使用靜態、無狀態的 API,無需實例管理,而 Dynamsoft 條碼閱讀器通常需要先建立實例並進行設定才能使用。 IronBarcode 還提供原生 PDF 支援、自動格式偵測以及跨所有環境的單金鑰許可。
IronBarcode 的授權比 Dynamsoft 條碼閱讀器更容易嗎?
IronBarcode 使用單一授權金鑰,同時涵蓋開發和生產部署。與將 SDK 金鑰與執行時間金鑰分開的授權系統相比,這簡化了 CI/CD 管線和 Docker 配置。
IronBarcode是否支援Dynamsoft條碼閱讀器支援的所有條碼格式?
IronBarcode 支援超過 30 種條碼符號體系,包括 QR 碼、Code 128、Code 39、DataMatrix、PDF417、Aztec、EAN-13、UPC-A、GS1 等等。格式自動偵測功能意味著無需明確枚舉格式。
IronBarcode是否支援原生PDF條碼讀取?
是的。 IronBarcode 可以直接從 PDF 檔案讀取條碼,使用 `BarcodeReader.Read("document.pdf")` 方法,無需單獨的 PDF 渲染庫。每頁的讀取結果包括頁碼、條碼格式、數值和置信度評分。
與 Dynamsoft 條碼閱讀器相比,IronBarcode 在批次處理方面有何不同?
IronBarcode 的靜態方法是無狀態的,且天然執行緒安全,因此可以直接使用 Parallel.ForEach,而無需進行執行緒層級實例管理。所有定價層級均無吞吐量上限。
IronBarcode支援哪些.NET版本?
IronBarcode 在單一 NuGet 套件中支援 .NET Framework 4.6.2+、.NET Core 3.1 以及 .NET 5、6、7、8 和 9。平台目標包括 Windows x64/x86、Linux x64 和 macOS x64/ARM。
如何在.NET專案中安裝IronBarcode?
透過 NuGet 安裝 IronBarcode:在程式包管理器控制台中執行“Install-Package IronBarCode”,或在命令列介面中執行“dotnet add package IronBarCode”。無需其他 SDK 安裝程式或運行時檔案。
與 Dynamsoft 不同,我可以在購買前評估 IronBarcode 嗎?
是的。 IronBarcode 的試用模式會傳回完整的解碼條碼值-只有產生的輸出影像才會有浮水印。您可以在購買前,用自己的文件測試讀取準確率。
Dynamsoft條碼閱讀器和IronBarcode的價格有什麼不同?
IronBarcode 的永久單開發者許可證起價為 749 美元,涵蓋開發和生產環境。定價詳情和大量許可選項請造訪 IronBarcode 授權頁面。無需單獨的運行時許可證。
從 Dynamsoft 條碼閱讀器遷移到 IronBarcode 是否簡單?
從 Dynamsoft 條碼閱讀器遷移到 IronBarcode 主要涉及將基於實例的 API 呼叫替換為 IronBarcode 的靜態方法、移除許可相關的樣板代碼以及更新結果屬性名稱。大多數遷移都是減少程式碼,而不是增加程式碼。
IronBarcode 能產生帶有 logo 的二維碼嗎?
是的。 `QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")` 可以將品牌圖片原生嵌入二維碼中,並支援設定糾錯功能。此外,它還支援透過 `ChangeBarCodeColor()` 函數建立彩色二維碼。

