IRONSOFTWAREHOME
视频

从 条形码 迁移到 IronBarcode

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

本指南涵盖了从 条形码 到IronBarcode的完整迁移路径。 它介绍了三步设置变更,为每种常见模式提供了变更前后的代码示例,将 条形码 API 映射到其IronBarcode等效项,记录了迁移过程中出现的问题,并提供了一个搜索词清单,用于在认为迁移完成之前审核您的代码库。

为什么要从 条形码 迁移?

双SKU采购成本: 条形码 为Generator SDK(仅线性和线性+2D级别)提供永久定价,并将Reader SDK列为单独定价的产品。 需要这两种功能的组织必须完成两次采购流程,针对两个SKU——选择所用符号的正确Generator级别,然后单独购买Reader——才能确定总成本。 摩擦是由于两次采购而不是单个项目项的重复。

**分离式产品开销:**生成和读取是两个独立的产品,分别具有独立的NuGet包、独立的许可证命名空间、独立的许可证密钥和独立的版本计划。 使用这两个产品的项目必须在启动时配置两个许可证密钥,在升级过程中跟踪两个软件包版本,并保持对两个独立发布周期的了解。 如果将阅读要求添加到原本只考虑生成功能的项目中,则第二个产品必须重复整个采购和集成过程。

PDF 工作流程缺陷: 条形码 本身不支持从 PDF 文档中读取条形码。 处理嵌入在发票、发货清单、采购订单或档案扫描件中的条形码的项目必须单独获取一个 PDF 转图像渲染库,将其集成到流程中,单独管理其许可证,并将渲染后的页面逐个传递给 条形码 Reader SDK。这样就产生了一个双重依赖的解决方案,而原本一个依赖的解决方案就足够了。

API 详细信息: 条形码 生成器需要实例化一个 Barcode 对象,分配多个属性——包括具有合理默认值的属性,例如 BarWidthBarHeight——然后调用生成方法。 使用静态工厂 API 可以用更少的代码生成相同的输出。 通过批量生成,属性赋值模式会产生大量重复代码,这些代码必须进行审查和维护。

基本问题

对于任何既需要生成又需要读取的项目来说,双许可证配置是最直接的摩擦点。 条形码 需要在启动时分别调用两个不同的许可证命名空间:

// OnBarcode: two products, two DLL references, no runtime key
// 条形码 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;
C#

IronBarcode将其简化为一个属性赋值,该赋值涵盖所有功能——生成、读取、PDF 支持和批量操作——所有这些都归于一个键之下:

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

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

应用程序中的每一个条形码操作——无论是生成、读取还是处理 PDF——都在该单一配置下运行。

IronBarcode与 OnBarcode:功能对比

特征条形码IronBarcode
条形码生成
条形码读取独立产品,单独购买包括
PDF条形码读取原生不支持原生应用——无需外部库
读取时自动检测格式否 — 需要明确的 BarcodeType[]
结果元数据(格式、位置、页码)不可用 — 仅限原始 string[]是 — 带完整元数据的 BarcodeResults
带有徽标叠加层的二维码需要手动编写 GDI+ 代码内置
出版定价是的——每个产品页面(Generator级别+单独的Reader)是的——单页包含所有功能
一个许可证密钥即可使用所有功能不——每个产品都有单独的密钥
NuGet分发可用,伴随旧版DLL下载自发布以来即可使用
源代码访问仅限无限流量套餐不可用
支持.NET 8/9
Docker/云许可证配置手册环境变量支持

快速入门:OnBarcode 到IronBarcode 的迁移

步骤 1:移除 条形码 包引用

如果您的项目使用了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文件的任何地方删除这些DLL文件。 如果将旧程序集与新的NuGet包一起保留,则会在编译时产生命名空间冲突。

步骤 2:添加IronBarcode

一个软件包涵盖生成、读取和 PDF 支持:

dotnet add package IronBarcode
SHELL

阅读时无需第二个软件包。 支持 PDF 不需要第二个软件包。

步骤 3:更新命名空间并替换双许可证配置

将两个 条形码 使用指令替换为单个IronBarcode导入:

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

// Add
using IronBarCode;

用一个单一的键分配替换双DLL引用。 在应用程序启动初期,任何条形码操作运行之前,只需添加一次此代码:

// Remove the 条形码 DLL references and using directives
// Add
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
C#

代码迁移示例

Code 128条码生成

Code 128 的基本案例说明了属性赋值模式与静态工厂模式的区别。

条形码方法:

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之间以链式调用的方式添加,而不会引入可变对象状态。

生成带有徽标的二维码

带有标志的QR码需要OnBarcode回退到System.Drawing进行图像叠加步骤。IronBarcode提供此作为内置操作。

条形码方法:

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");

纠错级别、徽标尺寸计算和图像合成均由内部处理。 无需System.Drawing依赖。

从图像中读取条形码

从图像文件中读取数据最能清晰地说明产品整合情况。 使用 条形码 时,读取需要单独的 Reader SDK、单独的许可证调用和明确的格式规范。 使用IronBarcode,只需使用同一个包和密钥进行一次静态调用即可。

条形码方法:

using OnBarcode.Barcode;

// 条形码 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);
C#

IronBarcode方法:

using IronBarCode;

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

无需创建实例,无需格式化数组,无需单独配置许可证。 系统会自动检测格式。 每个结果都包含解码值和检测到的格式。 有关读取选项和支持的图像类型的详细信息,请参阅如何从图像中读取条形码的指南。

从 PDF 文件中读取条形码

此迁移示例适用于在将 PDF 页面渲染为图像之前,使用第三方库将这些图像传递给 条形码 Reader SDK 的团队。

条形码方法:

// 条形码 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);
}
C#

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条形码读取功能可自动处理所有页面,并在每个结果中包含页码。

批量生成

为一组商品生成条形码与单个商品生成条形码遵循相同的模式差异。

条形码方法:

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");
}

条形码 API 到IronBarcode映射参考

条形码IronBarcode备注
预许可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解码后的字符串值
不适用result.Format检测到的格式——OnBarcode 中不支持。
不适用result.PageNumberPDF 读取的页面源代码
不适用BarcodeReader.Read("document.pdf")原生PDF阅读; 没有 条形码 等效项
手动 GDI+ 叠加 QR 标志QRCodeWriter.CreateQrCodeWithLogo()内置徽标支持
BarcodeType[] 配置不要求自动检测是默认设置

常见迁移问题和解决方案

问题 1:DLL 引用冲突

OnBarcode: 在旧版DLL分发的项目中,.csproj 中包含指向 lib\OnBarcode.Barcode.dll 或类似路径的 <Reference> 元素。 如果添加IronBarcode时旧的 DLL 仍然存在于磁盘上,编译器将看到两个程序集提供相同的命名空间前缀,从而产生歧义引用错误。

解决方案: 在运行<ItemGroup>引用块。 从磁盘中删除 DLL 文件。 使用全新构建版本验证是否没有残留过时的程序集引用。

# Search for lingering 条形码 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:移除条形码类型数组

**OnBarcode:**读取器需要 reader.BarcodeTypes = new BarcodeType[] { ... } 到函数。 开发人员在迁移读取器代码时,有时会习惯于明确指定格式,并在IronBarcode中查找等效配置。

**解决方案:**完全移除格式规范。 BarcodeReader.Read 在所有支持的格式中执行自动检测。 无需配置,并且IronBarcode中不存在BarcodeType[]的等效内容,因为它是不需要的。

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

条形码 迁移清单

迁移前任务

在进行任何更改之前,请审核代码库,找出所有 条形码 的使用情况:

# Find all 条形码 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. 从存储库中删除 条形码 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. 移除所有用于绕过 条形码 PDF 限制的 PDF 转图像渲染代码
  15. 用单次BarcodeReader.Read("file.pdf")调用替换多步骤PDF渲染和扫描循环

迁移后测试

  • 验证项目中使用的每种条形码类型(Code 128、QR、EAN、Data Matrix、PDF417)是否都能生成可扫描的输出。
  • 使用物理扫描仪或移动设备扫描生成的条形码,以确认其可读性
  • 验证条形码读取是否能为已知的测试图像返回正确的值
  • 确认 PDF 读取功能能够为多页测试文档返回正确的值和页码。
  • 在任何持续集成 (CI) 环境中运行应用程序,以确认许可证密钥配置在流水线中正常工作。
  • 在迁移完成后,检查OnBarcode字符串

迁移到IronBarcode的主要优势

**整合的软件包和许可证:**迁移后,一个NuGet包和一个许可证密钥即可涵盖所有条形码操作。 无需采购单独的产品,无需跟踪独立的版本更新计划,也无需在启动时维护双重许可配置。双产品架构的复杂性被单一依赖关系所取代。

透明采购: IronBarcode在产品网站上公布了永久许可级别的价格。企业无需与销售人员沟通,即可确定总成本、提交采购订单并完成采购。 IronBarcode许可页面包含所有级别的定价以及 Docker 和云环境的关键配置详情。

**原生 PDF 支持:**以前需要单独的 PDF 渲染库来处理嵌入条形码的 PDF 的项目可以完全消除这种依赖性。 单次BarcodeReader.Read调用处理PDF文档的所有页面,不需要任何渲染步骤,并且每个结果都包含提取页面的页码。

更丰富的读取结果: BarcodeResults返回类型提供了解码值、检测到的条形码格式、源图像中的坐标框以及PDF读取的页码。 以前使用平面string[]的应用程序现在可以显示格式信息、支持注释工作流或实施基于置信度的过滤,而无需增加额外处理。

**减少 API 接口:**静态工厂模式取代了属性赋值模型。 常见的生成操作需要的代码行数较少,读取操作不需要创建实例或预先配置格式。 批量操作的优势在于每个项目的代码占用空间更小,更容易进行审查和长期维护。

请注意: Aspose、OnBarcode 和 PDFium 是其各自所有者的注册商标。 本网站与 Aspose Pty Ltd、Chromium Project、Google 或 条形码 无关,也未得到他们的认可或赞助。 所有产品名称、徽标和品牌均为各自所有者的财产。 比较仅供参考,反映撰写时公开可用的信息。
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 天试用密钥
无需信用卡或创建账户