C# İçinde Verilerden Barkod Nasıl Yaratılır?
LEADTOOLS Barkod'dan IronBarcode'a Geçiş
Bu kılavuz, IronBarcode'a göçün tüm safhalarını kapsar ve .NET geliştiricileri içinLEADTOOLSBarcode'dan nasıl geçileceğini detaylandırır.LEADTOOLSNuGet paketlerinin ve bir yerel çalıştırma bağımlılığının kaldırılmasını, dosya tabanlıLEADTOOLSlisans başlatma dizisinin bir dize anahtarıyla değiştirilmesini veLEADTOOLSokuma ve yazma desenlerinin IronBarcode'un statik akıcı API'sine çevrilmesini ele alır. Her ana geçiş senaryosu için kod örnekleri, bir API eşleme tablosu, yapılandırılmış bir kontrol listesi ve geçiş sırasında ortaya çıkan sorunlara rehberlik içerir.
LEADTOOLS Barcode'dan Niçin Geçilmeli
Dosya Tabanlı Lisans Dağıtımı:LEADTOOLSlisanslama, uygulamanın çalıştığı her makinede belirli bir yolda diskte fiziksel olarak bulunması gereken bir .LIC dosyasını gerektirir. Geliştirici iş istasyonları, CI oluşturma ajanları, aşama sunucuları ve üretim konteynerleri, uygulamanın başlatılması için dosyanın sağlanmasını gerektirir. Bu, ortam değişkenlerine, gizli yöneticilere ve CI/CD boru hattı yapılandırmasına sorunsuz uyum sağlayan dize tabanlı sırların operasyonel modelinden temel olarak farklıdır. Bir dağıtım topolojisine eklenen her yeni ortam - yeni bir bulut bölgesi, yeni bir Kubernetes düğüm havuzu, yeni geliştirici katılımı - dize tabanlı lisanslamanın gerektirmediği bir dosya sağlama adımı gerektirir.
SDK Yükü:LEADTOOLSbarkod kurulumu, Leadtools, Leadtools.Codecs ve ilgili bağımlılıkları getiren Leadtools.Barcode NuGet paketini gerektirir. PDF barkod çıkarımı Leadtools.Pdf ekler. Windows'ta, MSVC++ 2017 Runtime ayrı bir yerel bağımlılıktır.LEADTOOLSbarkod uygulamasının yayımlanmış çıktısı yaklaşık 148 MB'dir. Sadece barkod okuma veya üretime ihtiyaç duyan uygulamalar, bu özellikler kullanılsın veya kullanılmasın, kapsamlı bir görüntüleme platformunun - OCR altyapısı, format codec mimarisi ve belge görüntüleme yetenekleri - tam ağırlığını taşır.
Eski API Tasarımı:LEADTOOLSbarkod işlemleri, herhangi bir iş yapılabilmesi öncesinde belirli bir sırayla birden çok nesne oluşturulmasını gerektirir. Bir barkod okumak için görüntüyü yüklemek için bir RasterCodecs örneği ve taramak için bir BarcodeEngine örneği gerekir, aranacak formatları belirten bir BarcodeSymbology dizisi ile birlikte. Bir barkod oluşturmak için bir BarcodeData nesnesi oluşturmak, belirli piksel parametreleri ile boş bir RasterImage oluşturmak, arka plan rengini FillCommand kullanarak doldurmak, barkodu ona yazmak ve RasterCodecs ile kaydetmek gerekir. Bu API, döneminin tasarım kalıplarını yansıtır.IronBarcode aynı işlemleri, dosya yollarını doğrudan kabul eden statik yöntem çağrılarıyla gerçekleştirmektedir.
Fiyatlandırma Şeffaflığı: Üretim sunucuları içinLEADTOOLSdağıtım lisansları,LEADTOOLSsatışı üzerinden ayrı olarak fiyatlandırılır ve web sitelerinde yayımlanmaz. Geliştirmeye başlamadan önce tam bir maliyet resmi gerektiren ekipler, LEADTOOLS'un bütçelerine uygun olup olmadığını onaylamadan önce satışla görüşmek zorundadır. IronBarcode, geliştirme ve dağıtımı birlikte kapsayan süresiz bir tek seferlik lisans sunar; ayrı bir üretim lisansı gerektirmez.
Temel Sorun
LEADTOOLS başlatma dizisi bir BarcodeEngine oluşturulmadan önce 20+ satır ve dört doğrulama adımı gerektirir. IronBarcode, tüm diziyi tek bir atama ile değiştirir:
// LEADTOOLS: file path, expiry check, three feature lock checks, engine creation
using Leadtools;
using Leadtools.Barcode;
RasterSupport.SetLicense(
@"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
"your-developer-key-here");
if (RasterSupport.KernelExpired)
throw new InvalidOperationException("LEADTOOLS license has expired");
if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
throw new InvalidOperationException("1D barcode reading is locked");
if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
throw new InvalidOperationException("2D barcode reading is locked");
if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
throw new InvalidOperationException("Barcode writing is locked");
var engine = new BarcodeEngine();
// LEADTOOLS: file path, expiry check, three feature lock checks, engine creation
using Leadtools;
using Leadtools.Barcode;
RasterSupport.SetLicense(
@"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
"your-developer-key-here");
if (RasterSupport.KernelExpired)
throw new InvalidOperationException("LEADTOOLS license has expired");
if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
throw new InvalidOperationException("1D barcode reading is locked");
if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
throw new InvalidOperationException("2D barcode reading is locked");
if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
throw new InvalidOperationException("Barcode writing is locked");
var engine = new BarcodeEngine();
Imports Leadtools
Imports Leadtools.Barcode
' LEADTOOLS: file path, expiry check, three feature lock checks, engine creation
RasterSupport.SetLicense("C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC", "your-developer-key-here")
If RasterSupport.KernelExpired Then
Throw New InvalidOperationException("LEADTOOLS license has expired")
End If
If RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) Then
Throw New InvalidOperationException("1D barcode reading is locked")
End If
If RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) Then
Throw New InvalidOperationException("2D barcode reading is locked")
End If
If RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) Then
Throw New InvalidOperationException("Barcode writing is locked")
End If
Dim engine As New BarcodeEngine()
// IronBarcode: one line, no file required
using IronBarCode;
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
// IronBarcode: one line, no file required
using IronBarCode;
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
Imports IronBarCode
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
IronBarcode vs LEADTOOLS Barcode: Özellik Karşılaştırması
| Özellik | LEADTOOLS Barkod | IronBarcode |
|---|---|---|
| Lisans modeli | Dosya + geliştirici anahtarı | Sadece dize anahtarı |
| NuGet paketleri gerekli | 5+ | 1 |
| Yerel çalışma zamanı bağımlılığı | MSVC++ 2017 (Windows) | None |
| Yayınlanmış çıktı boyutu | ~148 MB | ~39 MB |
| Toplam desteklenen semboji sayısı | 40+ | 50+ |
| Barkod formatını otomatik algılama | Sınırlı | Evet |
| PDF barkod çıkarımı | Ayrı paket gerekli | Yerleşik |
| ML hata düzeltmesi | Hayır | Evet |
| QR kodu logo markalama | Hayır | Evet |
| Docker dağıtımı | Dosya montajı gerekli | Çevre değişkeni |
| Başlatma kodu | 20+ satır | 1 satır |
| API stili | Eski nesne grafiği | Statik akışkan |
| Çapraz platform | Kısmi (yerel bağımlılıklar) | Tam (.NET Standard) |
| Dağıtım lisansı fiyatlandırması | Satışla iletişim (yayımlanmamıştır) | Süresiz satın alıma dahildir |
Hızlı Başlangıç:LEADTOOLSBarkoddan IronBarcode'a Geçiş
Adım 1:LEADTOOLSPaketlerini Kaldırın
Projeden tümLEADTOOLSpaketlerini kaldırın:
dotnet remove package Leadtools.Barcode
dotnet remove package Leadtools
dotnet remove package Leadtools.Codecs
dotnet remove package Leadtools.Codecs.Png
dotnet remove package Leadtools.Codecs.Jpeg
dotnet remove package Leadtools.Barcode
dotnet remove package Leadtools
dotnet remove package Leadtools.Codecs
dotnet remove package Leadtools.Codecs.Png
dotnet remove package Leadtools.Codecs.Jpeg
Barkod çıkarımı için PDF codec eklendiyse:
dotnet remove package Leadtools.Pdf
dotnet remove package Leadtools.Pdf
Windows Server dağıtımlarında, geçiş tamamlandıktan sonra MSVC++ 2017 Runtime sağlama betiklerinden kaldırılabilir.IronBarcode herhangi bir platformda yerel çalışma zamanı bağımlılığı gerektirmez.
2. Adım: IronBarcode'u Kurun
dotnet add package IronBarcode
dotnet add package IronBarcode
Bu tek paket, tüm görüntü formatı desteği, yerel PDF barkod çıkarımı, ML hata düzeltmesi ve desteklenen50+semboji içerir. Ek codec paketleri gerekli değildir.
3. Adım: Lisansı Başlatma
LEADTOOLS başlatma bloğunu tek bir satırla değiştirin. Kod tabanında RasterSupport.SetLicense'e yapılan her çağrıyı bulun — tipik olarak uygulama başlangıcında tam olarak bir tane olacaktır — ve çevresindeki tüm başlatma dizisini değiştirin:
// Before: entireLEADTOOLSinitialization block (20+ lines)
// After:
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Before: entireLEADTOOLSinitialization block (20+ lines)
// After:
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Lisans anahtarı, herhangi bir dizgi yeteneğine sahip yapılandırma mekanizmasından elde edilebilir: bir ortam değişkeni, appsettings.json, Azure Key Vault, AWS Secrets Manager veya bir Kubernetes sırrı. Ortam tabanlı lisans yapılandırması, Docker dağıtım desenleri ve desteklenen tüm yapılandırma yaklaşımları için, lisans anahtar kurulumu dokümantasyonuna bakın.
Kod Göç Örnekleri
Görüntülerden Barcode Okuma
LEADTOOLS, görüntü yüklemeyi barkod taramadan iki ayrı obje katmanına ayırır. Bir RasterCodecs örneği görüntü dosyasını RasterImage içine yükler ve bir BarcodeEngine örneği onu tarar. Arayan kişi ayrıca BarcodeSymbology değerlerinin açık bir dizisini sağlamak zorundadır. dizide listelenmeyen formatlar algılanmayacaktır.
LEADTOOLS Yaklaşımı:
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;
using var codecs = new RasterCodecs();
using var image = codecs.Load("scan.png");
var engine = new BarcodeEngine();
var symbologies = new[]
{
BarcodeSymbology.Code128,
BarcodeSymbology.Code39,
BarcodeSymbology.QR,
BarcodeSymbology.DataMatrix,
BarcodeSymbology.EAN13,
BarcodeSymbology.UPCA
};
var barcodes = engine.Reader.ReadBarcodes(
image,
LogicalRectangle.Empty,
0,
symbologies);
foreach (var barcode in barcodes)
Console.WriteLine($"{barcode.Symbology}: {barcode.Value}");
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;
using var codecs = new RasterCodecs();
using var image = codecs.Load("scan.png");
var engine = new BarcodeEngine();
var symbologies = new[]
{
BarcodeSymbology.Code128,
BarcodeSymbology.Code39,
BarcodeSymbology.QR,
BarcodeSymbology.DataMatrix,
BarcodeSymbology.EAN13,
BarcodeSymbology.UPCA
};
var barcodes = engine.Reader.ReadBarcodes(
image,
LogicalRectangle.Empty,
0,
symbologies);
foreach (var barcode in barcodes)
Console.WriteLine($"{barcode.Symbology}: {barcode.Value}");
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs
Dim codecs As New RasterCodecs()
Using codecs
Dim image = codecs.Load("scan.png")
Using image
Dim engine As New BarcodeEngine()
Dim symbologies = New BarcodeSymbology() {
BarcodeSymbology.Code128,
BarcodeSymbology.Code39,
BarcodeSymbology.QR,
BarcodeSymbology.DataMatrix,
BarcodeSymbology.EAN13,
BarcodeSymbology.UPCA
}
Dim barcodes = engine.Reader.ReadBarcodes(
image,
LogicalRectangle.Empty,
0,
symbologies)
For Each barcode In barcodes
Console.WriteLine($"{barcode.Symbology}: {barcode.Value}")
Next
End Using
End Using
IronBarcode Yaklaşımı:
using IronBarCode;
var results = BarcodeReader.Read("scan.png");
foreach (var result in results)
Console.WriteLine($"{result.Format}: {result.Value}");
using IronBarCode;
var results = BarcodeReader.Read("scan.png");
foreach (var result in results)
Console.WriteLine($"{result.Format}: {result.Value}");
Imports IronBarCode
Dim results = BarcodeReader.Read("scan.png")
For Each result In results
Console.WriteLine($"{result.Format}: {result.Value}")
Next
IronBarcode, dosya yolunu doğrudan kabul eder, görüntüyü dahili olarak yükler ve çağrı yapanın beklenen türleri belirlemesini gerektirmeden, desteklenen tüm50+sembolojilerde formatları otomatik algılar. Gelişmiş yapılandırma için — okuma hızını ayarlama, çoklu barkod algılama ve düşük kaliteli görüntü işleme — görüntülerden barkod okuma kılavuzuna bakın.
Bir Code 128 Barkodu Oluşturma
LEADTOOLS üretimi bir BarcodeData nesnesi oluşturmayı, belirli bellek bayrakları, piksel derinliği ve bayt sırasıyla boş bir RasterImage ayırmayı, görüntüyü bir arka plan rengiyle doldurmayı, barkodu ona yazmayı ve ardından RasterCodecs ile kaydetmeyi gerektirir. IronBarcode, bu adımların tümünü tek bir akıcı yöntem zinciriyle gerçekleştirir.
LEADTOOLS Yaklaşımı:
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;
var engine = new BarcodeEngine();
var barcodeData = new BarcodeData()
{
Symbology = BarcodeSymbology.Code128,
Value = "ITEM-98765",
Bounds = new LeadRect(0, 0, 500, 120)
};
using var image = new RasterImage(
RasterMemoryFlags.Conventional,
500, 120, 24,
RasterByteOrder.Bgr,
RasterViewPerspective.TopLeft,
null, IntPtr.Zero, 0);
new FillCommand(RasterColor.White).Run(image);
engine.Writer.WriteBarcode(image, barcodeData, null);
using var codecs = new RasterCodecs();
codecs.Save(image, "item-barcode.png", RasterImageFormat.Png, 0);
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;
var engine = new BarcodeEngine();
var barcodeData = new BarcodeData()
{
Symbology = BarcodeSymbology.Code128,
Value = "ITEM-98765",
Bounds = new LeadRect(0, 0, 500, 120)
};
using var image = new RasterImage(
RasterMemoryFlags.Conventional,
500, 120, 24,
RasterByteOrder.Bgr,
RasterViewPerspective.TopLeft,
null, IntPtr.Zero, 0);
new FillCommand(RasterColor.White).Run(image);
engine.Writer.WriteBarcode(image, barcodeData, null);
using var codecs = new RasterCodecs();
codecs.Save(image, "item-barcode.png", RasterImageFormat.Png, 0);
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs
Dim engine As New BarcodeEngine()
Dim barcodeData As New BarcodeData() With {
.Symbology = BarcodeSymbology.Code128,
.Value = "ITEM-98765",
.Bounds = New LeadRect(0, 0, 500, 120)
}
Using image As New RasterImage(
RasterMemoryFlags.Conventional,
500, 120, 24,
RasterByteOrder.Bgr,
RasterViewPerspective.TopLeft,
Nothing, IntPtr.Zero, 0)
Dim fillCommand As New FillCommand(RasterColor.White)
fillCommand.Run(image)
engine.Writer.WriteBarcode(image, barcodeData, Nothing)
Using codecs As New RasterCodecs()
codecs.Save(image, "item-barcode.png", RasterImageFormat.Png, 0)
End Using
End Using
IronBarcode Yaklaşımı:
using IronBarCode;
BarcodeWriter.CreateBarcode("ITEM-98765", BarcodeEncoding.Code128)
.ResizeTo(500, 120)
.SaveAsPng("item-barcode.png");
using IronBarCode;
BarcodeWriter.CreateBarcode("ITEM-98765", BarcodeEncoding.Code128)
.ResizeTo(500, 120)
.SaveAsPng("item-barcode.png");
Imports IronBarCode
BarcodeWriter.CreateBarcode("ITEM-98765", BarcodeEncoding.Code128) _
.ResizeTo(500, 120) _
.SaveAsPng("item-barcode.png")
Boyutlandırma, stil ayarlama, kenar boşluğu kontrolü ve desteklenen çıktı formatlarıyla ilgili tam bir geçiş için barkod görüntüleri oluşturma kılavuzuna başvurun.
Logo Markası ile QR Kodu Oluşturma
LEADTOOLS QR kodu oluşturma, diğer barkod türleri gibi aynı çok adımlı RasterImage oluşturma modelini izler. IronBarcode, bir QR kodunun merkezine logo yerleştirmek için özel bir AddBrandLogo yöntemi ile QRCodeWriter sağlar.
LEADTOOLS Yaklaşımı:
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;
var engine = new BarcodeEngine();
var qrData = new BarcodeData()
{
Symbology = BarcodeSymbology.QR,
Value = "https://example.com/product/12345",
Bounds = new LeadRect(0, 0, 400, 400)
};
using var image = new RasterImage(
RasterMemoryFlags.Conventional,
400, 400, 24,
RasterByteOrder.Bgr,
RasterViewPerspective.TopLeft,
null, IntPtr.Zero, 0);
new FillCommand(RasterColor.White).Run(image);
engine.Writer.WriteBarcode(image, qrData, null);
using var codecs = new RasterCodecs();
codecs.Save(image, "product-qr.png", RasterImageFormat.Png, 0);
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;
var engine = new BarcodeEngine();
var qrData = new BarcodeData()
{
Symbology = BarcodeSymbology.QR,
Value = "https://example.com/product/12345",
Bounds = new LeadRect(0, 0, 400, 400)
};
using var image = new RasterImage(
RasterMemoryFlags.Conventional,
400, 400, 24,
RasterByteOrder.Bgr,
RasterViewPerspective.TopLeft,
null, IntPtr.Zero, 0);
new FillCommand(RasterColor.White).Run(image);
engine.Writer.WriteBarcode(image, qrData, null);
using var codecs = new RasterCodecs();
codecs.Save(image, "product-qr.png", RasterImageFormat.Png, 0);
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs
Dim engine As New BarcodeEngine()
Dim qrData As New BarcodeData() With {
.Symbology = BarcodeSymbology.QR,
.Value = "https://example.com/product/12345",
.Bounds = New LeadRect(0, 0, 400, 400)
}
Using image As New RasterImage(
RasterMemoryFlags.Conventional,
400, 400, 24,
RasterByteOrder.Bgr,
RasterViewPerspective.TopLeft,
Nothing, IntPtr.Zero, 0)
Dim fillCommand As New FillCommand(RasterColor.White)
fillCommand.Run(image)
engine.Writer.WriteBarcode(image, qrData, Nothing)
Using codecs As New RasterCodecs()
codecs.Save(image, "product-qr.png", RasterImageFormat.Png, 0)
End Using
End Using
IronBarcode Yaklaşımı:
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com/product/12345", 400, QRCodeWriter.QrErrorCorrectionLevel.Highest)
.AddBrandLogo("brand-logo.png")
.SaveAsPng("product-qr.png");
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com/product/12345", 400, QRCodeWriter.QrErrorCorrectionLevel.Highest)
.AddBrandLogo("brand-logo.png")
.SaveAsPng("product-qr.png");
Imports IronBarCode
QRCodeWriter.CreateQrCode("https://example.com/product/12345", 400, QRCodeWriter.QrErrorCorrectionLevel.Highest) _
.AddBrandLogo("brand-logo.png") _
.SaveAsPng("product-qr.png")
PDF Belgelerinden Barkod Çıkarma
LEADTOOLS PDF barkod çıkarma, ayrı bir Leadtools.Pdf paketi, açık PDF yükleme yapılandırması, manuel bir sayfa sayısı sorgusu ve her sayfa üzerinde bir döngü gerektirir. Her sayfa tarama öncesi bireysel olarak bir RasterImage olarak yüklenmelidir. IronBarcode, temel paket içinde PDF desteği sunar ve sayfa yinelemesini dahili olarak ele alır.
LEADTOOLS Yaklaşımı:
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;
// Requires: dotnet add package Leadtools.Pdf
using var codecs = new RasterCodecs();
codecs.Options.Pdf.Load.Resolution = 300;
codecs.Options.Pdf.Load.DisplayDepth = 24;
var engine = new BarcodeEngine();
var results = new List<string>();
int pageCount = codecs.GetTotalPages("shipment.pdf");
for (int page = 1; page <= pageCount; page++)
{
using var image = codecs.Load(
"shipment.pdf", 0,
CodecsLoadByteOrder.BgrOrGray,
page, page);
var barcodes = engine.Reader.ReadBarcodes(
image, LogicalRectangle.Empty, 0, null);
foreach (var barcode in barcodes)
results.Add($"Page {page}: {barcode.Value}");
}
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;
// Requires: dotnet add package Leadtools.Pdf
using var codecs = new RasterCodecs();
codecs.Options.Pdf.Load.Resolution = 300;
codecs.Options.Pdf.Load.DisplayDepth = 24;
var engine = new BarcodeEngine();
var results = new List<string>();
int pageCount = codecs.GetTotalPages("shipment.pdf");
for (int page = 1; page <= pageCount; page++)
{
using var image = codecs.Load(
"shipment.pdf", 0,
CodecsLoadByteOrder.BgrOrGray,
page, page);
var barcodes = engine.Reader.ReadBarcodes(
image, LogicalRectangle.Empty, 0, null);
foreach (var barcode in barcodes)
results.Add($"Page {page}: {barcode.Value}");
}
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs
' Requires: dotnet add package Leadtools.Pdf
Using codecs As New RasterCodecs()
codecs.Options.Pdf.Load.Resolution = 300
codecs.Options.Pdf.Load.DisplayDepth = 24
Dim engine As New BarcodeEngine()
Dim results As New List(Of String)()
Dim pageCount As Integer = codecs.GetTotalPages("shipment.pdf")
For page As Integer = 1 To pageCount
Using image = codecs.Load("shipment.pdf", 0, CodecsLoadByteOrder.BgrOrGray, page, page)
Dim barcodes = engine.Reader.ReadBarcodes(image, LogicalRectangle.Empty, 0, Nothing)
For Each barcode In barcodes
results.Add($"Page {page}: {barcode.Value}")
Next
End Using
Next
End Using
IronBarcode Yaklaşımı:
using IronBarCode;
var results = BarcodeReader.Read("shipment.pdf");
foreach (var result in results)
Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
using IronBarCode;
var results = BarcodeReader.Read("shipment.pdf");
foreach (var result in results)
Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
Imports IronBarCode
Dim results = BarcodeReader.Read("shipment.pdf")
For Each result In results
Console.WriteLine($"Page {result.PageNumber}: {result.Value}")
Next
Docker Dağıtımı
LEADTOOLS Docker dağıtımını tanımlayan dosya yönetimi gereksinimi, IronBarcode'a geçiş yapıldığında tamamen ortadan kalkar.
LEADTOOLS Yaklaşımı:
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY publish/ .
# License file must be physically present in the container image
COPY LEADTOOLS.LIC /app/license/LEADTOOLS.LIC
ENV LEADTOOLS_LICENSE_PATH=/app/license/LEADTOOLS.LIC
ENV LEADTOOLS_DEVELOPER_KEY=your-developer-key
ENTRYPOINT ["dotnet", "YourApp.dll"]
IronBarcode Yaklaşımı:
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY publish/ .
ENV IRONBARCODE_LICENSE=your-license-key
ENTRYPOINT ["dotnet", "YourApp.dll"]
Lisans anahtarı, Docker sırları, Kubernetes sırları veya herhangi bir ortam değişkeni mekanizması aracılığıyla konteyner çalışma zamanında enjekte edilir. Herhangi bir dosya sağlama adımı gerekli değildir. Docker ve Linux dağıtım kılavuzu, Alpine ve Debian tabanlı görüntüler, çok aşamalı derlemeler ve Kubernetes dağıtım desenlerini kapsar.
LEADTOOLS Barkod API'den IronBarcode Haritalama Referansı
| LEADTOOLS | IronBarcode | Notlar |
|---|---|---|
RasterSupport.SetLicense(path, key) |
IronBarCode.License.LicenseKey = "key" |
Sadece anahtar - dosya yok |
RasterSupport.KernelExpired |
(removed) | Sona erme kontrolü gerekmez |
RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) |
(removed) | Tüm özellikler dahildir |
RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) |
(removed) | Tüm özellikler dahildir |
RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) |
(removed) | Tüm özellikler dahildir |
new BarcodeEngine() |
Statik — örnek yok | BarcodeReader, BarcodeWriter statiktir |
new RasterCodecs() |
(removed) | Dosya yolunu doğrudan geçir |
codecs.Load(imagePath) |
(removed) | Dosya yolunu doğrudan geçir |
engine.Reader.ReadBarcodes(image, LogicalRectangle.Empty, 0, symbologies) |
BarcodeReader.Read(imagePath) |
Sembolojileri otomatik algılar |
BarcodeData.Value |
result.Value |
Aynı özellik adı |
BarcodeData.Symbology |
result.Format |
Özellik yeniden adlandırıldı |
new BarcodeData() { Symbology = BarcodeSymbology.Code128 } |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) |
Akıcı oluşturma |
BarcodeSymbology.Code128 |
BarcodeEncoding.Code128 |
Namespace değişikliği |
BarcodeSymbology.QR |
BarcodeEncoding.QRCode |
Ad değişikliği |
BarcodeSymbology.DataMatrix |
BarcodeEncoding.DataMatrix |
Aynı ad |
BarcodeSymbology.PDF417 |
BarcodeEncoding.PDF417 |
Aynı ad |
BarcodeSymbology.EAN13 |
BarcodeEncoding.EAN13 |
Aynı ad |
BarcodeSymbology.UPCA |
BarcodeEncoding.UPCA |
Aynı ad |
BarcodeSymbology.Interleaved2of5 |
BarcodeEncoding.Interleaved2of5 |
Aynı ad |
BarcodeSymbology.Codabar |
BarcodeEncoding.Codabar |
Aynı ad |
engine.Writer.WriteBarcode(image, data, null) + codecs.Save(...) |
.SaveAsPng(path) |
Bir yöntem zinciri |
new RasterImage(...) + new FillCommand(RasterColor.White).Run(image) |
(removed) | IronBarcode içinde dahili |
Yaygın Göç Sorunları ve Çözümleri
Sorun 1: .LIC Dosyası Referansları CI/CD'de
LEADTOOLS:LEADTOOLSuygulamalarını derleyen veya dağıtan CI/CD boru hatları, .LIC dosyasını sağlamalıdır — kaynak kontrole ekleyerek, bir base64 sırrından kod çözerek veya bir hacim eseri olarak monte ederek. Uygulamayı çalıştıran her bir hat aşaması dosyaya erişilebilir olmalıdır.
Çözüm: Tüm .LIC dosya işlemlerini boru hattından çıkartın. Bir dizgi sırrı ile değiştirin:
# Example: GitHub Actions environment variable
env:
IRONBARCODE_LICENSE: ${{secrets.IRONBARCODE_LICENSE}}
# Example: GitHub Actions environment variable
env:
IRONBARCODE_LICENSE: ${{secrets.IRONBARCODE_LICENSE}}
Dize değeri, CI/CD sır deposunda diğer dize değerli kimlik bilgileriyle birlikte depolanır. Herhangi bir dosya çözümleme, yapıt sağlama veya hacim yapılandırması gerekli değildir.
Sorun 2: Windows'ta MSVC++ Çalışma Zamanı Bağımlılığı
LEADTOOLS: Windows Server dağıtımları, ana bilgisayarda MSVC++ 2017 Runtime kurulumunu gerektirir.LEADTOOLSdağıtımları için kullanılan sağlama betikleri, konteyner tabanlı görüntüler ve Windows AMI'leri genellikle bu çalışma zamanını yüklemek için bir adım içermektedir.
Çözüm: Tüm Windows sağlama betiklerinden ve konteyner görüntülerinden MSVC++ 2017 Runtime kurulum adımını kaldırın. IronBarcode'un yerel çalışma zamanı bağımlılığı yoktur. dotnet/aspnet taban görüntüsü, ek çalışma zamanında paketlere gerek olmadan yeterlidir.
Sorun 3: RasterSupportType Özellik Kilidi Kontrolleri
LEADTOOLS: Başlatma dizisi, her barkod özelliği için Barcodes1D, Barcodes2D ve BarcodeWrite gibi RasterSupport.IsLocked() kontrollerini içerir. Bu kontroller, lisans dosyasının her gerektiğinde kapsayıcılığı doğrulamak içinLEADTOOLSmimarisi tarafından zorunlu savunma kodudur.
Çözüm: Tüm RasterSupport.IsLocked() çağrılarını kaldırın. IronBarcode, tüm okuma ve yazma kabiliyetlerini tek bir lisans içinde içerir. Herhangi bir özellik kilidi durumu bulunmamaktadır ve herhangi bir özellik doğrulama adımı gerekmez:
// Remove these lines entirely:
// if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead)) ...
// if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead)) ...
// if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite)) ...
// Remove these lines entirely:
// if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead)) ...
// if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead)) ...
// if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite)) ...
' Remove these lines entirely:
' If RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) ...
' If RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) ...
' If RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) ...
Sorun 4: BarcodeSymbology Dizisi Kaldırma
LEADTOOLS: engine.Reader.ReadBarcodes()'e yapılan her çağrı açık bir BarcodeSymbology[] parametresi gerektirir. Semboji dizisinde listelenmeyen barkodlar algılanmayacaktır, bu da yeni bir barkod türü bir giriş belgesinde tanıtıldığında sessiz başarısız okumayla sonuçlanabilir.
Çözüm: Semboji dizisini kaldırın. BarcodeReader.Read(), desteklenen tüm formatları otomatik olarak algılar. Bilinen bir format seti için performans ayarlaması gerekiyorsa, BarcodeReaderOptions, kapsamlı bir listeleme gerektirmeden isteğe bağlı ipuçları sunar:
// Optional: hint the reader for performance in format-known scenarios
var options = new BarcodeReaderOptions
{
ExpectBarcodeTypes = BarcodeEncoding.Code128 | BarcodeEncoding.QRCode
};
var results = BarcodeReader.Read("scan.png", options);
// Optional: hint the reader for performance in format-known scenarios
var options = new BarcodeReaderOptions
{
ExpectBarcodeTypes = BarcodeEncoding.Code128 | BarcodeEncoding.QRCode
};
var results = BarcodeReader.Read("scan.png", options);
Imports System
' Optional: hint the reader for performance in format-known scenarios
Dim options As New BarcodeReaderOptions With {
.ExpectBarcodeTypes = BarcodeEncoding.Code128 Or BarcodeEncoding.QRCode
}
Dim results = BarcodeReader.Read("scan.png", options)
LEADTOOLS Barkod Geçiş Kontrol Listesi
Geçiş Öncesi Görevler
Herhangi bir değişiklik yapmadan önce tümLEADTOOLSkullanımını kod tabanında denetleyin:
grep -r "using Leadtools" --include="*.cs" .
grep -r "RasterSupport\|BarcodeEngine\|RasterCodecs" --include="*.cs" .
grep -r "BarcodeSymbology\|BarcodeData\|RasterImage" --include="*.cs" .
grep -r "LEADTOOLS.LIC\|SetLicense\|KernelExpired" --include="*.cs" .
grep -r "COPY LEADTOOLS.LIC\|LEADTOOLS_LICENSE_PATH" --include="*.dockerfile" --include="Dockerfile" .
grep -r "using Leadtools" --include="*.cs" .
grep -r "RasterSupport\|BarcodeEngine\|RasterCodecs" --include="*.cs" .
grep -r "BarcodeSymbology\|BarcodeData\|RasterImage" --include="*.cs" .
grep -r "LEADTOOLS.LIC\|SetLicense\|KernelExpired" --include="*.cs" .
grep -r "COPY LEADTOOLS.LIC\|LEADTOOLS_LICENSE_PATH" --include="*.dockerfile" --include="Dockerfile" .
Başlatma bloklarının, okuma çağrı noktalarının, yazma çağrı noktalarının ve Dockerfile referanslarının sayısını ve konumunu belgelemeden kod değişikliklerine başlamayın.
Kod Güncelleme Görevleri
- Tüm beşLEADTOOLSNuGet paketini (ve varsa PDF codec'ini) kaldırın
IronBarcode'idotnet add package IronBarcodearacılığıyla yükleyin- Tüm
using Leadtools.*ad alanı içe aktarımlarınıusing IronBarCodeile değiştirin - Tüm
RasterSupport.SetLicensebaşlatma bloğunuIronBarCode.License.LicenseKey = "key"ile değiştirin - Tüm
RasterSupport.KernelExpiredkontrollerini kaldırın - Tüm
RasterSupport.IsLocked(RasterSupportType.*)kontrollerini kaldırın - Tüm
new BarcodeEngine()örneklemelerini kaldırın - Barkod kod yollarındaki tüm
new RasterCodecs()örneklemelerini kaldırın codecs.Load(path)+engine.Reader.ReadBarcodes(image, ...)'yiBarcodeReader.Read(path)ile değiştirinnew BarcodeData(...)+new RasterImage(...)+FillCommand+WriteBarcode+codecs.Save()'yiBarcodeWriter.CreateBarcode(...).SaveAsPng(path)ile değiştirinBarcodeSymbology.*numaralandırma referanslarınıBarcodeEncoding.*ile değiştirin (not:QR,QRCodeolur)- Tüm Dockerfile'lardan
COPY LEADTOOLS.LICsatırlarını kaldırın - Dockerfile'lardan ve dağıtım yapılandırmasından
LEADTOOLS_LICENSE_PATHveLEADTOOLS_DEVELOPER_KEYortam değişkeni beyanlarını kaldırın - Dockerfile'lara ve sır yapılandırmasına
IRONBARCODE_LICENSEortam değişkeni ekleyin - Windows sağlama betiklerinden MSVC++ 2017 Runtime kurulumunu kaldırın
Geçiş Sonrası Testler
- Tüm daha önce
BarcodeSymbology[]dizisi tarafından kapsanan semboloji türlerinde barkod okuma işlemlerinin beklenen değerler döndüğünü doğrulayın - Kod 128, QR kodu ve diğer üretilen barkod türlerinin geçerli, taranabilir çıktılar ürettiğini doğrulayın
Leadtools.Pdfolmadan PDF barkod çıkarımının doğru çalıştığını doğrulayın- Herhangi bir
.LICdosyası monte edilmeden kapsayıcı görüntüsünü oluşturun ve başlatın ve uygulamanın doğru şekilde başlatıldığını doğrulayın .LICdosya sağlama adımı olmadan CI/CD boru hattını çalıştırın ve tüm aşamaların başarıyla tamamlandığını doğrulayın- Yayımlanmış çıktı boyutunun ve konteyner görüntüsü çekme süresinin iyileştiğini doğrulayın
IronBarcode'a Geçmenin Temel Faydaları
Basitleştirilmiş Dağıtım Mimarisi: Geçişten sonra, her ortam — geliştirme, CI, aşama, üretim — API anahtarları, veritabanı şifreleri ve diğer kimlik bilgileri için kullanılan aynı dize değerli sır mekanizması ile lisansı alır. Herhangi bir dosya sağlama, yapıt yönetimi veya hacim montajı gerekli değildir. Yeni bir dağıtım ortamı eklemek, başka bir sır eklemekle aynı işlemdir.
Azaltılmış Bağımlılık Yüzeyi: Bir NuGet paketi beşini ve MSVC++ 2017 Runtime gereksinimi ortadan kaldırılır. Bir barkod hizmetinin yayımlanmış çıktısı yaklaşık 148 MB'den yaklaşık 39 MB'ye düşer. Daha küçük görüntüler, daha hızlı konteyner çekimlerini, konteyner kayıt defterlerinde daha düşük depolama maliyetlerini ve sunucusuz ve otomatik ölçeklendirme ortamlarında soğuk başlatma sürelerinin azalmasını sağlar.
Basit Uygulama Başlangıcı:LEADTOOLSbaşlatma dizisi — dosya yolu çözünürlüğü, süresi dolmuş doğrulama ve üç özellik kilidi kontrolü — tek bir çizgi ile değiştirilir. Uygulama başlangıcı daha hızlı olur ve başlatma kod yolu, yeni bir ortamda başarısız olabilecek dosya sistemi bağımlılığına sahip değildir.
Kapsamlı Format Algılama: IronBarcode, beklenen formatları arayanın belirtmesini gerektirmeden, desteklenen tüm50+sembolojilerde okur.LEADTOOLSBarcodeSymbology[] dizisinden bir sembolojinin atlanması nedeniyle sessizce kaçırılan okumalar riskini ortadan kaldırır. Bir giriş belgesinde yeni bir barkod türü göründüğünde,IronBarcode bunu kod değişikliği gerektirmeden algılar.
Öngörülebilir Toplam Maliyet: Tek bir süresiz lisans satın alımı, geliştirme, test etme ve sınırsız üretim dağıtımı için herhangi bir dağıtım takibi, yıllık yenileme gereksinimi ve ayrı bir üretim lisansı edinebileceği gerektirmeden kapsar. Takımlar, bir satış görüşmesi yapmadan, kitaplığın tam maliyetini geliştirmeye başlamadan önce doğrulayabilir.
Modern API Tasarımı: BarcodeReader.Read() ve BarcodeWriter.CreateBarcode(), dosya yollarını doğrudan kabul eden statik giriş noktalarıdır. LEADTOOLS'un okuma ve yazma gerektirdiği çok katmanlı nesne oluşturma — codec örnekleri, motor örnekleri, görüntü ayırma, arka plan doldurma — dahili olarak ele alınır. Barkod okuma ve oluşturma kodu daha kısa, daha kolay gözden geçirilebilir ve daha kolay test edilebilir.
Sıkça Sorulan Sorular
Neden LEADTOOLS Barcode'dan 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.
LEADTOOLS 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.
LEADTOOLS Barcode'dan 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 LEADTOOLS Barcode 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ı LEADTOOLS Barcode'a 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, LEADTOOLS'ten 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.
LEADTOOLS Barcode'dan 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.

