C#'ta Görüntülerden Barkodlar Nasıl Okunur
Barcoder'dan IronBarcode'a Geçiş
Bu kılavuz, .NET geliştiricileri için Barcoder'dan IronBarcode'a tam göç yolunu kapsar. Göç, iki paketi birleştirir, kodlayıcı-işleyici hattını tek bir yöntem çağrısıyla değiştirir ve tüm format-spesifik ad alanı ithalatlarını — using Barcoder.Code128, using Barcoder.Qr, using Barcoder.DataMatrix — tek bir using IronBarCode; içinde toplar. IBarcode türü ve ImageRenderer / ImageRendererOptions türleri tamamen kaldırılmıştır. Okuma, yanına ikinci bir kütüphane eklemenize neden olan eksik bir yetenekse, BarcodeReader.Read() ile IronBarcode doğal olarak okuma yapar.
Barcoder'dan Neden Geçiş Yapılmalı
Barcoder'dan IronBarcode'a geçen ekipler bu tetikleyicileri rapor eder:
Okuma Gereksinimi Eklendi: Barcoder, sadece üretim yapabilen bir kütüphane olup herhangi bir kod çözme yeteneğine sahip değildir. Bir uygulamanın gelen barkodları doğrulaması, taranmış belgeleri işlemesi veya yüklenen PDF'lerden barkodları okuması gerektiğinde,Barcoderbir yol sunmaz. Okuma için ikinci bir kütüphane eklemek, kod tabanını ikiye böler; iki NuGet bağımlılığı, bakımını yapmak için iki API ve izlemek için iki sürüm geçmişi oluşturur. IronBarcode, hem üretimi hem de okuma işlemlerini aynı paketle yönetir.
.NET Framework Uyumluluğu Kırıldı: Barcoder.Renderer.Image .NET Framework desteğini kaldırdı. .NET Framework 4.x üzerinde hizmet veya masaüstü uygulamaları çalıştıran ekipler, rutin bağımlılık bakımı sırasında görüntüleyici paketlerini güncellediklerinde bir yapı hatası ile karşılaşır. IronBarcode, farklı hedefler için koşullu paketleme olmadan .NET Framework 4.6.2'den .NET 9'a kadar destekler.
Paket Sürüm Sapması: Barcoder ve Barcoder.Renderer.Image bağımsız olarak sürümlenen NuGet paketleridir. Bağımlılık yeniden yüklemesi sırasında birini diğerini güncellemek, uyumsuzluklar tanıtabilir. Birden çok projeye sahip depolarda, her projenin her resimleyicisinin tutarlı sürümlerinin sağlanması, ekip büyüklüğü ile artan bir koordinasyon yüküdür.
Birden Fazla Format Ekleniyor: Code128 ile başlayan ve sonra QR, ardından DataMatrix ekleyen bir proje, her format için yeni bir isim alanı ithalatı ekleyip, farklı yöntem parametrelerine sahip bir kodlayıcı sınıfını öğrenmelidir. IronBarcode, BarcodeEncoding enum'u kullanır — bir format eklemek, mevcut bir çağrıya tek kelimelik bir değişikliktir. Yeni bir isim alanı yok, yeni sınıf yok, farklı yöntem imzası yok.
MAUI ve Bulut Dağıtım Gereksinimleri: Barcoder, MAUI, Docker, AWS Lambda veya Azure dağıtımları için destek dokümantasyonu sağlamaz. Çapraz platform mobil uygulamaları veya sunucusuz barkod işleme boru hatları oluşturan ekipler, Barcoder'ın belgelediği hedeflerin bu senaryoları kapsamadığını bulur.
Temel Sorun
Barcoder, format seçimini isim alanı ithalatlarına bağlar ve her çıkış işlemi için bir görüntüleyici boru hattını zorunlu kılar. Formatları veya çıkış türlerini değiştirmek, kodun yapısal değişikliklerini gerektirir:
// Barcoder: 3 namespaces, encoder-specific class, renderer pipeline, stream management
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, encoder-specific class, renderer pipeline, stream management
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
IronBarcode aynı işlemi tek zincirli bir çağrı olarak ifade eder:
// IronBarcode: 1 namespace, 1 method, 1 output call
using IronBarCode;
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.SaveAsPng("barcode.png");
// IronBarcode: 1 namespace, 1 method, 1 output call
using IronBarCode;
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.SaveAsPng("barcode.png");
Imports IronBarCode
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
.SaveAsPng("barcode.png")
IronBarcode vs Barcoder: Özellik Karşılaştırması
| Özellik | Barcoder | IronBarcode |
|---|---|---|
| Gerekli NuGet paketleri | 2 minimum (Barcoder + Barcoder.Renderer.Image) | 1 (IronBarcode) |
| Barkod oluşturma | Evet | Evet |
| Barkod okuma / kod çözme | Hayır | Evet |
| Format başına kodlayıcı sınıflar | Evet — Code128Encoder, QrEncoder, DataMatrixEncoder, vb. |
Hayır — BarcodeEncoding enum |
| Format başına isim alanı ithalatları | Evet — Barcoder.Code128, Barcoder.Qr, Barcoder.DataMatrix |
Hayır — sadece using IronBarCode |
| Sonuç nesnesindeki çıkış yöntemleri | Hayır — IBarcode kaydetme yöntemlerine sahip değil |
Evet — GeneratedBarcode ile SaveAsPng, ToPngBinaryData, ToStream vardır |
| PDF okuma | Hayır | Evet — BarcodeReader.Read(path) |
| Logolu QR | Hayır | Evet — .AddBrandLogo(path) |
| .NET Framework desteği | Görüntü işleme paketinde bırakıldı | .NET Framework 4.6.2+ |
| .NET 9 desteği | Belirsiz / sınırlı etkinlik | Evet |
| MAUI desteği | Hayır | Evet — iOS, Android, Windows, macOS |
| Docker / Azure / AWS Lambda | Belgelenmemiş | Evet |
| Lisans | MIT (açık kaynak) | Commercial — Lite $999, Plus $1,499, Professional $2,999, Unlimited $5,999 |
| ReadingSpeed kontrolü | Hayır | Evet — ReadingSpeed enum |
| Çoklu barkod algılama | Hayır | Evet — ExpectMultipleBarcodes seçeneği |
Hızlı Başlangıç: Barcoder'dan IronBarcode'a Geçiş
Adım 1: NuGet Paketini Değiştirin
Projeden tümBarcoderpaketlerini kaldırın:
dotnet remove package Barcoder
dotnet remove package Barcoder.Renderer.Image
dotnet remove package Barcoder
dotnet remove package Barcoder.Renderer.Image
SVG renderer da eklediyseniz:
dotnet remove package Barcoder.Renderer.Svg
dotnet remove package Barcoder.Renderer.Svg
IronBarcode'u kurun:
dotnet add package IronBarcode
dotnet add package IronBarcode
Adım 2: Ad Alanlarını Güncelleyin
Projede bulunan her dosyadan tüm using Barcoder.* ifadelerini kaldırın:
// Remove all of these
using Barcoder;
using Barcoder.Code128;
using Barcoder.Qr;
using Barcoder.DataMatrix;
using Barcoder.Renderers;
using Barcoder.Ean;
using Barcoder.Pdf417;
// ... and any other Barcoder.* namespaces in your project
// Remove all of these
using Barcoder;
using Barcoder.Code128;
using Barcoder.Qr;
using Barcoder.DataMatrix;
using Barcoder.Renderers;
using Barcoder.Ean;
using Barcoder.Pdf417;
// ... and any other Barcoder.* namespaces in your project
Tümünü tek bir using direktifiyle değiştirin:
using IronBarCode;
using IronBarCode;
Imports IronBarCode
Adım 3: Lisansa İzin Verin
Lisans başlatma kodunu uygulama başlangıcına ekleyin — Program.cs, Startup.cs veya MauiProgram.cs:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Ücretsiz bir deneme anahtarı ironsoftware.com adresinde mevcuttur.
Kod Göç Örnekleri
Code128 Oluşturma
Barcoder Yaklaşımı:
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
IronBarcode Yaklaşımı:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.SaveAsPng("barcode.png");
// NuGet: dotnet add package IronBarcode
using IronBarCode;
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.SaveAsPng("barcode.png");
Imports IronBarCode
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
.SaveAsPng("barcode.png")
Code128Encoder, ImageRenderer, ImageRendererOptions ve akış yönetimi tamamen kaldırılmıştır. Format, birleşik BarcodeWriter sınıfında BarcodeEncoding.Code128 olarak belirtilmiştir. Çıkış yöntemleri doğrudan döndürülen GeneratedBarcode nesnesi üzerinde bulunur. IronBarcode barkod oluşturma belgesi stil, kenar boşluğu ve renk özelleştirmelerini kapsar.
QR Kod Oluşturma
Barcoder Yaklaşımı:
using Barcoder;
using Barcoder.Qr;
using Barcoder.Renderers;
IBarcode barcode = QrEncoder.Encode("https://example.com", ErrorCorrectionLevel.M);
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 4
});
using var stream = File.OpenWrite("qr.png");
renderer.Render(barcode, stream);
using Barcoder;
using Barcoder.Qr;
using Barcoder.Renderers;
IBarcode barcode = QrEncoder.Encode("https://example.com", ErrorCorrectionLevel.M);
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 4
});
using var stream = File.OpenWrite("qr.png");
renderer.Render(barcode, stream);
Imports Barcoder
Imports Barcoder.Qr
Imports Barcoder.Renderers
Dim barcode As IBarcode = QrEncoder.Encode("https://example.com", ErrorCorrectionLevel.M)
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
.ImageFormat = ImageFormat.Png,
.PixelSize = 4
})
Using stream = File.OpenWrite("qr.png")
renderer.Render(barcode, stream)
End Using
IronBarcode Yaklaşımı:
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com", 500)
.SaveAsPng("qr.png");
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com", 500)
.SaveAsPng("qr.png");
Imports IronBarCode
QRCodeWriter.CreateQrCode("https://example.com", 500) _
.SaveAsPng("qr.png")
CreateQrCode için ikinci parametre, piksel cinsinden çıktı boyutudur. Hata düzeltme seviyesi, ihtiyaca göre yapılandırılabilen mantıklı bir varsayılan değerdir. IronBarcode, Barcoder'da mümkün olmayan bir işlemi de destekler — QR kod merkezinde bir marka logosu ekleme:
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com", 500)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded.png");
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com", 500)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded.png");
Imports IronBarCode
QRCodeWriter.CreateQrCode("https://example.com", 500) _
.AddBrandLogo("logo.png") _
.SaveAsPng("qr-branded.png")
DataMatrix Oluşturma
Barcoder Yaklaşımı:
using Barcoder;
using Barcoder.DataMatrix;
using Barcoder.Renderers;
IBarcode barcode = DataMatrixEncoder.Encode("ITEM-XYZ-001");
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 5
});
using var stream = File.OpenWrite("datamatrix.png");
renderer.Render(barcode, stream);
using Barcoder;
using Barcoder.DataMatrix;
using Barcoder.Renderers;
IBarcode barcode = DataMatrixEncoder.Encode("ITEM-XYZ-001");
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 5
});
using var stream = File.OpenWrite("datamatrix.png");
renderer.Render(barcode, stream);
Imports Barcoder
Imports Barcoder.DataMatrix
Imports Barcoder.Renderers
Imports System.IO
Dim barcode As IBarcode = DataMatrixEncoder.Encode("ITEM-XYZ-001")
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
.ImageFormat = ImageFormat.Png,
.PixelSize = 5
})
Using stream As FileStream = File.OpenWrite("datamatrix.png")
renderer.Render(barcode, stream)
End Using
IronBarcode Yaklaşımı:
using IronBarCode;
BarcodeWriter.CreateBarcode("ITEM-XYZ-001", BarcodeEncoding.DataMatrix)
.SaveAsPng("datamatrix.png");
using IronBarCode;
BarcodeWriter.CreateBarcode("ITEM-XYZ-001", BarcodeEncoding.DataMatrix)
.SaveAsPng("datamatrix.png");
Imports IronBarCode
BarcodeWriter.CreateBarcode("ITEM-XYZ-001", BarcodeEncoding.DataMatrix) _
.SaveAsPng("datamatrix.png")
Desen Code128 ile aynıdır — sadece BarcodeEncoding değeri değişir. Yeni bir ad alanı ekleme yoktur, farklı bir sınıf yoktur, farklı bir yöntem imzası yoktur.
Çıkış Boyutunu Kontrol Etme
Barcoder, barkod modül boyutunda bir ölçek çarpanı olarak PixelSize kullanır ve 1D yükseklik için BarHeightFor1DBarcode kullanılır — doğrudan genişlik/yükseklik API'si yoktur.
Barcoder Yaklaşımı:
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 3,
BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 3,
BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
Imports System.IO
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
.ImageFormat = ImageFormat.Png,
.PixelSize = 3,
.BarHeightFor1DBarcode = 80
})
Using stream As FileStream = File.OpenWrite("barcode.png")
renderer.Render(barcode, stream)
End Using
IronBarcode Yaklaşımı:
using IronBarCode;
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
using IronBarCode;
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
Imports IronBarCode
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.SaveAsPng("barcode.png")
.ResizeTo(width, height) açık piksel boyutlarını alır. Aynı GeneratedBarcode nesnesindeki diğer çıkış yöntemleri ile zincir oluşturur.
Bir Dosya Yerine İkili Veri Alma
Barcoder Yaklaşımı:
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
});
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
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
});
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
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
})
Using ms As New MemoryStream()
renderer.Render(barcode, ms)
Dim pngBytes As Byte() = ms.ToArray()
End Using
IronBarcode Yaklaşımı:
using IronBarCode;
byte[] pngBytes = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.ToPngBinaryData();
using IronBarCode;
byte[] pngBytes = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.ToPngBinaryData();
Imports IronBarCode
Dim pngBytes As Byte() = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128).ToPngBinaryData()
MemoryStream ve ToArray() deseni, GeneratedBarcode üzerinde tek bir zincirleme yöntem çağrısıyla değiştirilmiştir.
Barkodları Okuma (Net-Yeni Özellik)
Barcoder'ın bir okuma API'si yoktur. Daha önce okumak için ikinci bir kütüphane eklediyseniz, kaldırabilirsiniz. IronBarcode, dosyalar, bayt dizileri, akışlar ve PDF'lerden okuma yapar ve bu işlem için kullanılan paketle aynıdır.
IronBarcode Yaklaşımı:
using IronBarCode;
// Read from image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
Console.WriteLine($"Value: {result.Value}");
Console.WriteLine($"Format: {result.Format}");
}
// Read from PDF natively — no image extraction step, no extra dependency
var pdfResults = BarcodeReader.Read("invoice.pdf");
// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-sheet.png", options);
foreach (var result in multiResults)
Console.WriteLine(result.Value);
// Read from a stream directly
using var fileStream = File.OpenRead("barcode.png");
var streamResults = BarcodeReader.Read(fileStream);
using IronBarCode;
// Read from image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
Console.WriteLine($"Value: {result.Value}");
Console.WriteLine($"Format: {result.Format}");
}
// Read from PDF natively — no image extraction step, no extra dependency
var pdfResults = BarcodeReader.Read("invoice.pdf");
// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-sheet.png", options);
foreach (var result in multiResults)
Console.WriteLine(result.Value);
// Read from a stream directly
using var fileStream = File.OpenRead("barcode.png");
var streamResults = BarcodeReader.Read(fileStream);
Imports IronBarCode
' Read from image file
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
Console.WriteLine($"Value: {result.Value}")
Console.WriteLine($"Format: {result.Format}")
Next
' Read from PDF natively — no image extraction step, no extra dependency
Dim pdfResults = BarcodeReader.Read("invoice.pdf")
' Read multiple barcodes from one image
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim multiResults = BarcodeReader.Read("warehouse-sheet.png", options)
For Each result In multiResults
Console.WriteLine(result.Value)
Next
' Read from a stream directly
Using fileStream = File.OpenRead("barcode.png")
Dim streamResults = BarcodeReader.Read(fileStream)
End Using
IronBarcode barkod okuma belgesi, çok sayfalı PDF'leri, ilgi alanı okumasını ve performans ayarlama seçeneklerini kapsar.
SVG Çıktısı
Barcoder Yaklaşımı:
using Barcoder.Renderers;
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);
using Barcoder.Renderers;
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);
Imports Barcoder.Renderers
Dim svgRenderer = New SvgRenderer()
Using stream = File.OpenWrite("barcode.svg")
svgRenderer.Render(barcode, stream)
End Using
IronBarcode Yaklaşımı:
using IronBarCode;
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.SaveAsSvg("barcode.svg");
using IronBarCode;
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.SaveAsSvg("barcode.svg");
Imports IronBarCode
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) _
.SaveAsSvg("barcode.svg")
Barcoder.Renderer.Svg paketi, tüm SVG işleme yerleri göç ettirildiğinde kaldırılabilir.
Barcoder API'den IronBarcode Eşleme Referansı
| Barcoder | IronBarcode |
|---|---|
Code128Encoder.Encode("data", false) |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) |
QrEncoder.Encode("data", ErrorCorrectionLevel.M) |
QRCodeWriter.CreateQrCode("data", 500) |
DataMatrixEncoder.Encode("data") |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix) |
new ImageRenderer(new ImageRendererOptions { ... }) |
Gerekli değil |
renderer.Render(barcode, fileStream) |
.SaveAsPng(path) |
renderer.Render(barcode, memoryStream) + ms.ToArray() |
.ToPngBinaryData() |
IBarcode |
GeneratedBarcode |
PixelSize = 2, BarHeightFor1DBarcode = 50 |
.ResizeTo(width, height) |
SvgRenderer + renderer.Render(barcode, stream) |
.SaveAsSvg(path) |
| Okuma API'si yok | BarcodeReader.Read(path / stream / bytes / pdf) |
2 paket — Barcoder + Barcoder.Renderer.Image |
1 paket — IronBarcode |
Kodlayıcı başına format ad alanı (Barcoder.Code128, Barcoder.Qr, vb.) |
BarcodeEncoding enum, tek ad alanı |
Yaygın Göç Sorunları ve Çözümleri
Sorun 1: IBarcode Kaydetme Yöntemlerine Sahip Değil
Barcoder: Bir IBarcode değişkenini saklayan ve onu daha sonra bir işleyiciye aktaran kod, geciktirilmiş bir işleme deseni izler. IBarcode kabul eden ve renderer.Render() çağrısı yapan herhangi bir yardımcı yöntem yeniden düzenlenmelidir.
Çözüm: IBarcode tür referanslarını GeneratedBarcode ile değiştirin. GeneratedBarcode nesnesi, çıkış yöntemleriyle birlikte taşır — sonucu kaydetmesi veya serileştirmesi gereken herhangi bir yönteme iletin:
//IronBarcode— GeneratedBarcode carries output methods
using IronBarCode;
var barcode = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128);
SaveBarcodeToFile(barcode, "output.png");
static void SaveBarcodeToFile(GeneratedBarcode barcode, string path)
{
barcode.SaveAsPng(path);
}
//IronBarcode— GeneratedBarcode carries output methods
using IronBarCode;
var barcode = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128);
SaveBarcodeToFile(barcode, "output.png");
static void SaveBarcodeToFile(GeneratedBarcode barcode, string path)
{
barcode.SaveAsPng(path);
}
Imports IronBarCode
Dim barcode = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
SaveBarcodeToFile(barcode, "output.png")
Private Sub SaveBarcodeToFile(barcode As GeneratedBarcode, path As String)
barcode.SaveAsPng(path)
End Sub
Öncelikli işleme yerlerini bulmak için çözüm genelinde renderer.Render( araması yapın.
Sorun 2: PixelSize için Doğrudan Eşdeğer Yok
Barcoder: PixelSize, barkodun doğal modül boyutunda bir ölçek çarpanıdır. Çıkış boyutları içerik uzunluğuna, formata ve çarpan kombinasyonuna bağlıdır. BarHeightFor1DBarcode, 1D yüksekliğini bağımsız olarak kontrol eder. Doğrudan genişlik/yükseklik belirtimi yoktur.
Çözüm: MevcutBarcoderkodunun ürettiği gerçek piksel çıktısını ölçün ve bu değerleri .ResizeTo(width, height)'ya iletin:
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")
Sorun 3: Biçim Ad Alanı İthalatları Birikir
Barcoder: Bir projede kullanılan her barkod formatı, onu kullanan her dosyaya bir using Barcoder.[Format] direktifi ekler. Code128, QR ve DataMatrix kullanan bir proje, tipik olarak dosya başına üç format-spesifik ithalata artı using Barcoder ve using Barcoder.Renderers'ya sahip olur.
Çözüm: Tüm using Barcoder ifadeleri için bir arama yapın ve bunların tamamını using IronBarCode; ile değiştirin:
grep -rn "using Barcoder" --include="*.cs" .
grep -rn "using Barcoder" --include="*.cs" .
Her sonuç, kaldırılacak bir satırdır, her dosya başına bir kez tekli using IronBarCode; direktifiyle değiştirilir.
Sorun 4: Paket Sürüm Senkronizasyon Hataları
Barcoder: Sadece Barcoder veya Barcoder.Renderer.Image güncellenerek yapılan derlemelerde, iki paket farklı sürüm kombinasyonlarında uyumlu olmadığında tür çözümleme hataları oluşabilir.
Çözüm: Her ikiBarcoderpaketini kaldırdıktan sonra IronBarcode yükleyin; bir paket ve bir sürüm olur. Bu kategorideki paket kilit çatışmaları ortadan kaldırılır. Derlemeye başlamadan önce .csproj dosyasında sadece tekli IronBarcode referansı bulunduğundan ve kalan Barcoder.* referanslarının kalmadığından emin olun.
Barcoder Geçiş Kontrol Listesi
Geçiş Öncesi Görevler
Kod tabanınızı inceleyin ve değişiklik yapmadan önce tümBarcoderkullanımını belirleyin:
grep -rn "using Barcoder" --include="*.cs" .
grep -rn "Code128Encoder\.Encode" --include="*.cs" .
grep -rn "QrEncoder\.Encode" --include="*.cs" .
grep -rn "DataMatrixEncoder\.Encode" --include="*.cs" .
grep -rn "ImageRenderer\|ImageRendererOptions" --include="*.cs" .
grep -rn "SvgRenderer" --include="*.cs" .
grep -rn "renderer\.Render(" --include="*.cs" .
grep -rn "IBarcode" --include="*.cs" .
grep -rn "ErrorCorrectionLevel" --include="*.cs" .
grep -rn "using Barcoder" --include="*.cs" .
grep -rn "Code128Encoder\.Encode" --include="*.cs" .
grep -rn "QrEncoder\.Encode" --include="*.cs" .
grep -rn "DataMatrixEncoder\.Encode" --include="*.cs" .
grep -rn "ImageRenderer\|ImageRendererOptions" --include="*.cs" .
grep -rn "SvgRenderer" --include="*.cs" .
grep -rn "renderer\.Render(" --include="*.cs" .
grep -rn "IBarcode" --include="*.cs" .
grep -rn "ErrorCorrectionLevel" --include="*.cs" .
IBarcode'ın bir değişken türü olarak saklandığı veya bir yöntem parametresi olarak geçirildiği tüm yerleri belgeleyin — bunlar, en fazla dikkat gerektiren öncelikli işleme yerleridir. Tüm PixelSize ve BarHeightFor1DBarcode değerlerini not alın ve bunlara karşılık gelen çıkış boyutlarını ölçün.
Kod Güncelleme Görevleri
BarcoderNuGet paketini tüm projelerden kaldırınBarcoder.Renderer.ImageNuGet paketini tüm projelerden kaldırınBarcoder.Renderer.SvgNuGet paketi mevcutsa kaldırınIronBarcodeNuGet paketini yükleyin- Uygulama başlangıcında
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";ekleyin - Tüm
using Barcoder.*ifadeleriniusing IronBarCode;ile değiştirin Code128Encoder.Encode(...)'yıBarcodeWriter.CreateBarcode(..., BarcodeEncoding.Code128)ile değiştirinQrEncoder.Encode(...)'yıQRCodeWriter.CreateQrCode(..., size)ile değiştirinDataMatrixEncoder.Encode(...)'yıBarcodeWriter.CreateBarcode(..., BarcodeEncoding.DataMatrix)ile değiştirin- Tüm
new ImageRenderer(new ImageRendererOptions {...})yapıları kaldırın GeneratedBarcodeüzerinderenderer.Render(barcode, fileStream)'yı.SaveAsPng(path)ile değiştirinrenderer.Render(barcode, memoryStream)+ms.ToArray()'yı.ToPngBinaryData()ile değiştirinSvgRendererkullanımını.SaveAsSvg(path)ile değiştirinIBarcodetür referanslarınıGeneratedBarcodeile değiştirinPixelSize/BarHeightFor1DBarcodeseçeneklerini.ResizeTo(width, height)ile değiştirin
Geçiş Sonrası Testler
- Her oluşturulan barkod biçiminin standart bir tarayıcı veya IronBarcode'un kendi okuyucusu ile doğru şekilde tarandığını doğrulayın
- Görsel çıktı boyutlarını göç öncesi çıktıyla karşılaştırın —
.ResizeTo()değerlerinin eşdeğer boyutlar ürettiğinden emin olun - Telefonda tarama yaparak QR kodu çıktısını test edin, hata düzeltme seviyesinin yeterli olduğunu doğrulayın
- Projeniz SVG kullanıyorsa, tarayıcıda ve yazdırma bağlamlarında SVG çıktısının doğru şekilde görüntülendiğini doğrulayın
- İkinci okuma kütüphanesini kaldırdıysanız,
BarcodeReader.Read()'nin aynı girdiler için eşdeğer kodlanmış değerler ürettiğini doğrulayın - Projeniz PDF belgelerini işliyorsa PDF okuma test edin — çok sayfalı PDF'lerin tüm sayfalarını doğru şekilde okuduğunu doğrulayın
- Sıfır
Barcoder.*referansı kalan bir derleme çalıştırın — derleyici hataları, kaçırılan göç noktalarını belirtir
IronBarcode'a Geçmenin Temel Faydaları
Birleştirilmiş Paket Bağımlılığı: Tek bir NuGet paketi iki paketi (veya SVG renderer de kullanılmışsa üç paketi) değiştirir. Takip edilecek bir sürüm, izlenecek bir değişiklik günlüğü ve bağımlılık güncellemeleri sırasında çapraz paket uyumluluk sorunları yoktur. .csproj ve packages.lock.json karmaşıklığı hemen azalır.
Yerel Okuma Yeteneği: Daha önce barkod okuma için ikinci bir kütüphane gerektiren uygulamalar, IronBarcode'a konsolide edilebilir. BarcodeReader.Read() aynı API üzerinden resim dosyalarını, byte dizilerini, akışları ve PDF'leri kabul eder, çoklu barkod algılama ve okuma hız ayarı yerleşiktir.
Format Seçimi Olarak Yapılandırma: Mevcut bir projeye yeni bir barkod formatı eklemek, mevcut bir CreateBarcode çağrısındaki BarcodeEncoding enum değerine tek kelimelik bir değişikliktir. Yeni bir ad alanı ithalatı, yeni bir kodlayıcı sınıfı ve yeni bir paket yoktur. Bu, ürün gereksinimleri geliştikçe biçim genişlemesini düşük sürtünmeli hale getirir.
Açık Çıkış Boyutları: .ResizeTo(width, height), dolaylı PixelSize çarpan sistemini açık pikselleyici bir spesifikasyonla değiştirir. Kod ve çıktı arasındaki ilişki doğrudan ve tahmin edilebilir olup, barkod içerik uzunluğundan veya format özgü modül boyutlandırmasından bağımsızdır.
Genişletilmiş Platform Kapsamı: IronBarcode, .NET Framework 4.6.2'den .NET 9'a, iOS, Android, Windows ve macOS'ta MAUI dağıtımlarını ve Docker, AWS Lambda ve Azure Functions'a belgeli dağıtımı destekler. Platform gereksinimleri .NET Core'un ötesine geçen ekipler, Barcoder.Renderer.Image'ı etkileyen çerçeve destek boşluğunu yaşamazlar.
Aktif Bakım ve Gelecek Uyumluluğu: IronBarcode, belgelenmiş .NET uyumluluk zaman çizelgeleriyle düzenli güncellemeler yayınlar. Etkin sürüm kadansı, kütüphaneyi mevcut .NET sürümleriyle uyumlu tutar, son zamanlarda sınırlı sürüm etkinliği olan bir kütüphaneden beklenmeyen bir durum değildir.
Sıkça Sorulan Sorular
Barcoder'dan IronBarcode'a neden geçmeliyim?
Yaygın nedenler arasında lisanslamanın basitleştirilmesi (SDK + runtime anahtar karmaşıklığının kaldırılması), veri geçiş limitlerinin ortadan kaldırılması, yerel PDF desteği kazanılması, Docker/CI/CD dağıtımının iyileştirilmesi ve üretim kodunda API tekrarlama azalması yer alır.
Barcoder API çağrılarını IronBarcode ile nasıl değiştiririm?
Örnek oluşturma ve lisanslama tekrarlamalarını IronBarCode.License.LicenseKey = "anahtar" ile değiştirin. Okuyucu çağrılarını BarcodeReader.Read(yol) ile ve yazıcı çağrılarını BarcodeWriter.CreateBarcode(veri, kodlama) ile değiştirin. Statik yöntemler örnek yönetimi gerektirmez.
Barcoder'dan IronBarcode'a geçişte ne kadar kod değişir?
Çoğu geçiş daha az kod satırıyla sonuçlanır. Lisanslama tekrarlamaları, örnek oluşturucular ve açık format yapılandırması kaldırılır. Temel okuma/yazma işlemleri, daha temiz sonuç nesneleriyle daha kısa IronBarcode eşdeğerlerine dönüştürülür.
Geçiş sırasında hem Barcoder hem de IronBarcode kurulu kalmalı mı?
Hayır. Çoğu geçiş doğrudan değişim yapılır, paralel bir işletim yerine geçer. Bir hizmet sınıfını bir seferde geçirin, NuGet referansını değiştirin ve sonraki sınıfa geçmeden önce başlatma ve API çağrı desenlerini güncelleyin.
IronBarcode için NuGet paketi adı nedir?
Paket 'IronBarCode' (büyük B ve C harfleriyle). 'Install-Package IronBarCode' veya 'dotnet add package IronBarCode' ile kurun. Kodda kullanılan yönerge 'using IronBarCode;' şeklindedir.
IronBarcode, Barcoder ile karşılaştırıldığında Docker dağıtımını nasıl basitleştirir?
IronBarcode, harici SDK dosyaları veya montajlı lisans yapılandırması olmayan bir NuGet paketidir. Docker'da, IRONBARCODE_LICENSE_KEY ortam değişkenini ayarlayın ve paket lisans doğrulamasını başlangıçta kendi kendine yapar.
IronBarcode, Barcoder'dan geçişten sonra tüm barkod formatlarını otomatik olarak algılıyor mu?
Evet. IronBarcode, desteklenen tüm formatlardaki sembolojiyi otomatik olarak algılar. Açık BarcodeTypes sayımı gerekli değildir. Format zaten biliniyorsa ve performans önemliyse, BarcodeReaderOptions arama alanını optimize etmek için sınırlamayı sağlar.
IronBarcode, ayrı bir kütüphane olmadan PDF'lerden barkod okuyabiliyor mu?
Evet. BarcodeReader.Read("document.pdf") PDF dosyalarını yerel olarak işlemler. Sonuçlar her barkod için SayfaNumarası, Format, Değer ve Güven içerir. Harici bir PDF render adımı gerekmez.
IronBarcode, paralel barkod işlemeyi nasıl yönetiyor?
IronBarcode'un statik yöntemleri durumsuz ve thread-safe'dir. Dağıtılmış dosya listeleri üzerinde per-thread örnek yönetimi olmadan doğrudan Parallel.ForEach kullanın. BarcodeReaderOptions.MaxParallelThreads, iç thread bütçesini kontrol eder.
Barcoder'dan IronBarcode'a geçişte hangi sonuç özellikleri değişir?
Yaygın yeniden adlandırmalar: BarcodeValue, Value olur; BarcodeType, Format olur. IronBarcode sonuçları ayrıca Güven ve SayfaNumarası ekler. Çözüm çapında arama-değiştirme, mevcut sonuç işleme kodundaki yeniden adlandırmaları ele alır.
Bir CI/CD hattında IronBarcode lisanslamasını nasıl ayarlayabilirim?
IRONBARCODE_LICENSE_KEY'i bir boru hattı sırrı olarak saklayın ve uygulama başlangıç kodunda IronBarCode.License.LicenseKey olarak atayın. Bir sır, geliştirme, test, aşama ve üretim dahil olmak üzere tüm ortamları kapsar.
IronBarcode, özel biçimlendirmeye sahip QR kodu üretimini destekliyor mu?
Evet. QRCodeWriter.CreateQrCode() özelleştirilmiş renkler için ChangeBarCodeColor(), logo yerleştirme için AddBrandLogo(), yapılandırılabilir hata düzeltme seviyeleri ve PNG, JPG, PDF ve akış dahil birden çok çıktı formatını destekler.

