如何在 C# 中設置條碼裁剪區域
從NetBarcode遷移到IronBarcode
本指南介紹從NetBarcode到IronBarcode的完整遷移路徑,包含移除套件步驟、命名空間更新、API翻譯範例,以及在遷移開始前定位每個呼叫點的清單。 本指南針對以下常見情境提供解決方案:專案開始時使用NetBarcode生成1D條碼,後來需要2D格式、閱讀能力或澄清SixLabors.ImageSharp授權義務——這些都超出了NetBarcode的範疇。
為何從NetBarcode遷移
格式天花板: NetBarcode的Type枚舉定義了11種條碼格式,全部為線性格式。 沒有QR Code, DataMatrix, PDF417或Aztec的條目。 當專案需要新增QR碼需求時——例如無接觸式交付連結、行動深度連結或藥品DataMatrix要求——NetBarcode無法滿足。 在該程式庫設計內,唯一的路徑是停止使用該格式並引入單獨的套件。 每個新增的格式需求超出了11條目枚舉的範圍,會將另一個程式庫新增到依賴樹中。
沒有閱讀API:NetBarcode僅生成條碼圖像,並未提供解碼方法。 需要掃描退貨運單、從供應商發票中提取條碼值或驗證印刷的條碼是否與其來源資料匹配的專案,必須新增單獨的閱讀程式庫。 ZXing.Net是最常見的選擇,從而在已經擁有NetBarcode和通常QR專用程式庫的程式碼庫中引入第三個API表面。
ImageSharp商業授權:NetBarcode依賴SixLabors.ImageSharp,它使用分裂的商業授權。 免費賽適用於開源專案和年營收低於特定門檻的公司; 超過該門檻則需要商業授權。 此條件嵌入在傳遞依賴鏈中,並未在安裝期間由NuGet揭露。 處理大規模條碼的零售或物流公司——正是NetBarcode目標的使用案例——可能在超過門檻的情況下沒有評估過該義務。
多程式庫積累:當需要QR碼時轉向QRCoder,然後需要閱讀時轉向ZXing.Net的專案,積累了三個獨立的條碼相關依賴。 每個都有自己的發行計畫,自身的ImageSharp版本期望,以及自己的API需要維護。 整合到一個涵蓋生成、閱讀、1D和2D的單一程式庫消除了跨程式庫版本管理問題。
基本問題
從僅有NetBarcode開始,然後需要增長到需要2D格式的專案最終演變成這種分裂導入:
// NetBarcode for 1D — one library, one API
using NetBarcode;
var code128 = new Barcode("12345", Type.Code128);
code128.SaveImageFile("label.png");
// QRCoder added separately for QR — second library, second API
using QRCoder;
var qrGenerator = new QRCodeGenerator();
var qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var png = new PngByteQRCode(qrData).GetGraphic(20);
File.WriteAllBytes("qr.png", png);
// NetBarcode for 1D — one library, one API
using NetBarcode;
var code128 = new Barcode("12345", Type.Code128);
code128.SaveImageFile("label.png");
// QRCoder added separately for QR — second library, second API
using QRCoder;
var qrGenerator = new QRCodeGenerator();
var qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var png = new PngByteQRCode(qrData).GetGraphic(20);
File.WriteAllBytes("qr.png", png);
Imports NetBarcode
Imports QRCoder
Imports System.IO
' NetBarcode for 1D — one library, one API
Dim code128 As New Barcode("12345", Type.Code128)
code128.SaveImageFile("label.png")
' QRCoder added separately for QR — second library, second API
Dim qrGenerator As New QRCodeGenerator()
Dim qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)
Dim png = New PngByteQRCode(qrData).GetGraphic(20)
File.WriteAllBytes("qr.png", png)
在遷移到IronBarcode後,相同的兩個輸出來自單一導入:
using IronBarCode;
BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)
.SaveAsPng("label.png");
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsPng("qr.png");
using IronBarCode;
BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)
.SaveAsPng("label.png");
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsPng("qr.png");
Imports IronBarCode
BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128) _
.SaveAsPng("label.png")
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
.SaveAsPng("qr.png")
IronBarcodevs NetBarcode:功能比較
| 功能 | NetBarcode | IronBarcode |
|---|---|---|
| 1D 條碼生成 | 是 | 是 |
| 2D條碼生成(QR, DataMatrix, PDF417, Aztec) | 否 | 是 |
| 從圖像中讀取條碼 | 否 | 是 |
| 從PDF文件中讀取條碼 | 否 | 是 |
| 1D格式數量 | 11 | 30+ |
| 2D格式數量 | 0 | 8+ |
| 總共符號 | 11 | 50+ |
| GS1-128, GS1 DataBar | 否 | 是 |
| 郵政格式 | 否 | 是 |
| SVG輸出 | 否 | 是 |
| 批量處理 | 手動 | 內建 |
| ImageSharp依賴 | 是(分裂授權) | 否 |
| 商業支持 | 社區 | 專業 |
| 授權模型 | MIT(+ ImageSharp條件) | 商業 |
快速開始:從NetBarcode遷移到IronBarcode
步驟 1:替換 NuGet 包
移除NetBarcode及其傳遞的ImageSharp依賴:
dotnet remove package NetBarcode
dotnet remove package SixLabors.ImageSharp
dotnet remove package NetBarcode
dotnet remove package SixLabors.ImageSharp
注意,SixLabors.ImageSharp可能會在還原的套件清單中重新出現,如果專案中的其他套件也間接引用它。 移除後,執行dotnet list package --include-transitive以確認ImageSharp是否仍然存在以及其商業授權條件是否仍適用於專案。
步驟2:新增IronBarcode
dotnet add package IronBarcode
dotnet add package IronBarcode
NuGet包名為IronBarcode; 在程式碼中使用的命名空間是IronBarCode(注意大寫的C)。
步驟3:更新命名空間並初始化授權
替換掉每個包含NetBarcode調用的檔案中的舊using指令:
// 移除 these:
// using NetBarcode;
// using SixLabors.ImageSharp;
// using SixLabors.ImageSharp.PixelFormats;
// using SixLabors.Fonts;
// Add this:
using IronBarCode;
// 移除 these:
// using NetBarcode;
// using SixLabors.ImageSharp;
// using SixLabors.ImageSharp.PixelFormats;
// using SixLabors.Fonts;
// Add this:
using IronBarCode;
Imports IronBarCode
在應用程式啟動時新增一次授權初始化——在Startup.cs或項目的輸入點中:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
免費試用金鑰可用於評估; 購買授權會移除生成的條碼圖片上的試用水印。
程式碼遷移範例
Code128生成
最常見的NetBarcode用法模式直接翻譯為IronBarcode,只需從構造函式轉換為靜態方法並更改方法名稱。
NetBarcode方法:
using NetBarcode;
var barcode = new Barcode("12345678901234", Type.Code128);
barcode.SaveImageFile("shipping-label.png");
using NetBarcode;
var barcode = new Barcode("12345678901234", Type.Code128);
barcode.SaveImageFile("shipping-label.png");
Imports NetBarcode
Dim barcode As New Barcode("12345678901234", Type.Code128)
barcode.SaveImageFile("shipping-label.png")
IronBarcode 方法:
using IronBarCode;
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
.SaveAsPng("shipping-label.png");
using IronBarCode;
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
.SaveAsPng("shipping-label.png");
Imports IronBarCode
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128) _
.SaveAsPng("shipping-label.png")
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.X)。 SaveAsWindowsBitmap(),具體取決於所需的輸出格式。 所有可用的1D條碼生成選項在IronBarcode如何指南中記錄。
EAN-13
零售產品條碼型別在程式庫之間直接對應,只需更改常數和方法名稱。
NetBarcode方法:
using NetBarcode;
var ean13 = new Barcode("5901234123457", Type.EAN13);
ean13.SaveImageFile("product-ean.png");
using NetBarcode;
var ean13 = new Barcode("5901234123457", Type.EAN13);
ean13.SaveImageFile("product-ean.png");
Imports NetBarcode
Dim ean13 As New Barcode("5901234123457", Type.EAN13)
ean13.SaveImageFile("product-ean.png")
IronBarcode 方法:
using IronBarCode;
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
.SaveAsPng("product-ean.png");
using IronBarCode;
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
.SaveAsPng("product-ean.png");
Imports IronBarCode
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13) _
.SaveAsPng("product-ean.png")
編碼常數名稱與NetBarcode的BarcodeEncoding.MSI原生支持它們。
GetImage() to ToPngBinaryData()
NetBarcode的SixLabors.ImageSharp.Image<Rgba32>,這需要在調用程式碼中顯式進行ImageSharp導入,並將下游邏輯連結到ImageSharp的API。 IronBarcode在GeneratedBarcode物件上直接暴露二進位和流輸出方法,完全消除了調用程式碼中的ImageSharp依賴。
NetBarcode方法:
using NetBarcode;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
var barcode = new Barcode("12345", Type.Code128);
Image<Rgba32> image = barcode.GetImage();
using var stream = new MemoryStream();
image.SaveAsPng(stream);
byte[] bytes = stream.ToArray();
using NetBarcode;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
var barcode = new Barcode("12345", Type.Code128);
Image<Rgba32> image = barcode.GetImage();
using var stream = new MemoryStream();
image.SaveAsPng(stream);
byte[] bytes = stream.ToArray();
Imports NetBarcode
Imports SixLabors.ImageSharp
Imports SixLabors.ImageSharp.PixelFormats
Imports System.IO
Dim barcode As New Barcode("12345", Type.Code128)
Dim image As Image(Of Rgba32) = barcode.GetImage()
Using stream As New MemoryStream()
image.SaveAsPng(stream)
Dim bytes As Byte() = stream.ToArray()
End Using
IronBarcode 方法:
using IronBarCode;
var barcode = BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128);
// Retrieve bytes directly — no ImageSharp type in calling code
byte[] bytes = barcode.ToPngBinaryData();
// Or write to a stream directly
using var stream = new MemoryStream();
barcode.SaveAsPng(stream);
using IronBarCode;
var barcode = BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128);
// Retrieve bytes directly — no ImageSharp type in calling code
byte[] bytes = barcode.ToPngBinaryData();
// Or write to a stream directly
using var stream = new MemoryStream();
barcode.SaveAsPng(stream);
Imports IronBarCode
Dim barcode = BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)
' Retrieve bytes directly — no ImageSharp type in calling code
Dim bytes As Byte() = barcode.ToPngBinaryData()
' Or write to a stream directly
Using stream As New MemoryStream()
barcode.SaveAsPng(stream)
End Using
在Image<Rgba32>結果上進行進一步ImageSharp操作的程式碼——例如調整大小、合成、格式轉換——將需要單獨評估這些操作,因為IronBarcode不暴露ImageSharp物件。
同時替換NetBarcode和QRCoder
同時運行NetBarcode和QRCoder的專案可以一次性替換兩者。 IronBarcode的2D生成使用與1D生成相同的BarcodeWriter.CreateBarcode方法; 只有BarcodeEncoding常數不同。 查閱2D條碼生成指南以獲取編碼選項和配置。
NetBarcode和QRCoder方法:
using NetBarcode;
using QRCoder;
// 1D with NetBarcode
var code128 = new Barcode("12345", Type.Code128);
code128.SaveImageFile("label.png");
// QR with QRCoder
var qrGenerator = new QRCodeGenerator();
var qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrData);
File.WriteAllBytes("qr.png", qrCode.GetGraphic(20));
using NetBarcode;
using QRCoder;
// 1D with NetBarcode
var code128 = new Barcode("12345", Type.Code128);
code128.SaveImageFile("label.png");
// QR with QRCoder
var qrGenerator = new QRCodeGenerator();
var qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrData);
File.WriteAllBytes("qr.png", qrCode.GetGraphic(20));
Imports NetBarcode
Imports QRCoder
' 1D with NetBarcode
Dim code128 As New Barcode("12345", Type.Code128)
code128.SaveImageFile("label.png")
' QR with QRCoder
Dim qrGenerator As New QRCodeGenerator()
Dim qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)
Dim qrCode As New PngByteQRCode(qrData)
File.WriteAllBytes("qr.png", qrCode.GetGraphic(20))
IronBarcode 方法:
using IronBarCode;
// 1D — same API as 2D
BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)
.SaveAsPng("label.png");
// QR — change the encoding constant, nothing else
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsPng("qr.png");
// Additional 2D formats available with no further imports
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix)
.SaveAsPng("pharma-label.png");
using IronBarCode;
// 1D — same API as 2D
BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)
.SaveAsPng("label.png");
// QR — change the encoding constant, nothing else
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsPng("qr.png");
// Additional 2D formats available with no further imports
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix)
.SaveAsPng("pharma-label.png");
Imports IronBarCode
' 1D — same API as 2D
BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128) _
.SaveAsPng("label.png")
' QR — change the encoding constant, nothing else
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
.SaveAsPng("qr.png")
' Additional 2D formats available with no further imports
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix) _
.SaveAsPng("pharma-label.png")
新增閱讀功能
如果專案還使用了ZXing.Net進行閱讀,那麼可以與NetBarcode一起移除該依賴。 IronBarcode的BarcodeReader可以自動檢測格式,處理圖像和PDF文件。
ZXing.Net方法:
using ZXing;
using ZXing.Common;
using ZXing.Rendering;
var reader = new BarcodeReaderGeneric();
reader.Options = new DecodingOptions { TryHarder = true };
// Bitmap loading and format-specific handling required before decode call
using ZXing;
using ZXing.Common;
using ZXing.Rendering;
var reader = new BarcodeReaderGeneric();
reader.Options = new DecodingOptions { TryHarder = true };
// Bitmap loading and format-specific handling required before decode call
Imports ZXing
Imports ZXing.Common
Imports ZXing.Rendering
Dim reader = New BarcodeReaderGeneric()
reader.Options = New DecodingOptions With {.TryHarder = True}
' Bitmap loading and format-specific handling required before decode call
IronBarcode 方法:
using IronBarCode;
// Read from an image file — automatic format detection
var imageResults = BarcodeReader.Read("shipping-label.png");
foreach (var r in imageResults)
{
Console.WriteLine($"{r.Format}: {r.Value}");
}
// Read from a PDF document — no separate PDF library needed
var pdfResults = BarcodeReader.Read("supplier-invoice.pdf");
foreach (var r in pdfResults)
{
Console.WriteLine($"Page {r.PageNumber}: {r.Format}: {r.Value}");
}
using IronBarCode;
// Read from an image file — automatic format detection
var imageResults = BarcodeReader.Read("shipping-label.png");
foreach (var r in imageResults)
{
Console.WriteLine($"{r.Format}: {r.Value}");
}
// Read from a PDF document — no separate PDF library needed
var pdfResults = BarcodeReader.Read("supplier-invoice.pdf");
foreach (var r in pdfResults)
{
Console.WriteLine($"Page {r.PageNumber}: {r.Format}: {r.Value}");
}
Imports IronBarCode
' Read from an image file — automatic format detection
Dim imageResults = BarcodeReader.Read("shipping-label.png")
For Each r In imageResults
Console.WriteLine($"{r.Format}: {r.Value}")
Next
' Read from a PDF document — no separate PDF library needed
Dim pdfResults = BarcodeReader.Read("supplier-invoice.pdf")
For Each r In pdfResults
Console.WriteLine($"Page {r.PageNumber}: {r.Format}: {r.Value}")
Next
完整的閱讀選項文件在從圖像中閱讀條碼指南中提供,涵蓋速度調整、多條碼檢測和圖像校正設置。
NetBarcode API到IronBarcode映射參考
| NetBarcode | IronBarcode | 注意事項 |
|---|---|---|
new Barcode(data, Type.Code128) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) |
構造函式 → 靜態方法 |
new Barcode(data, Type.EAN13) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.EAN13) |
直接映射 |
new Barcode(data, Type.Code39) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code39) |
直接映射 |
new Barcode(data, Type.EAN8) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.EAN8) |
直接映射 |
new Barcode(data, Type.Codabar) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Codabar) |
直接映射 |
new Barcode(data, Type.Code93) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code93) |
直接映射 |
barcode.SaveImageFile("x.png") |
.SaveAsPng("x.png") |
方法重命名 |
barcode.SaveImageFile("x.jpg") |
.SaveAsJpeg("x.jpg") |
方法重命名 |
barcode.GetImage() → Image<Rgba32> |
.ToPngBinaryData() 或 .SaveAsPng() |
不暴露ImageSharp型別 |
沒有Type.QRCode |
BarcodeEncoding.QRCode |
新功能 |
沒有Type.DataMatrix |
BarcodeEncoding.DataMatrix |
新功能 |
沒有Type.PDF417 |
BarcodeEncoding.PDF417 |
新功能 |
沒有Type.Aztec |
BarcodeEncoding.Aztec |
新功能 |
| 無讀取 API | BarcodeReader.Read(path) |
新功能 |
using NetBarcode; |
using IronBarCode; |
命名空間替換 |
using SixLabors.ImageSharp; |
移除 | 不再需要 |
using SixLabors.ImageSharp.PixelFormats; |
移除 | 不再需要 |
using SixLabors.Fonts; |
移除 | 不再需要 |
完整的編碼常數列表在支援條碼格式參考中。
常見遷移問題及解決方案
問題1:套件移除後ImageSharp傳遞依賴仍然存在
問題:在執行dotnet restore顯示SixLabors.ImageSharp仍然存在於依賴樹中,因為專案中的另一個套件也間接引用它。
解決方案:運行dotnet list package --include-transitive以確定哪個套件仍然導入了ImageSharp。如果僅是NetBarcode,移除顯式的套件引用並還原應該可以清除它。 如果是另一個套件負責該問題,那麼該套件的ImageSharp依賴及其商業授權條件將獨立於NetBarcode移除而仍然在範疇內。
dotnet list package --include-transitive | grep -i imagesharp
dotnet list package --include-transitive | grep -i imagesharp
問題2:Image型別在移除後無法解析
問題:在移除SixLabors.ImageSharp包後,任何宣告為SixLabors.ImageSharp.Image<Rgba32>型別作為參數的變數會產生編譯錯誤,因為該型別不再可用。
解決方案:使用適當的IronBarcode輸出方法替換每次使用。 如果該變數用來獲取字節,請替換為.ToPngBinaryData()。 如果它被寫入流中,請替換為.SaveAsPng(stream)。 如果它被保存為文件,請替換為.SaveAsPng(path)。
// Before — requires SixLabors.ImageSharp reference
Image<Rgba32> img = barcode.GetImage();
img.SaveAsPng(stream);
// After — no external image type required
barcode.SaveAsPng(stream);
// Before — requires SixLabors.ImageSharp reference
Image<Rgba32> img = barcode.GetImage();
img.SaveAsPng(stream);
// After — no external image type required
barcode.SaveAsPng(stream);
' Before — requires SixLabors.ImageSharp reference
Dim img As Image(Of Rgba32) = barcode.GetImage()
img.SaveAsPng(stream)
' After — no external image type required
barcode.SaveAsPng(stream)
問題3:v1.8破壞性更改背景
問題:在v1.8之前對NetBarcode編寫的程式碼可能有GetImage()調用選擇將結果儲存而未顯式型別化,依賴於v1.8之前的內部返回型別。 這些調用可能在NetBarcode更新後已經被破壞,獨立於IronBarcode的遷移。
解決方案:利用IronBarcode遷移作為解決所有現有的v1.8破壞性更改的一個機會。在遷移過程中,應進行專案範圍的搜索,以定位所有GetImage()呼叫點,並用適當的IronBarcode輸出方法替換它們。 遷移檢查清單下的grep命令識別這些位置。
NetBarcode遷移清單
遷移前
在做任何更改之前審核所有NetBarcode使用情況:
grep -r "using NetBarcode" ./src
grep -r "new Barcode(" ./src
grep -r "Type\.Code128\|Type\.EAN13\|Type\.Code39\|Type\.EAN8" ./src
grep -r "Type\.Codabar\|Type\.Code93" ./src
grep -r "SaveImageFile(" ./src
grep -r "GetImage(" ./src
grep -r "using SixLabors\.ImageSharp" ./src
grep -r "Image<Rgba32>" ./src
grep -r "using NetBarcode" ./src
grep -r "new Barcode(" ./src
grep -r "Type\.Code128\|Type\.EAN13\|Type\.Code39\|Type\.EAN8" ./src
grep -r "Type\.Codabar\|Type\.Code93" ./src
grep -r "SaveImageFile(" ./src
grep -r "GetImage(" ./src
grep -r "using SixLabors\.ImageSharp" ./src
grep -r "Image<Rgba32>" ./src
- 確定每個需要變更using指令的文件
- 記下所有
Image<Rgba32>物件的方式 - 檢查是否存在QRCoder或ZXing.Net,可以同時移除
- 執行
dotnet list package --include-transitive以在移除前記錄當前的ImageSharp依賴狀態 - 獲取IronBarcode授權金鑰(免費試用金鑰無需購買即可使用)
程式碼更新
- 執行
dotnet remove package NetBarcode - 當其他套件未使用時執行
dotnet remove package SixLabors.ImageSharp - 執行
dotnet add package IronBarcode - 在應用程式啟動時新增
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; - 在每個受影響的文件中將
using IronBarCode; - 從所有文件中移除
using SixLabors.Fonts; - 透過API映射表將每個
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.X) - 將
SaveAsPng()或適當的格式特定方法 - 將
SaveAsPng(stream),根據需要替換 - 如果移除QRCoder:將
QRCodeGenerator+BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode) - 如果移除ZXing.Net:用
BarcodeReader.Read(path)替換閱讀器設置
遷移後測試
- 構建專案並確認無編譯錯誤
- 針對生成的條碼輸出運行現有的單元測試
- 直觀確認條碼圖像符號正確且內容清晰
- 如果在遷移過程中新增QR碼輸出,則驗證其正確性
- 如果新增了條碼掃描功能,則測試閱讀功能
- 如果ImageSharp被移除,則執行
dotnet list package --include-transitive以確認其不再存在 - 驗證授權金鑰初始化在第一次條碼操作之前運行
遷移到IronBarcode的主要優勢
統一格式覆蓋:遷移後,QR碼、DataMatrix、PDF417、Aztec和所有其他2D格式可通過與Code128和EAN-13相同的API調用使用。當格式需求擴展時無需第二個程式庫,BarcodeEncoding常數是格式型別之間唯一需要更改的內容。
內建閱讀功能: BarcodeReader.Read()可以自動檢測格式,處理圖像文件和PDF文件。 此前需要ZXing.Net進行閱讀的專案可以移除此依賴,並整合到單一條碼程式庫中,從而減少專案中開發人員需要學習的API表面。
無ImageSharp義務:IronBarcode沒有SixLabors.ImageSharp的依賴。 遷移後,嵌入在NetBarcode的傳遞依賴中的分裂商業授權條件不再適用於專案。 授權合規審核變得更簡單,因為條碼程式庫的義務直接陳述,並不依賴於第三方圖像處理程式庫的營收門檻。
穩定公開API:IronBarcode不在其公共API表面暴露第三方型別。 從GeneratedBarcode型別是IronBarcode自己的型別,這意味著IronBarcode內部渲染的未來更新不會在調用程式碼中產生NetBarcode的v1.8 GetImage()型別變更那樣的破壞性變更。
單一依賴需要維護:用IronBarcode替換NetBarcode、QRCoder和ZXing.Net可將三個升級迴圈、三組發行說明和三個潛在版本衝突減少到一個。 隨著.NET版本的進步以及依賴更新變得必要,維護工作隨著單一程式庫而不是三個進行縮放。
常見問題
為什麼我應該從NetBarcode遷移到IronBarcode?
常見的理由包括簡化授權(去除SDK +運行時鑰匙的複雜性)、消除吞吐量限制、獲得原生PDF支持、改善Docker/CI/CD部署,並減少生產程式碼中的API樣板。
如何用IronBarcode替換NetBarcode的API呼叫?
用IronBarCode.License.LicenseKey = "key"替換實例建立和授權樣板。用BarcodeReader.Read(path)替換讀取呼叫,用BarcodeWriter.CreateBarcode(data, encoding)替換寫入呼叫。靜態方法不需要實例管理。
從NetBarcode遷移到IronBarcode時需要改動多少程式碼?
大多數遷移會導致較少的程式碼行。授權樣板、實例構造函式和顯式格式配置被移除。核心讀/寫操作映射為較短的IronBarcode等價物,且結果物件更清晰。
在遷移過程中,我需要同時保留NetBarcode和IronBarcode嗎?
不需要。大多數遷移是直接替換而不是並行操作。一次遷移一個服務類,替換NuGet引用,並更新實例化和API呼叫模式後再移動到下一個類。
IronBarcode的NuGet包名稱是什麼?
包名是'IronBarCode'(大寫B和C)。可以用'Install-Package IronBarCode'或'dotnet add package IronBarCode'安裝。程式碼中的using指令是'using IronBarCode;'。
與NetBarcode相比,IronBarcode如何簡化Docker部署?
IronBarcode是沒有外部SDK文件或掛載許可配置的NuGet封裝。在Docker中,設置IRONBARCODE_LICENSE_KEY環境變數,包在啟動時處理許可驗證。
從NetBarcode遷移後,IronBarcode是否能自動檢測所有條碼格式?
是的。IronBarcode自動檢測所有支持的格式的符號學。不需要顯式的BarcodeTypes枚舉。如果格式已經知道並且性能很重要,BarcodeReaderOptions允許限制搜索空間作為優化。
IronBarcode是否可以不使用單獨的庫讀取PDF中的條碼?
可以。BarcodeReader.Read("document.pdf")原生處理PDF文件。結果包括每個條碼發現的頁碼、格式、值和置信度。不需要外部PDF渲染步驟。
IronBarcode如何處理並行條碼處理?
IronBarcode的靜態方法是無狀態且執行緒安全的。直接使用Parallel.ForEach遍歷文件列表,不需要每個執行緒的實例管理。BarcodeReaderOptions.MaxParallelThreads控制內部執行緒預算。
從NetBarcode遷移到IronBarcode時,結果屬性有哪些變化?
常見的重命名:BarcodeValue變為Value,BarcodeType變為Format。IronBarcode結果還新增了Confidence和PageNumber。整個解決方案的搜索和替換可處理現有結果處理程式碼中的重新命名。
我如何在CI/CD管道中設置IronBarcode授權?
將IRONBARCODE_LICENSE_KEY作為管道機密儲存,在應用程式啟動程式碼中分配IronBarCode.License.LicenseKey。一個機密涵蓋所有環境,包括開發、測試、分期和生產。
IronBarcode是否支持生成帶有自定義樣式的QR碼?
支持。QRCodeWriter.CreateQrCode()支持通過ChangeBarCodeColor()自定義顏色,通過AddBrandLogo()嵌入logo,可配置錯誤校正級別,以及包括PNG、JPG、PDF和流在內的多種輸出格式。

