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

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

Docker에서 LEADTOOLS Barcode를 사용하려면 라이선스 파일을 컨테이너의 특정 경로에 마운트해야 합니다. 해당 파일은 모든 배포 시 함께 전송되어야 합니다. 환경 변수만으로는 충분하지 않습니다. LEADTOOLS를 배포할 때마다 파일 관리 문제가 발생합니다.

이는 LEADTOOLS 엔지니어링을 비판하는 것이 아니라, 컨테이너 기술이 존재하기 전에 설계된 30년 된 라이선스 체계를 반영하는 것입니다. 하지만 2026년에는 CI/CD 파이프라인에서 컨테이너 이미지를 빌드하고 푸시해야 할 때 .LIC 파일을 이미지에 베이킹하거나 런타임에 볼륨으로 마운트하게 됩니다. 어느 쪽이든 바코드 라이브러리가 초기화되기 전에 파일 시스템 액세스가 필요합니다. 이것이 이 비교에서 살펴보는 근본적인 장단점입니다.

LEADTOOLS 바코드 이해하기

LEADTOOLS 바코드 모듈은 1990년부터 지속적으로 개발되어 온 LEAD Technologies의 종합 문서 이미지 처리 SDK의 일부입니다. 이 바코드 모듈은 40개 이상의 심볼을 지원하며 OCR, 양식 처리, PDF 조작 및 이미지 보기 기능을 포함한 광범위한 LEADTOOLS 생태계와 긴밀하게 통합됩니다. 그러한 생태계 통합은 애플리케이션이 단일 공급업체로부터 모든 기능을 필요로 할 때 진정으로 가치가 있습니다. 독립형 마이크로서비스 또는 특정 애플리케이션에서 바코드 스캔이 필요한 경우, 동일한 통합 작업은 모든 배포 시 고려해야 할 추가 오버헤드를 발생시킵니다.

도서관의 건축 양식은 그 시대를 반영하고 있다. LEADTOOLS는 명시적인 리소스 관리, 수동 구성 및 파일 시스템 기반 라이선스가 존재하던 시대에 설계되었습니다. 그러한 디자인 결정들은 각각 맥락에 맞게 타당했습니다. 컨테이너화된 워크로드, CI/CD 파이프라인, 시크릿 관리 시스템 등 최신 .NET 개발 환경에서는 이러한 결정들이 오히려 마찰을 일으켜 팀이 적극적으로 해결해야 하는 과제가 됩니다.

LEADTOOLS Barcode를 배포하려면 최소한 5개의 NuGet 패키지가 필요하며, PDF 바코드 추출 기능을 추가하면 6번째 패키지가 됩니다. Windows 환경에서는 호스트 시스템에 MSVC++ 2017 런타임이 설치되어 있어야 합니다. LEADTOOLS 바코드 애플리케이션의 최종 출력 크기는 약 148MB입니다.

LEADTOOLS 바코드의 주요 아키텍처 특징:

  • 파일 기반 라이선스 아키텍처: 알려진 경로의 디스크에 물리적으로 존재하는 .LIC 파일과 개발자 키 문자열이 필요합니다. 라이브러리가 초기화되려면 두 가지 모두 런타임 시에 접근 가능해야 합니다.
  • 2단계 라이선스 모델: 개발 라이선스와 배포 라이선스는 가격이 별도로 책정되고 별도로 취득해야 합니다. 생산 배포 견적은 LEADTOOLS 영업팀에 문의해야 합니다.
  • 멀티 패키지 설치: 최소 바코드 지원 설치에는 Leadtools.Barcode, Leadtools, Leadtools.Codecs, Leadtools.Codecs.Png, Leadtools.Codecs.Jpeg이 필요합니다. 이미지 형식이 추가될 때마다 각각 별도의 코덱 패키지가 필요합니다.
  • 네이티브 런타임 종속성: Windows 배포에는 .NET 런타임 외에도 MSVC++ 2017 런타임이 필요합니다.
  • 명시적 기호 선언: 바코드를 판독하려면 스캔할 형식을 지정하는 BarcodeSymbology 열거형 값 배열을 전달해야 합니다. 생략된 형식은 감지되지 않습니다.
  • 레이어드 초기화 시퀀스: 라이선스 파일을 로드한 후 애플리케이션은 BarcodeEngine을 만들기 전에 라이선스가 만료되지 않았으며 각 필수 기능(1D 읽기, 2D 읽기, 쓰기)이 개별적으로 잠금 해제되었는지 확인해야 합니다.
  • 40개 이상의 심볼 지원: 포괄적인 이미징 플랫폼의 일부로 1D 및 2D 바코드 유형 전반에 걸쳐 강력한 포맷 지원 범위를 제공합니다.

파일 기반 라이선스 아키텍처

LEADTOOLS 초기화에는 첫 번째 바코드 작업이 실행되기 전에 약 20줄의 코드가 필요합니다. 이 과정은 파일 경로 확인, 만료 검증 및 기능별 잠금 검사를 다룹니다.

// LEADTOOLS: 20줄 이상 before the first barcode operation
using Leadtools;
using Leadtools.Barcode;

RasterSupport.SetLicense(
    @"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
    "your-developer-key-here");

if (RasterSupport.KernelExpired)
    throw new InvalidOperationException("LEADTOOLS license has expired");

if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
    throw new InvalidOperationException("1D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
    throw new InvalidOperationException("2D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
    throw new InvalidOperationException("Barcode writing is locked");

var engine = new BarcodeEngine();
// LEADTOOLS: 20줄 이상 before the first barcode operation
using Leadtools;
using Leadtools.Barcode;

RasterSupport.SetLicense(
    @"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
    "your-developer-key-here");

if (RasterSupport.KernelExpired)
    throw new InvalidOperationException("LEADTOOLS license has expired");

if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
    throw new InvalidOperationException("1D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
    throw new InvalidOperationException("2D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
    throw new InvalidOperationException("Barcode writing is locked");

var engine = new BarcodeEngine();
Imports Leadtools
Imports Leadtools.Barcode

RasterSupport.SetLicense("C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC", "your-developer-key-here")

If RasterSupport.KernelExpired Then
    Throw New InvalidOperationException("LEADTOOLS license has expired")
End If

If RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) Then
    Throw New InvalidOperationException("1D barcode reading is locked")
End If

If RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) Then
    Throw New InvalidOperationException("2D barcode reading is locked")
End If

If RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) Then
    Throw New InvalidOperationException("Barcode writing is locked")
End If

Dim engine As New BarcodeEngine()
$vbLabelText   $csharpLabel

이 초기화 블록이 성공적으로 실행되어야만 바코드 읽기 또는 쓰기 작업이 정상적으로 작동합니다. .LIC 파일이 없거나 경로가 잘못되었거나 파일 권한이 잘못된 경우, LEADTOOLS는 자동으로 초기화되지 않고 작동을 중지하는 오류와 함께 초기화되지 않습니다.

IronBarcode이해하기

IronBarcode 는 .NET 애플리케이션에서 바코드를 읽고 생성하는 데 특화된 .NET 바코드 라이브러리입니다.IronBarcode더 큰 이미지 처리 SDK 내의 하나의 모듈이 아니라, 바코드 기능을 주된 목적으로 다룹니다. 이 라이브러리는 모든 이미지 형식 지원, 네이티브 PDF 바코드 추출, 머신러닝 기반 오류 수정 기능을 포함하는 단일 NuGet 패키지로 배포되며, 추가 코덱 패키지나 네이티브 런타임 종속성이 필요하지 않습니다.

IronBarcode 정적 API 설계를 사용합니다. 읽기 및 쓰기 작업은 인스턴스 생성이나 초기화 객체 없이 BarcodeReaderBarcodeWriter에서 정적 메서드 호출로 사용할 수 있습니다. 라이선스 활성화는 단일 문자열 할당입니다. 이 라이브러리는 지원되는 50개 이상의 심볼 체계에서 바코드 형식을 자동으로 감지하므로, 각 읽기 작업 전에 예상되는 형식을 열거할 필요가 없습니다.

이 라이브러리는.NET Standard 2.0이상을 대상으로 하며, .NET Framework 4.6.2 이상, .NET 5, .NET 6, .NET 7, .NET 8 및 .NET 9와 호환됩니다. 지원되는 모든 운영 체제에서 플랫폼별 네이티브 런타임은 필요하지 않습니다.

IronBarcode 의 주요 특징:

  • 문자열 키 라이선싱: 라이선스 활성화에는 단일 문자열 할당이 필요합니다. 키는 환경 변수, 구성 파일, 비밀 관리자 또는 문자열 값을 제공하는 모든 소스에서 가져올 수 있습니다.
  • 단일 NuGet 패키지: 모든 이미지 형식 지원, PDF 추출 및 바코드 기능은 IronBarcode에 포함되어 있습니다. 별도의 코덱 패키지는 필요하지 않습니다.
  • 정적 유창한 API: BarcodeReader.Read()BarcodeWriter.CreateBarcode()는 정적 진입점입니다. 엔진 인스턴스나 코덱 객체를 생성할 필요가 없습니다.
  • 자동 형식 감지: 호출자가 예상 형식을 지정할 필요 없이 50개 이상의 지원되는 심볼 형식을 모두 읽을 수 있습니다.
  • 내장 PDF 지원: PDF 바코드 추출 기능이 기본 패키지에 포함되어 있어 추가 설치가 필요 없습니다.
  • 50개 이상의 심볼 지원: Code 128, Code 39, QR 코드, Data Matrix, PDF417, EAN-13, UPC-A를 포함한 모든 주요 1D 및 2D 바코드 형식을 지원합니다.
  • 머신러닝 기반 오류 수정: 머신러닝 기반 이미지 수정 기능은 손상되었거나 품질이 낮은 바코드 이미지의 판독 정확도를 향상시킵니다.

기능 비교

다음 표는 LEADTOOLS 바코드와IronBarcode의 근본적인 차이점을 보여줍니다.

기능 리드툴즈 바코드 IronBarcode
라이선스 모델 파일 + 키(2단계) 키 전용(단일 계층)
SDK 풋프린트 5개 이상의 패키지 + 네이티브 런타임 1개 패키지
초기화 코드 20줄 이상 1줄
Docker 배포 파일 마운트 필요 환경 변수
PDF 바코드 추출 별도 포장 내장형
형식 자동 감지 제한적
전체 기호 체계 40세 이상 50세 이상
머신러닝 오류 수정 아니요

상세 기능 비교

기능 리드툴즈 바코드 IronBarcode
라이선스
라이선스 모델 파일 + 개발자 키 문자열 키만
라이선스 등급 개발 + 배포 (별도) 단일 영구 라이선스
배포 가격 영업 연락 게시된 가격
환경 변수에 있는 라이선스 부분적 (키만 제공, 파일은 여전히 ​​필요함)
비밀 관리자 라이선스 파일이 여전히 필요합니다 예 (문자열만 해당)
설치
NuGet 패키지가 필요합니다. 5세 이상 1
네이티브 런타임 종속성 MSVC++ 2017 (윈도우) 없음
PDF 지원 패키지 별도(Leadtools.Codecs.Pdf) 포함됨
게시된 출력 크기 약 148MB 약 39MB
독서
1D 심볼 25세 이상 30세 이상
2D 심볼 15세 이상 15세 이상
형식 자동 감지 제한적
기호 표기를 명시적으로 선언해야 합니다. 아니요
PDF 바코드 추출 예 (별도 포장) 예 (내장형)
머신러닝 오류 수정 아니요
다중 바코드 감지
세대
코드 128 생성
QR 코드 생성
QR 코드 로고 브랜딩 아니요
플루언트 생성 API 아니요
출력 형식 PNG, JPEG, BMP PNG, JPEG, BMP, SVG, HTML, PDF
API 설계
API 스타일 레거시 객체 그래프 정적 유창함
초기화 라인 20세 이상 1
이미지 로딩 레이어 래스터 코덱(별도) 자동
플랫폼
크로스 플랫폼 부분적(네이티브 종속성) 정식 버전 (.NET Standard)
Docker/컨테이너 지원 파일 마운트 필요 환경 변수
.NET Standard 2.0
.NET 8 / .NET 9

라이선스 아키텍처

최신 인프라에 배포하는 팀에게 있어 이 두 라이브러리 간의 가장 중요한 차이점은 라이선스 아키텍처입니다.

LEADTOOLS 접근법

LEADTOOLS 라이선스를 사용하려면 파일 시스템에 알려진 경로에 .LIC 파일이 물리적으로 존재하고 RasterSupport.SetLicense에 전달된 개발자 키 문자열이 있어야 합니다. SetLicense을 호출한 후 라이선스가 만료되지 않았으며 각 바코드 기능이 개별적으로 잠금 해제되었는지 확인해야 합니다. 모든 검수를 통과해야만 BarcodeEngine를 생성할 수 있습니다:

// LEADTOOLS: 20줄 이상 before the first barcode operation
using Leadtools;
using Leadtools.Barcode;

RasterSupport.SetLicense(
    @"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
    "your-developer-key-here");

if (RasterSupport.KernelExpired)
    throw new InvalidOperationException("LEADTOOLS license has expired");

if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
    throw new InvalidOperationException("1D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
    throw new InvalidOperationException("2D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
    throw new InvalidOperationException("Barcode writing is locked");

var engine = new BarcodeEngine();
// LEADTOOLS: 20줄 이상 before the first barcode operation
using Leadtools;
using Leadtools.Barcode;

RasterSupport.SetLicense(
    @"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
    "your-developer-key-here");

if (RasterSupport.KernelExpired)
    throw new InvalidOperationException("LEADTOOLS license has expired");

if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
    throw new InvalidOperationException("1D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
    throw new InvalidOperationException("2D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
    throw new InvalidOperationException("Barcode writing is locked");

var engine = new BarcodeEngine();
Imports Leadtools
Imports Leadtools.Barcode

RasterSupport.SetLicense("C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC", "your-developer-key-here")

If RasterSupport.KernelExpired Then
    Throw New InvalidOperationException("LEADTOOLS license has expired")
End If

If RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) Then
    Throw New InvalidOperationException("1D barcode reading is locked")
End If

If RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) Then
    Throw New InvalidOperationException("2D barcode reading is locked")
End If

If RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) Then
    Throw New InvalidOperationException("Barcode writing is locked")
End If

Dim engine As New BarcodeEngine()
$vbLabelText   $csharpLabel

이 파일 기반 모델은 현대적인 비밀 관리 시스템보다 앞서 존재했습니다. 애플리케이션이 실행되는 모든 환경(개발자 머신, CI 빌드 에이전트, 스테이징 서버, 프로덕션 호스트)에서 .LIC 파일을 프로비저닝해야 합니다.

IronBarcode접근법

IronBarcode의 라이선스 초기화는 단 한 줄로 완료됩니다.

// IronBarcode: done
IronBarCode.License.LicenseKey = "YOUR-KEY";
// IronBarcode: done
IronBarCode.License.LicenseKey = "YOUR-KEY";
$vbLabelText   $csharpLabel

해당 키는 환경 변수, 구성 파일 또는 비밀 관리자 등 문자열이 생성될 수 있는 모든 곳에서 가져올 수 있습니다. 찾아야 할 파일도 없고, 만료 확인을 작성할 필요도 없으며, 기능 잠금을 확인할 필요도 없습니다. 라이센스 설정 및 배포 옵션의 경우 환경 변수, appsettings.json, Azure Key Vault 등 모든 패턴을 문서에서 다룹니다.

Docker 및 컨테이너 배포

라이선스 아키텍처의 차이점은 Dockerfile을 작성할 때 구체적으로 드러납니다.

LEADTOOLS 접근법

리드툴즈 Docker를 배포하려면 .LIC 파일을 컨테이너 이미지에 복사하거나 런타임에 볼륨으로 마운트해야 합니다:

FROM mcr.microsoft.com/dotnet/aspnet:8.0

WORKDIR /app
COPY publish/ .

# The license file must be physically present in the container
COPY LEADTOOLS.LIC /app/license/LEADTOOLS.LIC

ENV LEADTOOLS_LICENSE_PATH=/app/license/LEADTOOLS.LIC
ENV LEADTOOLS_DEVELOPER_KEY=your-developer-key

ENTRYPOINT ["dotnet", "YourApp.dll"]

이러한 접근 방식은 후속적으로 여러 가지 문제점을 야기할 수 있습니다. 라이선스 키를 갱신하거나 취소하려면 이미지 재구축 또는 볼륨 재마운트가 필요합니다. CI/CD 파이프라인은 빌드 시 .LIC 파일을 체크인하거나 base64로 인코딩된 시크릿에서 디코딩해야 합니다. 키-값 문자열 쌍을 위해 설계된 Kubernetes 시크릿은 이제 파일 콘텐츠를 저장해야 합니다. 임시 컨테이너를 실행하는 팀은 새 노드를 생성할 때마다 파일 프로비저닝 문제를 해결해야 합니다.

IronBarcode접근법

IronBarcode 컨테이너 내에 파일을 필요로 하지 않습니다.

FROM mcr.microsoft.com/dotnet/aspnet:8.0

WORKDIR /app
COPY publish/ .

ENV IRONBARCODE_LICENSE=your-license-key

ENTRYPOINT ["dotnet", "YourApp.dll"]

환경 변수 모델은 Docker 시크릿, Kubernetes 시크릿, AWS Secrets Manager, Azure Key Vault 및 HashiCorp Vault와 같은 컨테이너 환경에 문자열을 주입할 수 있는 모든 시스템과 기본적으로 호환됩니다. Alpine 및 Debian 기반 이미지를 모두 다루는 Docker 및 Linux 배포 가이드가 있습니다.

바코드 판독

LEADTOOLS 접근법

리드툴즈를 읽으려면 이미지를 로드할 RasterCodecs 인스턴스, 스캔할 BarcodeEngine 인스턴스, 찾을 형식을 지정하는 BarcodeSymbology 값의 명시적 배열을 만들어야 합니다. 배열에서 심볼을 제외하면 LEADTOOLS는 해당 유형의 바코드를 감지하지 못합니다.

// LEADTOOLS: codec, engine, explicit symbology list
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

using var codecs = new RasterCodecs();
using var image = codecs.Load(imagePath);
var engine = new BarcodeEngine();

var symbologies = new[]
{
    BarcodeSymbology.Code128,
    BarcodeSymbology.QR,
    BarcodeSymbology.DataMatrix,
    BarcodeSymbology.EAN13,
    BarcodeSymbology.UPCA
};

var barcodes = engine.Reader.ReadBarcodes(
    image,
    LogicalRectangle.Empty,
    0,
    symbologies);

return barcodes.Select(b => b.Value).ToArray();
// LEADTOOLS: codec, engine, explicit symbology list
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

using var codecs = new RasterCodecs();
using var image = codecs.Load(imagePath);
var engine = new BarcodeEngine();

var symbologies = new[]
{
    BarcodeSymbology.Code128,
    BarcodeSymbology.QR,
    BarcodeSymbology.DataMatrix,
    BarcodeSymbology.EAN13,
    BarcodeSymbology.UPCA
};

var barcodes = engine.Reader.ReadBarcodes(
    image,
    LogicalRectangle.Empty,
    0,
    symbologies);

return barcodes.Select(b => b.Value).ToArray();
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs

Dim barcodes As IEnumerable(Of BarcodeData)
Using codecs As New RasterCodecs()
    Using image As RasterImage = codecs.Load(imagePath)
        Dim engine As New BarcodeEngine()

        Dim symbologies As BarcodeSymbology() = {
            BarcodeSymbology.Code128,
            BarcodeSymbology.QR,
            BarcodeSymbology.DataMatrix,
            BarcodeSymbology.EAN13,
            BarcodeSymbology.UPCA
        }

        barcodes = engine.Reader.ReadBarcodes(
            image,
            LogicalRectangle.Empty,
            0,
            symbologies)
    End Using
End Using

Return barcodes.Select(Function(b) b.Value).ToArray()
$vbLabelText   $csharpLabel

IronBarcode접근법

IronBarcode 지원되는 50개 이상의 심볼 체계에서 형식을 자동으로 감지합니다. 파일 경로가 직접 전달됩니다. 이미지 로딩 레이어나 심볼 배열은 필요하지 않습니다.

// IronBarcode: auto-detect, no object setup
using IronBarCode;

var results = BarcodeReader.Read(imagePath);
return results.Select(r => r.Value).ToArray();
// IronBarcode: auto-detect, no object setup
using IronBarCode;

var results = BarcodeReader.Read(imagePath);
return results.Select(r => r.Value).ToArray();
Imports IronBarCode

Dim results = BarcodeReader.Read(imagePath)
Return results.Select(Function(r) r.Value).ToArray()
$vbLabelText   $csharpLabel

바코드 읽기 옵션, 속도와 정확도 조정, 까다로운 이미지 처리 등에 대한 자세한 내용은 이미지에서 바코드 읽기 가이드를 참조하세요. 이 가이드에서는 API의 모든 기능을 다룹니다.

바코드 생성

LEADTOOLS 접근법

리드툴즈 바코드 생성은 기호, 값, 경계가 있는 BarcodeData 객체를 생성한 다음 명시적인 픽셀 크기, 비트 깊이, 바이트 순서, 보기 원근법을 사용하여 빈 RasterImage를 생성하고 FillCommand를 사용하여 흰색 배경으로 채운 다음 engine.Writer.WriteBarcode()를 호출하고 RasterCodecs로 저장해야 합니다. 즉, 여러 객체 유형에 걸쳐 다섯 가지의 서로 다른 작업이 수행됩니다.

// LEADTOOLS: 5 operations, 25세 이상 lines
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

var engine = new BarcodeEngine();

var barcodeData = new BarcodeData(BarcodeSymbology.Code128)
{
    Value = data,
    Bounds = new LeadRect(0, 0, 400, 100)
};

using var image = new RasterImage(
    RasterMemoryFlags.Conventional,
    400, 100, 24,
    RasterByteOrder.Bgr,
    RasterViewPerspective.TopLeft,
    null, IntPtr.Zero, 0);

new FillCommand(RasterColor.White).Run(image);
engine.Writer.WriteBarcode(image, barcodeData, null);

using var codecs = new RasterCodecs();
codecs.Save(image, outputPath, RasterImageFormat.Png, 0);
// LEADTOOLS: 5 operations, 25세 이상 lines
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

var engine = new BarcodeEngine();

var barcodeData = new BarcodeData(BarcodeSymbology.Code128)
{
    Value = data,
    Bounds = new LeadRect(0, 0, 400, 100)
};

using var image = new RasterImage(
    RasterMemoryFlags.Conventional,
    400, 100, 24,
    RasterByteOrder.Bgr,
    RasterViewPerspective.TopLeft,
    null, IntPtr.Zero, 0);

new FillCommand(RasterColor.White).Run(image);
engine.Writer.WriteBarcode(image, barcodeData, null);

using var codecs = new RasterCodecs();
codecs.Save(image, outputPath, RasterImageFormat.Png, 0);
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs

Dim engine As New BarcodeEngine()

Dim barcodeData As New BarcodeData(BarcodeSymbology.Code128) With {
    .Value = data,
    .Bounds = New LeadRect(0, 0, 400, 100)
}

Using image As New RasterImage(
    RasterMemoryFlags.Conventional,
    400, 100, 24,
    RasterByteOrder.Bgr,
    RasterViewPerspective.TopLeft,
    Nothing, IntPtr.Zero, 0)

    Dim fillCommand As New FillCommand(RasterColor.White)
    fillCommand.Run(image)
    engine.Writer.WriteBarcode(image, barcodeData, Nothing)

    Using codecs As New RasterCodecs()
        codecs.Save(image, outputPath, RasterImageFormat.Png, 0)
    End Using
End Using
$vbLabelText   $csharpLabel

IronBarcode접근법

IronBarcode 이미지 생성, 배경 채우기 및 인코딩을 내부적으로 처리합니다.

// IronBarcode: one method chain
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng(outputPath);
// IronBarcode: one method chain
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng(outputPath);
Imports IronBarcode

BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
    .ResizeTo(400, 100) _
    .SaveAsPng(outputPath)
$vbLabelText   $csharpLabel

바코드 이미지를 생성 할 때,IronBarcodeAPI는 일련의 명령형 설정 객체가 아닌 유연한 체인을 통해 스타일링, 여백, 회전 및 형식 변환을 제공합니다.

API 매핑 참조

리드툴즈 바코드 IronBarcode 노트
@@--코드-51482--@@ @@--코드-51483--@@ 키만 제공됩니다 - 파일은 없습니다
@@--코드-51484--@@ (removed) 유효기간 확인이 필요 없습니다.
@@--코드-51485--@@ (removed) 모든 기능 포함
@@--코드-51486--@@ (removed) 모든 기능 포함
@@--코드-51487--@@ (removed) 모든 기능 포함
@@--코드-51488--@@ 정적 — 인스턴스 없음 BarcodeReader, BarcodeWriter는 정적입니다
@@--코드-51491--@@ (removed) 파일 경로를 직접 전달하세요
@@--코드-51492--@@ (removed) 파일 경로를 직접 전달하세요
@@--코드-51493--@@ @@--코드-51494--@@ 심볼을 자동으로 감지합니다.
@@--코드-51495--@@ @@--코드-51496--@@ 동일한 속성 이름
@@--코드-51497--@@ @@--코드-51498--@@ 부동산 이름 변경됨
@@--코드-51499--@@ @@--코드-51500--@@ 유창한 창작
@@--코드-51501--@@ @@--코드-51502--@@ 네임스페이스 변경
@@--코드-51503--@@ @@--코드-51504--@@ 이름 변경
@@--코드-51505--@@ @@--코드-51506--@@ 같은 이름
@@--코드-51507--@@ @@--코드-51508--@@ 같은 이름
@@--코드-51509--@@ @@--코드-51510--@@ 같은 이름
@@--코드-51511--@@ @@--코드-51512--@@ 같은 이름
@@--코드-51513--@@ + @@--코드-51514--@@ @@--코드-51515--@@ 하나의 방법 체인
@@--코드-51516--@@ + @@--코드-51517--@@ (removed) IronBarcode내부

팀에서 LEADTOOLS Barcode에서IronBarcode로 전환을 고려할 때

컨테이너 및 클라우드 배포

Docker, Kubernetes 또는 서버리스 환경으로 워크로드를 마이그레이션하는 팀은 파일 기반 라이선스 모델을 구체적인 운영 문제로 직면하게 됩니다. 모든 새 컨테이너 인스턴스, 모든 새 클라우드 리전, 모든 새 환경에는 애플리케이션이 시작되기 전에 .LIC 파일이 프로비저닝되어 있고 액세스할 수 있어야 합니다. 문자열 값의 비밀 정보를 관리하도록 설계된 비밀 정보 관리 시스템은 파일 기반 아티팩트를 깔끔하게 처리하지 못합니다. 환경 변수 주입을 구성 기준으로 사용하는 팀은 LEADTOOLS를 사용하려면 일반적인 비밀 키 워크플로 외부에 별도의 프로비저닝 단계가 필요하다는 것을 알게 됩니다. 배포량이 증가함에 따라(자동 확장, 블루-그린 배포, 다중 지역 복제 등) 파일 프로비저닝의 운영 비용도 함께 증가합니다.

SDK 용량 및 종속성 관리

바코드 읽기 또는 생성이 서비스의 주요 또는 유일한 요구 사항인 경우, 5개의 패키지로 구성된 LEADTOOLS 설치와 MSVC++ 2017 런타임 종속성은 컨테이너 이미지 크기, 서버리스 함수의 콜드 스타트 ​​지연 시간, CI/CD 파이프라인의 빌드 시간에 영향을 미치는 오버헤드를 발생시킵니다. 경량 마이크로서비스나 람다 스타일 함수를 구축하는 팀은 바코드 관련 요구 사항을 해결하기 위해 전체 이미지 처리 SDK를 가져오면 코드 검토 및 아키텍처 검토에서 정당화하기 어려운 의존성 문제가 발생한다는 것을 알게 됩니다. 향후 플랫폼 업그레이드로 인해 네이티브 런타임 종속성 변경 사항을 테스트해야 하는 경우, 해당 작업은 서비스를 유지 관리하는 팀의 책임입니다.

가격 투명성

개발 시작 전에 프로젝트 예산을 책정해야 하는 개발팀은 LEADTOOLS에서 공개한 가격 정보만으로는 전체 비용을 파악할 수 없습니다. 개발 라이선스는 개발자 1인당 연간 1,295달러~1,469달러로 책정되어 있지만, 서버 애플리케이션용 프로덕션 배포 라이선스는 영업 담당자를 통해 별도로 견적을 받아야 합니다. 5명의 개발자로 구성된 팀이 3개의 운영 서버에 배포하려면 LEADTOOLS가 예산에 맞는지 확인하기 전에 맞춤 견적을 받아야 합니다. 공개된 가격을 기준으로 구매 결정을 내리는 것을 선호하는 팀, 즉 옵션을 비교하고, 내부 승인을 얻거나, 다년간의 예산을 계획하는 팀의 경우, 이 모델을 사용하려면 평가를 완료하기 전에 영업 담당자와 상담해야 합니다.

바코드 전용 요구 사항

OCR, DICOM 이미지 처리, 문서 주석 또는 LEADTOOLS Suite 의 다른 기능을 필요로 하지 않고 바코드를 읽거나 생성해야 하는 애플리케이션은 실제 요구 사항보다 더 광범위한 플랫폼에 비용을 지불하고 있는 셈입니다. LEADTOOLS의 통합 가치, 즉 OCR, 바코드 및 문서 처리 모듈 간의 데이터 전달 기능은 분명하지만, 해당 Suite 의 여러 기능을 동시에 사용할 때만 그 효과가 발휘됩니다. 웹 API에서 바코드를 스캔하거나 문서 처리 파이프라인에서 바코드를 생성하는 것과 같이 요구 사항이 제한적인 경우, 포괄적인 이미지 처리 플랫폼의 부담 없이 특정 기능에 특화된 바코드 라이브러리를 사용하여 해당 요구 사항을 직접적으로 충족할 수 있습니다.

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

라이선스 초기화 교체

전체 LEADTOOLS 초기화 블록(파일 경로, 만료 확인 및 기능별 잠금 검증)이 단 한 줄로 대체됩니다.IronBarcode라이선스 키는 문자열을 저장하는 모든 비밀 관리 시스템에 저장할 수 있습니다.

// Replace the entire LEADTOOLS initialization block with:
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
// Replace the entire LEADTOOLS initialization block with:
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
' Replace the entire LEADTOOLS initialization block with:
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
$vbLabelText   $csharpLabel

Docker 환경 변수 패턴

Docker파일의 COPY LEADTOOLS.LIC 줄은 완전히 제거됩니다. 라이선스는 런타임 시 환경 변수를 통해 제공되며, 모든 표준 비밀 키 주입 메커니즘과 호환됩니다.

# Remove: COPY LEADTOOLS.LIC /app/license/LEADTOOLS.LIC
# Remove: ENV LEADTOOLS_LICENSE_PATH=/app/license/LEADTOOLS.LIC
# Add:
ENV IRONBARCODE_LICENSE=your-license-key

패키지 제거

기존의 5가지 LEADTOOLS 패키지와 선택 사항인 PDF 코덱이 제거되고 단일 패키지로 대체되었습니다.

dotnet remove package Leadtools.Barcode
dotnet remove package Leadtools
dotnet remove package Leadtools.Codecs
dotnet remove package Leadtools.Codecs.Png
dotnet remove package Leadtools.Codecs.Jpeg
# If added:
dotnet remove package Leadtools.Codecs.Pdf

dotnet add package IronBarcode
dotnet remove package Leadtools.Barcode
dotnet remove package Leadtools
dotnet remove package Leadtools.Codecs
dotnet remove package Leadtools.Codecs.Png
dotnet remove package Leadtools.Codecs.Jpeg
# If added:
dotnet remove package Leadtools.Codecs.Pdf

dotnet add package IronBarcode
SHELL

IronBarcode추가 기능

위에서 설명한 기능 외에도IronBarcode일반적인 .NET 바코드 시나리오와 관련된 다음과 같은 기능을 제공합니다.

  • PDF 바코드 추출: 자동 페이지 반복과 각 결과에 대한 PageNumber 보고를 통해 여러 페이지의 PDF 문서에서 바코드를 판독하며 페이지 루프가 필요하지 않습니다.
  • 머신러닝 기반 오류 수정 : 머신러닝 기반 이미지 전처리를 통해 추가 설정 없이 손상되었거나, 대비가 낮거나, 회전된 바코드 이미지의 판독 정확도를 향상시킵니다.
  • 비동기 일괄 처리: BarcodeReader.ReadAsync()는 비동기 읽기를 지원하여 스레드 차단 없이 높은 처리량의 일괄 처리를 가능하게 합니다.
  • QR 코드 로고 브랜딩: QRCodeWriter는 스캔 가능성을 유지하기 위해 내장된 오류 수정 기능을 사용하여 단일 메서드 호출로 QR코드 중앙에 로고 이미지 임베딩을 지원합니다.
  • SVG 및 HTML 출력: BarcodeWriter는 생성된 바코드를 래스터 이미지 형식 외에도 확장 가능한 SVG 파일 또는 인라인 HTML 요소로 출력할 수 있습니다.
  • 바코드 판독기 옵션 튜닝 : 판독 속도, 예상 심볼 힌트, 다중 바코드 감지 및 이미지 전처리는 전역 상태에 영향을 주지 않고 판독별로 구성할 수 있습니다.

.NET 호환성 및 미래 준비

IronBarcode .NET Standard 2.0을 대상으로 하며, .NET Framework 4.6.2 이상, .NET 5, .NET 6, .NET 7, .NET 8 및 .NET 9와 호환됩니다. 이 라이브러리는 플랫폼별 네이티브 런타임 요구 사항이 없으므로 추가 프로비저닝 단계 없이 Windows, Linux 및 macOS에 배포할 수 있습니다. 2026년까지 .NET 10 도입이 진행됨에 따라 IronBarcode는 정기적인 릴리스 주기를 통해 현재 및 향후 .NET 버전과의 호환성을 보장합니다. 정적 API 설계와 단일 패키지 배포 모델은 릴리스 전반에 걸쳐 안정적으로 유지되므로 버전 업그레이드 시 애플리케이션 초기화 코드나 배포 구성을 변경할 필요가 없습니다.

결론

LEADTOOLS Barcode와IronBarCode.NET 바코드 라이브러리 설계 공간에서 서로 다른 지점을 나타냅니다. LEADTOOLS는 30년 된 종합 이미지 SDK 내의 모듈로, 파일 기반 라이선스 아키텍처, 여러 패키지로 구성된 설치 방식, 그리고 개발 당시의 엔지니어링 규범을 반영하는 기존 API 설계를 특징으로 합니다.IronBarcode는 최신 .NET 환경에 최적화된 바코드 라이브러리로, 단일 패키지 설치, 문자열 키 기반 라이선스, 그리고 초기화 객체가 필요 없는 정적 API를 제공합니다.

LEADTOOLS 바코드는 애플리케이션에서 이미 OCR, DICOM 이미지 처리, 문서 주석 또는 양식 인식과 같은 다른 기능을 위해 LEADTOOLS를 사용하고 있는 경우에 적합한 선택입니다. 이러한 맥락에서, 동일한 SDK를 통해 바코드 기능을 추가하면 새로운 공급업체나 라이선스 계약을 도입하지 않고도 기존 투자를 확장할 수 있습니다. 기존에 LEADTOOLS Enterprise 계약을 체결한 조직은 낮은 추가 비용으로 바코드 기능을 활용할 수 있습니다. LEADTOOLS 이미징 플랫폼의 광범위한 기능을 진정으로 필요로 하는 애플리케이션의 경우, 모듈 간 통합을 통해 얻을 수 있는 가치는 매우 큽니다.

IronBarcode 는 바코드 판독 또는 생성이 서비스의 주요 또는 유일한 요구 사항일 때, 애플리케이션이 컨테이너 또는 클라우드 네이티브 인프라에 배포될 때, 또는 개발 시작 전에 예측 가능한 가격이 필요할 때 적합한 선택입니다. 단일 패키지 설치 및 환경 변수 라이선스 모델은 최신 .NET 서비스의 구성, 배포 및 확장 방식과 일치합니다. 유연한 정적 API는 바코드 기능에 필요한 초기화 및 작동 코드를 줄여줍니다.

두 라이브러리 간의 실질적인 차이점은 배포 시나리오에서 가장 명확하게 드러납니다. 팀에서 새 환경을 추가하거나, 새 클라우드 지역으로 확장하거나, 라이선스 자격 증명을 변경할 때IronBarcode시크릿 관리자의 문자열을 업데이트해야 합니다. LEADTOOLS는 파일 프로비저닝을 필요로 합니다. 이는 LEADTOOLS 엔지니어링에 대한 비판이 아니라, 각 아키텍처에 필요한 사항을 설명하는 것입니다. 솔직한 평가를 내리는 팀은 해당 설명을 배포 모델에 직접 적용하여 어떤 모델이 가장 적합한지 결정해야 합니다.

자주 묻는 질문

리드툴즈 바코드란 무엇인가요?

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

리드툴즈 바코드와 아이언바코드의 주요 차이점은 무엇인가요?

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

IronBarcode가 LEADTOOLS 바코드보다 라이선스 취득이 더 쉬운가요?

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

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

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는 LEADTOOLS 바코드와 비교하여 일괄 처리를 어떻게 처리하나요?

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 인스톨러나 런타임 파일은 필요하지 않습니다.

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

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

리드툴즈 바코드와 아이언바코드의 가격 차이는 무엇인가요?

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

리드툴즈 바코드에서 아이언바코드로 마이그레이션하는 것은 간단하나요?

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

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

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

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

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

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

아이언 서포트 팀

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