C# Kullanarak Barkodlarda Async ve Çoklu İş Parçacığını Nasıl Kullanırsınız
QRCoder'dan IronBarcode'a Geçiş
Bu kılavuz, projeleriQRCoderile başlayan ve QR kodu üretiminin ötesinde yetenekler gerektiren geliştirme ekipleri için yazılmıştır. QRCoder, amacı dahilinde iyi bakım yapılmış, yüksek kaliteli bir kütüphanedir ve göç, kaliteye yönelik bir yansıma değildir. Bu, QRCoder'ın tasarlandığı şeyin dışında kalan gereksinimlere — format genişletmesi, barkod okuma, PDF entegrasyonu — bir yanıttır. Bu kılavuz, QRCoder'dan IronBarcode'a tam teknik yolu kapsar: paket değişikliği, ad alanı değişiklikleri, tüm genel desenler için kod çevirisi, API eşdeğerliklerinin haritalaması ve geçiş sırasında ortaya çıkan sorunların çözümleri.
Neden QRCoder'dan Göç
QR'nin Ötesindeki Format Gereksinimleri:QRCoderyalnızca QR kodları üretir. Lojistik için Code 128 etiketlerine, perakende ürün kimliği için EAN-13 kodlarına, ilaç seri numaralandırma için DataMatrix'e veya hükümet doküman uyumu için PDF417'ye ihtiyaç duyan projeler, her ek format için ayrı bir kütüphane eklemelidir. Gerekli format sayısı arttıkça, bağımsız paketlerin, API'lerin ve bakım yükümlülüklerinin sayısı da artar.
Barkod Okuma Gereksinimleri: QRCoder'ın barkod okuma API'si yoktur — tasarım gereği yalnızca bir üretim kütüphanesidir. Gelecek resimlerden QR kodlarını çözen, taranan belgelerdeki barkodları doğrulayan veya sevkiyat etiketlerini işleyen herhangi bir uygulama,QRCoderyanı sıra özel bir okuma kütüphanesi eklemelidir. Bu ikinci kütüphane kendi API yüzeyi, kendi güncelleme döngüsü ve her bir .NET yükseltmesinde kendi uyumluluk sorunlarını getirir.
Çoklu Kütüphane Bakımı:QRCodertabanlı bir proje için gerçekçi birikim modeli, QR üretimi için QRCoder'dan, sevkiyat etiketleri için 1D barkod kütüphanesine ve çözme için okuma kütüphanesine kadar uzanır. Üç veya dört bağımsız paketi yönetmek, ayrı sürüm notlarını izlemek, birinin herhangi bir güncellemesinde sürüm çatışmalarını çözmek ve geliştirme ekibi genelinde birden çok API ile aşina olmak anlamına gelir. Bakım yükü, başlangıç entegrasyon tahmininde görülmeyen şekillerde zamanla bileşikleşir.
PDF Desteği: Gelen PDF dosyalarından barkod gömme veya barkodları çıkarma işleri, QRCoder'ın kapsamının dışında kalır. Belge işleme süreçleri — fatura işleme, PDF şablonlarından etiket oluşturma, uyum raporlama — bu sınıra erken ulaşır.QRCoderyanı sıra özel bir PDF kütüphanesi eklenmelidir veya mimari, barkod üretimi ve PDF üretimini ayrı alt sistemler aracılığıyla yönlendirmelidir.
Temel Sorun
QRCoder, QR üretimini verimli bir şekilde çözer. Herhangi bir gereksinim QR'nın ötesine geçtiğinde, kod tabanı her boşluğu doldurmak için ek paketleri çekmeye başlamalıdır:
//QRCoderhandles QR generation well — but no further
using QRCoder;
using System.IO;
var generator = new QRCodeGenerator();
var qrCodeData = generator.CreateQrCode("SHIP-12345", QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrCodeData);
File.WriteAllBytes("qr.png", qrCode.GetGraphic(10));
// Now the shipping team asks for Code 128 — add NetBarcode
// Now the warehouse needs to scan barcodes — add ZXing.Net
// Now a report needs a barcode in a PDF — add a PDF library
// Each addition: new namespace, new API, new maintenance cycle
//QRCoderhandles QR generation well — but no further
using QRCoder;
using System.IO;
var generator = new QRCodeGenerator();
var qrCodeData = generator.CreateQrCode("SHIP-12345", QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrCodeData);
File.WriteAllBytes("qr.png", qrCode.GetGraphic(10));
// Now the shipping team asks for Code 128 — add NetBarcode
// Now the warehouse needs to scan barcodes — add ZXing.Net
// Now a report needs a barcode in a PDF — add a PDF library
// Each addition: new namespace, new API, new maintenance cycle
Imports QRCoder
Imports System.IO
Dim generator As New QRCodeGenerator()
Dim qrCodeData = generator.CreateQrCode("SHIP-12345", QRCodeGenerator.ECCLevel.M)
Dim qrCode As New PngByteQRCode(qrCodeData)
File.WriteAllBytes("qr.png", qrCode.GetGraphic(10))
' Now the shipping team asks for Code 128 — add NetBarcode
' Now the warehouse needs to scan barcodes — add ZXing.Net
' Now a report needs a barcode in a PDF — add a PDF library
' Each addition: new namespace, new API, new maintenance cycle
IronBarcode, üretim, okuma ve PDF entegrasyonunu tek bir API altında birleştirir:
//IronBarcode— one library covers all of the above
using IronBarCode;
// Generate QR
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.QRCode)
.SaveAsPng("qr.png");
// Generate Code 128 — same API
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128)
.SaveAsPng("label.png");
// Read a barcode from an image — built in
var results = BarcodeReader.Read("incoming.png");
//IronBarcode— one library covers all of the above
using IronBarCode;
// Generate QR
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.QRCode)
.SaveAsPng("qr.png");
// Generate Code 128 — same API
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128)
.SaveAsPng("label.png");
// Read a barcode from an image — built in
var results = BarcodeReader.Read("incoming.png");
Imports IronBarCode
' Generate QR
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.QRCode).SaveAsPng("qr.png")
' Generate Code 128 — same API
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128).SaveAsPng("label.png")
' Read a barcode from an image — built in
Dim results = BarcodeReader.Read("incoming.png")
IronBarcode ileQRCoderKarşılaştırması: Özellik Karşılaştırması
| Özellik | QRCoder | IronBarcode |
|---|---|---|
| QR Kod Üretimi | Evet — mükemmel | Evet |
| Mikro QR | Evet | Hayır |
| Code 128 / Code 39 | Hayır | Evet |
| EAN-13 / UPC-A | Hayır | Evet |
| DataMatrix | Hayır | Evet |
| PDF417 | Hayır | Evet |
| Aztek | Hayır | Evet |
| Toplam Formatlar | 1 | 50+ |
| Barkod Okuma | Hayır | Evet — otomatik algılama |
| PDF Barkod Çıkartılması | Hayır | Evet |
| PDF Barkod Damgalama | Hayır | Evet |
| Logo Gömme | Evet | Evet |
| Renk Özelleştirme | Evet | Evet |
| SVG Çıkışı | Evet | Evet |
| PayloadGenerator Yardımcıları | Evet | Hayır — manuel string oluşturma |
| Sıfır Harici Bağımlılık | Evet | Kendi içinde tamamlanmış |
| Lisans | MIT — kısıtlamasız | Ticari — Lite katmanı tek bir geliştiriciyi kapsar |
Hızlı Başlangıç: QRCoder'dan IronBarcode'a Göç
Adım 1: NuGet Paketini Değiştirin
Projeden QRCoder'ı kaldırın:
dotnet remove package QRCoder
dotnet remove package QRCoder
IronBarcode'u kurun:
dotnet add package IronBarcode
dotnet add package IronBarcode
Proje, barkod okuma içinQRCoderile birlikte ZXing.Net kullanıyorsa, bu paket de bu aşamada kaldırılabilir:
dotnet remove package ZXing.Net
dotnet remove package ZXing.Net
Adım 2: Ad Alanlarını Güncelleyin
QRCoder ad alanı eklemelerini IronBarcode ad alanı ile değiştirin:
// Before (QRCoder)
using QRCoder;
// After (IronBarcode)
using IronBarCode;
// Before (QRCoder)
using QRCoder;
// After (IronBarcode)
using IronBarCode;
' Before (QRCoder)
Imports QRCoder
' After (IronBarcode)
Imports IronBarCode
Adım 3: Lisansa İzin Verin
Lisans başlatmasını uygulama başlangıcına ekleyin — Program.cs, Startup.cs veya bir statik kurucu:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Kayıt olmadan ücretsiz bir deneme anahtarı mevcuttur. Üretim dağıtımları için satın alınmış bir lisans gereklidir.
Kod Göç Örnekleri
Temel QR Kod Üretimi
En yaygınQRCoderdeseni üç nesne gerektirir: bir QRCodeGenerator örneği, bir QRCodeData ara nesne ve PngByteQRCode gibi bir render sınıfı. IronBarcode'da, tek bir statik çağrı bu zinciri değiştirir.
QRCoder Yaklaşımı:
using QRCoder;
public class BarcodeService
{
private readonly QRCodeGenerator _generator = new QRCodeGenerator();
public byte[] GenerateQR(string content)
{
var qrCodeData = _generator.CreateQrCode(content, QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrCodeData);
return qrCode.GetGraphic(10); // 10px per module
}
}
using QRCoder;
public class BarcodeService
{
private readonly QRCodeGenerator _generator = new QRCodeGenerator();
public byte[] GenerateQR(string content)
{
var qrCodeData = _generator.CreateQrCode(content, QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrCodeData);
return qrCode.GetGraphic(10); // 10px per module
}
}
Imports QRCoder
Public Class BarcodeService
Private ReadOnly _generator As New QRCodeGenerator()
Public Function GenerateQR(content As String) As Byte()
Dim qrCodeData = _generator.CreateQrCode(content, QRCodeGenerator.ECCLevel.M)
Dim qrCode = New PngByteQRCode(qrCodeData)
Return qrCode.GetGraphic(10) ' 10px per module
End Function
End Class
IronBarcode Yaklaşımı:
using IronBarCode;
public class BarcodeService
{
public byte[] GenerateQR(string content)
{
return BarcodeWriter.CreateBarcode(content, BarcodeEncoding.QRCode)
.ResizeTo(200, 200)
.ToPngBinaryData();
}
}
using IronBarCode;
public class BarcodeService
{
public byte[] GenerateQR(string content)
{
return BarcodeWriter.CreateBarcode(content, BarcodeEncoding.QRCode)
.ResizeTo(200, 200)
.ToPngBinaryData();
}
}
Imports IronBarCode
Public Class BarcodeService
Public Function GenerateQR(content As String) As Byte()
Return BarcodeWriter.CreateBarcode(content, BarcodeEncoding.QRCode) _
.ResizeTo(200, 200) _
.ToPngBinaryData()
End Function
End Class
BarcodeWriter, statik bir sınıftır — bir örnek gerektirmez ve ara veri nesnesi yoktur. ResizeTo(width, height) yöntemi, QRCoder'ın GetGraphic'da kabul ettiği modül başına piksel tam sayı değerini değiştirir. QRCoder, çıktıyı modül sayısına göre boyutlandırır (örneğin, modül başına 10px görüntü için GetGraphic(10)),IronBarcode ise mutlak piksel boyutları alır.
QR Kodlarını Dosyaya Kaydetme
QRCoder, bellekte olan baytları dosya çıkışından yalnızca terminal adımı ile ayırır — işleyici zinciri aynıdır.IronBarcode aynı zincirde çeşitli terminal yöntemleri kullanır.
QRCoder Yaklaşımı:
using QRCoder;
using System.IO;
var generator = new QRCodeGenerator();
var qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var pngBytes = new PngByteQRCode(qrCodeData).GetGraphic(10);
File.WriteAllBytes("output.png", pngBytes);
using QRCoder;
using System.IO;
var generator = new QRCodeGenerator();
var qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var pngBytes = new PngByteQRCode(qrCodeData).GetGraphic(10);
File.WriteAllBytes("output.png", pngBytes);
Imports QRCoder
Imports System.IO
Dim generator As New QRCodeGenerator()
Dim qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)
Dim pngBytes = New PngByteQRCode(qrCodeData).GetGraphic(10)
File.WriteAllBytes("output.png", pngBytes)
IronBarcode Yaklaşımı:
using IronBarCode;
// Save directly — no intermediate byte array needed
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.ResizeTo(300, 300)
.SaveAsPng("output.png");
// Or obtain bytes for in-memory use
byte[] pngBytes = BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.ResizeTo(300, 300)
.ToPngBinaryData();
using IronBarCode;
// Save directly — no intermediate byte array needed
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.ResizeTo(300, 300)
.SaveAsPng("output.png");
// Or obtain bytes for in-memory use
byte[] pngBytes = BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.ResizeTo(300, 300)
.ToPngBinaryData();
Imports IronBarCode
' Save directly — no intermediate byte array needed
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
.ResizeTo(300, 300) _
.SaveAsPng("output.png")
' Or obtain bytes for in-memory use
Dim pngBytes As Byte() = BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
.ResizeTo(300, 300) _
.ToPngBinaryData()
SaveAsPng yöntemi, doğrudan diske yazan bir terminaldir. ToPngBinaryData, akış, HTTP yanıtları veya veritabanı depolama için bir byte[] döndürür.
SVG Çıktısı
QRCoder Yaklaşımı:
using QRCoder;
using System.IO;
var generator = new QRCodeGenerator();
var qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
string svgContent = new SvgQRCode(qrCodeData).GetGraphic(10);
File.WriteAllText("output.svg", svgContent);
using QRCoder;
using System.IO;
var generator = new QRCodeGenerator();
var qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
string svgContent = new SvgQRCode(qrCodeData).GetGraphic(10);
File.WriteAllText("output.svg", svgContent);
Imports QRCoder
Imports System.IO
Dim generator As New QRCodeGenerator()
Dim qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)
Dim svgContent As String = New SvgQRCode(qrCodeData).GetGraphic(10)
File.WriteAllText("output.svg", svgContent)
IronBarcode Yaklaşımı:
using IronBarCode;
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsImage("output.svg");
using IronBarCode;
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsImage("output.svg");
Imports IronBarCode
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
.SaveAsImage("output.svg")
SvgQRCode render sınıfı ve GetGraphic çağrısı, SaveAsImage terminal yöntemine tek bir hamlede indirgenir (bir .svg uzantısı geçmek SVG çıktısı üretir).
Hata Düzeltme Düzeyi Eşleme
QRCoder, her CreateQrCode çağrısında QRCodeGenerator.ECCLevel enumunu kullanarak açık ECC seçimi gerektirir. IronBarcode, BarcodeWriter.CreateBarcode kullanırken mantıklı bir varsayılan uygular ve QRCodeWriter.QrErrorCorrectionLevel ile açık kontrol imkanı sunar.
QRCoder Yaklaşımı:
using QRCoder;
var generator = new QRCodeGenerator();
// Medium — suitable for most generation without logos
var dataMedium = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
// High — required when a logo will occlude part of the code
var dataHigh = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H);
using QRCoder;
var generator = new QRCodeGenerator();
// Medium — suitable for most generation without logos
var dataMedium = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
// High — required when a logo will occlude part of the code
var dataHigh = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H);
Imports QRCoder
Dim generator As New QRCodeGenerator()
' Medium — suitable for most generation without logos
Dim dataMedium = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)
' High — required when a logo will occlude part of the code
Dim dataHigh = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H)
IronBarcode Yaklaşımı:
using IronBarCode;
// Default — equivalent to Medium, applied automatically
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsPng("default-ecc.png");
// Explicit level via QRCodeWriter
var qr = QRCodeWriter.CreateQrCode(
"https://example.com",
500,
QRCodeWriter.QrErrorCorrectionLevel.Highest
);
qr.SaveAsPng("high-ecc.png");
using IronBarCode;
// Default — equivalent to Medium, applied automatically
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsPng("default-ecc.png");
// Explicit level via QRCodeWriter
var qr = QRCodeWriter.CreateQrCode(
"https://example.com",
500,
QRCodeWriter.QrErrorCorrectionLevel.Highest
);
qr.SaveAsPng("high-ecc.png");
Imports IronBarCode
' Default — equivalent to Medium, applied automatically
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
.SaveAsPng("default-ecc.png")
' Explicit level via QRCodeWriter
Dim qr = QRCodeWriter.CreateQrCode( _
"https://example.com", _
500, _
QRCodeWriter.QrErrorCorrectionLevel.Highest _
)
qr.SaveAsPng("high-ecc.png")
Seviye eşlemesi şu şekildedir: ECCLevel.L → Low, ECCLevel.M → Medium, ECCLevel.Q → High, ECCLevel.H → Highest.
Logo Gömme
Her iki kütüphane de QR kodlarında logo gömmeyi destekler. QRCoder, bunu System.Drawing.Bitmap parametreleri ile QRCode render sınıfı (şu değil: PngByteQRCode) üzerinden yönlendirir. IronBarcode, hem URL hem de logo için dosya yollarını kabul eden bir özel fabrika yöntemi olarak QRCodeWriter.CreateQrCodeWithLogo() sağlar. QR kodu stil özelleştirme kılavuzu logo boyutlandırma, konumlandırma ve renk kombinasyon seçeneklerini kapsar.
QRCoder Yaklaşımı:
using QRCoder;
using System.Drawing;
using System.Drawing.Imaging;
var generator = new QRCodeGenerator();
// ECCLevel.H is required — the logo occludes part of the code
var qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H);
var qrCode = new QRCode(qrCodeData);
var logoBitmap = new Bitmap("logo.png");
var qrBitmap = qrCode.GetGraphic(10, Color.Black, Color.White, logoBitmap);
qrBitmap.Save("qr-logo.png", ImageFormat.Png);
using QRCoder;
using System.Drawing;
using System.Drawing.Imaging;
var generator = new QRCodeGenerator();
// ECCLevel.H is required — the logo occludes part of the code
var qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H);
var qrCode = new QRCode(qrCodeData);
var logoBitmap = new Bitmap("logo.png");
var qrBitmap = qrCode.GetGraphic(10, Color.Black, Color.White, logoBitmap);
qrBitmap.Save("qr-logo.png", ImageFormat.Png);
Imports QRCoder
Imports System.Drawing
Imports System.Drawing.Imaging
Dim generator As New QRCodeGenerator()
' ECCLevel.H is required — the logo occludes part of the code
Dim qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H)
Dim qrCode As New QRCode(qrCodeData)
Dim logoBitmap As New Bitmap("logo.png")
Dim qrBitmap = qrCode.GetGraphic(10, Color.Black, Color.White, logoBitmap)
qrBitmap.Save("qr-logo.png", ImageFormat.Png)
IronBarcode Yaklaşımı:
using IronBarCode;
QRCodeWriter.CreateQrCodeWithLogo("https://example.com", "logo.png", 500)
.SaveAsPng("qr-logo.png");
using IronBarCode;
QRCodeWriter.CreateQrCodeWithLogo("https://example.com", "logo.png", 500)
.SaveAsPng("qr-logo.png");
Imports IronBarCode
QRCodeWriter.CreateQrCodeWithLogo("https://example.com", "logo.png", 500) _
.SaveAsPng("qr-logo.png")
System.Drawing.Bitmap bağımlılığı kaldırıldı — CreateQrCodeWithLogo hem içerik hem de logo resmi için dosya yolu dizgilerini kabul eder. Hata düzeltme, logo yerleştirme için gereken seviyeye otomatik olarak ayarlanır; açık ECC yapılandırması gerekmez.
PayloadGenerator.WiFi Göçü
QRCoder'ın PayloadGenerator.WiFi, standart WiFi QR yükü dizgilerini biçimlendirir. Çıktı formatı, QR kodu spesifikasyonu tarafından tanımlanmış genel bir standarttır (WIFI:T:{auth};S:{ssid};P:{password};;). Göç sırasında, bu dizgileri doğrudan oluşturabilirsiniz.
QRCoder Yaklaşımı:
using QRCoder;
var wifi = new PayloadGenerator.WiFi(
ssid: "OfficeNetwork",
password: "SecurePass123",
authenticationMode: PayloadGenerator.WiFi.Authentication.WPA
);
// wifi.ToString() produces: WIFI:T:WPA;S:OfficeNetwork;P:SecurePass123;;
var generator = new QRCodeGenerator();
var qrData = generator.CreateQrCode(wifi.ToString(), QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrData);
System.IO.File.WriteAllBytes("wifi.png", qrCode.GetGraphic(10));
using QRCoder;
var wifi = new PayloadGenerator.WiFi(
ssid: "OfficeNetwork",
password: "SecurePass123",
authenticationMode: PayloadGenerator.WiFi.Authentication.WPA
);
// wifi.ToString() produces: WIFI:T:WPA;S:OfficeNetwork;P:SecurePass123;;
var generator = new QRCodeGenerator();
var qrData = generator.CreateQrCode(wifi.ToString(), QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrData);
System.IO.File.WriteAllBytes("wifi.png", qrCode.GetGraphic(10));
Imports QRCoder
Dim wifi = New PayloadGenerator.WiFi(
ssid:="OfficeNetwork",
password:="SecurePass123",
authenticationMode:=PayloadGenerator.WiFi.Authentication.WPA
)
' wifi.ToString() produces: WIFI:T:WPA;S:OfficeNetwork;P:SecurePass123;;
Dim generator = New QRCodeGenerator()
Dim qrData = generator.CreateQrCode(wifi.ToString(), QRCodeGenerator.ECCLevel.M)
Dim qrCode = New PngByteQRCode(qrData)
System.IO.File.WriteAllBytes("wifi.png", qrCode.GetGraphic(10))
IronBarcode Yaklaşımı:
using IronBarCode;
// Construct the standard WiFi QR string directly
string wifiPayload = "WIFI:T:WPA;S:OfficeNetwork;P:SecurePass123;;";
BarcodeWriter.CreateBarcode(wifiPayload, BarcodeEncoding.QRCode)
.ResizeTo(300, 300)
.SaveAsPng("wifi.png");
using IronBarCode;
// Construct the standard WiFi QR string directly
string wifiPayload = "WIFI:T:WPA;S:OfficeNetwork;P:SecurePass123;;";
BarcodeWriter.CreateBarcode(wifiPayload, BarcodeEncoding.QRCode)
.ResizeTo(300, 300)
.SaveAsPng("wifi.png");
Imports IronBarCode
' Construct the standard WiFi QR string directly
Dim wifiPayload As String = "WIFI:T:WPA;S:OfficeNetwork;P:SecurePass123;;"
BarcodeWriter.CreateBarcode(wifiPayload, BarcodeEncoding.QRCode) _
.ResizeTo(300, 300) _
.SaveAsPng("wifi.png")
Bir çok PayloadGenerator türünü kullanan ekipler için (vCard, CalendarEvent, Geo, SMS gibi) yaklaşım aynıdır: her üreticinin ürettiği biçimlendirilmiş dizeyi, .ToString() çıktısını kullanarak belirleyin, ardından bu dizeyi doğrudan veya küçük bir statik yardımcı yöntem aracılığıyla oluşturun.
QRCoder API'den IronBarcode'a Haritalama Başvuru Kılavuzu
| QRCoder | IronBarcode | Notlar |
|---|---|---|
new QRCodeGenerator() |
Statik sınıf — örnek yok | BarcodeWriter herhangi bir örnek gerektirmez |
qrGenerator.CreateQrCode(data, ECCLevel.M) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode) |
Doğrudan değiştirme |
new PngByteQRCode(qrCodeData) |
Gerekli değil | Kaplama, akıllı zincirin bir parçasıdır |
qrCode.GetGraphic(20), byte[] döner |
.ToPngBinaryData() |
Boyut .ResizeTo(w, h) ile |
File.WriteAllBytes(path, bytes) deseni |
.SaveAsPng(path) |
GeneratedBarcode üzerindeki terminal yöntemi |
new SvgQRCode(qrCodeData).GetGraphic(10) |
.SaveAsImage(path) |
SVG çıkışı için .svg uzantısını geçin |
new QRCode(qrCodeData).GetGraphic(...) |
QRCodeWriter.CreateQrCode(data, size, level) |
Logo ve renk kişiselleştirme için kullanılır |
QRCodeGenerator.ECCLevel.L |
QRCodeWriter.QrErrorCorrectionLevel.Low |
|
QRCodeGenerator.ECCLevel.M |
QRCodeWriter.QrErrorCorrectionLevel.Medium |
Belirtilmediğinde varsayılan |
QRCodeGenerator.ECCLevel.Q |
QRCodeWriter.QrErrorCorrectionLevel.High |
|
QRCodeGenerator.ECCLevel.H |
QRCodeWriter.QrErrorCorrectionLevel.Highest |
Logo gömme için gereklidir |
PayloadGenerator.WiFi(...).ToString() |
"WIFI:T:WPA;S:{ssid};P:{pass};;" |
Standart dizgiyi doğrudan oluşturun |
PayloadGenerator.ContactData(...).ToString() |
"BEGIN:VCARD\n..." |
vCard, bir genel standarttır |
| Okuma API'si yok | BarcodeReader.Read(path) |
Yeni hak yeteneği — ayrı bir kütüphane yok |
| Yalnızca QR formatı | 50'den fazla format BarcodeEncoding.* ile |
Yeni özellik |
Yaygın Göç Sorunları ve Çözümleri
Sorun 1: PayloadGenerator Dizi Formatı Değişikliği
QRCoder: PayloadGenerator.WiFi, PayloadGenerator.ContactData ve diğer yardımcılar biçimlendirilmiş dizgileri otomatik olarak üretir. Kod yardımcı nesnenin .ToString() çıktısını CreateQrCode'a geçirir.
Çözüm: Her PayloadGenerator türünün ürettiği dizgiyi belirleyin — biçimi QR kodu spesifikasyonunda belgelenmiştir ve yeniden üretmek basittir. WiFi için: WIFI:T:WPA;S:{ssid};P:{password};;. vCard için: standart BEGIN:VCARD / END:VCARD blokları. Birçok çağrı noktası aynı yük türünü kullanıyorsa, statik yardımcı yöntemler yazın:
public static string WifiPayload(string ssid, string password, string auth = "WPA")
=> $"WIFI:T:{auth};S:{ssid};P:{password};;";
public static string WifiPayload(string ssid, string password, string auth = "WPA")
=> $"WIFI:T:{auth};S:{ssid};P:{password};;";
Public Shared Function WifiPayload(ssid As String, password As String, Optional auth As String = "WPA") As String
Return $"WIFI:T:{auth};S:{ssid};P:{password};;"
End Function
Sorun 2: ECCLevel Enum Eşleme
QRCoder: QRCodeGenerator.ECCLevel, L, M, Q, H değerlerine sahip iç içe birenumdir. Her CreateQrCode çağrısında gerekli bir parametredir.
Çözüm: Her bir değeri kendi QRCodeWriter.QrErrorCorrectionLevel eşdeğerine eşleyin QRCodeWriter yolunu kullanırken. BarcodeWriter.CreateBarcode kullanıldığında, ECC seviyesi otomatik olarak orta olarak varsayılır ve hiçbir parametre gerektirmez. Her çağrı noktasını güncelleyin:
//QRCoderECCLevel.H →IronBarcode QrErrorCorrectionLevel.Highest
var qr = QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest);
//QRCoderECCLevel.M →IronBarcode default (no parameter needed)
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode);
//QRCoderECCLevel.H →IronBarcode QrErrorCorrectionLevel.Highest
var qr = QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest);
//QRCoderECCLevel.M →IronBarcode default (no parameter needed)
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode);
'QRCoderECCLevel.H →IronBarcode QrErrorCorrectionLevel.Highest
Dim qr = QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
'QRCoderECCLevel.M →IronBarcode default (no parameter needed)
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)
Sorun 3: İşleyici Sınıfı Kaldırma
QRCoder: Her çıkış formatı, kendi render sınıfı örneklemesini gerektirir — PngByteQRCode, SvgQRCode, AsciiQRCode, Base64QRCode, QRCode. Bu sınıflar QRCodeData kabul eder ve farklı dönüş türleriyle GetGraphic sunar.
Çözüm: Tüm işleyici sınıfı örneklemelerini kaldırın. IronBarcode, format çıkışını akıllı zincirin terminal yöntemlerinde oluşturur. new PngByteQRCode(data).GetGraphic(n)'yı .ToPngBinaryData() ile değiştirin .ResizeTo()'dan sonra. new SvgQRCode(data).GetGraphic(n)'yi .SaveAsImage(path) ile değiştirin (bir .svg uzantısını geçerek). QRCodeData ara nesnesi de ortadan kalkar — IronBarcode'da gerekli değildir.
Sorun 4: PngByteQRCode Kaldırma ve Modül Tabanlı Boyutlandırma
QRCoder: PngByteQRCode.GetGraphic(int pixelsPerModule), çıktı boyutunu QR modülü başına piksel sayısına göre ayarlar. Ortaya çıkan görüntü boyutları, içerik uzunluğu ve ECC seviyesine göre değişen modül sayısına bağlıdır.
Çözüm: Modül tabanlı boyutlandırmayı, mutlak piksel boyutları için ResizeTo(int width, int height) ile değiştirin. Kodunuz modül sayısından beklenen çıkış boyutunu dinamik olarak hesapladıysa, çıktınızı gereksinimlerinize uygun sabit bir hedef boyuta geçin:
// Before: GetGraphic(20) — output size varies with content
var bytes = new PngByteQRCode(qrData).GetGraphic(20);
// After: fixed 400×400 regardless of content
byte[] bytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)
.ResizeTo(400, 400)
.ToPngBinaryData();
// Before: GetGraphic(20) — output size varies with content
var bytes = new PngByteQRCode(qrData).GetGraphic(20);
// After: fixed 400×400 regardless of content
byte[] bytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)
.ResizeTo(400, 400)
.ToPngBinaryData();
Imports System
' Before: GetGraphic(20) — output size varies with content
Dim bytes = New PngByteQRCode(qrData).GetGraphic(20)
' After: fixed 400×400 regardless of content
Dim bytes As Byte() = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode) _
.ResizeTo(400, 400) _
.ToPngBinaryData()
QRCoder Göç Kontrol Listesi
Geçiş Öncesi Görevler
Herhangi bir değişiklik yapmadan önce tümQRCoderkullanımını kod tabanında inceleyin:
# Find allQRCodernamespace imports
grep -r "using QRCoder" --include="*.cs" .
# Find all generator and renderer instantiations
grep -r "QRCodeGenerator\|PngByteQRCode\|SvgQRCode\|AsciiQRCode\|QRCode\b" --include="*.cs" .
# Find all PayloadGenerator usages
grep -r "PayloadGenerator\." --include="*.cs" .
# Find ECCLevel references
grep -r "ECCLevel\." --include="*.cs" .
# Find ZXing.Net usage to remove at the same time
grep -r "using ZXing" --include="*.cs" .
# Find allQRCodernamespace imports
grep -r "using QRCoder" --include="*.cs" .
# Find all generator and renderer instantiations
grep -r "QRCodeGenerator\|PngByteQRCode\|SvgQRCode\|AsciiQRCode\|QRCode\b" --include="*.cs" .
# Find all PayloadGenerator usages
grep -r "PayloadGenerator\." --include="*.cs" .
# Find ECCLevel references
grep -r "ECCLevel\." --include="*.cs" .
# Find ZXing.Net usage to remove at the same time
grep -r "using ZXing" --include="*.cs" .
- Kullanılan tüm
PayloadGeneratortürlerini belgeleyin ve dizgi çıkış formatlarını not edin - Tüm ECC seviye değerleri ve çağrı konumlarını not edin -QRCoderile birlikte, çözümleme için eşleşmiş herhangi bir ZXing.Net okuma kodunu tespit edin — bu aynı zamanda değiştirilebilir
- Bir IronBarcode lisans anahtarı edinin (kayıtsız deneme anahtarları mevcuttur)
Kod Güncelleme Görevleri
dotnet remove package QRCoderçalıştırın- YalnızcaQRCoderile birlikte okumak için kullanıldıysa,
dotnet remove package ZXing.Netçalıştırın dotnet add package IronBarcodeçalıştırın- Uygulama başlatımına
IronBarCode.License.LicenseKey = "YOUR-KEY";ekleyin - Tüm
using QRCoder;ithalatlarınıusing IronBarCode;ile değiştirin - Tüm
new QRCodeGenerator()örnek bildirimlerini kaldırın —BarcodeWriterstatiktir - Tüm
generator.CreateQrCode(data, ECCLevel.X)+ render zincir desenleriniBarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)zincirleriyle değiştirin .GetGraphic(n)çağrılarını.ToPngBinaryData()ile değiştirin ve terminalden önce.ResizeTo(w, h)ekleyinFile.WriteAllBytes(path, bytes)kaydetme desenlerini.SaveAsPng(path)terminal yöntemleriyle değiştirinnew SvgQRCode(data).GetGraphic(n)'yı.SaveAsImage(path)ile değiştirin (bir.svguzantısı geçin)- Tüm
PayloadGenerator.WiFi(...)ve diğer yardımcı örneklemelerini doğrudan format dizeyleriyle değiştirin - Her
QRCodeGenerator.ECCLeveldeğerini kendiQRCodeWriter.QrErrorCorrectionLeveleşdeğerine eşleyin - Herhangi bir ZXing.Net
BarcodeReaderGeneric.Decode(bitmap)çağrısınıBarcodeReader.Read(path)ile değiştirin - Logo gömme için
new QRCode(data).GetGraphic(n, ..., logoBitmap)'yiQRCodeWriter.CreateQrCodeWithLogo(data, logoPath, size)ile değiştirin
Geçiş Sonrası Testler
- Üretilen tüm QR kodlarını en az iki bağımsız QR kodu tarayıcı uygulaması ile tarayarak okunabilirliklerini doğrulayın
- Logo gömülmüş QR kodlarının doğru tarandığını doğrulayın — hata düzeltme seviyesinin
Highestolduğunu onaylayın - Görünüm tutarlılığı gereken yerlerde üretilen kodların görsel çıktısını, göç öncesi örneklerle karşılaştırın
- Tüm
PayloadGeneratordeğişimlerini test edin — WiFi, vCard ve diğer yük dizgilerinin hedef cihazlarda doğru çözüldüğünü onaylayın - ZXing.Net de kaldırıldıysa, tüm barkod okuma yollarının
BarcodeReader.Readüzerinden çalıştığını doğrulayın - Uygulamayı temiz bir ortamda çalıştırarak kalanQRCoderveya ZXing.Net referanslarının bağlanma hatalarına neden olmadığını doğrulayın -IronBarcode lisans anahtarının üretim ve sahne ortamlarında doğru yüklendiğini doğrulayın
IronBarcode'a Geçmenin Temel Faydaları
Tüm Barkod İşlemleri İçin Tek API: Geçişten sonra, her barkod görevi — oluşturma, okuma, PDF damgalama — aynı IronBarCode ad alanını ve aynı giriş noktalarını kullanır. Projeye katılan geliştiriciler, üç yerine bir API öğrenir. Barkod alt sistemi genelinde kod incelemesi tutarlı hale gelir. Dokümantasyon aramaları merkezileştirilmiştir.
İkinci Kitaplık Olmadan Barkod Okuma: BarcodeReader.Read, görüntü dosyalarını, PDF sayfalarını, akışları ve bellek içi bit eşlemlerini otomatik format algılamasıyla işler. ZXing.Net gerektiren okuma yeteneği - format belirtim gereksinimleri ve iş parçacığı güvenliği düşünceleri ile - tek bir yöntem çağrısı ile hemen kullanılabilir. görüntülerden barkod okuma rehberi çoklu barkod algılama, görüntü ön işleme ve PDF sayfa taramayı kapsar.
Yeni Bağımlılıklar Olmadan Format Genişletmesi: Geçişten sonra Code 128, EAN-13, DataMatrix,PDF417veya desteklenen herhangi başka bir format eklemek için sadece farklı bir BarcodeEncoding parametre değeri gerekir. Yüklenecek yeni paket yok, öğrenilecek yeni API yok ve yönetilecek sürüm uyumluluğu sorunları yok. Yeni format gereksinimleri, yeni bir kütüphane entegrasyonu yerine tek satır değişikliği haline gelir.
Basitleştirilmiş QR Kod Özelleştirmesi: Logo gömme, renk değişiklikleri ve sessiz bölge kontrolü QRCodeWriter sonucunda adı geçen yöntemler olarak mevcuttur. QRCoder'ın logo gömme gereksinimi olan System.Drawing.Bitmap bağımlılığı, basit bir dosya yolu dizgesiyle değiştirilmiştir. QR kodu stil özelleştirme rehberi mevcut tüm özelleştirme seçeneklerini belgelemektedir.
PDF Entegrasyonu Dahili: Gelen PDF belgelerinden barkodlar okunabilir ve mevcut PDF dosyalarına eklenebilir bir PDF kütüphanesi eklemeye gerek kalmadan. Ayrı bir PDF bağımlılığı gerektiren belge işleme iş akışları artık barkod ve PDF işlevselliğine konsolide olmuştur.
Uzun Vadeli Bakım Yükü Azaldı: Üç veya dört bağımsız paketten birine geçmek, birden fazla yayımlama döngüsünü izleme, kütüphanelerarası sürüm çakışmalarını çözme ve .NET sürümleri geliştiğinde birden fazla test takımını güncelleme maliyet yükünü ortadan kaldırır. Barkod alt sisteminin bakım maliyeti tek bir paket bağımlılığına indirgenir.
Sıkça Sorulan Sorular
Neden QRCoder.NET'den IronBarcode'a geçiş yapmalıyım?
Yaygın nedenler arasında lisanslamanın basitleştirilmesi (SDK + runtime anahtar karmaşıklığının kaldırılması), veri geçiş limitlerinin ortadan kaldırılması, yerel PDF desteği kazanılması, Docker/CI/CD dağıtımının iyileştirilmesi ve üretim kodunda API tekrarlama azalması yer alır.
QRCoder 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.
QRCoder.NET'den IronBarcode'a geçiş sırasında ne kadar kod değişiyor?
Çoğu geçiş daha az kod satırıyla sonuçlanır. Lisanslama tekrarlamaları, örnek oluşturucular ve açık format yapılandırması kaldırılır. Temel okuma/yazma işlemleri, daha temiz sonuç nesneleriyle daha kısa IronBarcode eşdeğerlerine dönüştürülür.
Geçiş sırasında hem QRCoder.NET hem de IronBarcode'un yüklü kalması gerekiyor mu?
Hayır. Çoğu geçiş doğrudan değişim yapılır, paralel bir işletim yerine geçer. Bir hizmet sınıfını bir seferde geçirin, NuGet referansını değiştirin ve sonraki sınıfa geçmeden önce başlatma ve API çağrı desenlerini güncelleyin.
IronBarcode için NuGet paketi adı nedir?
Paket 'IronBarCode' (büyük B ve C harfleriyle). 'Install-Package IronBarCode' veya 'dotnet add package IronBarCode' ile kurun. Kodda kullanılan yönerge 'using IronBarCode;' şeklindedir.
IronBarcode, Docker dağıtımını QRCoder.NET'e kıyasla nasıl kolaylaştırır?
IronBarcode, harici SDK dosyaları veya montajlı lisans yapılandırması olmayan bir NuGet paketidir. Docker'da, IRONBARCODE_LICENSE_KEY ortam değişkenini ayarlayın ve paket lisans doğrulamasını başlangıçta kendi kendine yapar.
IronBarcode, QRCoder'dan göç ettikten sonra tüm barkod formatlarını otomatik olarak algılıyor mu?
Evet. IronBarcode, desteklenen tüm formatlardaki sembolojiyi otomatik olarak algılar. Açık BarcodeTypes sayımı gerekli değildir. Format zaten biliniyorsa ve performans önemliyse, BarcodeReaderOptions arama alanını optimize etmek için sınırlamayı sağlar.
IronBarcode, ayrı bir kütüphane olmadan PDF'lerden barkod okuyabiliyor mu?
Evet. BarcodeReader.Read("document.pdf") PDF dosyalarını yerel olarak işlemler. Sonuçlar her barkod için SayfaNumarası, Format, Değer ve Güven içerir. Harici bir PDF render adımı gerekmez.
IronBarcode, paralel barkod işlemeyi nasıl yönetiyor?
IronBarcode'un statik yöntemleri durumsuz ve thread-safe'dir. Dağıtılmış dosya listeleri üzerinde per-thread örnek yönetimi olmadan doğrudan Parallel.ForEach kullanın. BarcodeReaderOptions.MaxParallelThreads, iç thread bütçesini kontrol eder.
QRCoder.NET'den IronBarcode'a geçiş yaparken hangi sonuç özellikleri değişiyor?
Yaygın yeniden adlandırmalar: BarcodeValue, Value olur; BarcodeType, Format olur. IronBarcode sonuçları ayrıca Güven ve SayfaNumarası ekler. Çözüm çapında arama-değiştirme, mevcut sonuç işleme kodundaki yeniden adlandırmaları ele alır.
Bir CI/CD hattında IronBarcode lisanslamasını nasıl ayarlayabilirim?
IRONBARCODE_LICENSE_KEY'i bir boru hattı sırrı olarak saklayın ve uygulama başlangıç kodunda IronBarCode.License.LicenseKey olarak atayın. Bir sır, geliştirme, test, aşama ve üretim dahil olmak üzere tüm ortamları kapsar.
IronBarcode, özel biçimlendirmeye sahip QR kodu üretimini destekliyor mu?
Evet. QRCodeWriter.CreateQrCode() özelleştirilmiş renkler için ChangeBarCodeColor(), logo yerleştirme için AddBrandLogo(), yapılandırılabilir hata düzeltme seviyeleri ve PNG, JPG, PDF ve akış dahil birden çok çıktı formatını destekler.

