푸터 콘텐츠로 바로가기
동영상

C#에서 바코드를 사용자 지정하고 스타일을 지정하는 방법

OnBarcode에서 IronBarcode로의 마이그레이션

이 가이드는 OnBarcode에서 IronBarcode 로의 전체 마이그레이션 경로를 다룹니다. 이 문서에서는 3단계 설정 변경 사항을 다루고, 모든 일반적인 패턴에 대한 변경 전후 코드 예제를 제공하며, 온바코드 API를IronBarcode의 해당 기능과 연결하고, 마이그레이션 중에 발생하는 문제를 문서화하고, 마이그레이션이 완료되었다고 판단하기 전에 코드베이스를 감사하기 위한 검색어 체크리스트를 제공합니다.

OnBarcode에서 마이그레이션해야 하는 이유는 무엇일까요?

두 개의 SKU 조달 오버헤드: OnBarcode는 Generator SDK (선형 전용 및 선형 + 2D 티어)를 위한 영구 가격을 게시하고 Reader SDK를 별도로 가격을 책정한 제품으로 나열합니다. 두 기능 모두 필요한 조직은 두 개의 SKU에 대해 두 개의 조달 과정을 마쳐야 합니다 — 사용 중인 기호 체계를 위한 올바른 Generator 티어를 선택한 다음 Reader를 별도로 구매하여 총 비용이 정해지기 전까지 합니다. 마찰은 두 개의 구매에 대한 중복이지 단일 라인 항목이 아닙니다.

제품 분리로 인한 간접비 절감: 생성과 읽기는 별도의 NuGet 패키지, 별도의 라이선스 네임스페이스, 별도의 라이선스 키, 별도의 버전 관리 일정을 가진 별개의 제품입니다. 두 제품을 모두 사용하는 프로젝트는 시작 시 두 개의 라이선스 키를 구성하고, 업그레이드 과정에서 두 가지 패키지 버전을 추적하며, 두 개의 독립적인 릴리스 주기를 인지해야 합니다. 원래 생성 전용이었던 프로젝트에 읽기 요구 사항이 추가되면 두 번째 제품에 대해 전체 조달 및 통합 프로세스를 반복해야 합니다.

PDF 워크플로의 부족한 점: OnBarcode는 PDF 문서에서 바코드를 읽는 기능을 기본적으로 지원하지 않습니다. 송장, 배송 명세서, 구매 주문서 또는 보관 스캔에 포함된 바코드를 처리하는 프로젝트는 별도의 PDF-이미지 변환 라이브러리를 구매하여 파이프라인에 통합하고, 해당 라이브러리의 라이선스를 별도로 관리한 후, 렌더링된 페이지를 온바코드 Reader SDK에 하나씩 전달해야 합니다. 이로 인해 원래 하나의 종속성으로 충분했던 솔루션이 두 개의 종속성을 갖게 됩니다.

API 상세: 온바코드 생성기를 사용하려면 Barcode 객체를 인스턴스화하고, Resolution, BarWidth, BarHeight 등과 같은 합리적인 기본값을 포함한 여러 속성을 할당한 후 생성 메서드를 호출해야 합니다. 정적 팩토리 API를 사용하면 훨씬 적은 코드로 동일한 결과를 얻을 수 있습니다. 일괄 생성 과정에서 속성 할당 패턴이 반복적으로 적용되면 검토 및 유지 관리가 필요한 코드가 대량으로 생성됩니다.

근본적인 문제

이중 라이선스 구성은 생성과 읽기 모두가 필요한 모든 프로젝트에서 가장 즉각적인 문제점으로 작용합니다. OnBarcode는 시작 시 두 개의 서로 다른 라이선스 네임스페이스에 대한 두 번의 별도 호출이 필요합니다.

// 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;
// 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;
' 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.
Imports OnBarcode.Barcode
Imports OnBarcode.Barcode
$vbLabelText   $csharpLabel

IronBarcode 이를 단일 속성 할당으로 간소화하여 생성, 읽기, PDF 지원 및 일괄 처리 등 모든 기능을 하나의 키로 관리할 수 있도록 합니다.

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

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// IronBarcode: one package, one key, one line
using IronBarCode;

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

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

애플리케이션 내의 모든 바코드 관련 작업(PDF 생성, 읽기 또는 처리 여부와 관계없이)은 단일 구성으로 실행됩니다.

IronBarcode와 OnBarcode의 기능 비교

기능 온바코드 IronBarcode
바코드 생성
바코드 판독 별도 상품, 별도 구매 포함됨
PDF 바코드 읽기 기본적으로 지원되지 않습니다. 네이티브 앱 — 외부 라이브러리가 필요하지 않습니다.
읽기 시 형식 자동 감지 아니요 — 명시적인 BarcodeType[] 필요
결과 메타데이터(형식, 위치, 페이지) 사용 불가 — 원시 string[]만 사용 가능 예 — 전체 메타데이터와 함께 BarcodeResults
로고가 겹쳐진 QR 코드 수동 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
dotnet remove package OnBarcode.Barcode.Generator
dotnet remove package OnBarcode.Barcode.Reader
SHELL

프로젝트가 이전의 DLL 기반 배포를 사용하는 경우, .csproj에서 수동 참조 블록도 제거하십시오.


<ItemGroup>
  <Reference Include="OnBarcode.Barcode">
    <HintPath>lib\OnBarcode.Barcode.dll</HintPath>
    <Private>true</Private>
  </Reference>
</ItemGroup>

<ItemGroup>
  <Reference Include="OnBarcode.Barcode">
    <HintPath>lib\OnBarcode.Barcode.dll</HintPath>
    <Private>true</Private>
  </Reference>
</ItemGroup>
XML

DLL 파일을 lib/ 디렉토리 또는 저장된 위치에서 삭제하십시오. 기존 어셈블리를 새 NuGet 패키지와 함께 그대로 두면 컴파일 시 네임스페이스 충돌이 발생합니다.

2단계:IronBarcode추가

하나의 패키지로 생성, 읽기 및 PDF 지원 기능을 모두 제공합니다.

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

읽기를 위해 두 번째 패키지는 필요하지 않습니다. PDF 지원을 위해 두 번째 패키지는 필요하지 않습니다.

3단계: 네임스페이스 업데이트 및 이중 라이선스 구성 교체

OnBarcode를 사용하는 두 개의 지시문을 하나의IronBarcode가져오기로 대체하십시오.

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

// Add
using IronBarCode;
// Remove
using OnBarcode.Barcode;
using OnBarcode.Barcode;

// Add
using IronBarCode;
Imports IronBarCode
$vbLabelText   $csharpLabel

이중 DLL 참조를 단일 키 할당으로 교체하십시오. 이 코드는 애플리케이션 시작 초기에, 바코드 관련 작업이 실행되기 전에 한 번만 배치하십시오.

// Remove the 온바코드 DLL references and using directives
// Add
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Remove the 온바코드 DLL references and using directives
// Add
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' Remove the 온바코드 DLL references and Imports statements
' Add
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

코드 마이그레이션 예제

코드 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");
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");
Imports OnBarcode.Barcode

Dim barcode As 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")
$vbLabelText   $csharpLabel

IronBarcode 접근 방식:

using IronBarCode;

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

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

BarcodeWriter.CreateBarcode("SHIP-2024-001", BarcodeEncoding.Code128) _
    .SaveAsPng("shipping-label.png")
$vbLabelText   $csharpLabel

데이터 및 인코딩 형식은 CreateBarcode에 인수로 전달됩니다. 해상도나 막대 ​​높이와 ​​같은 속성은 스캔 가능한 출력을 생성하는 데 필수적이지 않습니다. 기본 설정은 대부분의 용도에 적합합니다. 사용자 정의 치수가 필요한 경우, CreateBarcodeSaveAsPng 사이에 체인 호출로 추가할 수 있으며 변경 가능한 객체 상태를 소개하지 않습니다.

로고가 포함된 QR 코드 생성

로고가 있는 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");
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");
Imports OnBarcode.Barcode
Imports System.Drawing

Dim qr As 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

Dim qrImage As Image = qr.drawBarcode()

Using g As Graphics = Graphics.FromImage(qrImage)
    Dim logo As Image = Image.FromFile("brand-logo.png")
    Dim logoSize As Integer = qrImage.Width \ 5
    Dim x As Integer = (qrImage.Width - logoSize) \ 2
    Dim y As Integer = (qrImage.Height - logoSize) \ 2
    g.DrawImage(logo, x, y, logoSize, logoSize)
End Using

qrImage.Save("product-qr.png")
$vbLabelText   $csharpLabel

IronBarcode 접근 방식:

using IronBarCode;

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

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

Dim qr = QRCodeWriter.CreateQrCodeWithLogo("https://example.com/product/4891", "brand-logo.png", 500)
qr.SaveAsPng("product-qr.png")
$vbLabelText   $csharpLabel

오류 수정 수준, 로고 크기 계산 및 이미지 합성은 내부적으로 처리됩니다. System.Drawing 종속성이 필요하지 않습니다.

이미지에서 바코드 읽기

이미지 파일에서 읽어오는 방식은 제품 통합을 가장 명확하게 보여줍니다. OnBarcode를 사용하여 바코드를 읽으려면 별도의 Reader SDK, 별도의 라이선스 요청 및 명시적인 형식 지정이 필요합니다.IronBarcode사용하면 이미 설정된 패키지와 키를 사용하여 단일 정적 호출만으로 모든 작업을 수행할 수 있습니다.

OnBarcode 접근 방식:

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);
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);
Imports OnBarcode.Barcode

' 온바코드 reader is distributed as a pre-licensed DLL — no runtime SetLicense() call.
Dim scanner As New BarcodeScanner()
scanner.BarcodeTypes = New BarcodeType() {BarcodeType.Code128, BarcodeType.QRCode}
Dim results As String() = scanner.Scan("received-label.png")

For Each value As String In results
    Console.WriteLine(value)
Next
$vbLabelText   $csharpLabel

IronBarcode 접근 방식:

using IronBarCode;

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

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

Dim results = BarcodeReader.Read("received-label.png")
For Each result In results
    Console.WriteLine($"{result.Format}: {result.Value}")
Next
$vbLabelText   $csharpLabel

인스턴스 생성, 포맷 배열, 별도 라이선스 구성이 필요 없습니다. 형식이 자동으로 감지됩니다. 각 결과에는 디코딩된 값과 감지된 형식이 포함됩니다. 읽기 옵션 및 지원되는 이미지 유형에 대한 자세한 내용은 이미지에서 바코드를 읽는 방법 가이드를 참조하십시오.

PDF에서 바코드 읽기

이 마이그레이션 예시는 타사 라이브러리를 사용하여 PDF 페이지를 이미지로 렌더링한 후 해당 이미지를 온바코드 Reader SDK에 전달하는 팀에 적용됩니다.

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);
}
// 온바코드 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);
}
Imports OnBarcode.Barcode

' 온바코드 has no native PDF support.
' A separate PDF rendering library was required — for example PdfiumViewer or Aspose.PDF.
Dim pageImages = RenderPdfPagesToImages("invoices.pdf") ' external library call

Dim scanner As New BarcodeScanner()
scanner.BarcodeTypes = New BarcodeType() {BarcodeType.Code128, BarcodeType.QRCode}

For Each pageImage In pageImages
    Dim results As String() = scanner.Scan(pageImage)
    For Each value As String In results
        Console.WriteLine(value)
    Next
Next
$vbLabelText   $csharpLabel

IronBarcode 접근 방식:

using IronBarCode;

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

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

Dim results = BarcodeReader.Read("invoices.pdf")
For Each result In results
    Console.WriteLine($"Page {result.PageNumber}: {result.Format} — {result.Value}")
Next
$vbLabelText   $csharpLabel

렌더링 단계도 없고, 외부 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");
}
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");
}
Imports OnBarcode.Barcode

For Each item In inventoryItems
    Dim barcode As 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")
Next
$vbLabelText   $csharpLabel

IronBarcode 접근 방식:

using IronBarCode;

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

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

For Each item In inventoryItems
    BarcodeWriter.CreateBarcode(item.Sku, BarcodeEncoding.Code128) _
        .SaveAsPng($"labels/{item.Id}.png")
Next
$vbLabelText   $csharpLabel

온바코드 API와IronBarcode매핑 참조

온바코드 IronBarcode 노트
사전 라이선스 DLL (실행 중 키 호출 없음) IronBarCode.License.LicenseKey = "key" 부동산 양도; 시작 시 한 번 호출
두 DLL 참조 (생성기 + 리더) 단일 NuGet 패키지 하나의 패키지가 모든 기능을 갖춥니다
new Linear() BarcodeWriter.CreateBarcode(data, encoding) 정적 공장; 객체 인스턴스 없음
barcode.BarcodeType = BarcodeType.CODE128 BarcodeEncoding.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.CODE128 BarcodeEncoding.Code128 상수 이름 변경됨
BarcodeType.QRCode BarcodeEncoding.QRCode 직접 매핑
BarcodeType.EAN13 BarcodeEncoding.EAN13 직접 매핑
BarcodeType.DataMatrix BarcodeEncoding.DataMatrix 직접 매핑
BarcodeType.PDF417 BarcodeEncoding.PDF417 직접 매핑
new BarcodeScanner() { BarcodeTypes = [...] } BarcodeReader.Read(path) — 정적 인스턴스 없음, 형식 지정 없음
scanner.Scan("file.png")string[] BarcodeReader.Read("file.png")BarcodeResults 더 풍부한 반환 유형
results[0] (raw string) result.Value 디코딩된 문자열 값
해당 없음 result.Format 감지된 형식 — OnBarcode에서 사용할 수 없음
해당 없음 result.PageNumber PDF의 페이지 소스 읽기
해당 없음 BarcodeReader.Read("document.pdf") PDF 기본 읽기 기능; OnBarcode에 해당하는 것이 없습니다.
QR 로고용 수동 GDI+ 오버레이 QRCodeWriter.CreateQrCodeWithLogo() 로고 지원 기능 내장
BarcodeType[] 구성 필요하지 않음 자동 감지가 기본 설정입니다.

일반적인 마이그레이션 문제와 해결책

문제 1: DLL 참조 충돌

OnBarcode: 레거시 DLL 배포의 프로젝트에는 <Reference> 요소가 .csproj에 있으며, lib\OnBarcode.Barcode.dll 또는 이와 유사한 경로를 가리키고 있습니다.IronBarcode추가할 때 기존 DLL이 디스크에 남아 있으면 컴파일러는 동일한 네임스페이스 접두사를 제공하는 두 개의 어셈블리를 인식하고 모호한 참조 오류를 발생시킵니다.

솔루션: <ItemGroup> 참조 블록을 .csproj에서 제거하고 dotnet add package IronBarcode을 실행하십시오. 디스크에서 DLL 파일을 삭제하세요. 클린 빌드를 통해 오래된 어셈블리 참조가 남아 있지 않은지 확인하십시오.

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

문제 2: 단계별 마이그레이션 중 유형 이름 충돌

OnBarcode: 리더 네임스페이스는 BarcodeScanner라는 클래스를 내보냅니다. IronBarcode에는 BarcodeReader라는 정적 클래스가 있습니다. 이름들이 직접 충돌하지는 않지만, OnBarcode.Barcode.ReaderIronBarCode를 동시에 가져오는 파일은 BarcodeType 열거형의 모호성을 경험할 수 있습니다 — OnBarcode는 형식 선택을 위해 BarcodeType를 정의하고, IronBarcode는 BarcodeEncoding를 사용합니다. 마이그레이션 중 양쪽 네임스페이스를 활성 상태로 유지하면 BarcodeType 참조에서 컴파일 오류가 발생합니다.

솔루션: 각각의 파일을 원자적으로 마이그레이션 완료 — 같은 편집에서 using OnBarcode.Barcode.Reader 지시어를 제거하고 using IronBarCode를 추가하십시오. 어떤 파일에도 using 지시문을 두 개 이상 남겨두지 마십시오. 단계적인 접근 방식이 필요한 경우, 임시로 정규화된 이름을 사용하십시오.

// Temporary disambiguation during phased migration
var results = IronBarCode.BarcodeReader.Read("file.png");
// Temporary disambiguation during phased migration
var results = IronBarCode.BarcodeReader.Read("file.png");
' Temporary disambiguation during phased migration
Dim results = IronBarCode.BarcodeReader.Read("file.png")
$vbLabelText   $csharpLabel

문제 3: BarcodeType 배열 제거

OnBarcode: 리더는 reader.BarcodeTypes = new BarcodeType[] { ... }를 필요로 합니다. }`를 함수로 만듭니다. 리더 코드를 마이그레이션하는 개발자는 때때로 형식을 명시적으로 지정하는 습관이 있으며IronBarcode에서 그와 동등한 구성을 찾습니다.

해결책: 형식 지정을 완전히 제거합니다. BarcodeReader.Read는 지원되는 모든 형식에 대한 자동 감지를 수행합니다. 구성이 필요하지 않으며, IronBarcode에 BarcodeType[]와 동등한 것이 존재하지 않습니다. 그것은 필요하지 않으니깐.

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

온바코드 마이그레이션 체크리스트

이동 전 작업

변경 작업을 하기 전에 코드베이스를 검토하여 온바코드 사용 부분을 모두 찾으십시오.

# 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" .
# 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 항목을 .csproj 파일에서 수동으로 제거
  4. 저장소에서 온바코드 DLL 파일을 삭제합니다.
  5. dotnet add package IronBarcode 실행
  6. 각 파일에서 using OnBarcode.Barcodeusing IronBarCode로 교체
  7. 각 파일에서 using OnBarcode.Barcode.Readerusing IronBarCode로 교체
  8. 온바코드 DLL <Reference> 항목(생성기 및 리더) 모두 제거 — 대체할 런타임 라이선스 호출 없음
  9. 응용 프로그램 시작 시 IronBarCode.License.LicenseKey = "YOUR-KEY"를 한 번 추가
  10. new Linear() 또는 new QRCode() + 속성 할당 블록을 BarcodeWriter.CreateBarcode(data, encoding)으로 변환
  11. barcode.drawBarcode("file.png").SaveAsPng("file.png")로 교체 (또는 적절한 형식 메서드)
  12. new BarcodeScanner() { BarcodeTypes = [...] } + .Scan(path)BarcodeReader.Read(path)로 교체
  13. 결과 처리를 string[] 인덱싱에서 result.Valueresult.Format으로 BarcodeResults에 업데이트
  14. OnBarcode의 PDF 제한 사항을 해결하기 위해 사용했던 PDF-이미지 변환 코드를 모두 제거하십시오.
  15. 다단계 PDF 렌더링 + 스캔 루프를 단일 BarcodeReader.Read("file.pdf") 호출로 교체

마이그레이션 후 테스트

  • 프로젝트에 사용된 각 바코드 유형(Code 128, QR, EAN, Data Matrix, PDF417)이 스캔 가능한 출력을 생성하는지 확인합니다. 생성된 바코드를 실물 스캐너 또는 모바일 기기로 스캔하여 판독 가능 여부를 확인하십시오.
  • 바코드 판독값이 알려진 테스트 이미지에 대해 올바른 값을 반환하는지 확인합니다.
  • PDF 읽기 기능이 여러 페이지로 구성된 테스트 문서에 대해 올바른 값과 페이지 번호를 반환하는지 확인합니다.
  • CI 환경에서 애플리케이션을 실행하여 라이선스 키 구성이 파이프라인에서 올바르게 작동하는지 확인합니다.
  • 마이그레이션 완료 후, .cs, .csproj, 또는 구성 파일에 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, 또는 OnBarcode와 관련이 없으며, 후원하거나 지원받지 않습니다. 모든 제품명, 로고 및 브랜드는 해당 소유자의 자산입니다. 비교는 정보 제공 목적으로만 사용되며, 작성 시점에 공개적으로 이용 가능한 정보를 반영합니다.

자주 묻는 질문

온바코드에서 IronBarcode로 마이그레이션해야 하는 이유는 무엇인가요?

일반적인 이유로는 라이선스 간소화(SDK + 런타임 키 복잡성 제거), 처리량 제한 제거, 네이티브 PDF 지원 확보, Docker/CI/CD 배포 개선, 프로덕션 코드의 API 상용구 감소 등이 있습니다.

OnBarcode API 호출을 IronBarcode로 대체하려면 어떻게 해야 하나요?

인스턴스 생성 및 라이선스 상용구를 IronBarCode.License.LicenseKey = "key"로 대체합니다. 판독기 호출을 BarcodeReader.Read(경로)로, 쓰기 호출을 BarcodeWriter.CreateBarcode(데이터, 인코딩)로 바꿉니다. 정적 메서드는 인스턴스 관리가 필요하지 않습니다.

온바코드에서 IronBarcode로 마이그레이션할 때 얼마나 많은 코드가 변경되나요?

대부분의 마이그레이션은 더 적은 코드 줄로 이루어집니다. 라이선스 상용구, 인스턴스 생성자, 명시적 형식 구성이 제거됩니다. 핵심 읽기/쓰기 작업이 더 간결한 결과 객체를 가진 더 짧은 IronBarcode에 매핑됩니다.

마이그레이션하는 동안 OnBarcode와 IronBarcode를 모두 설치해야 하나요?

아니요. 대부분의 마이그레이션은 병렬 작업이 아닌 직접 교체 작업입니다. 한 번에 하나의 서비스 클래스를 마이그레이션하고, NuGet 참조를 교체하고, 인스턴스화 및 API 호출 패턴을 업데이트한 후 다음 클래스로 이동합니다.

IronBarcode의 NuGet 패키지 이름은 무엇인가요?

패키지는 'IronBarCode'(대문자 B와 C 포함)입니다. '설치-패키지 IronBarCode' 또는 '닷넷 추가 패키지 IronBarCode'로 설치합니다. 코드의 사용 지시어는 'using IronBarCode;'입니다.

IronBarcode는 OnBarcode와 비교하여 Docker 배포를 어떻게 간소화하나요?

IronBarcode는 외부 SDK 파일이나 마운트된 라이선스 구성이 없는 NuGet 패키지입니다. Docker에서 IRONBARCODE_LICENSE_KEY 환경 변수를 설정하면 패키지가 시작 시 라이선스 유효성 검사를 처리합니다.

OnBarcode에서 마이그레이션한 후 IronBarcode가 모든 바코드 형식을 자동으로 감지하나요?

예. IronBarcode는 지원되는 모든 형식에서 기호를 자동으로 감지합니다. 명시적인 바코드 유형 열거가 필요하지 않습니다. 형식이 이미 알려져 있고 성능이 중요한 경우 BarcodeReaderOptions를 사용하여 검색 공간을 최적화하여 제한할 수 있습니다.

IronBarcode는 별도의 라이브러리 없이 PDF에서 바코드를 판독할 수 있나요?

예. BarcodeReader.Read("document.pdf")는 기본적으로 PDF 파일을 처리합니다. 결과에는 발견된 각 바코드에 대한 페이지 번호, 형식, 값 및 신뢰도가 포함됩니다. 외부 PDF 렌더링 단계가 필요하지 않습니다.

IronBarcode는 병렬 바코드 처리를 어떻게 처리하나요?

IronBarcode의 정적 메서드는 상태 저장소가 없고 스레드에 안전합니다. 스레드별 인스턴스 관리 없이 파일 목록에 직접 Parallel.ForEach를 사용할 수 있습니다. BarcodeReaderOptions.MaxParallelThreads는 내부 스레드 예산을 제어합니다.

OnBarcode에서 IronBarcode로 마이그레이션하면 어떤 결과 속성이 변경되나요?

일반적인 이름 변경: 바코드 값은 값으로, 바코드 유형은 형식으로 바뀝니다. IronBarcode 결과에는 신뢰도 및 페이지 번호도 추가됩니다. 솔루션 전반의 검색 및 바꾸기 기능은 기존 결과 처리 코드에서 이름 변경을 처리합니다.

CI/CD 파이프라인에서 IronBarcode 라이선싱을 설정하려면 어떻게 해야 하나요?

IRONBARCODE_LICENSE_KEY를 파이프라인 시크릿으로 저장하고 애플리케이션 시작 코드에 IronBarCode.License.LicenseKey를 할당하세요. 하나의 비밀은 개발, 테스트, 스테이징 및 프로덕션을 포함한 모든 환경에 적용됩니다.

IronBarcode는 사용자 지정 스타일로 QR 코드 생성을 지원하나요?

예. QRCodeWriter.CreateQrCode()는 변경바코드색()을 통한 사용자 지정 색상, 추가브랜드 로고()를 통한 로고 임베딩, 구성 가능한 오류 수정 수준, PNG, JPG, PDF, 스트림을 포함한 여러 출력 형식을 지원합니다.

Curtis Chau
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해