Barcoder ve IronBarcode: C# Barkod Kütüphanesi Karşılaştırması
Barcoder ile tek bir PNG oluşturmak için iki paket yüklersiniz, üç namespace'i içe aktarırsınız, format özel bir sınıfla kodlarsınız, bir seçenekler nesnesi ile bir oluşturucu oluşturursunuz, bir akış açar, içine render yapar ve akışı elden çıkarırsınız. Bu, tüm mutlu yoldur - ve yalnızca yazmayı kapsar. Barcoder'da hiç bir okuma API'si yoktur. Kütüphanenin MIT lisansı ve açık kaynak niteliği, ilk bakışta cazip görünmesini sağlar, özellikle ticari bağımlılıklardan kaçınmaya çalışan ekipler için. Ancak, parçalı mimari - en az iki NuGet paketi, her barkod formatı için farklı bir kodlayıcı sınıf, kodlama ve çıktıyı tamamen ayrı tutan bir oluşturucu hattı - en basit tek formatlı oluşturma senaryosunun ötesine geçtiğinde gerçek sürtünme yaratır.
BarcoderAnlamak
Barcoder, MIT lisansı altında NuGet üzerinde mevcut olan bir açık kaynak .NET barkod oluşturma kütüphanesidir. Code128, QR, DataMatrix,EAN-13, PDF417ve diğerlerini içeren barkod formatlarına veri kodlar. Tasarım felsefesi, kodlamayı tamamen işleme işleminden ayırır — çekirdek kütüphane bir IBarcode nesnesi (veri yapısı) üretir ve ayrı bir render edici paket bu nesneyi bir görüntüye dönüştürür.
Bu tasarımın pratik sonuçları ilk kurulmdan itibaren görülebilir. Herhangi bir PNG çıktısı mümkün olmadan önce iki NuGet paketi gereklidir: kodlama için Barcoder ve işleme 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 sürümlenir, bu da birine yapılan güncellemelerin otomatik olarak diğerleriyle eşleşmeyeceği anlamına gelir ve projede onları senkronize etmek tekrar eden bir bakım görevi haline gelir.
Barcoder'ın temel mimari özellikleri:
- PNG çıktısı için gereken iki NuGet paketi: kodlama için
Barcoderve görüntü formatlarına dönüştürme için işleme içinBarcoder.Renderer.Image - Format özel kodlayıcı sınıfları: Her barkod türünün kendi ad alanında kendi kodlayıcısı vardır —
Code128Encoder,QrEncoder,DataMatrixEncoder, vb. IBarcode'nin çıkış yöntemleri yoktur: Kodlamanın sonucu sıradan bir veri nesnesidir. Bir render ayrı olarak inşa edilmeli, bir akış açılmalı, render edilip kapatılmalı- Görüntü renderleyici.NET Frameworkdesteğini bıraktı:.NET Frameworkkullanan ekipler görüntü render paketi'ni kullanamazlar
- Okuma yeteneği yoktur:Barcodergörüntülerden, dosyalardan veya başka bir kaynaktan barkod decode edemez
- Bağımsız paket versiyonlama:
BarcoderveBarcoder.Renderer.Imagebağımlılık güncellemeleri sırasında birbirinden ayrılabilir
Çoklu Paket Üretim Çalışma Akışı
Kurulum hikayesi kapsam farkını hemen 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
Code128 barkod oluşturup PNG olarak kaydetmek için tam çalışma akışı üç namespace'i içe aktarımını, format özel bir kodlayıcı çağrısını, bir seçenekler nesnesi ile bir render inşasını, bir dosya akışını ve bir render çağrısını gerektirir:
// Barcoder: 3 namespaces, 7 steps to save a PNG
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);
// Barcoder: 3 namespaces, 7 steps to save a PNG
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ğildir - farklı bir namespace'i içe aktarmak ve farklı bir sınıf çağırmak gerekir. Code128Encoder.Encode, includeChecksum için bir bool alır, QrEncoder.Encode hata düzeltme seviyesi ve iki ek bool alır, ve DataMatrixEncoder.Encode sadece dize alır. Belirlenen bir formatta barkod oluşturmak için birleşik bir arayüz yoktur.
IronBarcode'u Anlamak
IronBarcode, bir tek NuGet paketi üzerinden oluşturmayı ve okumayı kapsayan ticari bir .NET barkod kütüphanesidir. İki ana sınıf — oluşturma için BarcodeWriter ve okuma için BarcodeReader — etrafında inşa edilmiş statik bir API modeli kullanır ve tüm format seçimini format özel sınıflar veya ad alanları yerine BarcodeEncoding enum üzerinden yönlendirir.
Kütüphane, ilk barkod kodu satırını yazmak ile çalışan çıktı haline getirmek arasındaki mesafeyi en aza indirmek üzere tasarlanmıştır. Oluşturma, okuma, PDF desteği, logolu QR kodlar ve tüm çıkış türleri tek bir paket ve takip edilecek tek bir sürüm ile dahildir.
IronBarcode'un ana özellikleri:
- Tek NuGet paketi:
IronBarcodetüm fonksiyonelliği kapsar — oluşturma, okuma, PDF ve tüm çıktı formatları - Birleşik format seçimi: Tüm barkod türleri
BarcodeEncodingenum değerleri ile adreslenir; no format-specific imports or classes - Sonuç nesnesindeki çıkış yöntemleri:
GeneratedBarcodedoğrudanSaveAsPng,ToPngBinaryData,ToStream,SaveAsSvgveResizeTosunar - Yerel okuma yeteneği:
BarcodeReader.Read(), ikincil bir kütüphane olmadan, resim dosyalarından, bayt dizilerinden, akışlardan ve PDF'lerden çözer - MAUI, Docker, AWS Lambda ve Azure desteği: Standart masaüstü ve sunucu senaryolarının ötesindeki belgelenmiş dağıtım hedefleri
- Tam.NET Frameworkve modern .NET desteği:.NET Framework4.6.2'den .NET 9'a kadar
Ö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ü renderleyicide bırakıldı | .NET Framework 4.6.2+ |
| PDF okuma | Hayır | Evet |
| Logolu QR | Hayır | Evet |
Detayli Özellik Karsilastirmasi
| Özellik | Barcoder | IronBarcode |
|---|---|---|
| Uretim | ||
| Code128 oluşturma | Evet | Evet |
| QR Kodu 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 ile format seçildi | Hayır — format başına ayrı bir kodlayıcı sınıfı | Evet — BarcodeEncoding enum |
| Çıkış | ||
| PNG çıkışı | Evet (Barcoder.Renderer.Image aracılığıyla) | Evet — .SaveAsPng() |
| SVG çıkışı | Evet (Barcoder.Renderer.Svg aracılığıyla) | Evet — .SaveAsSvg() |
| İkili veri çıkışı | Evet (MemoryStream aracılığıyla) | Evet — .ToPngBinaryData() |
| Akış çıkışı | Evet (manuel akış yönetimi) | Evet — .ToStream() |
| Doğrudan yeniden boyutlandırma API | Hayır — sadece PixelSize ölçek faktörü |
Evet — .ResizeTo(width, height) |
| Okuma | ||
| Görüntü dosyasından okuma | Hayır | Evet |
| PDF'den okuma | Hayır | Evet |
| Akıştan okuma | 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ü renderleyicide bırakıldı | .NET Framework 4.6.2+ |
| .NET 9 | Belirsiz / sınırlı etkinlik | Evet |
| MAUI (iOS, Android, Windows, macOS) | Hayır | Evet |
| Docker / Azure / AWS Lambda | Belirtilmemiş | Evet |
| Paketleme | ||
| Bağımsız paket sürümlendirme riski | Evet | Hayır — tek paket |
| Format başına ad alanı | Evet | Hayır — yalnız bir 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 Oluşturma API'si
Barkod formatı seçiminin yapısı her barkod üreten kod tabanının her bölümünü etkiler.
Barcoder Yaklaşımı
Barcoder format seçimini ayrı ad alanlarındaki ayrı kodlayıcı sınıflar üzerinden yönlendirir. Formatları değiştirmek, yeni bir using yönergesi eklemek ve farklı bir yöntem imzasına sahip farklı bir sınıf kullanmak anlamına gelir:
// Code128
using Barcoder.Code128;
IBarcode barcode = Code128Encoder.Encode("data", false);
// QR Code — different namespace, different class, different parameters
using Barcoder.Qr;
IBarcode barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false);
// DataMatrix — different namespace, different class again
using Barcoder.DataMatrix;
IBarcode barcode = DataMatrixEncoder.Encode("data");
// Code128
using Barcoder.Code128;
IBarcode barcode = Code128Encoder.Encode("data", false);
// QR Code — different namespace, different class, different parameters
using Barcoder.Qr;
IBarcode barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false);
// DataMatrix — different namespace, different class again
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 — different namespace, different class, different parameters
barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, False, False)
' DataMatrix — different namespace, different class again
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ğildir — yeni bir ad alanı ekleme, yeni bir sınıf öğrenme ve yeni parametreleri anlama gerektirir.
IronBarcode Yaklaşımı
IronBarcode, birleşik BarcodeWriter sınıfında BarcodeEncoding enum üzerinden tüm format seçimini yönlendirir. Yeni bir format eklemek enum değerini tek kelimeyle değiştirmek demektir:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// Code128
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).SaveAsPng("code128.png");
// DataMatrix — same class, same method, one word changed
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png");
// QR — dedicated optimized 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 — same class, same method, one word changed
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png");
// QR — dedicated optimized 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 — same class, same method, one word changed
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png")
' QR — dedicated optimized 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şladığında lisans anahtarını ekleyin:
IronBarCode.License.LicenseKey = "YOUR-KEY";
IronBarCode.License.LicenseKey = "YOUR-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-KEY"
IronBarcode barkod oluşturma belgeleri stil, kenar boşlukları ve renk özelleştirmesi de dahil bir dizi oluşturma seçeneklerini kapsar.
Render ve Çıktı Seçenekleri
Barkod çıktısını farklı biçimlerde almak — bir dosya, ikili veri, bir akış — her kütüphanenin çok farklı ele aldığı yaygın bir gereksinimdir.
Barcoder Yaklaşımı
Barcoder'in kodlama ile render'dan ayrılması bir mimari olarak ilkelidir, ancak her çıktının format değişikliği için ek yük yaratır. Bir dosyaya kaydetmek, bir FileStream açmayı gerektirir. İkili veri almak, bir MemoryStream açmayı ve ToArray() çağırmayı gerektirir. Her çıkış senaryosu bir seçenekler nesnesi ile bir render yapılandırması gerektirir:
// Barcoder: changing output dimensions requires rebuilding the renderer
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);
// Getting binary data — different stream, same renderer pipeline
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
// Barcoder: changing output dimensions requires rebuilding the renderer
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);
// Getting binary data — different stream, same renderer pipeline
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
Imports System.IO
' Barcoder: changing output dimensions requires rebuilding the renderer
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
.ImageFormat = ImageFormat.Png,
.PixelSize = 3,
.BarHeightFor1DBarcode = 80
})
Using stream As FileStream = File.OpenWrite("barcode-large.png")
renderer.Render(barcode, stream)
End Using
' Getting binary data — different stream, same renderer pipeline
Using ms As New MemoryStream()
renderer.Render(barcode, ms)
Dim pngBytes As Byte() = ms.ToArray()
End Using
Boyut kontrolü dolaylı: PixelSize, doğrudan genişlik ve yükseklik belirlemesi değil, barkod modül boyutu üzerinde bir ölçek çarpanıdır.
IronBarcode Yaklaşımı
IronBarcode, zincirlenmiş yöntem çağrılarıyla her türlü çıktıya ulaşılabilen bir GeneratedBarcode nesnesi döndürür. Render oluşturumu yok, 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ça piksel boyutlarını alır ve aynı nesne üzerinde herhangi bir çıkış yöntemi ile zincirlenir.
Barkod Okuma
Barcoder'da bir okuma API'sinin yokluğu, yapılandırma seçimi değil, güçlü bir mimari sınırdır.
Barcoder Yaklaşımı
Barcoder'un okuma veya kod çözme yeteneği yoktur. Kütüphane içinde bir API yoktur, planlı bir API yoktur ve bir çözüm yolu yoktur. Bir uygulamanın barkodları okuması gerekiyorsa, Barcoder'a ek olarak, ayrı bir NuGet bağımlılığı olan kendi API yüzeyi ve kendi sürümü olan ikinci bir kütüphane eklenmelidir. Bu, en az iki okuma ile ilgili bağımlılığı ifade eder: üretim içinBarcoderve okuma için başka bir şey.
IronBarcodeYaklaşımı
IronBarcode, aynı paket ve tutarlı API desenleri ile hem üretim hem de okuma özelliğini kapsar. BarcodeReader.Read() yöntemi resim dosyalarını, bayt dizilerini, akışları ve PDF'leri yerel olarak 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 okuma— no conversion step, no extra dependency
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 okuma— no conversion step, no extra dependency
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 okuma— no conversion step, no extra dependency
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ğaldır — arada bir görüntü çıkarımı, bir dönüştürme kütüphanesi veya ek bir paket gerektirmez. IronBarcode barkod okuma belgeleri, çok sayfalı PDF'leri, ilgi alanı okumalarını ve performans ayarlamasını kapsar.
API Eslestirme Referansi
| 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`'den zincirlenmiştir |
|
renderer.Render(barcode, stream) |
.SaveAsPng(path) / .ToPngBinaryData() / .ToStream() |
IBarcode (veri yapısı, çıkış yöntemleri yoktur) |
GeneratedBarcode (SaveAsPng, ToPngBinaryData, ToStream, ResizeTo vb. vardır) |
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) |
| Hayır.NET Frameworkgörüntü render'ı | .NET Framework 4.6.2+ |
PixelSize + BarHeightFor1DBarcode seçenekleri |
.ResizeTo(width, height) |
Takımlar Barcoder'dan IronBarcode'a Geçmeyi Düşündüğünde
Okuma Gereksinimlere Eklendiğinde
Birçok proje, saf üretim hattı olarak başlar — etiket basma, belgeler için kod oluşturma, raporlara barkod gömme. Barcoder, bu projelere başlangıçta hizmet verir. Aynı uygulama daha sonra gelen barkodları doğrulayacak, taranan belgeleri işleyacak veya yüklenen PDF'lerden barkod çözecek olduğunda,Barcoderbir çözüm sunmaz. Takım, ikinci bir kütüphaneyi değerlendirmek, API'sini öğrenmek, NuGet sürümünü ayrı olarak yönetmek ve iki kütüphane arasındaki entegrasyon yüzeyini harekete geçirmek zorundadır. Bu aşamaya ulaşan takımlar, iki ayrı barkod bağımlılığı yerine her iki tarafı da ele alan bir kütüphaneye konsolide olurlar.
.NET FrameworkUyumluluğu Kırılması
Barcoder.Renderer.Image.NET Frameworkdesteğini kaldırdı..NET Framework4.x üzerinde hizmetler veya masaüstü uygulamaları olan, bağımlılık bakım sırasında görüntü render paketini güncelleyen ekipler, bir derleme hatasıyla karşılaşır. Bu bir yanlış yapılandırma değildir — kütüphanenin platform destek kararıdır. IronBarcode, farklı hedefler için özel paketleme veya koşullu bağımlılıklar olmadan.NET Framework4.6.2'den .NET 9'a kadar destek sunar.
Paket Sürüm Kayması Koordinasyon Sorunlarına Yol Açıyor
Barcoder ve Barcoder.Renderer.Image bağımsız olarak sürümlendiğinde, birini diğerini güncellemeden güncellemek, bağımlılık yenilemesi sırasında ince uyumsuzluklar getirebilir. Birden çok projeyi içeren bir depoda — her biri farklı bir render paketi sürümü tüketiyorsa — projeler arasında tutarlı davranışı sağlamak, ekibin boyutuyla büyüyen bir koordinasyon problemi olur. IronBarcode'a konsolide olan ekipler, tek bir paket ve tek bir sürümü yönetmenin bu tür bir sorunu tamamen kaldırdığını bildirir.
Format Kapsamı Zamanla Genişliyor
Bir proje, başlangıçta Code128 etiketlerle başlayabilir ve daha sonra müşteri odaklı bağlantılar için QR kodları, ardından uyumluluk gereksinimleri için DataMatrix ekleyebilir.Barcoderile her format eklemesi, bir ad alanı eklemesi, farklı parametrelerle farklı bir kodlayıcı sınıfı ve potansiyel olarak yeni bir NuGet paketi demektir.IronBarcodeile, format eklemek, mevcut bir çağrıda BarcodeEncoding enum değerine yapılan bir değiştirmedir. Barkod format kapsamını genişletmeyi içeren yol haritalarına sahip ekipler, enum tabanlı modeli çok daha kolay bir şekilde sürdürülebilir bulurlar.
MAUI ve Çapraz Platform Dağıtım Gereksinimleri
Barcoder, MAUI, Docker, AWS Lambda veya Azure dağıtımlarına destek verdiğini belgelendirmez. Çapraz platform MAUI uygulamaları geliştiren veya barkod işlemeyi sunucusuz altyapıya dağıtan ekipler, Barcoder'in belgeleri ve testlerinin bu hedefleri kapsamadığını tespit eder. IronBarcode, iOS, Android, Windows, macOS MAUI hedefleri, Docker kapsayıcıları ve büyük bulut platformları arasında dağıtımı belgelendirir ve aktif olarak test eder.
Genel Geçiş Dusunceleri
IBarcode ile GeneratedBarcode Tür Değişikliği
Barcoder kodu, bir IBarcode değişkenini depolayan ve daha sonra bir işleyiciye ileten kod yeniden düzenlenmelidir. IronBarcode'da, GeneratedBarcode kendi çıkış yöntemlerini taşır — ayrı bir işleyici adımı yoktur. Şu anda IBarcode kabul eden herhangi bir yöntem imzası, GeneratedBarcode kabul etmeye değişmelidir, ve bu yöntemin içindeki işleme çağrısı, .SaveAsPng() veya .ToPngBinaryData() gibi doğrudan bir çağrı olmalıdır. Tür sistemi, derleme sırasında güncellenmesi gereken her konumu ortaya çıkaracaktır — IBarcode,Barcoderpaketleri kaldırıldıktan sonra çözülmeyecek.
PixelSize Doğrudan Eşdeğeri Yoktur
Barcoder'ın PixelSize'yi, bir barkodun doğal modül boyutu üzerinde bir ölçek çarpanıdır, açık piksel boyutu değildir. Çıkış genişliği, barkod içeriğine, formata ve skala çarpanına bağlıdır.IronBarcode.ResizeTo(width, height), açık piksel boyutları ile kullanır. Geçiş sırasında, mevcutBarcoderkodunun ürettiği gerçek çıkış boyutlarını ölçün ve .ResizeTo() çağrısında bu değerleri 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 bir using Barcoder.* ifadesi biriktirir. Geçiş sırasında, bunların tamamı tek bir using IronBarCode;'e çöker. Çözüm genelinde bir using Barcoder araması, güncellenmesi gereken her dosyayı tanımlayacaktır. Etkilenen dosya sayısı genellikle takımların beklediğinden daha fazladır, çünkü barkod formatına dokunan her dosya kendi format özelindeki ad alanını ithal ederdi.
SVG Çıkış Yolu Değişiklikleri
Barcoder.Renderer.Svg ve SvgRenderer sınıfını kullanan projeler, işleyici hattını GeneratedBarcode üzerinde 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")
Tüm SVG render yerleri taşındıktan sonra Barcoder.Renderer.Svg paketi kaldırılabilir.
EkIronBarcodeIlkeler
Yukardaki karsilastirma noktalarinin otesinde, IronBarcode'unBarcoderkarsiligi olmayan özellikleri sunar.
- Gömülü logolu QR kodları:
.AddBrandLogo(path), QR kodunun ortasına bir marka görüntüsünü yerleştirir, taranabilirliği bozmadan - Yerel PDF barkod okuma:
BarcodeReader.Read("document.pdf"), önce görüntüleri çıkarmak zorunda kalmadan doğrudan PDF'leri işler - Çok barkod tespiti:
ExpectMultipleBarcodesseçeneği, tek bir görüntüde veya PDF sayfasında tüm barkodları bir çağrıda okur - Okuma hız kontrolü:
ReadingSpeed.Balanced,FasterveSlower, farklı kullanım durumları için doğruluk-hız dengesi ayarlaması yapar - MAUI çapraz platform dağıtımı: iOS, Android, Windows ve macOS MAUI hedefleri aktif olarak test edilmekte ve belgelenmektedir
- Docker ve bulut dağıtımı: Docker container'ları, AWS Lambda ve Azure Functions için belgelenmiş dağıtım yolları
- Barkod stil ve özelleştirme: Renk, kenar boşluğu, açıklama metni ve arka plan özelleştirmesi
GeneratedBarcodeüzerinde
.NET Uyumlulugu ve Gelecek Hazirikligi
IronBarcode,.NET Framework4.6.2, .NET Core 2.x, .NET 5, .NET 6, .NET 7, .NET 8 ve .NET 9'u destekler. Aktif geliştirme düzenli güncellemelerle devam etmektedir ve 2026 yılı sonlarında yayınlanması beklenen .NET 10 ile uyumluluk yayınlanan yol haritasının bir parçasıdır. Barcoder'ın görüntü renderleyicisi.NET Frameworkdesteğini bırakmış ve son sürümlerde repo üzerindeki etkinlik sınırlı olmuştur, böylece kütüphanenin.NET 9ve gelecekteki uyumluluk durumu belirsiz kalmıştır. Uzun destek penceresi ve gelecek .NET sürümleri ile tahmin edilebilir uyumluluğa ihtiyaç duyan ekipler için, IronBarcode'un aktif sürüm döngüsü daha fazla güvence sağlamaktadır.
Sonuç
Barcoder ve IronBarcode, temel olarak farklı kapsamları yansıtır. Barcoder, kodlama ve işleme arasında prensipli bir ayrım ile yalnızca bir oluşturma kütüphanesidir — IBarcode veri yapısı ve işleyici hattı tasarım gereği farklı katmanlardır. IronBarcode, tek bir paket, tek bir namespace ve tutarlı bir statik API ile barkod üretimi ve okumasını birleştiren eksiksiz bir barkod kütüphanesidir. Mimari fark, gereksinimler genişlediğinde en belirgin hale gelir: Barcoder'ın çok paketli, çok namespace'li, okuma yapmayan tasarımı, her yeni eklemeyi bir yapısal görev haline getirirken,IronBarcodeyeni format veya özellik eklemelerini yapılandırma değişiklikleri olarak ele alır.
Bir proje gerçekten sadece üretim yapmalıdır, yalnızca .NET Core'u hedef sorumluluk üstlenmeli, ve küçük bir barkod formatı kullanacaksa ve MIT lisansı zorlu bir gereklilikse,Barcoderdoğru seçimdir. Kütüphane, bu sınırlar dahilinde belgelenmiştir ve okuma gereksinimi olmayan ve.NET Frameworkhedeflemeyen sıkı kapsamlı projeler için zero-cost open-source seçeneği makuldur.
IronBarcode, bir projenin okuma ve üretim yapması gerektiğinde,.NET Frameworkveya çapraz platform MAUI dağıtımlarını hedeflediğinde, zaman içinde barkod formatlarını eklemeyi beklediğinde veya Docker veya bulut ortamlarında dağıtım yapması gerektiğinde doğru seçimdir. Tek paket modeli ve enum tabanlı format seçimi, proje kapsamı genişledikçeBarcoderile biriken yükü ortadan kaldırır.
Pratik karar, proje rotasına bağlıdır. Okuma gereksinimleri olmayan, basit bir tek format üretici olarak kalacağı kesin olan bir proje, Barcoder'dan iyi hizmet alabilir. Barkod gereksinimleri konusunda herhangi bir belirsizliği olan bir proje — format ekleme, okuma ekleme, çapraz platformda dağıtım yapma gibi — Barcoder'ın mimari sınırlarına beklenenden daha çabuk ulaşacaktır. Her iki kütüphane de dürüst araçlardır; soru hangi aracın işin gerçek kapsamına uyduğudur.
Sıkça Sorulan Sorular
Barcoder nedir?
Barcoder, C# uygulamalarında barkod oluşturma ve okuma için kullanılan bir .NET barkod kütüphanesidir. Geliştiricilerin .NET projeleri için bir barkod çözümü seçerken değerlendirdiği birkaç alternatiften biridir.
Barcoder ve IronBarcode arasındaki ana farklar nelerdir?
IronBarcode, örnek yönetimi gerektirmeyen statik, durumsuz bir API kullanırken, Barcoder genellikle kullanılmadan önce örnek oluşturma ve yapılandırma gerektirir. IronBarcode ayrıca yerel PDF desteği, otomatik format algılama ve tüm ortamlarda tek anahtar lisanslama sağlar.
IronBarcode'u lisanslamak, Barcoder'dan daha mı kolay?
IronBarcode, hem geliştirme hem de üretim dağıtımlarını kapsayan tek bir lisans anahtarı kullanır. Bu durum, CI/CD hatları ve Docker yapılandırmalarını, SDK anahtarlarını çalıştırma anahtarlarından ayıran lisanslama sistemleriyle karşılaştırıldığında basitleştirir.
IronBarcode, Barcoder'ın desteklediği tüm barkod formatlarını destekliyor mu?
IronBarcode, QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 ve daha fazlası dahil 30'dan fazla barkod sembolojisini destekler. Format otomatik algılama, açık format sayımı gerektirmez.
IronBarcode yerel PDF barkod okuma desteği veriyor mu?
Evet. IronBarcode, BarcodeReader.Read('document.pdf') kullanarak PDF dosyalarından barkodları doğrudan okur, ayrı bir PDF işleme kütüphanesi gerektirmez. Sayfa başına sonuçlar, sayfa numarası, barkod formatı, değeri ve güven skoru içerir.
IronBarcode, Barcoder ile karşılaştırıldığında toplu işlemeyi nasıl yönetiyor?
IronBarcode'un statik yöntemleri durumsuz ve doğal olarak iş parçacığı güvenlidir, Parallel.ForEach'in doğrudan kullanımını sağlar ve iş parçacığı başı örnek yönetimi gerektirmez. Hiçbir fiyatlandırma seviyesi için bant genişliği sınırı 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 paketi içinde destekler. Platform hedefleri arasında Windows x64/x86, Linux x64 ve macOS x64/ARM bulunuyor.
.NET projesine IronBarcode'u nasıl kurarım?
NuGet aracılığıyla IronBarcode'u kurun: 'Install-Package IronBarCode' komutunu Paket Yöneticisi Konsolunda veya CLI'de 'dotnet add package IronBarCode' komutunu çalıştırın. Ek bir SDK yükleyici veya çalışma zamanı dosyaları gerekli değildir.
Barcoder'ın aksine, satın almadan önce IronBarcode'u değerlendirebilir miyim?
Evet. IronBarcode'ın deneme modu, yalnızca oluşturulan çıktı görüntülerine bir filigran ekleyerek tam çözümlenmiş barkod değerlerini verir. Satın almadan önce kendi belgelerinizde okuma doğruluğunu test edebilirsiniz.
Barcoder ve IronBarcode arasındaki fiyat farkı nedir?
IronBarcode, geliştirme ve üretimi kapsayan tek bir geliştirici lisansı için $749'dan başlar. Fiyatlandırma detayları ve hacim seçenekleri, IronBarcode lisanslama sayfasında mevcuttur. Ayrı bir çalışma zamanı lisansı gereksinimi yoktur.
Barcoder'dan IronBarcode'a geçiş kolay mıdır?
Barcoder'dan IronBarcode'a geçiş, öncelikle örnek tabanlı API çağrılarını IronBarcode'un statik yöntemleriyle değiştirmeyi, lisanslama klişelerini kaldırmayı ve sonuç özellik adlarını güncellemeyi içerir. Çoğu geçiş, kod eklemekten ziyade azaltmayı içerir.
IronBarcode, logolu QR kodları üretiyor mu?
Evet. QRCodeWriter.CreateQrCode().AddBrandLogo('logo.png') kullanarak bir QR koduna yerel logolu bir marka resmi ekleyin, yapılandırılabilir hata düzeltme ile. ChangeBarCodeColor() üzerinden renkli QR kodları da desteklenir.

