Altbilgi içeriğine atla
DIğER BILEşENLERLE KARşıLAşTıRıN

Barcoder vs IronBarcode: C# Barkod Kütüphanesi Karşılaştırması

Barcoder vs IronBarcode: Çok Paketli Üretim vs Tek Paketli Üretim ve Okuma

Barcoder ile tek bir PNG oluşturmak için iki paket yüklersiniz, üç ad alanı alır, format spesifik bir sınıfla kodlarsınız, bir seçenekler nesnesiyle bir oluşturucu oluşturur, bir akışı açar, ona işlersiniz ve akışı kapatırsınız. Bu, tüm mutlu yol — ve sadece yazmayı kapsıyor.Barcoderhiçbir okuma API'sine sahip değil. Kütüphanenin MIT lisansı ve açık kaynak doğası, ticari bağımlılıklardan kaçınmaya çalışan ekipler için ilk bakışta çekici kılar. Ancak parçalı mimari — en az iki NuGet paketi, her barkod formatı için farklı bir kodlayıcı sınıfı ve kodlama ile çıktıyı tamamen ayrı tutan bir işleme hattı — gereksinimler en basit tek format oluşturma senaryosunun ötesine geçtiğinde gerçek sürtünme yaratır.

Barcoder'ı Anlamak

Barcoder, NuGet üzerinde MIT lisansı altında sunulan bir açık kaynak .NET barkod oluşturma kütüphanesidir. Verileri, Code128, QR, DataMatrix,EAN-13, PDF417ve diğerlerini içeren barkod formatlarına kodlar. Tasarım felsefesi, kodlamayı tamamen rendering sürecinden ayırır — çekirdek kütüphane bir IBarcode nesnesi (bir veri yapısı) üretir ve ayrı bir renderer paketi bu nesneyi bir görüntüye dönüştürür.

Bu tasarımın pratik sonuçları, ilk kurulumdan itibaren görülür. PNG çıktısı başlamadan önce iki NuGet paketi gereklidir: kodlama için Barcoder ve rendering için Barcoder.Renderer.Image. Eğer SVG çıktısına da ihtiyaç varsa, üçüncü bir paket — Barcoder.Renderer.Svg — eklenmelidir. Bu paketler bağımsız olarak versiyonlanır, bu da birisinin güncellenmesinin diğerini otomatik olarak hizalamadığı anlamına gelir ve bir projede bunları senkronize tutmak, tekrarlanan bir bakım görevi haline gelir.

Barcoder'ın temel mimari özellikleri:

  • PNG çıktısı için gerekli iki NuGet paketi: kodlama için Barcoder ve görüntü formatlarına rendering için Barcoder.Renderer.Image
  • Format-spesifik kodlayıcı sınıfları: Her barkod tipi, kendi ad alanında kendi kodlayıcısına sahiptir — Code128Encoder, QrEncoder, DataMatrixEncoder vb.
  • IBarcode çıkış yöntemlerine sahip değil: Kodlamanın sonucu düz bir veri nesnesidir. Ayrı olarak bir oluşturucu oluşturulmalı, bir akış açılmalı, içeriği işlenmeli ve kapatılmalıdır.
  • Görüntü oluşturucu.NET Frameworkdesteğini bıraktı:.NET Frameworküzerindeki ekipler görüntü oluşturucu paketini kullanamaz
  • Okuma yeteneği yok: Barcoder, görüntülerden, dosyalardan veya başka herhangi bir kaynaktan barkod çözemiyor
  • Bağımsız paket versiyonlama: Barcoder ve Barcoder.Renderer.Image bağımlılık güncellemeleri sırasında birbirinden ayrılabilir.

Çok Paketli Üretim İş Akışı

Kurulum hikayesi hemen kapsam farkını göstermektedir.Barcoderile temel PNG çıktısı iki ayrı paket gerektirir:

dotnet add package Barcoder
dotnet add package Barcoder.Renderer.Image
dotnet add package Barcoder
dotnet add package Barcoder.Renderer.Image
SHELL

Bir Code128 barkodu oluşturmak ve bunu bir PNG olarak kaydetmek için tam iş akışı üç ad alanı alımı, format özel kodlayıcı çağrısı, bir seçenekler nesnesiyle bir oluşturucu yapımı, bir dosya akışı ve bir işleme çağrısı gerektirir:

using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 2,
    BarHeightFor1DBarcode = 50
});

using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 2,
    BarHeightFor1DBarcode = 50
});

using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
Imports Barcoder
Imports Barcoder.Code128
Imports Barcoder.Renderers
Imports System.IO

Dim barcode As IBarcode = Code128Encoder.Encode("PRODUCT-12345", False)

Dim renderer = New ImageRenderer(New ImageRendererOptions With {
    .ImageFormat = ImageFormat.Png,
    .PixelSize = 2,
    .BarHeightFor1DBarcode = 50
})

Using stream As FileStream = File.OpenWrite("barcode.png")
    renderer.Render(barcode, stream)
End Using
$vbLabelText   $csharpLabel

Barkod formatlarını değiştirmek bir parametre değişikliği değil — farklı bir ad alanı almak ve farklı bir sınıf çağırmak gerektirir. Code128Encoder.Encode, includeChecksum için bir bool alır, QrEncoder.Encode bir hata düzeltme seviyesi ve iki ek bool alır ve DataMatrixEncoder.Encode yalnızca dizeyi alır. Belirtilen bir formatta bir barkod oluşturmak için birleşik bir arayüz yoktur.

IronBarcode Anlama

IronBarcode, tek bir NuGet paketi üzerinden oluşturma ve okuma işlemlerini kapsayan ticari bir .NET barkod kütüphanesidir. Statik bir API modeli, iki ana sınıf etrafında inşa edilmiştir — üretim için BarcodeWriter ve okuma için BarcodeReader — ve tüm format seçimine BarcodeEncoding enum yolu ile gitmektedir, format-spesifik sınıflar veya ad alanları yerine.

Kütüphane, barkod kodunun ilk satırını yazmak ile çalışan bir çıktıya sahip olmak arasındaki mesafeyi en aza indirmek için tasarlanmıştır. Oluşturma, okuma, PDF desteği, gömülü logolu QR kodları ve tüm çıktı türleri bir versiyon izlenerek tek bir paket içinde yer alır.

IronBarcode'un ana özellikleri:

  • Tek NuGet paketi: IronBarcode tüm işlevselliği kapsar — üretim, okuma, PDF ve tüm çıkış formatları
  • Birleştirilmiş format seçimi: Tüm barkod türleri BarcodeEncoding enum değerleriyle ele alınır; no format-specific imports or classes
  • Sonuç nesnesi üzerinde çıkış yöntemleri: GeneratedBarcode direkt olarak SaveAsPng, ToPngBinaryData, ToStream, SaveAsSvg ve ResizeTo sağlar
  • Yerel okuma yeteneği: BarcodeReader.Read(), ikincil bir kütüphane olmadan görüntü dosyalarından, bayt dizilerinden, akışlardan ve PDF'lerden kod çözümü yapar
  • MAUI, Docker, AWS Lambda ve Azure desteği: Standart masaüstü ve sunucu senaryolarının ötesindeki dağıtım hedefleri belgelenmiştir
  • Tam.NET Frameworkve modern .NET desteği:.NET Framework4.6.2 ile.NET 9arası

Özellik Karşılaştırması

Özellik Barcoder IronBarcode
Gerekli NuGet paketleri Minimum 2 1
Barkod oluşturma Evet Evet
Barkod okuma Hayır Evet
Lisans MIT (açık kaynak) Ticari
.NET Framework desteği Görüntü işleme paketinde bırakıldı .NET Framework 4.6.2+
PDF okuma Hayır Evet
Logolu QR Hayır Evet

Ayrıntılı Özellik Karşılaştırması

Özellik Barcoder IronBarcode
Üretim
Code128 oluşturma Evet Evet
QR Kod oluşturma Evet Evet
DataMatrix oluşturma Evet Evet
EAN-13, PDF417 Evet Evet
Gömülü logolu QR Hayır Evet — .AddBrandLogo(path)
Enum aracılığıyla format seçildi Hayır — format başına ayrı kodlayıcı sınıf Evet — BarcodeEncoding enum
Çıktı
PNG çıktısı Evet (Barcoder.Renderer.Image aracılığıyla) Evet — .SaveAsPng()
SVG çıktısı Evet (Barcoder.Renderer.Svg aracılığıyla) Evet — .SaveAsSvg()
İkili veri çıktısı Evet (MemoryStream aracılığıyla) Evet — .ToPngBinaryData()
Akış çıktısı Evet (manuel akış yönetimi) Evet — .ToStream()
Doğrudan yeniden boyutlandırma API'si Hayır — yalnızca PixelSize ölçek faktörü Evet — .ResizeTo(width, height)
Okuma
Görüntü dosyasından oku Hayır Evet
PDF'den oku Hayır Evet
Akıştan oku Hayır Evet
Çoklu barkod algılama Hayır Evet — ExpectMultipleBarcodes
Okuma hız kontrolü Hayır Evet — ReadingSpeed enum
Platform
.NET Core / .NET 5+ Evet Evet
.NET Framework Görüntü işleme paketinde bırakıldı .NET Framework 4.6.2+
.NET 9 Belgelenmemiş Evet
MAUI (iOS, Android, Windows, macOS) Hayır Evet
Docker / Azure / AWS Lambda Belgelenmemiş Evet
Paketleme
Bağımsız paket versiyonlama riski Evet Hayır — tek paket
Format başına ad alanı Evet Hayır — tek using IronBarCode
Lisanslama
Lisans modeli MIT (açık kaynak) Ticari
Fiyatlandırma Ücretsiz Lite $749, Plus $1,499, Professional $2,999, Unlimited $5,999

Format Seçimi ve Üretim API'si

Barkod format seçim yapısının nasıl düzenleneceği seçimi, barkod üreten bir kod tabanının her parçası üzerinde aşağı yönlü etkilere sahiptir.

Barcoder Yaklaşımı

Barcoder, format seçim işlemini ayrı ad alanlarındaki ayrı kodlayıcı sınıflar üzerinden yönlendirir. Format değiştirmek yeni bir using direktifi eklemek ve farklı bir yöntem imza ile farklı bir sınıf kullanmak anlamına gelir:

// Code128
using Barcoder.Code128;
IBarcode barcode = Code128Encoder.Encode("data", false);

// QR Code
using Barcoder.Qr;
IBarcode barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false);

// DataMatrix
using Barcoder.DataMatrix;
IBarcode barcode = DataMatrixEncoder.Encode("data");
// Code128
using Barcoder.Code128;
IBarcode barcode = Code128Encoder.Encode("data", false);

// QR Code
using Barcoder.Qr;
IBarcode barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false);

// DataMatrix
using Barcoder.DataMatrix;
IBarcode barcode = DataMatrixEncoder.Encode("data");
Imports Barcoder.Code128
Imports Barcoder.Qr
Imports Barcoder.DataMatrix

' Code128
Dim barcode As IBarcode = Code128Encoder.Encode("data", False)

' QR Code
barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, False, False)

' DataMatrix
barcode = DataMatrixEncoder.Encode("data")
$vbLabelText   $csharpLabel

Her kodlayıcının kendi parametre sözleşmesi vardır. Mevcut bir projeye yeni bir format eklemek tek kelimelik bir değişiklik değil — yeni bir ad alanı alımı, öğrenilecek yeni bir sınıf ve anlayacak yeni parametreler.

IronBarcode Yaklaşımı

IronBarcode, tüm format seçimini birleşik BarcodeWriter sınıfındaki BarcodeEncoding enum yoluyla yönetir. Yeni bir format eklemek, enum değerindeki tek kelimelik bir değişikliktir:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

// Code128
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).SaveAsPng("code128.png");

// DataMatrix
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png");

// QR — dedicated method
QRCodeWriter.CreateQrCode("data", 500).SaveAsPng("qr.png");

// QR with logo
QRCodeWriter.CreateQrCode("data", 500)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded.png");
// NuGet: dotnet add package IronBarcode
using IronBarCode;

// Code128
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).SaveAsPng("code128.png");

// DataMatrix
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png");

// QR — dedicated method
QRCodeWriter.CreateQrCode("data", 500).SaveAsPng("qr.png");

// QR with logo
QRCodeWriter.CreateQrCode("data", 500)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded.png");
Imports IronBarCode

' Code128
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).SaveAsPng("code128.png")

' DataMatrix
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png")

' QR — dedicated method
QRCodeWriter.CreateQrCode("data", 500).SaveAsPng("qr.png")

' QR with logo
QRCodeWriter.CreateQrCode("data", 500) _
    .AddBrandLogo("logo.png") _
    .SaveAsPng("qr-branded.png")
$vbLabelText   $csharpLabel

Üretim kullanımı için, uygulama başlangıcında lisans anahtarını ekleyin:

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

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

IronBarcode barkod oluşturma belgesi, stil, kenar boşlukları ve renk özelleştirme dahil olmak üzere üretim seçeneklerinin tam kapsamını kapsar.

İşleme ve Çıkış Seçenekleri

Barkod çıktısını farklı biçimlere — bir dosya, ikili veri, bir akış — almak, her kütüphanenin çok farklı bir şekilde ele aldığı bir gereksinimdir.

Barcoder Yaklaşımı

Barcoder'ın kodlamayı işlemden ayırması bir mimari olarak ilkelidir, ancak her çıktı formatı değişimi için ek maliyet yaratır. Bir dosyaya kaydetmek için bir FileStream açılması gerekir. İkili veri almak için bir MemoryStream açılması ve ToArray() çağrısı gerekir. Her çıktı senaryosu, bir seçenekler nesnesiyle bir işlemci oluşturmayı gerektirir:

// File output
var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 3,
    BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode-large.png");
renderer.Render(barcode, stream);

// Binary data via MemoryStream
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
// File output
var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 3,
    BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode-large.png");
renderer.Render(barcode, stream);

// Binary data via MemoryStream
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
Imports System.IO

' File output
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
    .ImageFormat = ImageFormat.Png,
    .PixelSize = 3,
    .BarHeightFor1DBarcode = 80
})
Using stream = File.OpenWrite("barcode-large.png")
    renderer.Render(barcode, stream)
End Using

' Binary data via MemoryStream
Using ms = New MemoryStream()
    renderer.Render(barcode, ms)
    Dim pngBytes As Byte() = ms.ToArray()
End Using
$vbLabelText   $csharpLabel

Boyut kontrolü dolaylıdır: PixelSize, barkod modül boyutu üzerinde bir ölçek çarpanıdır, doğrudan genişlik ve yükseklik belirtimi değildir.

IronBarcode Yaklaşımı

IronBarcode, zincirleme metod çağrıları ile herhangi bir çıkış formuna erişilebilen bir GeneratedBarcode nesnesi döndürür. Oluşturucu veya akış yönetimi yok:

using IronBarCode;

var barcode = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ResizeTo(400, 100);

// File
barcode.SaveAsPng("barcode.png");

// Bytes
byte[] pngBytes = barcode.ToPngBinaryData();

// Stream
System.IO.Stream stream = barcode.ToStream();
using IronBarCode;

var barcode = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ResizeTo(400, 100);

// File
barcode.SaveAsPng("barcode.png");

// Bytes
byte[] pngBytes = barcode.ToPngBinaryData();

// Stream
System.IO.Stream stream = barcode.ToStream();
Imports IronBarCode

Dim barcode = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
    .ResizeTo(400, 100)

' File
barcode.SaveAsPng("barcode.png")

' Bytes
Dim pngBytes As Byte() = barcode.ToPngBinaryData()

' Stream
Dim stream As System.IO.Stream = barcode.ToStream()
$vbLabelText   $csharpLabel

.ResizeTo(width, height), açık piksel boyutlarını alır ve aynı nesne üzerindeki herhangi bir çıkış yöntemi ile zincirlenir.

Barkodları Okuma

Barcoder'da okuma API'sinin yokluğu sert bir mimari sınır, bir yapılandırma seçeneği değil.

Barcoder Yaklaşımı

Barcoder'ın okuma veya kod çözme yeteneği yoktur. Bir API, planlanmış bir API veya kütüphane içinde bir çözüm yolu yoktur. Bir uygulamanın barkod okuması gerekiyorsa, Barcoder'ın yanında başka bir kütüphane — kendi API yüzeyi ve takip edilmesi gereken kendi versiyonu olan ayrı bir NuGet bağımlılığı — eklenmelidir. Bu, en az iki okuma yan yana bağımlılık anlamına gelir: üretim içinBarcoderve okuma için başka bir şey.

IronBarcode Yaklaşımı

IronBarcode, aynı paket ve tutarlı API düzenekleri ile hem üretim hem de okuma işlemini kapsar. BarcodeReader.Read() metodu, yerel olarak görüntü dosyalarını, bayt dizilerini, akışları ve PDF'leri kabul eder:

using IronBarCode;

// Read from image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
    Console.WriteLine(result.Value);
    Console.WriteLine(result.Format);
}

// PDF'den oku natively
var pdfResults = BarcodeReader.Read("document.pdf");

// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-label.png", options);
using IronBarCode;

// Read from image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
    Console.WriteLine(result.Value);
    Console.WriteLine(result.Format);
}

// PDF'den oku natively
var pdfResults = BarcodeReader.Read("document.pdf");

// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-label.png", options);
Imports IronBarCode

' Read from image file
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
    Console.WriteLine(result.Value)
    Console.WriteLine(result.Format)
Next

' PDF'den oku natively
Dim pdfResults = BarcodeReader.Read("document.pdf")

' Read multiple barcodes from one image
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True
}
Dim multiResults = BarcodeReader.Read("warehouse-label.png", options)
$vbLabelText   $csharpLabel

PDF'lerden okuma doğal — ara görüntü çıkarma, dönüşüm kütüphanesi, ek paket yoktur. IronBarcode barkod okuma belgesi, çok sayfalı PDF'ler, ilgi bölgesi okuması ve performans ayarlamalarını kapsar.

API Eşleme Başvurusu

Barcoder IronBarcode
Code128Encoder.Encode("data", false) BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false) QRCodeWriter.CreateQrCode("data", 500)
DataMatrixEncoder.Encode("data") BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix)
new ImageRenderer(new ImageRendererOptions { ... }) Gerekli değil — çıkış GeneratedBarcode tarafından zincirlenmiştir.
renderer.Render(barcode, stream) .SaveAsPng(path) / .ToPngBinaryData() / .ToStream()
IBarcode (veri yapısı, çıkış yöntemleri yok) GeneratedBarcode (şunlara sahiptir: SaveAsPng, ToPngBinaryData, ToStream, ResizeTo, vb.)
Barcoder + Barcoder.Renderer.Image (2 paket) IronBarcode (1 paket)
using Barcoder.Code128 using IronBarCode (tek ad alanı, tüm formatlar)
using Barcoder.Qr using IronBarCode
using Barcoder.DataMatrix using IronBarCode
Okuma API'si yok BarcodeReader.Read(path / bytes / stream / pdf)
.NET Framework görüntü oluşturucu yok .NET Framework 4.6.2+
PixelSize + BarHeightFor1DBarcode seçenekleri .ResizeTo(width, height)

Ekiplerin Barcoder'dan IronBarcode'a Geçişi Düşünmesi Durumunda

Okuma Gereksinimlere Eklenir

Birçok proje, saf üretim hatları olarak başlar — etiket yazdırır, belgeler için kodlar oluşturur, raporlara barkod gömer. Barcoder, bu projelere başlangıçta hizmet eder. Aynı uygulama daha sonra gelen barkodları doğrulamak, taranmış belgeleri işlemek veya yüklenen PDF'lerden barkod çözmek gerektiğinde,Barcoderileriye doğru bir yol sunmaz. Ekip, ikinci bir kütüphaneyi değerlendirmeli, API'sini öğrenmeli, NuGet sürümünü ayrı ayrı yönetmeli ve iki kütüphane arasındaki entegrasyon yüzeyini ele almalıdır. Bu noktaya ulaşan ekipler, genellikle iki ayrı barkod bağımlılığı yerine her iki tarafı da ele alan bir kütüphaneye konsolide olurlar.

.NET Framework Uyumlu Olmama Durumu

Barcoder.Renderer.Image,.NET Frameworkdesteğini bıraktı. Bakım yapan ya da.NET Framework4.x üzerinde masaüstü uygulamaları bulunan ekipler, rutin bağımlılık bakımında görüntü işleme paketini güncellerken bir inşa hatasıyla karşılaşır. Bu bir yanlış yapılandırma değil — kütüphane tarafından alınan bir platform desteği kararı. IronBarcode,.NET Framework4.6.2 ile.NET 9arasında destek sunar, farklı hedefler için özel paketleme veya koşullu bağımlılıklar gerektirmez.

Paket Sürümü Farklılığı Koordinasyon Sorunları Yaratır

Barcoder ve Barcoder.Renderer.Image bağımsız olarak versiyonlanmış olduğunda, bunlardan birini diğerinden bağımsız olarak güncellemek, bir bağımlılık yenilemesi sırasında ince uyumsuzluklar oluşturabilir. Bir depo birden fazla proje içeriyorsa - her biri her oluşturucu paketinin farklı bir sürümünü kullanıyorsa - projeler arasında tutarlı davranış sağlaması, ekibin büyüklüğüyle koordinasyon sorunu haline gelir. IronBarcode'a konsolide olan ekipler, tek bir paket ve tek bir sürümü yönetmenin bu sorun kategorisini tamamen ortadan kaldırdığını bildiriyor.

Format Kapsamı Zamanla Genişler

Bir proje, Code128 etiketleri ile başlayabilir, daha sonra müşteri bağlantıları için QR kodları ve ardından uyumluluk gereksinimleri için DataMatrix ekleyebilir.Barcoderile her format eklentisi, yeni një ad alanı alınımı, farklı yöntem parametrelerine sahip bir kodlayıcı sınıf ve muhtemelen yeni bir NuGet paketi anlamına gelir.IronBarcode ile, bir format eklemek mevcut bir çağrıda BarcodeEncoding enum değerine bir değişikliktir. Barkod format kapsamını genişletmeyi içeren yol haritalarına sahip ekipler, enum tabanlı modeli önemli ölçüde daha kolay bulurlar.

MAUI ve Çok Platformlu Dağıtım Gereksinimleri

Barcoder, MAUI, Docker, AWS Lambda veya Azure dağıtımları için destek belgelememektedir. Çapraz platform MAUI uygulamaları oluşturan veya sunucusuz altyapıya barkod işlemeyi dağıtan ekipler, Barcoder'ın belgelerinin ve testlerinin bu hedefleri kapsamadığını tespit eder. IronBarcode, iOS, Android, Windows, macOS MAUI hedefleri, Docker konteynerleri ve büyük bulut platformları arasında dağıtımı belgeler ve aktif olarak test eder.

Genel Geçiş Dikkat Edilmesi Gereken Hususlar

IBarcode'den GeneratedBarcode Tür Değişimi

Barcoder kodu, bir IBarcode değişkeni depolayan ve bunu daha sonra bir rendera geçiren kodun yeniden yapılandırılması gerekir. IronBarcode'da, GeneratedBarcode kendi çıkış yöntemlerini taşır — ayrı bir renderer adımı yoktur. Şu anda IBarcode kabul eden herhangi bir yöntem imzası, GeneratedBarcode kabul edecek şekilde değişmeli ve o yöntemin içindeki render çağrısı .SaveAsPng() veya .ToPngBinaryData() gibi doğrudan bir çağrıya dönüşmeli. Tür sistemi, derleme sırasında güncelleme gerektiren her yeri ortaya çıkaracaktır — IBarcode,Barcoderpaketleri kaldırıldıktan sonra çözülemez.

PixelSize Doğrudan Bir Karşılığına Sahip Değil

Barcoder'ın PixelSize, barkodun doğal modül boyutu üzerinde bir ölçek çarpanıdır, belirli bir piksel boyutu değildir. Çıktı genişliği, barkod içeriğine, formata ve çarpanla birlikte kombinasyona bağlıdır. IronBarcode, belirli piksel boyutları ile .ResizeTo(width, height) kullanır. Geçiş sırasında, mevcutBarcoderkodunun ürettiği gerçek çıkış boyutlarını ölçün ve bu değerleri .ResizeTo() çağrısında kullanın:

BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .ResizeTo(300, 80)
    .SaveAsPng("barcode.png");
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .ResizeTo(300, 80)
    .SaveAsPng("barcode.png");
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) _
    .ResizeTo(300, 80) _
    .SaveAsPng("barcode.png")
$vbLabelText   $csharpLabel

Ad Alanı Konsolidasyonu

Barcoder projeleri, kullanılan her format için birer tane olmak üzere using Barcoder.* ifadelerini biriktirir. Geçiş sırasında, tüm bunlar tek bir using IronBarCode; içine çöker. Tüm çözümdeki using Barcoder araması, güncelleme gerektiren her dosyayı tanımlar. Etkilenen dosya sayısı genellikle ekiplerin beklediğinden daha fazladır, çünkü bir barkod formatını dokunan her dosya kendi format-spesifik ad alanını eklenmiştir.

SVG Çıktı Yolu Değişiklikleri

Barcoder.Renderer.Svg ve SvgRenderer sınıfını kullanan projeler, renderer hattını GeneratedBarcode üzerindeki doğrudan bir yöntem çağrısı ile değiştirir:

// Before
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);

// After
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .SaveAsSvg("barcode.svg");
// Before
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);

// After
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .SaveAsSvg("barcode.svg");
Imports System.IO

' Before
Dim svgRenderer As New SvgRenderer()
Using stream As FileStream = File.OpenWrite("barcode.svg")
    svgRenderer.Render(barcode, stream)
End Using

' After
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) _
    .SaveAsSvg("barcode.svg")
$vbLabelText   $csharpLabel

Barcoder.Renderer.Svg paketi, tüm SVG rendering konumları taşındıktan sonra kaldırılabilir.

Ek IronBarcode Yetenekleri

Yukarıda ele alınan karşılaştırma noktalarının ötesinde, IronBarcode'un Barcoder'ın eşdeğerine sahip olmadığı özellikleri içerir.

.NET Uyumluluğu ve Geleceğe Hazırlık

IronBarcode, düzenli güncellemelerle.NET Framework4.6.2, .NET Core 2.x, .NET 5, .NET 6, .NET 7, .NET 8 ve .NET 9'u destekler.Barcoderv3, görüntü renderer paketinde.NET Frameworkdesteğini bıraktı..NET Frameworkve modern .NET hedefleri için uzun bir destek penceresine ihtiyaç duyan ekipler için, IronBarcode'un tek paketli uyumluluk matrisi, hedef başına koşullu bağımlılıkları yönetme ihtiyacını ortadan kaldırır.

Sonuç

Barcoder ve IronBarcode temelde farklı kapsamları yansıtır. Barcoder, kodlama ve rendering arasında prensipli bir ayrım ile oluşturulan yalnızca üretim kütüphanesidir — IBarcode veri yapısı ve renderer hattı, tasarım gereği farklı katmanlardır. IronBarcode, üretim ve okumayı aynı paket, tek bir ad alanı ve tutarlı bir statik API içinde paylaşan eksiksiz bir barkod kütüphanesidir. Mimari fark, gereksinimler genişlediğinde en görünür hale gelir: Barcoder'ın çok paketli, çok ad alanlı, okuma olmayan tasarımı, her eklemede yapısal bir görev yaratırken,IronBarcode yeni format veya yetenek eklemelerini yapılandırma değişiklikleri olarak ele alır.

Barcoder, bir projenin gerçekten sadece üretime ihtiyaç duyduğunda, yalnızca .NET Core'u hedeflediğinde, sınırlı sayıda barkod formatı kullanacağında ve MIT lisansının katı bir gereklilik olduğunda doğru seçimdir. Kütüphane, bu sınırlar içinde belgelediği gibi çalışır ve okuma gereksinimleri olmayan ve.NET Frameworkhedeflemeyen sıkı bir şekilde sınırlı projeler için, maliyetsiz açık kaynak seçeneği makuldur.

IronBarcode, bir projenin okuma ve üretime ihtiyaç duyduğunda,.NET Frameworkveya çok platformlu MAUI dağıtımlarını hedeflediğinde, zamanla barkod formatları eklemeyi planladığında veya Docker veya bulut ortamlarında dağıtım gerektirdiğinde doğru seçimdir. Tek paket modeli ve enum tabanlı format seçimi, proje kapsamı büyüdükçeBarcoderile biriken ek yükü ortadan kaldırır.

Pratik karar, yörüngeye bağlıdır. Kesinlikle basit bir tek format jeneratör olarak kalacak ve okuma gereksinimi olmayacak bir proje,Barcodertarafından iyi hizmet edilebilir. Barkod gereksinimlerinde herhangi bir belirsizlik olan bir proje — formatlar eklemek, okumayı eklemek, çapraz platformda dağıtım yapmak — Barcoder'ın mimari sınırlamalarına beklenenden daha erken ulaşacaktır. Her iki kütüphane de dürüst araçlar; soru, işin gerçek kapsamına hangi aracın uyduğudur.

Sıkça Sorulan Sorular

Barcoder nedir?

Barcoder, C# uygulamalarında barkod oluşturma ve okuma için bir .NET barkod kütüphanesidir. Geliştiricilerin .NET projeleri için barkod çözümü seçerken değerlendirdiği birkaç alternatiftir.

Barcoder ile IronBarcode arasındaki temel farklar nelerdir?

IronBarcode, örnek yönetimi gerektirmeyen statik, durumsuz bir API kullanırken, Barcoder genellikle kullanım öncesi örnek oluşturma ve yapılandırmayı gerektirir. IronBarcode ayrıca tüm ortamlarda yerel PDF desteği, otomatik format algılama ve tek anahtar lisans sunar.

IronBarcode, Barcoder'a göre lisanslanması daha kolay mı?

IronBarcode hem geliştirme hem de üretim dağıtımlarını kapsayan tek bir lisans anahtarı kullanır. Bu, SDK anahtarlarını çalışma zamanı anahtarlarından ayıran lisanslama sistemlerine kıyasla CI/CD hatlarını ve Docker yapılandırmalarını basitleştirir.

IronBarcode, Barcoder'ın desteklediği tüm barkod formatlarını destekliyor mu?

IronBarcode, QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztek, EAN-13, UPC-A, GS1 ve daha birçokları dahil olmak üzere 30'dan fazla barkod sembolojisini destekler. Format otomatik algılama, açıkça format sayımını gerektirmez.

IronBarcode doğal PDF barkod okuma desteği sunuyor mu?

Evet. IronBarcode, ayrı bir PDF render kütüphanesi gerektirmeden, BarcodeReader.Read('document.pdf') kullanarak PDF dosyalarından doğrudan barkod okur. Sayfa bazında sonuçlar sayfa numarası, barkod formatı, değeri ve güven puanını içerir.

IronBarcode, Barcoder'a kıyasla toplu işlemi nasıl ele alır?

IronBarcode'un statik yöntemleri durum terkibesizdir ve doğal olarak thread-safe'dir, bu da thread başına örnek yönetimi olmadan Parallel.ForEach'in doğrudan kullanımına olanak tanır. Herhangi bir fiyatlandırma seviyesinde bir throughput tavanı yoktur.

IronBarcode hangi .NET sürümlerini destekliyor?

IronBarcode, .NET Framework 4.6.2+, .NET Core 3.1 ve .NET 5, 6, 7, 8 ve 9'u tek bir NuGet paketinde destekler. Platform hedefleri arasında Windows x64/x86, Linux x64 ve macOS x64/ARM bulunur.

Bir .NET projesine IronBarcode'u nasıl kurarım?

IronBarcode'u NuGet üzerinden kurun: Paket Yöneticisi Konsolunda 'Install-Package IronBarCode' komutunu veya CLI'da 'dotnet add package IronBarCode' komutunu çalıştırın. Ek bir SDK yükleyicisi veya çalışma zamanı dosyası gerekmez.

IronBarcode'u satın almadan önce değerlendirebilir miyim, Barcoder'ın aksine?

Evet. IronBarcode'un deneme modu, yalnızca oluşturulan çıktı görüntülerine bir filigran ekleyerek, barkod değerlerini tam olarak döndürür. Satın almadan önce, kendi belgelerinizde okuma doğruluğunu kıyaslayabilirsiniz.

Barcoder ve IronBarcode arasındaki fiyat farkı nedir?

IronBarcode, geliştirme ve üretimi kapsayan, sürekli bir tek geliştirici lisansı için $749'dan başlar. Fiyat detayları ve hacim seçenekleri IronBarcode lisanslama sayfasında mevcuttur. Ayrı bir çalışma zamanı lisansı gerekliliği yoktur.

Barcoder'dan IronBarcode'a geçiş yapmak kolay mı?

Barcoder'dan IronBarcode'a geçiş esas olarak, örnek tabanlı API çağrılarını IronBarcode'un statik yöntemleriyle değiştirmeyi, lisans gerekliliklerini kaldırmayı ve sonuç özelliği adlarını güncellemeyi içerir. Çoğu geçiş, kodun azaltılmasını içerir.

IronBarcode, logolu QR kodları üretebiliyor mu?

Evet. QRCodeWriter.CreateQrCode().AddBrandLogo('logo.png'), konfigüre edilebilir hata düzeltme ile QR koduna yerel olarak bir marka görüntüsü yerleştirir. Renkli QR kodları, ChangeBarCodeColor() ile de desteklenir.

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