Altbilgi içeriğine atla
VIDEOLAR

C# İçinde Verilerden Barkod Nasıl Yaratılır?

LEADTOOLS Barkod'dan IronBarcode'a Geçiş

Bu kılavuz, IronBarcode'a göçün tüm safhalarını kapsar ve .NET geliştiricileri içinLEADTOOLSBarcode'dan nasıl geçileceğini detaylandırır.LEADTOOLSNuGet paketlerinin ve bir yerel çalıştırma bağımlılığının kaldırılmasını, dosya tabanlıLEADTOOLSlisans başlatma dizisinin bir dize anahtarıyla değiştirilmesini veLEADTOOLSokuma ve yazma desenlerinin IronBarcode'un statik akıcı API'sine çevrilmesini ele alır. Her ana geçiş senaryosu için kod örnekleri, bir API eşleme tablosu, yapılandırılmış bir kontrol listesi ve geçiş sırasında ortaya çıkan sorunlara rehberlik içerir.

LEADTOOLS Barcode'dan Niçin Geçilmeli

Dosya Tabanlı Lisans Dağıtımı:LEADTOOLSlisanslama, uygulamanın çalıştığı her makinede belirli bir yolda diskte fiziksel olarak bulunması gereken bir .LIC dosyasını gerektirir. Geliştirici iş istasyonları, CI oluşturma ajanları, aşama sunucuları ve üretim konteynerleri, uygulamanın başlatılması için dosyanın sağlanmasını gerektirir. Bu, ortam değişkenlerine, gizli yöneticilere ve CI/CD boru hattı yapılandırmasına sorunsuz uyum sağlayan dize tabanlı sırların operasyonel modelinden temel olarak farklıdır. Bir dağıtım topolojisine eklenen her yeni ortam - yeni bir bulut bölgesi, yeni bir Kubernetes düğüm havuzu, yeni geliştirici katılımı - dize tabanlı lisanslamanın gerektirmediği bir dosya sağlama adımı gerektirir.

SDK Yükü:LEADTOOLSbarkod kurulumu, Leadtools, Leadtools.Codecs ve ilgili bağımlılıkları getiren Leadtools.Barcode NuGet paketini gerektirir. PDF barkod çıkarımı Leadtools.Pdf ekler. Windows'ta, MSVC++ 2017 Runtime ayrı bir yerel bağımlılıktır.LEADTOOLSbarkod uygulamasının yayımlanmış çıktısı yaklaşık 148 MB'dir. Sadece barkod okuma veya üretime ihtiyaç duyan uygulamalar, bu özellikler kullanılsın veya kullanılmasın, kapsamlı bir görüntüleme platformunun - OCR altyapısı, format codec mimarisi ve belge görüntüleme yetenekleri - tam ağırlığını taşır.

Eski API Tasarımı:LEADTOOLSbarkod işlemleri, herhangi bir iş yapılabilmesi öncesinde belirli bir sırayla birden çok nesne oluşturulmasını gerektirir. Bir barkod okumak için görüntüyü yüklemek için bir RasterCodecs örneği ve taramak için bir BarcodeEngine örneği gerekir, aranacak formatları belirten bir BarcodeSymbology dizisi ile birlikte. Bir barkod oluşturmak için bir BarcodeData nesnesi oluşturmak, belirli piksel parametreleri ile boş bir RasterImage oluşturmak, arka plan rengini FillCommand kullanarak doldurmak, barkodu ona yazmak ve RasterCodecs ile kaydetmek gerekir. Bu API, döneminin tasarım kalıplarını yansıtır.IronBarcode aynı işlemleri, dosya yollarını doğrudan kabul eden statik yöntem çağrılarıyla gerçekleştirmektedir.

Fiyatlandırma Şeffaflığı: Üretim sunucuları içinLEADTOOLSdağıtım lisansları,LEADTOOLSsatışı üzerinden ayrı olarak fiyatlandırılır ve web sitelerinde yayımlanmaz. Geliştirmeye başlamadan önce tam bir maliyet resmi gerektiren ekipler, LEADTOOLS'un bütçelerine uygun olup olmadığını onaylamadan önce satışla görüşmek zorundadır. IronBarcode, geliştirme ve dağıtımı birlikte kapsayan süresiz bir tek seferlik lisans sunar; ayrı bir üretim lisansı gerektirmez.

Temel Sorun

LEADTOOLS başlatma dizisi bir BarcodeEngine oluşturulmadan önce 20+ satır ve dört doğrulama adımı gerektirir. IronBarcode, tüm diziyi tek bir atama ile değiştirir:

// LEADTOOLS: file path, expiry check, three feature lock checks, engine creation
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: file path, expiry check, three feature lock checks, engine creation
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

' LEADTOOLS: file path, expiry check, three feature lock checks, engine creation
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
// IronBarcode: one line, no file required
using IronBarCode;

IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
// IronBarcode: one line, no file required
using IronBarCode;

IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
Imports IronBarCode

IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
$vbLabelText   $csharpLabel

IronBarcode vs LEADTOOLS Barcode: Özellik Karşılaştırması

Özellik LEADTOOLS Barkod IronBarcode
Lisans modeli Dosya + geliştirici anahtarı Sadece dize anahtarı
NuGet paketleri gerekli 5+ 1
Yerel çalışma zamanı bağımlılığı MSVC++ 2017 (Windows) None
Yayınlanmış çıktı boyutu ~148 MB ~39 MB
Toplam desteklenen semboji sayısı 40+ 50+
Barkod formatını otomatik algılama Sınırlı Evet
PDF barkod çıkarımı Ayrı paket gerekli Yerleşik
ML hata düzeltmesi Hayır Evet
QR kodu logo markalama Hayır Evet
Docker dağıtımı Dosya montajı gerekli Çevre değişkeni
Başlatma kodu 20+ satır 1 satır
API stili Eski nesne grafiği Statik akışkan
Çapraz platform Kısmi (yerel bağımlılıklar) Tam (.NET Standard)
Dağıtım lisansı fiyatlandırması Satışla iletişim (yayımlanmamıştır) Süresiz satın alıma dahildir

Hızlı Başlangıç:LEADTOOLSBarkoddan IronBarcode'a Geçiş

Adım 1:LEADTOOLSPaketlerini Kaldırın

Projeden tümLEADTOOLSpaketlerini kaldırın:

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
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
SHELL

Barkod çıkarımı için PDF codec eklendiyse:

dotnet remove package Leadtools.Pdf
dotnet remove package Leadtools.Pdf
SHELL

Windows Server dağıtımlarında, geçiş tamamlandıktan sonra MSVC++ 2017 Runtime sağlama betiklerinden kaldırılabilir.IronBarcode herhangi bir platformda yerel çalışma zamanı bağımlılığı gerektirmez.

2. Adım: IronBarcode'u Kurun

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

Bu tek paket, tüm görüntü formatı desteği, yerel PDF barkod çıkarımı, ML hata düzeltmesi ve desteklenen50+semboji içerir. Ek codec paketleri gerekli değildir.

3. Adım: Lisansı Başlatma

LEADTOOLS başlatma bloğunu tek bir satırla değiştirin. Kod tabanında RasterSupport.SetLicense'e yapılan her çağrıyı bulun — tipik olarak uygulama başlangıcında tam olarak bir tane olacaktır — ve çevresindeki tüm başlatma dizisini değiştirin:

// Before: entireLEADTOOLSinitialization block (20+ lines)
// After:
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Before: entireLEADTOOLSinitialization block (20+ lines)
// After:
using IronBarCode;

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

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

Lisans anahtarı, herhangi bir dizgi yeteneğine sahip yapılandırma mekanizmasından elde edilebilir: bir ortam değişkeni, appsettings.json, Azure Key Vault, AWS Secrets Manager veya bir Kubernetes sırrı. Ortam tabanlı lisans yapılandırması, Docker dağıtım desenleri ve desteklenen tüm yapılandırma yaklaşımları için, lisans anahtar kurulumu dokümantasyonuna bakın.

Kod Göç Örnekleri

Görüntülerden Barcode Okuma

LEADTOOLS, görüntü yüklemeyi barkod taramadan iki ayrı obje katmanına ayırır. Bir RasterCodecs örneği görüntü dosyasını RasterImage içine yükler ve bir BarcodeEngine örneği onu tarar. Arayan kişi ayrıca BarcodeSymbology değerlerinin açık bir dizisini sağlamak zorundadır. dizide listelenmeyen formatlar algılanmayacaktır.

LEADTOOLS Yaklaşımı:

using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

using var codecs = new RasterCodecs();
using var image = codecs.Load("scan.png");

var engine = new BarcodeEngine();

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

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

foreach (var barcode in barcodes)
    Console.WriteLine($"{barcode.Symbology}: {barcode.Value}");
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

using var codecs = new RasterCodecs();
using var image = codecs.Load("scan.png");

var engine = new BarcodeEngine();

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

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

foreach (var barcode in barcodes)
    Console.WriteLine($"{barcode.Symbology}: {barcode.Value}");
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs

Dim codecs As New RasterCodecs()
Using codecs
    Dim image = codecs.Load("scan.png")
    Using image
        Dim engine As New BarcodeEngine()

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

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

        For Each barcode In barcodes
            Console.WriteLine($"{barcode.Symbology}: {barcode.Value}")
        Next
    End Using
End Using
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

using IronBarCode;

var results = BarcodeReader.Read("scan.png");

foreach (var result in results)
    Console.WriteLine($"{result.Format}: {result.Value}");
using IronBarCode;

var results = BarcodeReader.Read("scan.png");

foreach (var result in results)
    Console.WriteLine($"{result.Format}: {result.Value}");
Imports IronBarCode

Dim results = BarcodeReader.Read("scan.png")

For Each result In results
    Console.WriteLine($"{result.Format}: {result.Value}")
Next
$vbLabelText   $csharpLabel

IronBarcode, dosya yolunu doğrudan kabul eder, görüntüyü dahili olarak yükler ve çağrı yapanın beklenen türleri belirlemesini gerektirmeden, desteklenen tüm50+sembolojilerde formatları otomatik algılar. Gelişmiş yapılandırma için — okuma hızını ayarlama, çoklu barkod algılama ve düşük kaliteli görüntü işleme — görüntülerden barkod okuma kılavuzuna bakın.

Bir Code 128 Barkodu Oluşturma

LEADTOOLS üretimi bir BarcodeData nesnesi oluşturmayı, belirli bellek bayrakları, piksel derinliği ve bayt sırasıyla boş bir RasterImage ayırmayı, görüntüyü bir arka plan rengiyle doldurmayı, barkodu ona yazmayı ve ardından RasterCodecs ile kaydetmeyi gerektirir. IronBarcode, bu adımların tümünü tek bir akıcı yöntem zinciriyle gerçekleştirir.

LEADTOOLS Yaklaşımı:

using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

var engine = new BarcodeEngine();

var barcodeData = new BarcodeData()
{
    Symbology = BarcodeSymbology.Code128,
    Value = "ITEM-98765",
    Bounds = new LeadRect(0, 0, 500, 120)
};

using var image = new RasterImage(
    RasterMemoryFlags.Conventional,
    500, 120, 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, "item-barcode.png", RasterImageFormat.Png, 0);
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

var engine = new BarcodeEngine();

var barcodeData = new BarcodeData()
{
    Symbology = BarcodeSymbology.Code128,
    Value = "ITEM-98765",
    Bounds = new LeadRect(0, 0, 500, 120)
};

using var image = new RasterImage(
    RasterMemoryFlags.Conventional,
    500, 120, 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, "item-barcode.png", RasterImageFormat.Png, 0);
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs

Dim engine As New BarcodeEngine()

Dim barcodeData As New BarcodeData() With {
    .Symbology = BarcodeSymbology.Code128,
    .Value = "ITEM-98765",
    .Bounds = New LeadRect(0, 0, 500, 120)
}

Using image As New RasterImage(
    RasterMemoryFlags.Conventional,
    500, 120, 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, "item-barcode.png", RasterImageFormat.Png, 0)
    End Using
End Using
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

using IronBarCode;

BarcodeWriter.CreateBarcode("ITEM-98765", BarcodeEncoding.Code128)
    .ResizeTo(500, 120)
    .SaveAsPng("item-barcode.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("ITEM-98765", BarcodeEncoding.Code128)
    .ResizeTo(500, 120)
    .SaveAsPng("item-barcode.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("ITEM-98765", BarcodeEncoding.Code128) _
    .ResizeTo(500, 120) _
    .SaveAsPng("item-barcode.png")
$vbLabelText   $csharpLabel

Boyutlandırma, stil ayarlama, kenar boşluğu kontrolü ve desteklenen çıktı formatlarıyla ilgili tam bir geçiş için barkod görüntüleri oluşturma kılavuzuna başvurun.

Logo Markası ile QR Kodu Oluşturma

LEADTOOLS QR kodu oluşturma, diğer barkod türleri gibi aynı çok adımlı RasterImage oluşturma modelini izler. IronBarcode, bir QR kodunun merkezine logo yerleştirmek için özel bir AddBrandLogo yöntemi ile QRCodeWriter sağlar.

LEADTOOLS Yaklaşımı:

using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

var engine = new BarcodeEngine();

var qrData = new BarcodeData()
{
    Symbology = BarcodeSymbology.QR,
    Value = "https://example.com/product/12345",
    Bounds = new LeadRect(0, 0, 400, 400)
};

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

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

using var codecs = new RasterCodecs();
codecs.Save(image, "product-qr.png", RasterImageFormat.Png, 0);
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

var engine = new BarcodeEngine();

var qrData = new BarcodeData()
{
    Symbology = BarcodeSymbology.QR,
    Value = "https://example.com/product/12345",
    Bounds = new LeadRect(0, 0, 400, 400)
};

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

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

using var codecs = new RasterCodecs();
codecs.Save(image, "product-qr.png", RasterImageFormat.Png, 0);
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs

Dim engine As New BarcodeEngine()

Dim qrData As New BarcodeData() With {
    .Symbology = BarcodeSymbology.QR,
    .Value = "https://example.com/product/12345",
    .Bounds = New LeadRect(0, 0, 400, 400)
}

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

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

    Using codecs As New RasterCodecs()
        codecs.Save(image, "product-qr.png", RasterImageFormat.Png, 0)
    End Using
End Using
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com/product/12345", 400, QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .AddBrandLogo("brand-logo.png")
    .SaveAsPng("product-qr.png");
using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com/product/12345", 400, QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .AddBrandLogo("brand-logo.png")
    .SaveAsPng("product-qr.png");
Imports IronBarCode

QRCodeWriter.CreateQrCode("https://example.com/product/12345", 400, QRCodeWriter.QrErrorCorrectionLevel.Highest) _
    .AddBrandLogo("brand-logo.png") _
    .SaveAsPng("product-qr.png")
$vbLabelText   $csharpLabel

PDF Belgelerinden Barkod Çıkarma

LEADTOOLS PDF barkod çıkarma, ayrı bir Leadtools.Pdf paketi, açık PDF yükleme yapılandırması, manuel bir sayfa sayısı sorgusu ve her sayfa üzerinde bir döngü gerektirir. Her sayfa tarama öncesi bireysel olarak bir RasterImage olarak yüklenmelidir. IronBarcode, temel paket içinde PDF desteği sunar ve sayfa yinelemesini dahili olarak ele alır.

LEADTOOLS Yaklaşımı:

using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

// Requires: dotnet add package Leadtools.Pdf
using var codecs = new RasterCodecs();
codecs.Options.Pdf.Load.Resolution = 300;
codecs.Options.Pdf.Load.DisplayDepth = 24;

var engine = new BarcodeEngine();
var results = new List<string>();
int pageCount = codecs.GetTotalPages("shipment.pdf");

for (int page = 1; page <= pageCount; page++)
{
    using var image = codecs.Load(
        "shipment.pdf", 0,
        CodecsLoadByteOrder.BgrOrGray,
        page, page);

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

    foreach (var barcode in barcodes)
        results.Add($"Page {page}: {barcode.Value}");
}
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

// Requires: dotnet add package Leadtools.Pdf
using var codecs = new RasterCodecs();
codecs.Options.Pdf.Load.Resolution = 300;
codecs.Options.Pdf.Load.DisplayDepth = 24;

var engine = new BarcodeEngine();
var results = new List<string>();
int pageCount = codecs.GetTotalPages("shipment.pdf");

for (int page = 1; page <= pageCount; page++)
{
    using var image = codecs.Load(
        "shipment.pdf", 0,
        CodecsLoadByteOrder.BgrOrGray,
        page, page);

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

    foreach (var barcode in barcodes)
        results.Add($"Page {page}: {barcode.Value}");
}
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs

' Requires: dotnet add package Leadtools.Pdf
Using codecs As New RasterCodecs()
    codecs.Options.Pdf.Load.Resolution = 300
    codecs.Options.Pdf.Load.DisplayDepth = 24

    Dim engine As New BarcodeEngine()
    Dim results As New List(Of String)()
    Dim pageCount As Integer = codecs.GetTotalPages("shipment.pdf")

    For page As Integer = 1 To pageCount
        Using image = codecs.Load("shipment.pdf", 0, CodecsLoadByteOrder.BgrOrGray, page, page)
            Dim barcodes = engine.Reader.ReadBarcodes(image, LogicalRectangle.Empty, 0, Nothing)

            For Each barcode In barcodes
                results.Add($"Page {page}: {barcode.Value}")
            Next
        End Using
    Next
End Using
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

using IronBarCode;

var results = BarcodeReader.Read("shipment.pdf");

foreach (var result in results)
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
using IronBarCode;

var results = BarcodeReader.Read("shipment.pdf");

foreach (var result in results)
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
Imports IronBarCode

Dim results = BarcodeReader.Read("shipment.pdf")

For Each result In results
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}")
Next
$vbLabelText   $csharpLabel

Docker Dağıtımı

LEADTOOLS Docker dağıtımını tanımlayan dosya yönetimi gereksinimi, IronBarcode'a geçiş yapıldığında tamamen ortadan kalkar.

LEADTOOLS Yaklaşımı:

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

WORKDIR /app
COPY publish/ .

# License file must be physically present in the container image
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"]

IronBarcode Yaklaşımı:

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

WORKDIR /app
COPY publish/ .

ENV IRONBARCODE_LICENSE=your-license-key

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

Lisans anahtarı, Docker sırları, Kubernetes sırları veya herhangi bir ortam değişkeni mekanizması aracılığıyla konteyner çalışma zamanında enjekte edilir. Herhangi bir dosya sağlama adımı gerekli değildir. Docker ve Linux dağıtım kılavuzu, Alpine ve Debian tabanlı görüntüler, çok aşamalı derlemeler ve Kubernetes dağıtım desenlerini kapsar.

LEADTOOLS Barkod API'den IronBarcode Haritalama Referansı

LEADTOOLS IronBarcode Notlar
RasterSupport.SetLicense(path, key) IronBarCode.License.LicenseKey = "key" Sadece anahtar - dosya yok
RasterSupport.KernelExpired (removed) Sona erme kontrolü gerekmez
RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) (removed) Tüm özellikler dahildir
RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) (removed) Tüm özellikler dahildir
RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) (removed) Tüm özellikler dahildir
new BarcodeEngine() Statik — örnek yok BarcodeReader, BarcodeWriter statiktir
new RasterCodecs() (removed) Dosya yolunu doğrudan geçir
codecs.Load(imagePath) (removed) Dosya yolunu doğrudan geçir
engine.Reader.ReadBarcodes(image, LogicalRectangle.Empty, 0, symbologies) BarcodeReader.Read(imagePath) Sembolojileri otomatik algılar
BarcodeData.Value result.Value Aynı özellik adı
BarcodeData.Symbology result.Format Özellik yeniden adlandırıldı
new BarcodeData() { Symbology = BarcodeSymbology.Code128 } BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) Akıcı oluşturma
BarcodeSymbology.Code128 BarcodeEncoding.Code128 Namespace değişikliği
BarcodeSymbology.QR BarcodeEncoding.QRCode Ad değişikliği
BarcodeSymbology.DataMatrix BarcodeEncoding.DataMatrix Aynı ad
BarcodeSymbology.PDF417 BarcodeEncoding.PDF417 Aynı ad
BarcodeSymbology.EAN13 BarcodeEncoding.EAN13 Aynı ad
BarcodeSymbology.UPCA BarcodeEncoding.UPCA Aynı ad
BarcodeSymbology.Interleaved2of5 BarcodeEncoding.Interleaved2of5 Aynı ad
BarcodeSymbology.Codabar BarcodeEncoding.Codabar Aynı ad
engine.Writer.WriteBarcode(image, data, null) + codecs.Save(...) .SaveAsPng(path) Bir yöntem zinciri
new RasterImage(...) + new FillCommand(RasterColor.White).Run(image) (removed) IronBarcode içinde dahili

Yaygın Göç Sorunları ve Çözümleri

Sorun 1: .LIC Dosyası Referansları CI/CD'de

LEADTOOLS:LEADTOOLSuygulamalarını derleyen veya dağıtan CI/CD boru hatları, .LIC dosyasını sağlamalıdır — kaynak kontrole ekleyerek, bir base64 sırrından kod çözerek veya bir hacim eseri olarak monte ederek. Uygulamayı çalıştıran her bir hat aşaması dosyaya erişilebilir olmalıdır.

Çözüm: Tüm .LIC dosya işlemlerini boru hattından çıkartın. Bir dizgi sırrı ile değiştirin:

# Example: GitHub Actions environment variable
env:
  IRONBARCODE_LICENSE: ${{secrets.IRONBARCODE_LICENSE}}
# Example: GitHub Actions environment variable
env:
  IRONBARCODE_LICENSE: ${{secrets.IRONBARCODE_LICENSE}}
YAML

Dize değeri, CI/CD sır deposunda diğer dize değerli kimlik bilgileriyle birlikte depolanır. Herhangi bir dosya çözümleme, yapıt sağlama veya hacim yapılandırması gerekli değildir.

Sorun 2: Windows'ta MSVC++ Çalışma Zamanı Bağımlılığı

LEADTOOLS: Windows Server dağıtımları, ana bilgisayarda MSVC++ 2017 Runtime kurulumunu gerektirir.LEADTOOLSdağıtımları için kullanılan sağlama betikleri, konteyner tabanlı görüntüler ve Windows AMI'leri genellikle bu çalışma zamanını yüklemek için bir adım içermektedir.

Çözüm: Tüm Windows sağlama betiklerinden ve konteyner görüntülerinden MSVC++ 2017 Runtime kurulum adımını kaldırın. IronBarcode'un yerel çalışma zamanı bağımlılığı yoktur. dotnet/aspnet taban görüntüsü, ek çalışma zamanında paketlere gerek olmadan yeterlidir.

Sorun 3: RasterSupportType Özellik Kilidi Kontrolleri

LEADTOOLS: Başlatma dizisi, her barkod özelliği için Barcodes1D, Barcodes2D ve BarcodeWrite gibi RasterSupport.IsLocked() kontrollerini içerir. Bu kontroller, lisans dosyasının her gerektiğinde kapsayıcılığı doğrulamak içinLEADTOOLSmimarisi tarafından zorunlu savunma kodudur.

Çözüm: Tüm RasterSupport.IsLocked() çağrılarını kaldırın. IronBarcode, tüm okuma ve yazma kabiliyetlerini tek bir lisans içinde içerir. Herhangi bir özellik kilidi durumu bulunmamaktadır ve herhangi bir özellik doğrulama adımı gerekmez:

// Remove these lines entirely:
// if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead)) ...
// if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead)) ...
// if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite)) ...
// Remove these lines entirely:
// if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead)) ...
// if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead)) ...
// if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite)) ...
' Remove these lines entirely:
' If RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) ...
' If RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) ...
' If RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) ...
$vbLabelText   $csharpLabel

Sorun 4: BarcodeSymbology Dizisi Kaldırma

LEADTOOLS: engine.Reader.ReadBarcodes()'e yapılan her çağrı açık bir BarcodeSymbology[] parametresi gerektirir. Semboji dizisinde listelenmeyen barkodlar algılanmayacaktır, bu da yeni bir barkod türü bir giriş belgesinde tanıtıldığında sessiz başarısız okumayla sonuçlanabilir.

Çözüm: Semboji dizisini kaldırın. BarcodeReader.Read(), desteklenen tüm formatları otomatik olarak algılar. Bilinen bir format seti için performans ayarlaması gerekiyorsa, BarcodeReaderOptions, kapsamlı bir listeleme gerektirmeden isteğe bağlı ipuçları sunar:

// Optional: hint the reader for performance in format-known scenarios
var options = new BarcodeReaderOptions
{
    ExpectBarcodeTypes = BarcodeEncoding.Code128 | BarcodeEncoding.QRCode
};
var results = BarcodeReader.Read("scan.png", options);
// Optional: hint the reader for performance in format-known scenarios
var options = new BarcodeReaderOptions
{
    ExpectBarcodeTypes = BarcodeEncoding.Code128 | BarcodeEncoding.QRCode
};
var results = BarcodeReader.Read("scan.png", options);
Imports System

' Optional: hint the reader for performance in format-known scenarios
Dim options As New BarcodeReaderOptions With {
    .ExpectBarcodeTypes = BarcodeEncoding.Code128 Or BarcodeEncoding.QRCode
}
Dim results = BarcodeReader.Read("scan.png", options)
$vbLabelText   $csharpLabel

LEADTOOLS Barkod Geçiş Kontrol Listesi

Geçiş Öncesi Görevler

Herhangi bir değişiklik yapmadan önce tümLEADTOOLSkullanımını kod tabanında denetleyin:

grep -r "using Leadtools" --include="*.cs" .
grep -r "RasterSupport\|BarcodeEngine\|RasterCodecs" --include="*.cs" .
grep -r "BarcodeSymbology\|BarcodeData\|RasterImage" --include="*.cs" .
grep -r "LEADTOOLS.LIC\|SetLicense\|KernelExpired" --include="*.cs" .
grep -r "COPY LEADTOOLS.LIC\|LEADTOOLS_LICENSE_PATH" --include="*.dockerfile" --include="Dockerfile" .
grep -r "using Leadtools" --include="*.cs" .
grep -r "RasterSupport\|BarcodeEngine\|RasterCodecs" --include="*.cs" .
grep -r "BarcodeSymbology\|BarcodeData\|RasterImage" --include="*.cs" .
grep -r "LEADTOOLS.LIC\|SetLicense\|KernelExpired" --include="*.cs" .
grep -r "COPY LEADTOOLS.LIC\|LEADTOOLS_LICENSE_PATH" --include="*.dockerfile" --include="Dockerfile" .
SHELL

Başlatma bloklarının, okuma çağrı noktalarının, yazma çağrı noktalarının ve Dockerfile referanslarının sayısını ve konumunu belgelemeden kod değişikliklerine başlamayın.

Kod Güncelleme Görevleri

  1. Tüm beşLEADTOOLSNuGet paketini (ve varsa PDF codec'ini) kaldırın
  2. IronBarcode'i dotnet add package IronBarcode aracılığıyla yükleyin
  3. Tüm using Leadtools.* ad alanı içe aktarımlarını using IronBarCode ile değiştirin
  4. Tüm RasterSupport.SetLicense başlatma bloğunu IronBarCode.License.LicenseKey = "key" ile değiştirin
  5. Tüm RasterSupport.KernelExpired kontrollerini kaldırın
  6. Tüm RasterSupport.IsLocked(RasterSupportType.*) kontrollerini kaldırın
  7. Tüm new BarcodeEngine() örneklemelerini kaldırın
  8. Barkod kod yollarındaki tüm new RasterCodecs() örneklemelerini kaldırın
  9. codecs.Load(path) + engine.Reader.ReadBarcodes(image, ...)'yi BarcodeReader.Read(path) ile değiştirin
  10. new BarcodeData(...) + new RasterImage(...) + FillCommand + WriteBarcode + codecs.Save()'yi BarcodeWriter.CreateBarcode(...).SaveAsPng(path) ile değiştirin
  11. BarcodeSymbology.* numaralandırma referanslarını BarcodeEncoding.* ile değiştirin (not: QR, QRCode olur)
  12. Tüm Dockerfile'lardan COPY LEADTOOLS.LIC satırlarını kaldırın
  13. Dockerfile'lardan ve dağıtım yapılandırmasından LEADTOOLS_LICENSE_PATH ve LEADTOOLS_DEVELOPER_KEY ortam değişkeni beyanlarını kaldırın
  14. Dockerfile'lara ve sır yapılandırmasına IRONBARCODE_LICENSE ortam değişkeni ekleyin
  15. Windows sağlama betiklerinden MSVC++ 2017 Runtime kurulumunu kaldırın

Geçiş Sonrası Testler

  • Tüm daha önce BarcodeSymbology[] dizisi tarafından kapsanan semboloji türlerinde barkod okuma işlemlerinin beklenen değerler döndüğünü doğrulayın
  • Kod 128, QR kodu ve diğer üretilen barkod türlerinin geçerli, taranabilir çıktılar ürettiğini doğrulayın
  • Leadtools.Pdf olmadan PDF barkod çıkarımının doğru çalıştığını doğrulayın
  • Herhangi bir .LIC dosyası monte edilmeden kapsayıcı görüntüsünü oluşturun ve başlatın ve uygulamanın doğru şekilde başlatıldığını doğrulayın
  • .LIC dosya sağlama adımı olmadan CI/CD boru hattını çalıştırın ve tüm aşamaların başarıyla tamamlandığını doğrulayın
  • Yayımlanmış çıktı boyutunun ve konteyner görüntüsü çekme süresinin iyileştiğini doğrulayın

IronBarcode'a Geçmenin Temel Faydaları

Basitleştirilmiş Dağıtım Mimarisi: Geçişten sonra, her ortam — geliştirme, CI, aşama, üretim — API anahtarları, veritabanı şifreleri ve diğer kimlik bilgileri için kullanılan aynı dize değerli sır mekanizması ile lisansı alır. Herhangi bir dosya sağlama, yapıt yönetimi veya hacim montajı gerekli değildir. Yeni bir dağıtım ortamı eklemek, başka bir sır eklemekle aynı işlemdir.

Azaltılmış Bağımlılık Yüzeyi: Bir NuGet paketi beşini ve MSVC++ 2017 Runtime gereksinimi ortadan kaldırılır. Bir barkod hizmetinin yayımlanmış çıktısı yaklaşık 148 MB'den yaklaşık 39 MB'ye düşer. Daha küçük görüntüler, daha hızlı konteyner çekimlerini, konteyner kayıt defterlerinde daha düşük depolama maliyetlerini ve sunucusuz ve otomatik ölçeklendirme ortamlarında soğuk başlatma sürelerinin azalmasını sağlar.

Basit Uygulama Başlangıcı:LEADTOOLSbaşlatma dizisi — dosya yolu çözünürlüğü, süresi dolmuş doğrulama ve üç özellik kilidi kontrolü — tek bir çizgi ile değiştirilir. Uygulama başlangıcı daha hızlı olur ve başlatma kod yolu, yeni bir ortamda başarısız olabilecek dosya sistemi bağımlılığına sahip değildir.

Kapsamlı Format Algılama: IronBarcode, beklenen formatları arayanın belirtmesini gerektirmeden, desteklenen tüm50+sembolojilerde okur.LEADTOOLSBarcodeSymbology[] dizisinden bir sembolojinin atlanması nedeniyle sessizce kaçırılan okumalar riskini ortadan kaldırır. Bir giriş belgesinde yeni bir barkod türü göründüğünde,IronBarcode bunu kod değişikliği gerektirmeden algılar.

Öngörülebilir Toplam Maliyet: Tek bir süresiz lisans satın alımı, geliştirme, test etme ve sınırsız üretim dağıtımı için herhangi bir dağıtım takibi, yıllık yenileme gereksinimi ve ayrı bir üretim lisansı edinebileceği gerektirmeden kapsar. Takımlar, bir satış görüşmesi yapmadan, kitaplığın tam maliyetini geliştirmeye başlamadan önce doğrulayabilir.

Modern API Tasarımı: BarcodeReader.Read() ve BarcodeWriter.CreateBarcode(), dosya yollarını doğrudan kabul eden statik giriş noktalarıdır. LEADTOOLS'un okuma ve yazma gerektirdiği çok katmanlı nesne oluşturma — codec örnekleri, motor örnekleri, görüntü ayırma, arka plan doldurma — dahili olarak ele alınır. Barkod okuma ve oluşturma kodu daha kısa, daha kolay gözden geçirilebilir ve daha kolay test edilebilir.

Lütfen dikkate alınLEADTOOLS ilgili sahibinin tescilli markasıdır. Bu site, LEAD Technologies ile bağlantılı veya sponsorluğu altında değildir. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.

Sıkça Sorulan Sorular

Neden LEADTOOLS Barcode'dan IronBarcode'a geçiş yapmalıyım?

Yaygın nedenler arasında lisanslamanın basitleştirilmesi (SDK + runtime anahtar karmaşıklığının kaldırılması), veri geçiş limitlerinin ortadan kaldırılması, yerel PDF desteği kazanılması, Docker/CI/CD dağıtımının iyileştirilmesi ve üretim kodunda API tekrarlama azalması yer alır.

LEADTOOLS API çağrılarını IronBarcode ile nasıl değiştiririm?

Örnek oluşturma ve lisanslama tekrarlamalarını IronBarCode.License.LicenseKey = "anahtar" ile değiştirin. Okuyucu çağrılarını BarcodeReader.Read(yol) ile ve yazıcı çağrılarını BarcodeWriter.CreateBarcode(veri, kodlama) ile değiştirin. Statik yöntemler örnek yönetimi gerektirmez.

LEADTOOLS Barcode'dan IronBarcode'a geçiş sırasında ne kadar kod değişiyor?

Çoğu geçiş daha az kod satırıyla sonuçlanır. Lisanslama tekrarlamaları, örnek oluşturucular ve açık format yapılandırması kaldırılır. Temel okuma/yazma işlemleri, daha temiz sonuç nesneleriyle daha kısa IronBarcode eşdeğerlerine dönüştürülür.

Geçiş sırasında hem LEADTOOLS Barcode hem de IronBarcode'un yüklü kalması gerekiyor mu?

Hayır. Çoğu geçiş doğrudan değişim yapılır, paralel bir işletim yerine geçer. Bir hizmet sınıfını bir seferde geçirin, NuGet referansını değiştirin ve sonraki sınıfa geçmeden önce başlatma ve API çağrı desenlerini güncelleyin.

IronBarcode için NuGet paketi adı nedir?

Paket 'IronBarCode' (büyük B ve C harfleriyle). 'Install-Package IronBarCode' veya 'dotnet add package IronBarCode' ile kurun. Kodda kullanılan yönerge 'using IronBarCode;' şeklindedir.

IronBarcode, Docker dağıtımını LEADTOOLS Barcode'a kıyasla nasıl kolaylaştırır?

IronBarcode, harici SDK dosyaları veya montajlı lisans yapılandırması olmayan bir NuGet paketidir. Docker'da, IRONBARCODE_LICENSE_KEY ortam değişkenini ayarlayın ve paket lisans doğrulamasını başlangıçta kendi kendine yapar.

IronBarcode, LEADTOOLS'ten göç ettikten sonra tüm barkod formatlarını otomatik olarak algılıyor mu?

Evet. IronBarcode, desteklenen tüm formatlardaki sembolojiyi otomatik olarak algılar. Açık BarcodeTypes sayımı gerekli değildir. Format zaten biliniyorsa ve performans önemliyse, BarcodeReaderOptions arama alanını optimize etmek için sınırlamayı sağlar.

IronBarcode, ayrı bir kütüphane olmadan PDF'lerden barkod okuyabiliyor mu?

Evet. BarcodeReader.Read("document.pdf") PDF dosyalarını yerel olarak işlemler. Sonuçlar her barkod için SayfaNumarası, Format, Değer ve Güven içerir. Harici bir PDF render adımı gerekmez.

IronBarcode, paralel barkod işlemeyi nasıl yönetiyor?

IronBarcode'un statik yöntemleri durumsuz ve thread-safe'dir. Dağıtılmış dosya listeleri üzerinde per-thread örnek yönetimi olmadan doğrudan Parallel.ForEach kullanın. BarcodeReaderOptions.MaxParallelThreads, iç thread bütçesini kontrol eder.

LEADTOOLS Barcode'dan IronBarcode'a geçiş yaparken hangi sonuç özellikleri değişiyor?

Yaygın yeniden adlandırmalar: BarcodeValue, Value olur; BarcodeType, Format olur. IronBarcode sonuçları ayrıca Güven ve SayfaNumarası ekler. Çözüm çapında arama-değiştirme, mevcut sonuç işleme kodundaki yeniden adlandırmaları ele alır.

Bir CI/CD hattında IronBarcode lisanslamasını nasıl ayarlayabilirim?

IRONBARCODE_LICENSE_KEY'i bir boru hattı sırrı olarak saklayın ve uygulama başlangıç kodunda IronBarCode.License.LicenseKey olarak atayın. Bir sır, geliştirme, test, aşama ve üretim dahil olmak üzere tüm ortamları kapsar.

IronBarcode, özel biçimlendirmeye sahip QR kodu üretimini destekliyor mu?

Evet. QRCodeWriter.CreateQrCode() özelleştirilmiş renkler için ChangeBarCodeColor(), logo yerleştirme için AddBrandLogo(), yapılandırılabilir hata düzeltme seviyeleri ve PNG, JPG, PDF ve akış dahil birden çok çıktı formatını destekler.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara