IRONSOFTWAREHOME
影片

從OnBarcode遷移至IronBarcode

Curtis Chau
Curtis Chau
Updated: 2026年8月1日

本指南涵蓋完整的從OnBarcode到IronBarcode的遷移路徑。 它討論了三步驟設置更改,為每個常見模式提供前後程式碼範例,將OnBarcode的API映射到其IronBarcode對應項,記錄遷移過程中出現的問題,並提供一份在考慮遷移完成前審核您的程式碼庫的搜索詞檢查清單。

為何從OnBarcode遷移

兩個SKU的採購開銷: OnBarcode對Generator SDK(僅線性和線性+2D層級)發布了永久定價,並將Reader SDK列為一個單獨定價的產品。 需要這兩種功能的組織必須針對兩個SKU完成兩次採購過程——選擇每種使用中的條碼型別的正確生成層級,然後單獨購買Reader——在確定總成本之前。 這種摩擦來自於兩次採購的重複而不是一個單項。

拆分產品開銷: 生成和讀取是單獨的產品,具有單獨的NuGet包,單獨的授權命名空間,單獨的授權鍵,和單獨的版本計畫。 使用兩個產品的項目必須在啟動時配置兩個授權鍵,跨升級跟蹤兩個包版本,並保持對兩個獨立發布周期的認識。 當一個最初只生成的項目新增了讀取需求時,必須為第二個產品重複整個採購和整合過程。

PDF工作流程空白: OnBarcode沒有對從PDF文件中讀取條碼的本地支援。 處理嵌入發票、運送清單、購買訂單或存檔掃描中的條碼的項目必須獲得一個單獨的PDF到圖像呈現庫,將其整合到流程中,分別管理其授權,並逐一將呈現的頁面傳遞給OnBarcode Reader SDK。這產生了一個雙依賴解決方案,而一個依賴解決方案本來就足夠。

API冗長度: OnBarcode生成器需要實例化一個BarHeight——然後調用生成方法。 使用一個靜態工廠API可以用顯著更少的程式碼生產相同的輸出。 大批量生成中,屬性分配模式會產生大量重複程式碼,必須審查和維護。

基本問題

雙授權配置是任何需要同時生成和讀取項目的最直接的摩擦點。 OnBarcode需要在啟動時對兩個不同的授權命名空間進行兩次單獨調用:

// OnBarcode: two products, two DLL references, no runtime key
// OnBarcode uses pre-licensed DLLs — the purchased DLL is already activated.
// There is no runtime SetLicense() call; the license is baked into the downloaded assembly.
using OnBarcode.Barcode;
using OnBarcode.Barcode;

IronBarcode將其簡化為一個涵蓋所有功能的單一屬性分配——生成、讀取、PDF支援和批量操作——在一個鍵下:

// IronBarcode: one package, one key, one line
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

應用中的每個條碼操作——無論是生成、讀取還是處理PDF——都在該單一配置下運行。

IronBarcode對比OnBarcode: 功能比較

功能OnBarcodeIronBarcode
條碼生成
條碼讀取分開的產品,分開的購買包含
PDF 條碼讀取本地不支持原生——不需要外部庫
讀取格式自動檢測否——需要明確的BarcodeType[]
結果元資料(格式、位置、頁面)不可用——僅原始string[]是——BarcodeResults附帶完整元資料
覆蓋Logo的QR碼需要手動GDI+程式碼內建
已發布價格是——每個產品頁面(生成器層級+單獨的讀取器)是——單一頁面涵蓋所有功能
單一授權鍵涵蓋所有功能否——每個產品單獨鍵
NuGet發佈可用,並與傳統DLL下載選項一起提供自推出以來可用
源碼存取僅限Unlimited Tier不提供
支持.NET 8 / 9
Docker / 雲授權配置手動支援環境變數

快速入門:從OnBarcode到IronBarcode遷移

步驟1:移除OnBarcode包引用

如果您的項目使用NuGet包,請移除這兩個:

dotnet remove package OnBarcode.Barcode.Generator
dotnet remove package OnBarcode.Barcode.Reader
SHELL

如果您的項目使用較舊的基於DLL的發佈,也請從您的.csproj中移除手動引用塊:

<!-- Remove this block entirely -->
<ItemGroup>
  <Reference Include="OnBarcode.Barcode">
    <HintPath>lib\OnBarcode.Barcode.dll</HintPath>
    <Private>true</Private>
  </Reference>
</ItemGroup>
XML

lib/目錄或其存放處刪除DLL文件。 將舊程式集留在新NuGet包旁邊會在編譯時產生命名空間衝突。

步驟2:新增IronBarcode

一個包涵蓋生成、讀取和PDF支援:

dotnet add package IronBarcode
SHELL

不需要第二個包來讀取。 不需要第二個包來支持PDF。

步驟3:更新命名空間並替換雙授權配置

用單一的IronBarcode導入替換兩個OnBarcode的using指令:

// Remove
using OnBarcode.Barcode;
using OnBarcode.Barcode;

// Add
using IronBarCode;

將雙重DLL引用替換為單一鍵分配。 在應用啟動早期,在任何條碼操作運行之前,放置此配置一次:

// Remove the OnBarcode DLL references and using directives
// Add
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

程式碼遷移範例

程式碼128條碼生成

基本的程式碼128案例說明了屬性分配模式與靜態工廠模式。

OnBarcode方法:

using OnBarcode.Barcode;

Linear barcode = new Linear();
barcode.Type = BarcodeType.CODE128;
barcode.Data = "SHIP-2024-001";
barcode.Resolution = 96;
barcode.X = 1;
barcode.BarcodeHeight = 80;
barcode.ShowText = true;
barcode.drawBarcode("shipping-label.png");

IronBarcode 方法:

using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-2024-001", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");

資料和編碼型別以參數形式傳遞給CreateBarcode。 屬性如解析度和條碼高度並不需要來生產可掃描的輸出; 預設設置適用於大多數用途。 當需要自定義尺寸時,可以在SaveAsPng之間作為鏈式調用新增而不引入可變物件狀態。

帶有Logo的QR碼生成

帶Logo的QR碼需要OnBarcode回退到System.Drawing進行圖像覆蓋步驟。 IronBarcode將其作為內建操作提供。

OnBarcode方法:

using OnBarcode.Barcode;
using System.Drawing;

QRCode qr = new QRCode();
qr.Data = "https://example.com/product/4891";
qr.QRCodeDataMode = QRCodeDataMode.Auto;
qr.QRCodeECL = QRCodeECL.H; // H-level error correction required for logo overlay

Image qrImage = qr.drawBarcode();

using (Graphics g = Graphics.FromImage(qrImage))
{
    Image logo = Image.FromFile("brand-logo.png");
    int logoSize = qrImage.Width / 5;
    int x = (qrImage.Width - logoSize) / 2;
    int y = (qrImage.Height - logoSize) / 2;
    g.DrawImage(logo, x, y, logoSize, logoSize);
}

qrImage.Save("product-qr.png");

IronBarcode 方法:

using IronBarCode;

var qr = QRCodeWriter.CreateQrCodeWithLogo("https://example.com/product/4891", "brand-logo.png", 500);
qr.SaveAsPng("product-qr.png");

錯誤更正級別、Logo尺寸計算和圖像組合在內部處理。 不需要System.Drawing依賴。

從圖像中讀取條碼

從圖像文件讀取最清楚地說明了產品整合。 使用OnBarcode時,讀取需要單獨的Reader SDK,一個單獨的授權調用,以及明確的格式規範。 使用IronBarcode,它是一個單一的靜態調用,使用已經到位的相同包和鍵。

OnBarcode方法:

using OnBarcode.Barcode;

// OnBarcode reader is distributed as a pre-licensed DLL — no runtime SetLicense() call.
BarcodeScanner scanner = new BarcodeScanner();
scanner.BarcodeTypes = new BarcodeType[] { BarcodeType.Code128, BarcodeType.QRCode };
string[] results = scanner.Scan("received-label.png");

foreach (string value in results)
    Console.WriteLine(value);

IronBarcode 方法:

using IronBarCode;

var results = BarcodeReader.Read("received-label.png");
foreach (var result in results)
    Console.WriteLine($"{result.Format}: {result.Value}");

不需要實例建立、不需要格式陣列、不需要單獨的授權配置。 格式是自動檢測的。 每個結果都帶有解碼值和檢測格式。 有關讀取選項和支援的圖像型別的詳細資訊,請參閱指南如何從圖像讀取條碼

從PDF中讀取條碼

此遷移範例適用於先前使用第三方庫將PDF頁面呈現為圖像,然後將這些圖像傳遞給OnBarcode Reader SDK的團隊。

OnBarcode方法:

// OnBarcode has no native PDF support.
// A separate PDF rendering library was required — for example PdfiumViewer or Aspose.PDF.
var pageImages = RenderPdfPagesToImages("invoices.pdf"); // external library call

using OnBarcode.Barcode;
BarcodeScanner scanner = new BarcodeScanner();
scanner.BarcodeTypes = new BarcodeType[] { BarcodeType.Code128, BarcodeType.QRCode };

foreach (var pageImage in pageImages)
{
    string[] results = scanner.Scan(pageImage);
    foreach (string value in results)
        Console.WriteLine(value);
}

IronBarcode 方法:

using IronBarCode;

var results = BarcodeReader.Read("invoices.pdf");
foreach (var result in results)
    Console.WriteLine($"Page {result.PageNumber}: {result.Format}{result.Value}");

無需呈現步驟,無需外部PDF庫,無需格式陣列。 PDF條碼讀取功能會自動處理所有頁面,並在每個結果中包含頁碼。

批量生成

為一組項目生成條碼遵循與單次生成相同的模式差異。

OnBarcode方法:

using OnBarcode.Barcode;

foreach (var item in inventoryItems)
{
    Linear barcode = new Linear();
    barcode.Type = BarcodeType.CODE128;
    barcode.Data = item.Sku;
    barcode.Resolution = 96;
    barcode.BarWidth = 1;
    barcode.BarHeight = 80;
    barcode.ShowText = true;
    barcode.drawBarcode($"labels/{item.Id}.png");
}

IronBarcode 方法:

using IronBarCode;

foreach (var item in inventoryItems)
{
    BarcodeWriter.CreateBarcode(item.Sku, BarcodeEncoding.Code128)
        .SaveAsPng($"labels/{item.Id}.png");
}

OnBarcode API到IronBarcode映射參考

OnBarcodeIronBarcode注意事項
預先授權DLL(無運行時鍵調用)IronBarCode.License.LicenseKey = "key"屬性分配; 在啟動時調用一次
兩個DLL引用(生成器+讀取器)單一 NuGet 套件一個包覆蓋所有功能
new Linear()BarcodeWriter.CreateBarcode(data, encoding)靜態工廠; 無物件實例
barcode.BarcodeType = BarcodeType.CODE128BarcodeEncoding.Code128作為參數作為第二個參數傳遞給CreateBarcode
barcode.Data = "..."CreateBarcode的第一個參數資料是第一個參數
barcode.drawBarcode("file.png").SaveAsPng("file.png")格式命名的方法
barcode.drawBarcode("file.jpg").SaveAsJpeg("file.jpg")格式命名的方法
barcode.drawBarcode("file.pdf").SaveAsPdf("file.pdf")本地PDF輸出
BarcodeType.CODE128BarcodeEncoding.Code128常數重命名
BarcodeType.QRCodeBarcodeEncoding.QRCode直接映射
BarcodeType.EAN13BarcodeEncoding.EAN13直接映射
BarcodeType.DataMatrixBarcodeEncoding.DataMatrix直接映射
BarcodeType.PDF417BarcodeEncoding.PDF417直接映射
new BarcodeScanner() { BarcodeTypes = [...] }BarcodeReader.Read(path) — 靜態無實例,無格式規範
scanner.Scan("file.png")string[]BarcodeReader.Read("file.png")BarcodeResults更豐富的返回型別
results[0](原始字串)result.Value解碼的字串值
N/Aresult.Format檢測格式 — 在OnBarcode中不可用
N/Aresult.PageNumberPDF讀取的頁面來源
N/ABarcodeReader.Read("document.pdf")本地PDF讀取; 無OnBarcode對應
用於QR標誌的手動GDI+覆蓋QRCodeWriter.CreateQrCodeWithLogo()內建的標誌支援
BarcodeType[]配置不需要自動檢測是預設的

常見遷移問題及解決方案

問題1:DLL引用衝突

OnBarcode: 繼承DLL發佈的項目有lib\OnBarcode.Barcode.dll或類似路徑。 如果在新增IronBarcode時舊DLL仍在磁盤上,編譯器將看到兩個提供相同命名空間前綴的程式集,並產生模糊的引用錯誤。

解決方案: 在運行<ItemGroup>引用塊。 從磁盤上刪除DLL文件。 使用乾淨的構建驗證是否沒有舊的程式集引用保留。

# Search for lingering OnBarcode DLL references in project files
grep -r "OnBarcode" --include="*.csproj" .
grep -r "OnBarcode" --include="*.props" .
SHELL

問題2:漸進遷移期間的類名衝突

OnBarcode: 閱讀器命名空間導出了一個名為BarcodeScanner的類。 IronBarcode有一個靜態類名為BarcodeReader。 這些名稱不會直接衝突,但任何同時導入BarcodeEncoding。 在遷移期間保持兩個命名空間的活動會在任何BarcodeType引用上產生編譯錯誤。

解決方案: 原子地完成每個文件的遷移——在同一編輯中移除using IronBarCode。 不要在任何文件中同時保留兩個using指令。如果需要分階段的方法,請臨時使用完全限定名稱:

// Temporary disambiguation during phased migration
var results = IronBarCode.BarcodeReader.Read("file.png");

問題3:BarcodeType陣列移除

OnBarcode: 閱讀器需要reader.BarcodeTypes = new BarcodeType[] { ... }才能運行。 遷移閱讀器程式碼的開發者有時會保持顯式指定格式的習慣,並在IronBarcode中尋找等效配置。

解決方案: 完全移除格式規範。 BarcodeReader.Read在所有支援的格式中自動檢測。 不需要配置,因為在IronBarcode中沒有BarcodeType[]的等效項。

// No format configuration required
var results = BarcodeReader.Read("label.png");

OnBarcode遷移清單

遷移前任務

在進行更改之前,審核程式碼庫以找到所有OnBarcode使用:

# Find all OnBarcode namespace imports
grep -rn "using OnBarcode" --include="*.cs" .

# Find all license configuration calls
grep -rn "SetLicense" --include="*.cs" .

# Find all generator usage
grep -rn "new Linear\|new QRCode\|drawBarcode\|BarcodeType\." --include="*.cs" .

# Find all reader usage
grep -rn "BarcodeScanner\|\.Scan(\|BarcodeType\[\]" --include="*.cs" .

# Find DLL references in project files
grep -rn "OnBarcode" --include="*.csproj" .
grep -rn "OnBarcode" --include="*.sln" .
SHELL

記錄哪些文件僅使用生成,哪些使用讀取,哪些同時使用。 注意包含手動<Reference> DLL塊而不是NuGet包引用的任何文件。

程式碼更新任務

  1. 移除OnBarcode.Barcode.Generator NuGet包
  2. 移除OnBarcode.Barcode.Reader NuGet包
  3. <Reference> DLL條目
  4. 從儲存庫中刪除OnBarcode DLL文件
  5. 運行dotnet add package IronBarcode
  6. 在每個文件中用using OnBarcode.Barcode
  7. 在每個文件中用using OnBarcode.Barcode.Reader
  8. 移除兩個OnBarcode DLL <Reference>條目(生成器和讀取器)—無需替換運行時授權調用
  9. 在應用啟動時新增IronBarCode.License.LicenseKey = "YOUR-KEY"一次
  10. 將每個new QRCode() + 屬性分配塊轉換為BarcodeWriter.CreateBarcode(data, encoding)
  11. 我用barcode.drawBarcode("file.png")
  12. new BarcodeScanner() { BarcodeTypes = [...] } + .Scan(path)
  13. 將結果處理從BarcodeResults
  14. 移除任何用於解決OnBarcode的PDF限制的PDF到圖像呈現程式碼
  15. 用單一BarcodeReader.Read("file.pdf")調用替換多步驟PDF呈現+掃描迴圈

遷移後測試

驗證項目中使用的每種條碼型別(程式碼128、QR、EAN、資料矩陣、PDF417)生成可掃描的輸出 用實體掃描儀或移動裝置掃描生成的條碼以確認可讀性 驗證條碼讀取對已知的測試圖像返回正確的值 確認PDF讀取對多頁測試文件返回正確的值和正確的頁碼 通過任何CI環境運行應用以確認授權鍵配置在管道中正確工作 檢查.csproj或配置文件中

遷移到IronBarcode的主要優勢

合併的包和授權: 遷移後,一個NuGet包和一個授權鍵涵蓋所有條碼操作。 沒有需要採購的獨立產品,沒有需要跟蹤的獨立版本計劃,並且沒有需要在啟動時維護的雙授權配置。兩個產品安排的複雜性被一個單一的依賴替代。

透明採購: IronBarcode在產品網站上發布永久授權層級和價格。組織可以確定總成本,提交採購訂單,並在沒有銷售對話的情況下完成採購。 IronBarcode授權頁面包括所有層級的定價和用於Docker和雲環境的密鑰配置詳細資訊。

本地PDF支援: 以前需要一個單獨的PDF呈現庫來處理嵌入條碼的PDF的項目可以完全消除該依賴。 單一BarcodeReader.Read調用無需任何呈現步驟即可處理PDF文件的所有頁面,每個結果都包括其被提取的頁碼。

更豐富的閱讀結果:BarcodeResults返回型別提供了解碼值、檢測的條碼格式、源圖像中的邊界框坐標和PDF閱讀的頁碼。 以前處理平面string[]的應用現在可以顯示格式資訊,支援註釋工作流程或實施基於信心水平的過濾,而無需額外的處理。

減少的API表面: 靜態工廠模式取代了屬性分配模型。 常見的生成操作需要減少程式碼行,而讀取操作不需要建立實例或格式預配置。 批量操作從更小的每個項目程式碼腳本中受益,隨著時間的推移更易於審查和維護。

請注意: Aspose、OnBarcode和PDFium是其各自所有者的註冊商標。 本網站與Aspose Pty Ltd、Chromium Project、Google或OnBarcode沒有聯繫、認可或贊助關係。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供資訊參考,並反映了撰寫時公開可用的資訊。
Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

...
閱讀更多

相關文章

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天試用金鑰
無需信用卡或帳戶建立