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
Barcoderve görüntü formatlarına rendering içinBarcoder.Renderer.Image - Format-spesifik kodlayıcı sınıfları: Her barkod tipi, kendi ad alanında kendi kodlayıcısına sahiptir —
Code128Encoder,QrEncoder,DataMatrixEncodervb. 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:
BarcoderveBarcoder.Renderer.Imagebağı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
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
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:
IronBarcodetüm işlevselliği kapsar — üretim, okuma, PDF ve tüm çıkış formatları - Birleştirilmiş format seçimi: Tüm barkod türleri
BarcodeEncodingenum değerleriyle ele alınır; no format-specific imports or classes - Sonuç nesnesi üzerinde çıkış yöntemleri:
GeneratedBarcodedirekt olarakSaveAsPng,ToPngBinaryData,ToStream,SaveAsSvgveResizeTosağ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")
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")
Ü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"
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
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()
.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)
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")
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")
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.
- Gömülü logolarla QR kodları:
.AddBrandLogo(path), QR kodunun merkezine bir marka resmi gömer ve taranabilirliği bozmaz. - Yerel PDF barkod okuma:
BarcodeReader.Read("document.pdf"), resimleri çıkarmadan doğrudan PDF'leri işler. - Çoklu barkod algılama:
ExpectMultipleBarcodesseçeneği, tek bir resim veya PDF sayfasından tek bir çağrıda tüm barkodları okur. - Okuma hız kontrolü:
ReadingSpeed.Faster,Balanced,DetailedveExtremeDetail, farklı kullanım durumları için doğruluk-hız dengesi ayarlar. - MAUI çok platformlu dağıtım: iOS, Android, Windows ve macOS MAUI hedefleri aktif olarak test edilir ve belgeler
- Docker ve bulut dağıtımı: Docker konteynerleri, AWS Lambda ve Azure Functions için belgelenmiş dağıtım yolları
- Barkod stillendirme ve özelleştirme:
GeneratedBarcodeüzerinde renk, kenar boşluğu, açıklama metni ve arka plan özelleştirmeleri.
.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.

