Altbilgi içeriğine atla
VIDEOLAR

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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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
SHELL

IronBarcode'u kurun:

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

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
SHELL

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
$vbLabelText   $csharpLabel

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"
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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()
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

Seviye eşlemesi şu şekildedir: ECCLevel.LLow, ECCLevel.MMedium, ECCLevel.QHigh, ECCLevel.HHighest.

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)
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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))
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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()
$vbLabelText   $csharpLabel

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" .
SHELL
  • Kullanılan tüm PayloadGenerator tü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

  1. dotnet remove package QRCoder çalıştırın
  2. YalnızcaQRCoderile birlikte okumak için kullanıldıysa, dotnet remove package ZXing.Net çalıştırın
  3. dotnet add package IronBarcode çalıştırın
  4. Uygulama başlatımına IronBarCode.License.LicenseKey = "YOUR-KEY"; ekleyin
  5. Tüm using QRCoder; ithalatlarını using IronBarCode; ile değiştirin
  6. Tüm new QRCodeGenerator() örnek bildirimlerini kaldırın — BarcodeWriter statiktir
  7. Tüm generator.CreateQrCode(data, ECCLevel.X) + render zincir desenlerini BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode) zincirleriyle değiştirin
  8. .GetGraphic(n) çağrılarını .ToPngBinaryData() ile değiştirin ve terminalden önce .ResizeTo(w, h) ekleyin
  9. File.WriteAllBytes(path, bytes) kaydetme desenlerini .SaveAsPng(path) terminal yöntemleriyle değiştirin
  10. new SvgQRCode(data).GetGraphic(n)'yı .SaveAsImage(path) ile değiştirin (bir .svg uzantısı geçin)
  11. Tüm PayloadGenerator.WiFi(...) ve diğer yardımcı örneklemelerini doğrudan format dizeyleriyle değiştirin
  12. Her QRCodeGenerator.ECCLevel değerini kendi QRCodeWriter.QrErrorCorrectionLevel eşdeğerine eşleyin
  13. Herhangi bir ZXing.Net BarcodeReaderGeneric.Decode(bitmap) çağrısını BarcodeReader.Read(path) ile değiştirin
  14. Logo gömme için new QRCode(data).GetGraphic(n, ..., logoBitmap)'yi QRCodeWriter.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 Highest olduğ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 PayloadGenerator değ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.

Lütfen dikkate alınNetBarcode,QRCoderve ZXing.NET ilgili sahiplerinin tescilli markalarıdır. Bu site, NetBarcode,QRCoderveya ZXing.NET ile ilişkili, desteklenen veya tarafından finanse edilen değildir. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.

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.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara