푸터 콘텐츠로 바로가기
다른 구성 요소와 비교

NetBarcode와 IronBarcode: C# 바코드 라이브러리 비교

NetBarcode의 Type 열거형에는 QR 코드 항목이 없습니다. 배송 라벨 프로젝트에 3개월 차에 QR 코드 요구 사항이 추가되면 개발자는 두 번째 라이브러리를 찾게 됩니다. 두 번째 라이브러리는 자체 API 인터페이스, 자체 릴리스 일정, 그리고 NetBarcode에서 이미 요구하는 버전과 일치하지 않을 수 있는 SixLabors.ImageSharp 종속성을 공유합니다. 이 비교에서는 NetBarcode가 무엇인지, 어떤 분야에 적합한지, 그리고 IronBarcode 추가 패키지 없이 어떤 부분을 보완하는지 살펴봅니다.

넷바코드 이해하기

NetBarcode는MIT라이선스 하에 배포되는 오픈 소스 .NET 바코드 생성 라이브러리입니다. 이 프로그램은 문자열 데이터에서 선형 바코드 이미지를 생성하도록 설계되었으며, 그 목적을 깔끔하게 달성합니다. 이 라이브러리는 Code128, EAN-13, UPC-A 및 기타 10개의 1D 형식을 대상으로 하며, 이러한 형식들은 간단한 생성자와 몇 가지 출력 메서드를 통해 모두 제공됩니다. 이미지 렌더링 레이어를 제공하는 SixLabors.ImageSharp에 대한 의존성이 있으며, 버전 1.8부터 Image<Rgba32>GetImage() 반환 유형을 통해 공개 API에 해당 의존성이 반영됩니다.

NetBarcode는 범용 바코드 툴킷을 지향하지 않습니다. 읽기 기능이 없고 2D 형식도 지원하지 않습니다. 이는 의도적인 범위 결정입니다. 이 라이브러리는 1D 바코드만 필요로 하는 애플리케이션에 매우 적합하며,MIT라이선스 덕분에 오픈 소스 환경에서 쉽게 채택할 수 있습니다.

주요 건축적 특징:

  • MIT 라이선스: 라이브러리 자체는MIT라이선스가 적용되지만, 종속성인 SixLabors.ImageSharp에는 수익 기준치를 초과할 경우 적용되는 별도의 상업용 라이선스가 적용됩니다.
  • 1차원 디자인: Type 열거형은 정확히 14개의 바코드 형식을 정의하며 모두 선형입니다; 2D 항목은 없습니다.
  • SixLabors.ImageSharp 종속성: 이미지 렌더링은 ImageSharp에 위임되며 v1.8부터 GetImage() 메서드가 Image<Rgba32>를 반환하여 공개 API에 ImageSharp의 유형을 직접 노출합니다
  • 구축자 기반 API: 바코드는 new Barcode(data, Type.X)로 생성되고 SaveImageFile() 또는 GetImage()로 저장 또는 검색됩니다
  • 읽기 API 없음: NetBarcode는 생성 전용입니다. 바코드 이미지를 디코딩하는 메서드나 클래스가 없습니다
  • 일괄 처리 불가: 각 바코드는 독립적인 생성자 호출입니다. 기본 제공 열거 또는 배치 파이프라인 없음

타입 열거형 설계 경계

Type 열거형은 NetBarcode가 생성할 수 있는 항목의 권위 있는 목록입니다. 살펴보면 도서관의 규모가 드러납니다.

// 넷바코드 Type enum — complete list as of v1.8
public enum Type
{
    Code128,
    Code128A,
    Code128B,
    Code128C,
    Code39,
    Code39Extended,
    Code93,
    EAN8,
    EAN13,
    UPCA,
    UPCE,
    Codabar,
    ITF,
    MSI
}

// These entries do not exist — attempting to use them produces a CS0117 compile error:
// Type.QRCode      — does not exist
// Type.DataMatrix  — does not exist
// Type.PDF417      — does not exist
// Type.Aztec       — does not exist
// 넷바코드 Type enum — complete list as of v1.8
public enum Type
{
    Code128,
    Code128A,
    Code128B,
    Code128C,
    Code39,
    Code39Extended,
    Code93,
    EAN8,
    EAN13,
    UPCA,
    UPCE,
    Codabar,
    ITF,
    MSI
}

// These entries do not exist — attempting to use them produces a CS0117 compile error:
// Type.QRCode      — does not exist
// Type.DataMatrix  — does not exist
// Type.PDF417      — does not exist
// Type.Aztec       — does not exist
' 넷바코드 Type enum — complete list as of v1.8
Public Enum Type
    Code128
    Code128A
    Code128B
    Code128C
    Code39
    Code39Extended
    Code93
    EAN8
    EAN13
    UPCA
    UPCE
    Codabar
    ITF
    MSI
End Enum

' These entries do not exist — attempting to use them produces a BC30002 compile error:
' Type.QRCode      — does not exist
' Type.DataMatrix  — does not exist
' Type.PDF417      — does not exist
' Type.Aztec       — does not exist
$vbLabelText   $csharpLabel

이는 풀 리퀘스트를 기다리는 누락된 기능이 아닙니다. 해당 열거형에는 1차원 항목이 14개 있으며, 이는 라이브러리의 의도된 범위를 반영합니다. QR 코드, DataMatrix, PDF417또는 아즈텍 형식이 필요한 모든 애플리케이션은 해당 형식을 제공하기 위한 별도의 패키지를 구매해야 합니다.

IronBarcode이해하기

IronBarcode 는 바코드 생성과 읽기 기능을 하나의 패키지에 모두 포함하는 상용 .NET 바코드 라이브러리입니다. Iron Software 에서 개발 및 유지 관리하며, 최신 .NET 버전을 대상으로 정기적인 업데이트를 제공합니다. 라이브러리의 정적 API 표면은 한 바코드 형식에서 다른 형식으로 전환할 때 하나의 상수만 변경하면 되도록 설계되어 있으며, Code128을 생성하는 동일한 BarcodeWriter.CreateBarcode 호출은 QR 코드, DataMatrix, PDF417및 Aztec도 생성합니다.

IronBarcode는 BarcodeReader 클래스를 통해 바코드 판독을 처리하며, 이미지 파일과 PDF 문서를 허용하고 형식 식별과 함께 디코딩된 결과를 반환합니다. 즉, 생성과 읽기는 단일 종속성, 단일 라이선스 및 추적해야 할 단일 릴리스 노트 세트를 공유합니다.

주요 특징:

  • 통합 생성 및 읽기: BarcodeWriterBarcodeReader는 모두 단일 NuGet 패키지에 포함되어 있습니다
  • 50개 이상의 지원 형식: 1D 형식에는 모든 넷바코드 형식이 포함됩니다. 2D 형식에는 QR 코드, DataMatrix, PDF417, 아즈텍 등이 있습니다.
  • 플루언트 체인 API: BarcodeWriter.CreateBarcode(data, encoding)SaveAsPng(), SaveAsJpeg(), ToPngBinaryData() 및 스트림 기반 오버로드를 포함한 출력 메서드와 함께 GeneratedBarcode 객체를 반환합니다
  • ImageSharp에 대한 의존성 없음: IronBarcode의 이미지 렌더링은 자체적으로 완료됩니다. SixLabors의 전이적 종속성이 도입되지 않습니다.
  • PDF 지원: 읽기 API는 이미지 형식 외에도 .pdf 파일을 직접 허용합니다
  • 상업용 라이선스: 라이선스 키가 필요합니다. 평가판 모드를 사용할 수 있으며 구매 시 워터마크가 제거됩니다

기능 비교

기능 넷바코드 IronBarcode
1D 바코드 생성
2D 바코드 생성 아니요
바코드 판독 아니요
PDF 지원 아니요
전체 기호 체계 14 50세 이상
ImageSharp 종속성 예 (분할 면허) 아니요
라이선스 모델 MIT(+ ImageSharp 조건) 상업적

상세 기능 비교

기능 넷바코드 IronBarcode
세대
코드128, EAN-13, UPC-A, 코드39
EAN-8, UPC-E, Code93, Codabar, ITF, MSI
QR 코드 아니요
데이터매트릭스 아니요
PDF417 아니요
아즈텍 아니요
GS1-128, GS1 데이터바 아니요
우편 형식 (지능형 우편, 영국 왕립 우편) 아니요
SVG 출력 아니요
독서
바코드 이미지 디코딩 아니요
PDF 문서에서 읽기 아니요
다중 바코드 감지 아니요
자동 형식 감지 아니요
API 설계
생성자 기반 생성 아니요 (정적 방법)
유창한 출력 체인 아니요
일괄 처리 지원 수동 내장형
라이선스 및 종속성
도서관 라이선스 MIT 상업적
ImageSharp 종속성 아니요
상업적 지원 Community Professional

포맷 적용 범위

넷바코드 접근법

NetBarcode는 Type 열거 형식을 통해 14개의 선형 바코드 형식을 제공합니다. 해당 범위 내에서 형식 선택은 간단합니다. 적절한 열거형 멤버를 생성자에 전달하면 됩니다. 경계 또한 명확합니다. 열거형 범위를 벗어난 형식을 사용하려고 하면 컴파일 오류가 발생합니다.

// 넷바코드 — formats that compile and produce output
using NetBarcode;

var code128 = new Barcode("12345678901234", Type.Code128);
code128.SaveImageFile("shipping.png");

var ean13 = new Barcode("5901234123457", Type.EAN13);
ean13.SaveImageFile("product.png");

// 넷바코드 — formats that produce CS0117 compile errors
// var qr     = new Barcode("data", Type.QRCode);     // error CS0117
// var dm     = new Barcode("data", Type.DataMatrix);  // error CS0117
// var p417   = new Barcode("data", Type.PDF417);      // error CS0117
// var aztec  = new Barcode("data", Type.Aztec);       // error CS0117
// 넷바코드 — formats that compile and produce output
using NetBarcode;

var code128 = new Barcode("12345678901234", Type.Code128);
code128.SaveImageFile("shipping.png");

var ean13 = new Barcode("5901234123457", Type.EAN13);
ean13.SaveImageFile("product.png");

// 넷바코드 — formats that produce CS0117 compile errors
// var qr     = new Barcode("data", Type.QRCode);     // error CS0117
// var dm     = new Barcode("data", Type.DataMatrix);  // error CS0117
// var p417   = new Barcode("data", Type.PDF417);      // error CS0117
// var aztec  = new Barcode("data", Type.Aztec);       // error CS0117
Imports NetBarcode

Dim code128 As New Barcode("12345678901234", Type.Code128)
code128.SaveImageFile("shipping.png")

Dim ean13 As New Barcode("5901234123457", Type.EAN13)
ean13.SaveImageFile("product.png")

' 넷바코드 — formats that produce CS0117 compile errors
' Dim qr As New Barcode("data", Type.QRCode)     ' error CS0117
' Dim dm As New Barcode("data", Type.DataMatrix) ' error CS0117
' Dim p417 As New Barcode("data", Type.PDF417)   ' error CS0117
' Dim aztec As New Barcode("data", Type.Aztec)   ' error CS0117
$vbLabelText   $csharpLabel

이러한 경계가 제약 조건이 되는 산업에는 의약품 추적(FDA 2D 바코드 의무화에 따른 데이터매트릭스 필요), 항공권 탑승권(Aztec), 물류 명세서(PDF417) 및 모바일 마케팅(QR 코드)이 포함됩니다. 이러한 요구 사항 각각으로 인해 NetBarcode는 독립형 솔루션으로 사용할 수 없습니다.

IronBarcode접근법

IronBarcode는 지원되는 모든 형식을 동일한 BarcodeWriter.CreateBarcode 방식을 통해 노출합니다. 1D 형식에서 2D 형식으로 이동할 때 API 표면은 변경되지 않으며 BarcodeEncoding 상수만 달라집니다.

using IronBarCode;

// 1D formats — identical API to the 2D examples below
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
    .SaveAsPng("shipping.png");

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("product.png");

// 2D formats — same method, different encoding constant
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");

BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix)
    .SaveAsPng("pharma-label.png");

BarcodeWriter.CreateBarcode("M1DOE/JOHN MR ABC123 JFKLHR 0012 123Y015A0001 100", BarcodeEncoding.Aztec)
    .SaveAsPng("boarding-pass.png");
using IronBarCode;

// 1D formats — identical API to the 2D examples below
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
    .SaveAsPng("shipping.png");

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("product.png");

// 2D formats — same method, different encoding constant
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");

BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix)
    .SaveAsPng("pharma-label.png");

BarcodeWriter.CreateBarcode("M1DOE/JOHN MR ABC123 JFKLHR 0012 123Y015A0001 100", BarcodeEncoding.Aztec)
    .SaveAsPng("boarding-pass.png");
Imports IronBarCode

' 1D formats — identical API to the 2D examples below
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128) _
    .SaveAsPng("shipping.png")

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13) _
    .SaveAsPng("product.png")

' 2D formats — same method, different encoding constant
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
    .SaveAsPng("qr.png")

BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix) _
    .SaveAsPng("pharma-label.png")

BarcodeWriter.CreateBarcode("M1DOE/JOHN MR ABC123 JFKLHR 0012 123Y015A0001 100", BarcodeEncoding.Aztec) _
    .SaveAsPng("boarding-pass.png")
$vbLabelText   $csharpLabel

지원되는 상수 전체 목록은 지원되는 바코드 형식 참조에서 확인할 수 있으며, 여기에는 모든 2D 바코드 생성 형식과 전체 1D 바코드 형식이 모두 포함되어 있습니다.

세대 API 디자인

넷바코드 접근법

NetBarcode의 생성 모델은 생성자 기반입니다. 코드-51702--@@ 객체는 데이터 문자열과 @@--코드-51703--@@ 열거형 값으로 인스턴스화됩니다. 출력은 SaveImageFile()로 직접 저장하거나 Image<Rgba32>를 통해 GetImage()로 검색합니다. 버전 1.8부터 GetImage()의 반환 유형은 SixLabors.ImageSharp 유형이므로 반환 값을 저장하거나 처리하는 모든 코드는 ImageSharp API 내에서 가져와서 작업해야 합니다.

using NetBarcode;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;

// Constructor-based creation
var barcode = new Barcode("12345678901234", Type.Code128);

// Save to file — straightforward
barcode.SaveImageFile("code128.png");

// GetImage() returns Image<Rgba32> — ImageSharp import required
Image<Rgba32> image = barcode.GetImage();

// Further processing requires familiarity with the ImageSharp API
using var stream = new MemoryStream();
image.SaveAsPng(stream);
byte[] bytes = stream.ToArray();
using NetBarcode;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;

// Constructor-based creation
var barcode = new Barcode("12345678901234", Type.Code128);

// Save to file — straightforward
barcode.SaveImageFile("code128.png");

// GetImage() returns Image<Rgba32> — ImageSharp import required
Image<Rgba32> image = barcode.GetImage();

// Further processing requires familiarity with the ImageSharp API
using var stream = new MemoryStream();
image.SaveAsPng(stream);
byte[] bytes = stream.ToArray();
Imports NetBarcode
Imports SixLabors.ImageSharp
Imports SixLabors.ImageSharp.PixelFormats
Imports System.IO

' Constructor-based creation
Dim barcode As New Barcode("12345678901234", Type.Code128)

' Save to file — straightforward
barcode.SaveImageFile("code128.png")

' GetImage() returns Image(Of Rgba32) — ImageSharp import required
Dim image As Image(Of Rgba32) = barcode.GetImage()

' Further processing requires familiarity with the ImageSharp API
Using stream As New MemoryStream()
    image.SaveAsPng(stream)
    Dim bytes As Byte() = stream.ToArray()
End Using
$vbLabelText   $csharpLabel

GetImage() 메서드의 반환 유형은 다운스트림 코드를 ImageSharp 라이브러리에 연결합니다. 결과를 받거나 저장하는 모든 메서드는 Image<Rgba32>로 선언하여 호출 코드에 전이적 종속성을 도입해야 합니다.

IronBarcode접근법

IronBarcode 플루언트 체인을 사용합니다. BarcodeWriter.CreateBarcode은 여러 출력 메서드를 전달하는 GeneratedBarcode 객체를 반환합니다. 이미지 처리는 내부적으로 이루어지며, ImageSharp의 어떤 유형도 호출 코드에 노출되지 않습니다.

using IronBarCode;

// Fluent generation — save directly to file
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
    .SaveAsPng("code128.png");

// Multiple output options on the same GeneratedBarcode object
var barcode = BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128);
barcode.SaveAsPng("code128.png");
barcode.SaveAsJpeg("code128.jpg");
byte[] bytes = barcode.ToPngBinaryData();

using var stream = new MemoryStream();
barcode.SaveAsPng(stream);
using IronBarCode;

// Fluent generation — save directly to file
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
    .SaveAsPng("code128.png");

// Multiple output options on the same GeneratedBarcode object
var barcode = BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128);
barcode.SaveAsPng("code128.png");
barcode.SaveAsJpeg("code128.jpg");
byte[] bytes = barcode.ToPngBinaryData();

using var stream = new MemoryStream();
barcode.SaveAsPng(stream);
Imports IronBarCode

' Fluent generation — save directly to file
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128) _
    .SaveAsPng("code128.png")

' Multiple output options on the same GeneratedBarcode object
Dim barcode = BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
barcode.SaveAsPng("code128.png")
barcode.SaveAsJpeg("code128.jpg")
Dim bytes As Byte() = barcode.ToPngBinaryData()

Using stream As New MemoryStream()
    barcode.SaveAsPng(stream)
End Using
$vbLabelText   $csharpLabel

너비, 높이 및 라벨 구성을 포함한 1D 바코드 생성 에 대한 자세한 옵션은IronBarcode설명서에 나와 있습니다.

읽기 능력

넷바코드 접근법

NetBarcode에는 읽기 API가 없습니다. 바코드 이미지를 데이터 문자열로 다시 디코딩하는 메서드, 클래스 또는 설정은 없습니다. 이는 의도적인 범위 제한이며, 출시를 앞두고 누락된 부분이 아닙니다. NetBarcode를 사용하여 바코드를 생성한 후 인쇄된 라벨의 유효성을 검사하거나, 반품 배송을 스캔하거나, 공급업체 송장에서 값을 추출하는 등 바코드를 읽어야 하는 프로젝트는 해당 목적을 위한 별도의 라이브러리를 도입해야 합니다.

// 넷바코드 — no reading method exists
// The following does not compile because the method does not exist:
// var result = barcode.Read("image.png");  // method does not exist

// The typical workaround requires ZXing.Net as a third-party dependency
// 넷바코드 — no reading method exists
// The following does not compile because the method does not exist:
// var result = barcode.Read("image.png");  // method does not exist

// The typical workaround requires ZXing.Net as a third-party dependency
net
$vbLabelText   $csharpLabel

ZXing .NET 라이브러리는 NetBarcode와 함께 읽기 기능을 제공하는 가장 일반적인 추가 라이브러리로, 넷바코드 및 이미 추가된 모든 QR 코드용 2D 라이브러리와 함께 세 번째 API 인터페이스와 세 번째 패키지를 제공하여 버전 관리가 용이해집니다.

IronBarcode접근법

IronBarcode에는 BarcodeReaderBarcodeWriter와 동일한 패키지에 포함되어 있습니다. 읽기 API는 이미지 파일과 PDF 문서를 입력받아 디코딩된 결과 모음을 반환합니다. 각 결과에는 바코드 값, 형식 유형, 그리고 PDF에서 읽은 경우 페이지 번호가 포함됩니다.

using IronBarCode;

// Read barcodes from an image file
var imageResults = BarcodeReader.Read("shipping-label.png");
foreach (var r in imageResults)
{
    Console.WriteLine($"{r.BarcodeType}: {r.Value}");
}

// Read barcodes from a PDF document — no additional library required
var pdfResults = BarcodeReader.Read("invoice.pdf");
foreach (var r in pdfResults)
{
    Console.WriteLine($"Page {r.PageNumber}: {r.Value}");
}
using IronBarCode;

// Read barcodes from an image file
var imageResults = BarcodeReader.Read("shipping-label.png");
foreach (var r in imageResults)
{
    Console.WriteLine($"{r.BarcodeType}: {r.Value}");
}

// Read barcodes from a PDF document — no additional library required
var pdfResults = BarcodeReader.Read("invoice.pdf");
foreach (var r in pdfResults)
{
    Console.WriteLine($"Page {r.PageNumber}: {r.Value}");
}
Imports IronBarCode

' Read barcodes from an image file
Dim imageResults = BarcodeReader.Read("shipping-label.png")
For Each r In imageResults
    Console.WriteLine($"{r.BarcodeType}: {r.Value}")
Next

' Read barcodes from a PDF document — no additional library required
Dim pdfResults = BarcodeReader.Read("invoice.pdf")
For Each r In pdfResults
    Console.WriteLine($"Page {r.PageNumber}: {r.Value}")
Next
$vbLabelText   $csharpLabel

이미지에서 바코드를 읽는 방법에 대한 가이드에서는 읽기 API에서 사용할 수 있는 속도 조정, 다중 바코드 감지 및 이미지 보정 옵션을 다룹니다.

의존성 및 라이선스 고려 사항

넷바코드 및 이미지샤프

NetBarcode는MIT라이선스에 따라 배포됩니다. 이 라이브러리가 의존하는 SixLabors.ImageSharp는 다른 모델을 사용합니다. 오픈 소스 프로젝트와 연간 총매출액이 특정 기준치 미만인 기업은 무료로 사용할 수 있지만, 기준치를 초과하는 기업은 상업용 라이선스를 구매해야 합니다. 이 구분은 이미지샤프가 프로젝트의 .csproj에 명시적으로 나열되어 있는지 또는 NetBarcode를 통해 전달되는지 여부에 관계없이 적용됩니다.


<PackageReference Include="NetBarcode" Version="1.8.2" />

<PackageReference Include="NetBarcode" Version="1.8.2" />
XML

대규모로 바코드를 처리하는 소매 또는 물류 회사(NetBarcode가 주로 목표로 하는 사용 사례)의 경우 연간 매출액이 ImageSharp 상업용 라이선스가 적용되는 기준치를 초과하는 경우가 많습니다. 규정 준수 감사를 통해 패키지 트리 구조에 이러한 의무 사항이 포함되어 있음을 알 수 있습니다.

V1.8 릴리스에서는 GetImage()의 반환 유형이 내부 표현에서 SixLabors.ImageSharp.Image<Rgba32>로 변경되는 등 ImageSharp 종속성에 따른 추가적인 결과가 도입되었습니다. 명시적인 입력 없이 GetImage()를 호출하는 기존 코드는 컴파일 시 중단되었으며, SixLabors.ImageSharpSixLabors.ImageSharp.PixelFormats에 대한 새로운 using 지시어가 필요하게 되었습니다. ImageSharp 자체 API가 향후 버전에서 발전함에 따라 NetBarcode의 공개 API 표면에도 영향을 미칩니다.

IronBarcode

IronBarcode SixLabors.ImageSharp에 대한 의존성이 없습니다. 라이선스 조건은IronBarcode 라이선스 페이지 에 직접 명시되어 있으며, 분할 임계값이나 양도적 상업적 의무는 없습니다. 평가용 체험판 키가 제공됩니다. 구매한 라이선스는 생성된 출력물에서 체험판 워터마크를 제거합니다.

API 매핑 참조

넷바코드 IronBarcode 노트
@@--코드-51721--@@ @@--코드-51722--@@ 생성자 → 정적 메소드
@@--코드-51723--@@ @@--코드-51724--@@ 직접 매핑
@@--코드-51725--@@ @@--코드-51726--@@ 직접 매핑
@@--코드-51727--@@ @@--코드-51728--@@ 직접 매핑
@@--코드-51729--@@ @@--코드-51730--@@ 직접 매핑
@@--코드-51731--@@ @@--코드-51732--@@ 직접 매핑
@@--코드-51733--@@ @@--코드-51734--@@ 직접 매핑
@@--코드-51735--@@ @@--코드-51736--@@ 직접 매핑
@@--코드-51737--@@ @@--코드-51738--@@ 메서드 이름 변경
@@--코드-51739--@@ @@--코드-51740--@@ 메서드 이름 변경
@@--코드-51741--@@ → @@--코드-51742--@@ .ToPngBinaryData() 또는 .SaveAsPng() ImageSharp 유형이 노출되지 않았습니다.
아니요 Type.QRCode @@--코드-51746--@@ 새로운 기능
아니요 Type.DataMatrix @@--코드-51748--@@ 새로운 기능
아니요 Type.PDF417 @@--코드-51750--@@ 새로운 기능
아니요 Type.Aztec @@--코드-51752--@@ 새로운 기능
읽기 API 없음 @@--코드-51753--@@ 새로운 기능
@@--코드-51754--@@ @@--코드-51755--@@ 네임스페이스 교체
@@--코드-51756--@@ 제거하다 더 이상 필요하지 않음

지원되는 바코드 형식에 대한 전체 참조 정보는 지원되는 바코드 형식 문서에서 확인할 수 있습니다.

팀이 NetBarcode에서IronBarcode로 전환을 고려할 때

QR 코드 및 2D 형식 요구 사항

넷바코드의 대안을 검토하게 되는 가장 흔한 계기는 QR 코드에 대한 새로운 요구 사항입니다. 소매 라벨이나 배송 명세서에 사용되는 1D 바코드 생성으로 시작하는 애플리케이션은 일반적으로 비접촉식 링크, 모바일 앱 딥 링크, 마케팅 캠페인 등과 같은 용도로 QR 코드 생성이 필요하게 됩니다. Type 열거형에는 QR 항목이 없기 때문에 이 요구 사항은 넷바코드 내에서 충족할 수 없습니다. QR 코드 라이브러리를 별도로 추가하여 이러한 격차를 해소하는 팀은 제약 통합에 DataMatrix가 필요하거나 배송 라벨에 PDF417을 의무화하는 물류 운송업체에 필요한 경우 두 번째 평가를 받아야 합니다.

바코드 판독이 필수적이 되었습니다

일부 프로젝트는 순수한 바코드 생성으로 시작하여 나중에 유효성 검사 또는 문서 처리 요구 사항을 추가합니다. 예를 들어 인쇄된 바코드가 원본 데이터와 일치하는지 확인하거나, 들어오는 공급업체 송장에서 바코드 값을 추출하거나, 반품 배송 라벨을 스캔하는 등의 작업이 포함될 수 있습니다. NetBarcode는 이를 위한 경로를 제공하지 않습니다. ZXing .NET 또는 이와 유사한 읽기 라이브러리를 추가하면 넷바코드 및 QR 라이브러리가 이미 포함된 동일한 코드베이스에서 학습하고 유지 관리해야 할 세 번째 API가 추가됩니다. 미래 단계에서 요구되는 자료량을 예상하는 프로젝트의 경우, 처음부터 이러한 두 가지 사항을 모두 충족하는 도서관을 선택하는 것이 더 효율적인 경우가 많습니다.

ImageSharp 상업용 라이선스 감사

타사 종속성에 대한 법률 및 규정 준수 검토 과정에서 넷바코드 패키지 트리에 포함된 SixLabors.ImageSharp 상업용 라이선스 조건이 종종 발견됩니다. 연간 총매출액이 기준치를 초과하는 기업의 경우, ImageSharp를 의도적으로 선택했든 NetBarcode를 통해 간접적으로 선택했든 관계없이 해당 의무가 적용됩니다. 이 문제를 도입 전이 아닌 감사 중에 발견한 팀은 계획된 마이그레이션이 아닌 사후 수정 작업을 해야 합니다. 프로젝트를 시작하기 전에 종속성 라이선스를 평가하는 것이 더 깔끔한 방법입니다.

멀티라이브러리 복잡성 감소

1D 바코드 생성을 위한 NetBarcode, 2D 출력을 위한 QR 코드 전용 라이브러리, 그리고 읽기를 위한 ZXing .NET 을 사용하는 팀들은 세 가지 서로 다른 패키지 간의 버전 호환성을 유지해야 하는 어려움에 직면합니다. 업그레이드 주기마다 세 개의 라이브러리가 공유하는 ImageSharp 버전이 일치하는지 확인해야 합니다. 프로젝트에 새로 참여하는 개발자는 개념적으로 하나의 기능에 대해 서로 다른 세 가지 API를 접하게 됩니다. 단일 바코드 라이브러리로 통합하면 온보딩이 간소화되고, 버전 충돌 가능성이 줄어들며, 유지 관리가 하나의 릴리스 주기로 집중됩니다.

일반적인 마이그레이션 고려사항

패키지 교체 및 전이적 종속성 정리

첫 번째 단계는 dotnet remove package NetBarcode로 NetBarcode를 제거하는 것입니다. 프로젝트의 다른 패키지가 이 패키지를 일시적으로 가져오는 경우 종속성 트리에 SixLabors.ImageSharp 패키지가 다시 나타날 수 있습니다. 제거한 후 dotnet list package --include-transitive로 복원된 패키지 목록을 검사하여 ImageSharp가 여전히 존재하는지, 상용 라이선스 조건이 여전히 적용되는지 확인합니다.

GetImage() 반환 유형 대체

코드-51760--@@의 결과를 @@--코드-51761--@@로 저장한 코드는 모두 업데이트해야 합니다. ImageSharp 유형에 해당하는IronBarcode유형은 없습니다. 이미지 교체는 하위 단계에서 이미지가 어떻게 사용되었는지에 따라 달라집니다. 스트림에 이미지를 저장한 코드는 .SaveAsPng(stream) 개체에서 직접 GeneratedBarcode로 대체할 수 있습니다. 원시 바이트를 검색한 코드는 .ToPngBinaryData()를 사용할 수 있습니다. 반환된 이미지에 대해 추가적인 ImageSharp 조작을 수행하는 코드는 해당 작업들을 개별적으로 평가해야 합니다.

네임스페이스 업데이트

코드-51765--@@, 코드-51766--@@, 코드-51767--@@ 또는 코드-51768--@@를 가져온 파일은 해당 지시어를 @@--코드-51769--@@로 대체해야 합니다. 프로젝트 전체에서 이러한 using 문을 검색하면 빌드를 시도하기 전에 주의가 필요한 모든 파일을 식별할 수 있습니다.

IronBarcode추가 기능

본 비교에서 다룬 핵심 생성 및 읽기 기능 외에도IronBarcode다음과 같은 기능을 제공합니다.

  • SVG 바코드 출력 : 인쇄 워크플로 및 확장 가능한 라벨 디자인에 적합한 벡터 형식의 바코드 이미지를 생성합니다.
  • 바코드 스타일링 : 생성된 바코드의 막대 색상, 배경 색상, 주석 글꼴, 여백 및 회전을 구성합니다.
  • GS1-128 및 GS1 DataBar : 소매 및 공급망 규정 준수를 위한 애플리케이션 식별자 구조 바코드
  • 우편 형식 : 지능형 우편, 왕립 우편 및 기타 우편 발송 애플리케이션용 우편 기호 체계
  • PDF 바코드 추출 : 별도의 PDF 라이브러리 없이 여러 페이지로 구성된 PDF 문서에서 바코드를 직접 읽어옵니다.
  • 일괄 생성 : 단일 파이프라인 내에서 바코드 데이터 모음을 효율적으로 처리합니다.
  • MAUI 및 모바일 대상 :IronBarcode크로스 플랫폼 모바일 및 데스크톱 바코드 워크플로를 위한 .NET MAUI 애플리케이션을 지원합니다.

.NET 호환성 및 미래 준비

IronBarcode .NET 8, .NET 9를 대상으로 하며, 아직 최신 .NET 으로 마이그레이션하지 않은 프로젝트를 위해 .NET Standard 와의 호환성도 유지합니다. .NET 10이 2026년 말에 출시될 예정이므로, Iron Software는 정기적인 릴리스 주기를 통해 주요 .NET 릴리스가 나올 때마다 호환성 업데이트를 제공합니다. NetBarcode는 .NET Standard 2.0을 대상으로 하며 해당 호환성 계층을 통해 현재 런타임에서도 작동하지만, 라이브러리의 업데이트 빈도와 2D 형식 세트는 설계 범위에 따라 고정되어 있습니다.

결론

NetBarcode와IronBarcode바코드 라이브러리 범위 스펙트럼에서 서로 다른 위치를 나타냅니다. NetBarcode는 1D 바코드 생성에 집중하고 깔끔하게 구현한 라이브러리입니다. 14가지 포맷을 지원하며, 직관적인 생성자 API를 제공하고,MIT라이선스를 채택하여 ImageSharp 수익 기준에 부합하는 오픈 소스 프로젝트에서 손쉽게 사용할 수 있습니다.IronBarcode는 50개 이상의 형식에 대한 바코드 생성, 이미지 및 PDF 읽기, 1D 및 2D 형식을 동일하게 처리하는 유연한 API를 포함하는 포괄적인 툴킷입니다.

요구 사항이 단순히 선형 바코드 생성으로 제한되는 프로젝트, 예를 들어 기존 소매점 스캐너용 EAN-13 및 UPC-A 코드를 생성하는 POS 시스템이나 수명이 정해져 있는 내부 도구의 경우, NetBarcode는 상업적 의존성을 유발하지 않고 필요한 기능을 제공합니다. 라이브러리는 해당 범위 내에서 잘 구축되어 있으며, Type 열거형을 처음 보면 그 범위가 명확히 드러납니다.

포맷 범위가 확장될 수 있는 프로젝트, 최종적으로 읽기 기능이 필요한 프로젝트, 또는 ImageSharp의 전이적 종속성에 대한 규정 준수 검토가 우려되는 경우,IronBarcode단일 패키지를 통해 이 세 가지 문제를 모두 해결합니다. 1D 생성을 위해 NetBarcode로 시작하여 나중에 2D 생성을 위해 QRCoder를 추가하고 읽기를 위해 ZXing .NET 을 추가하는 팀은 세 가지 별도의 라이브러리 유지 관리 의무를 갖게 됩니다.IronBarcode이러한 것들을 하나로 통합합니다.

이러한 선택은 프로젝트의 요구 사항에 따라 직접적으로 이루어집니다. 14가지 1D 포맷과 판독 기능 부재가 사양과 정확히 일치한다면, NetBarcode는 기술적으로 타당한 선택입니다. 사양에 2D 형식, 읽기 워크플로 또는 ImageSharp 라이선스 조건에 대한 고려 사항이 포함되어 있다면IronBarcode더 완벽한 해결책입니다.

자주 묻는 질문

NetBarcode란 무엇인가요?

NetBarcode는 C# 애플리케이션에서 바코드를 생성하고 판독하기 위한 .NET 바코드 라이브러리입니다. 개발자가 .NET 프로젝트용 바코드 솔루션을 선택할 때 평가하는 여러 대안 중 하나입니다.

NetBarcode와 IronBarcode의 주요 차이점은 무엇인가요?

IronBarcode는 인스턴스 관리가 필요 없는 정적 상태 비저장 API를 사용하는 반면, NetBarcode는 일반적으로 사용하기 전에 인스턴스 생성 및 구성이 필요합니다. 또한 IronBarcode는 모든 환경에서 기본 PDF 지원, 자동 형식 감지, 단일 키 라이선싱을 제공합니다.

IronBarcode가 NetBarcode보다 라이선스 취득이 더 쉬운가요?

IronBarcode는 개발 및 프로덕션 배포를 모두 포괄하는 단일 라이선스 키를 사용합니다. 따라서 SDK 키와 런타임 키를 분리하는 라이선싱 시스템에 비해 CI/CD 파이프라인 및 Docker 구성이 간소화됩니다.

IronBarcode는 NetBarcode가 지원하는 모든 바코드 형식을 지원하나요?

IronBarcode는 QR코드, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 등 30개 이상의 바코드 심볼로지를 지원합니다. 형식 자동 감지 기능은 명시적인 형식 열거가 필요하지 않음을 의미합니다.

IronBarcode는 네이티브 PDF 바코드 판독을 지원하나요?

예. IronBarcode는 별도의 PDF 렌더링 라이브러리가 필요 없이 BarcodeReader.Read("document.pdf")를 사용하여 PDF 파일에서 직접 바코드를 판독합니다. 페이지별 결과에는 페이지 번호, 바코드 형식, 값 및 신뢰도 점수가 포함됩니다.

IronBarcode는 NetBarcode와 비교하여 배치 처리를 어떻게 처리하나요?

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'를 실행하거나 CLI에서 '닷넷 추가 패키지 IronBarCode'를 실행합니다. 추가 SDK 인스톨러나 런타임 파일은 필요하지 않습니다.

NetBarcode와 달리 구매 전에 IronBarcode를 평가할 수 있나요?

예. IronBarcode의 평가판 모드는 완전한 디코딩된 바코드 값을 반환하며 생성된 출력 이미지에만 워터마크가 표시됩니다. 구매를 결정하기 전에 자신의 문서에서 판독 정확도를 벤치마킹할 수 있습니다.

NetBarcode와 IronBarcode의 가격 차이는 무엇인가요?

개발 및 프로덕션을 포함하는 단일 개발자 영구 라이선스의 IronBarcode 가격은 $749부터 시작합니다. 가격 세부 정보 및 볼륨 옵션은 IronBarcode 라이선스 페이지에서 확인할 수 있습니다. 별도의 런타임 라이선스 요구 사항은 없습니다.

NetBarcode에서 IronBarcode로 마이그레이션하는 것은 간단하나요?

NetBarcode에서 IronBarcode로의 마이그레이션에는 주로 인스턴스 기반 API 호출을 IronBarcode의 정적 메서드로 대체하고, 라이선스 상용구를 제거하고, 결과 속성 이름을 업데이트하는 작업이 포함됩니다. 대부분의 마이그레이션에는 코드를 추가하기보다는 줄이는 작업이 포함됩니다.

IronBarcode는 로고가 있는 QR 코드를 생성하나요?

예. QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")는 구성 가능한 오류 수정을 통해 기본적으로 브랜드 이미지를 QR코드에 임베드합니다. ChangeBarCodeColor()를 통해 컬러 QR 코드도 지원됩니다.

커티스 차우
기술 문서 작성자

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

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

아이언 서포트 팀

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