C#'ta QR Kodlarına Logolar Nasıl Özelleştirilir ve Eklenir
Accusoft BarcodeXpress'ten IronBarcode'a Geçiş
Bu geçişteki işlerin çoğu silme ile ilgilidir. İki anahtar lisanslama sistemi — SetSolutionName, SetSolutionKey ve SetOEMLicenseKey çalışma zamanında — tamamen ortadan kalkar. Gerçek barkod operasyonları (bir görüntü okuma, bir barkodu dosyaya yazma), daha kısa IronBarcode eşdeğerlerine çevrilir. Kod tabanınızda BarcodeXpress'i saran bir BarcodeService sınıfı varsa, lisanslama kodu genellikle bunun büyük bir kısmını oluşturur. Göç ettikten sonra, bu sınıf küçülür.
Accusoft BarcodeXpress'ten Neden Göç Etmelisiniz
BarcodeXpress'ten göç eden ekipler bu tetikleyicileri bildiriyor:
Değerlendirme Modu Doğru Benchmarking'i Engeller: Geçerli bir OEM/çalışma zamanı anahtarı olmadan, BarcodeXpress çözülen sonuçları UNLICENSED accusoft.com literal dizesiyle damgalar ve oluşturulan 2D barkodlara da aynı damgayı uygular. Gerçek belgelerde ön satın alma doğruluğu testleri, bu filigranlı çıktıyı üretir, böylece satın alma taahhüt etmeden önce kitaplığın gerçek tarama türlerinizi doğru okuyup okumadığını doğrulayamazsınız.
İki Anahtar Lisanslama İşletim Maliyetini Artırır: BarcodeXpress, SDK lisansını (SetSolutionName + SetSolutionKey) OEM/çalışma zamanı lisansından (SetOEMLicenseKey) ayırır. CI/CD boru hatları, Docker konteynerleri ve konteyner orkestratörleri, her anahtar sistemi ayrı sırlar olarak yönetilmek zorundadır. Eksik veya geçersiz bir çalışma zamanı anahtarı bir hatadan ziyade filigranlı çıktıya geri döner, yalnızca geçersiz sonuçlar için kontrol eden iddialar varsa otomatik testlerden geçebilecek bir başarısızlık modu yaratır.
Herhangi Bir Üretim Dağıtımı İçin Asgari Beş Çalışma Süresi Lisansı: Tek bir sunucu dağıtımı bile en az beş çalışma süresi lisansı satın almayı gerektirir. Bir üretim sunucusu ve bir aşama sunucusu çalıştıran ekipler, gerçek kullanım ne olursa olsun en az on çalışma süresi lisansı için ödeme yapar.
40 PPM Standart Sürüm Tavanı: Standart Sürüm, işlemeyi dakikada 40 sayfa ile sınırlar. 100.000 belgelik bir grubu bu hızda yaklaşık 41 saat sürer. Tavanı kaldırmak, halihazırda satın alınmış olan çalışma zamanı lisanslarının yanı sıra, daha yüksek bir geliştirici koltuk maliyeti taşıyan Professional Edition'a yükseltmeyi gerektirir.
Doğrudan PDF Desteği: PDF dosyalarının BarcodeXpress tarafından okunmadan önce ayrı bir kütüphane kullanılarak görüntülere dönüştürülmesi gerekir. Bu harici bağımlılık, ikinci bir lisanslama maliyeti, bir dönüştürme adımı ve işlenmiş sayfa görüntülerini elde etmenin getirdiği ek bellek baskısı ekler.
İş Parçacığı Güvenliği Örnek İzolasyonu Gerektirir: BarcodeXpress'in reader nesnesi durumsaldır ve eş zamanlı erişim için güvenli değildir. Paralel toplu işlem, her iş parçacığına tam olarak başlatılmış bir BarcodeXpress örneği gerektirir; her iş parçacığı bağlamında iki katmanlı lisans başlatma tekrarlanır.
Temel Sorun
BarcodeXpress, herhangi bir barkod okunmadan önce çok adımlı bir başlatma, bir Bitmap yüklemesi ve bir BarcodeType[] yapılandırması gerektirir:
using var bitmap = new Bitmap(imagePath);
var barcodeXpress = new BarcodeXpress(".");
barcodeXpress.Licensing.SetSolutionName("AcmeCorp");
barcodeXpress.Licensing.SetSolutionKey(1, 2, 3, 4);
barcodeXpress.Licensing.SetOEMLicenseKey("2.0.OEMLicenseStringFromAccusoft...");
barcodeXpress.reader.BarcodeTypes = new[]
{
BarcodeType.Code128Barcode,
BarcodeType.DataMatrixBarcode,
BarcodeType.QRCodeBarcode
};
Result[] results = barcodeXpress.reader.Analyze(bitmap);
var value = results.FirstOrDefault()?.BarcodeValue;
using var bitmap = new Bitmap(imagePath);
var barcodeXpress = new BarcodeXpress(".");
barcodeXpress.Licensing.SetSolutionName("AcmeCorp");
barcodeXpress.Licensing.SetSolutionKey(1, 2, 3, 4);
barcodeXpress.Licensing.SetOEMLicenseKey("2.0.OEMLicenseStringFromAccusoft...");
barcodeXpress.reader.BarcodeTypes = new[]
{
BarcodeType.Code128Barcode,
BarcodeType.DataMatrixBarcode,
BarcodeType.QRCodeBarcode
};
Result[] results = barcodeXpress.reader.Analyze(bitmap);
var value = results.FirstOrDefault()?.BarcodeValue;
Imports System.Drawing
Imports Accusoft.BarcodeXpressSdk
Using bitmap As New Bitmap(imagePath)
Dim barcodeXpress = New BarcodeXpress(".")
barcodeXpress.Licensing.SetSolutionName("AcmeCorp")
barcodeXpress.Licensing.SetSolutionKey(1, 2, 3, 4)
barcodeXpress.Licensing.SetOEMLicenseKey("2.0.OEMLicenseStringFromAccusoft...")
barcodeXpress.Reader.BarcodeTypes = New BarcodeType() {
BarcodeType.Code128Barcode,
BarcodeType.DataMatrixBarcode,
BarcodeType.QRCodeBarcode
}
Dim results As Result() = barcodeXpress.Reader.Analyze(bitmap)
Dim value = results.FirstOrDefault()?.BarcodeValue
End Using
IronBarcode bu tüm bloğu tek bir statik çağrı ile değiştirir:
var value = BarcodeReader.Read(imagePath).First().Value;
var value = BarcodeReader.Read(imagePath).First().Value;
Dim value = BarcodeReader.Read(imagePath).First().Value
IronBarcode ile Accusoft BarcodeXpress: Özellik Karşılaştırması
| Özellik | Accusoft BarcodeXpress | IronBarcode |
|---|---|---|
| Lisans modeli | SDK anahtarı + OEM/çalıştırma anahtarı (ayrı satın alımlar) | Tek süreli anahtar |
| Asgari çalışma zamanı lisansları | 5 (hatta 1 sunucu için) | Çalışma zamanı lisans konsepti yok |
| Değerlendirme modu | Çözülmüş değerler ve oluşturulan 2D barkodlar UNLICENSED accusoft.com ile damgalanmıştır |
Tam değerler döner; yalnızca oluşturulan çıktıda filigran |
| Geçirgenlik sınırı | 40 S/DK (Standart Sürüm) | Herhangi bir katmanda sınırlama yok |
| Format otomatik algılama | Manuel — BarcodeType[] dizisini BarcodeTypes'e atamak zorunda |
Desteklenen tüm formatlarda otomatik |
| PDF desteği | Sayfaları Bitmaps'e işlemek için harici kütüphane gerektirir | Yerel — BarcodeReader.Read("doc.pdf") |
| API stili | Örnek tabanlı; Bitmap girişi; özellik/metod yapılandırması | Statik fabrika yöntemleri, akıcı API |
| Thread güvenliği | Her iplik için ayrı örnek gerek | Durumsuz statik yöntemler — iş parçası güvenli |
| Docker lisans yapılandırma | Lisans dosyasını bağla veya lisans sunucusu | Tek bir ortam değişkeni |
| CI/CD sırları gereklidir | SDK anahtarı çifti + OEM/çalıştırma anahtarı | Tek bir sır |
| .NET Framework / .NET Core | Ayrı paketler: Accusoft.BarcodeXpress.Net ve Accusoft.BarcodeXpress.NetCore |
Single IronBarcode package (.NET Framework 4.6.2+, .NET Core 3.1+, .NET 5–8) |
| Linux/macOS | Evet (.NetCore paketi aracılığıyla) | Evet — Windows x64/x86, Linux x64, macOS x64/ARM |
| Logolu QR kodu | Manuel GDI+ bindirme gerekli | AddBrandLogo("logo.png") yerleşik |
| Fiyat başlangıç noktası | $1,960+ SDK + minimum 5 çalışma zaman lisansı | 749 USD süresiz (Lite, 1 geliştirici) |
| Süresiz lisans | Standart değil — satış ekibiyle iletişime geçin | Evet, tüm katmanlar |
Hızlı Başlangıç: Accusoft BarcodeXpress'ten IronBarcode Göç
Adım 1: NuGet Paketini Değiştirin
dotnet remove package Accusoft.BarcodeXpress.NetCore
dotnet add package IronBarcode
dotnet remove package Accusoft.BarcodeXpress.NetCore
dotnet add package IronBarcode
Adım 2: Ad Alanlarını Güncelleyin
// Remove
using Accusoft.BarcodeXpressSdk;
// Add
using IronBarCode;
// Remove
using Accusoft.BarcodeXpressSdk;
// Add
using IronBarCode;
Imports IronBarCode
Adım 3: Lisansa İzin Verin
Lisans başlatmasını uygulama başlatıldıktan sonra bir kez Program.cs, Startup.cs veya bağımlılık enjeksiyon konfigürasyonunuza ekleyin:
// Add once at application startup
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add once at application startup
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add once at application startup
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Üretimde anahtarı ortam değişkeninden veya sır yöneticinizden okuyun:
IronBarCode.License.LicenseKey =
Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
?? throw new InvalidOperationException("IronBarcode license key not configured");
IronBarCode.License.LicenseKey =
Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
?? throw new InvalidOperationException("IronBarcode license key not configured");
Imports IronBarCode
Imports System
License.LicenseKey = If(Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE"), Throw New InvalidOperationException("IronBarcode license key not configured"))
Hayır SetSolutionKey, hayır SetOEMLicenseKey, sunucu başına çalışma zamanı etkinleştirmesi yok. Bu, tam lisans kurulumudur.
Kod Göç Örnekleri
Lisans Başlatma
BarcodeXpress Yaklaşımı:
using Accusoft.BarcodeXpressSdk;
public class BarcodeService
{
private readonly BarcodeXpress _barcodeXpress;
public BarcodeService()
{
// Constructor takes the path containing the Barcode Xpress runtime files.
_barcodeXpress = new BarcodeXpress(".");
// SDK license
_barcodeXpress.Licensing.SetSolutionName("AcmeCorp");
_barcodeXpress.Licensing.SetSolutionKey(1, 2, 3, 4);
// OEM/runtime license — separate purchase, minimum 5 licenses required.
// Without this call, decoded values and generated 2D barcodes are
// stamped with " UNLICENSED accusoft.com ".
_barcodeXpress.Licensing.SetOEMLicenseKey(
"2.0.OEMLicenseStringFromAccusoft...");
}
}
using Accusoft.BarcodeXpressSdk;
public class BarcodeService
{
private readonly BarcodeXpress _barcodeXpress;
public BarcodeService()
{
// Constructor takes the path containing the Barcode Xpress runtime files.
_barcodeXpress = new BarcodeXpress(".");
// SDK license
_barcodeXpress.Licensing.SetSolutionName("AcmeCorp");
_barcodeXpress.Licensing.SetSolutionKey(1, 2, 3, 4);
// OEM/runtime license — separate purchase, minimum 5 licenses required.
// Without this call, decoded values and generated 2D barcodes are
// stamped with " UNLICENSED accusoft.com ".
_barcodeXpress.Licensing.SetOEMLicenseKey(
"2.0.OEMLicenseStringFromAccusoft...");
}
}
Imports Accusoft.BarcodeXpressSdk
Public Class BarcodeService
Private ReadOnly _barcodeXpress As BarcodeXpress
Public Sub New()
' Constructor takes the path containing the Barcode Xpress runtime files.
_barcodeXpress = New BarcodeXpress(".")
' SDK license
_barcodeXpress.Licensing.SetSolutionName("AcmeCorp")
_barcodeXpress.Licensing.SetSolutionKey(1, 2, 3, 4)
' OEM/runtime license — separate purchase, minimum 5 licenses required.
' Without this call, decoded values and generated 2D barcodes are
' stamped with " UNLICENSED accusoft.com ".
_barcodeXpress.Licensing.SetOEMLicenseKey("2.0.OEMLicenseStringFromAccusoft...")
End Sub
End Class
IronBarcode Yaklaşımı:
using IronBarCode;
// In Program.cs
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
// BarcodeService no longer needs a constructor or any license management
public class BarcodeService
{
// Ready to use — no initialization needed
}
using IronBarCode;
// In Program.cs
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
// BarcodeService no longer needs a constructor or any license management
public class BarcodeService
{
// Ready to use — no initialization needed
}
Imports IronBarCode
' In Program.vb
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
' BarcodeService no longer needs a constructor or any license management
Public Class BarcodeService
' Ready to use — no initialization needed
End Class
BarcodeXpress oluşturucusu yalnızca iki lisans anahtarı sistemini ve çalışma zamanı yolunu yönetmek için var.IronBarcode uygulama başlangıcında bir satır ile bunu değiştirir. BarcodeService sınıfı hiçbir yapıcıya ihtiyaç duymaz.
Barkod Okuma
BarcodeXpress Yaklaşımı:
using System.Drawing;
using Accusoft.BarcodeXpressSdk;
public string ReadFirstBarcode(string imagePath)
{
// Analyze takes a System.Drawing.Bitmap; the SDK does not read PDFs directly.
using var bitmap = new Bitmap(imagePath);
_barcodeXpress.reader.BarcodeTypes = new[]
{
BarcodeType.Code128Barcode,
BarcodeType.DataMatrixBarcode,
BarcodeType.QRCodeBarcode
};
Result[] results = _barcodeXpress.reader.Analyze(bitmap);
return results.FirstOrDefault()?.BarcodeValue;
}
using System.Drawing;
using Accusoft.BarcodeXpressSdk;
public string ReadFirstBarcode(string imagePath)
{
// Analyze takes a System.Drawing.Bitmap; the SDK does not read PDFs directly.
using var bitmap = new Bitmap(imagePath);
_barcodeXpress.reader.BarcodeTypes = new[]
{
BarcodeType.Code128Barcode,
BarcodeType.DataMatrixBarcode,
BarcodeType.QRCodeBarcode
};
Result[] results = _barcodeXpress.reader.Analyze(bitmap);
return results.FirstOrDefault()?.BarcodeValue;
}
Imports System.Drawing
Imports Accusoft.BarcodeXpressSdk
Public Function ReadFirstBarcode(imagePath As String) As String
' Analyze takes a System.Drawing.Bitmap; the SDK does not read PDFs directly.
Using bitmap As New Bitmap(imagePath)
_barcodeXpress.reader.BarcodeTypes = New BarcodeType() {
BarcodeType.Code128Barcode,
BarcodeType.DataMatrixBarcode,
BarcodeType.QRCodeBarcode
}
Dim results As Result() = _barcodeXpress.reader.Analyze(bitmap)
Return results.FirstOrDefault()?.BarcodeValue
End Using
End Function
IronBarcode Yaklaşımı:
using IronBarCode;
public string ReadFirstBarcode(string imagePath)
{
var results = BarcodeReader.Read(imagePath);
return results.First().Value;
}
using IronBarCode;
public string ReadFirstBarcode(string imagePath)
{
var results = BarcodeReader.Read(imagePath);
return results.First().Value;
}
Imports IronBarCode
Public Function ReadFirstBarcode(imagePath As String) As String
Dim results = BarcodeReader.Read(imagePath)
Return results.First().Value
End Function
BarcodeTypes dizi filtresi ve new Bitmap(...) yükleme adımı her ikisi de kaybolur. IronBarcode, desteklenen tüm sembolojilerdeki formatı otomatik olarak algılar ve doğrudan bir dosya yolu kabul eder. Bir tedarikçi Code 128'den DataMatrix'e geçiş yaparsa,IronBarcode herhangi bir kod değişikliğine ihtiyaç duymaz. Sonuç mülk adları da değişir: BarcodeValue Value olur ve BarcodeType Format olur. Çözüm genelinde bir arama-ve-değiştirme her iki yeniden adlandırmayı da yönetir.
Tek Bir Görüntüden Birden Fazla Barkod Okuma
BarcodeXpress Yaklaşımı:
using System.Drawing;
using Accusoft.BarcodeXpressSdk;
public IReadOnlyList<string> ReadAllBarcodes(string imagePath)
{
using var bitmap = new Bitmap(imagePath);
_barcodeXpress.reader.BarcodeTypes = new[]
{
BarcodeType.Code128Barcode,
BarcodeType.QRCodeBarcode
};
Result[] results = _barcodeXpress.reader.Analyze(bitmap);
return results.Select(r => r.BarcodeValue).ToList();
}
using System.Drawing;
using Accusoft.BarcodeXpressSdk;
public IReadOnlyList<string> ReadAllBarcodes(string imagePath)
{
using var bitmap = new Bitmap(imagePath);
_barcodeXpress.reader.BarcodeTypes = new[]
{
BarcodeType.Code128Barcode,
BarcodeType.QRCodeBarcode
};
Result[] results = _barcodeXpress.reader.Analyze(bitmap);
return results.Select(r => r.BarcodeValue).ToList();
}
Imports System.Drawing
Imports Accusoft.BarcodeXpressSdk
Public Function ReadAllBarcodes(imagePath As String) As IReadOnlyList(Of String)
Using bitmap As New Bitmap(imagePath)
_barcodeXpress.reader.BarcodeTypes = New BarcodeType() {
BarcodeType.Code128Barcode,
BarcodeType.QRCodeBarcode
}
Dim results As Result() = _barcodeXpress.reader.Analyze(bitmap)
Return results.Select(Function(r) r.BarcodeValue).ToList()
End Using
End Function
IronBarcode Yaklaşımı:
using IronBarCode;
public IReadOnlyList<string> ReadAllBarcodes(string imagePath)
{
var options = new BarcodeReaderOptions { ExpectMultipleBarcodes = true };
var results = BarcodeReader.Read(imagePath, options);
return results.Select(r => r.Value).ToList();
}
using IronBarCode;
public IReadOnlyList<string> ReadAllBarcodes(string imagePath)
{
var options = new BarcodeReaderOptions { ExpectMultipleBarcodes = true };
var results = BarcodeReader.Read(imagePath, options);
return results.Select(r => r.Value).ToList();
}
Imports IronBarCode
Public Function ReadAllBarcodes(imagePath As String) As IReadOnlyList(Of String)
Dim options As New BarcodeReaderOptions With {.ExpectMultipleBarcodes = True}
Dim results = BarcodeReader.Read(imagePath, options)
Return results.Select(Function(r) r.Value).ToList()
End Function
ExpectMultipleBarcodes IronBarcode'a ilk eşleşmeden sonra taramaya devam etmesini söyler, bu da farklı bölgelerde birkaç kod bulunan belgeler için faydalıdır. Daha fazla okuma seçenekleri detayı için IronBarcode okuma belgelerine bakın.
Toplu İşleme
BarcodeXpress örnek tabanlıdır ve reader nesnesi durumsaldır, bu nedenle paralel toplu işleme her iş parçacığı başına tek bir örnek gerektirir, her iş parçacığı başına iki katmanlı lisans başlatma tekrarlanır. IronBarcode'un statik yöntemleri durumsuzdur, bu nedenle Parallel.ForEach örnek yönetimine ihtiyaç duymaz.
BarcodeXpress Yaklaşımı:
using System.Collections.Generic;
using System.Drawing;
using Accusoft.BarcodeXpressSdk;
public Dictionary<string, string> ProcessBatch(IEnumerable<string> imagePaths)
{
var results = new Dictionary<string, string>();
foreach (var path in imagePaths)
{
using var bitmap = new Bitmap(path);
_barcodeXpress.reader.BarcodeTypes = new[]
{
BarcodeType.Code128Barcode,
BarcodeType.QRCodeBarcode
};
Result[] barcodes = _barcodeXpress.reader.Analyze(bitmap);
if (barcodes.Length > 0)
results[path] = barcodes[0].BarcodeValue;
}
return results;
}
using System.Collections.Generic;
using System.Drawing;
using Accusoft.BarcodeXpressSdk;
public Dictionary<string, string> ProcessBatch(IEnumerable<string> imagePaths)
{
var results = new Dictionary<string, string>();
foreach (var path in imagePaths)
{
using var bitmap = new Bitmap(path);
_barcodeXpress.reader.BarcodeTypes = new[]
{
BarcodeType.Code128Barcode,
BarcodeType.QRCodeBarcode
};
Result[] barcodes = _barcodeXpress.reader.Analyze(bitmap);
if (barcodes.Length > 0)
results[path] = barcodes[0].BarcodeValue;
}
return results;
}
Imports System.Collections.Generic
Imports System.Drawing
Imports Accusoft.BarcodeXpressSdk
Public Function ProcessBatch(imagePaths As IEnumerable(Of String)) As Dictionary(Of String, String)
Dim results As New Dictionary(Of String, String)()
For Each path In imagePaths
Using bitmap As New Bitmap(path)
_barcodeXpress.reader.BarcodeTypes = New BarcodeType() {
BarcodeType.Code128Barcode,
BarcodeType.QRCodeBarcode
}
Dim barcodes As Result() = _barcodeXpress.reader.Analyze(bitmap)
If barcodes.Length > 0 Then
results(path) = barcodes(0).BarcodeValue
End If
End Using
Next
Return results
End Function
IronBarcode Yaklaşımı:
using IronBarCode;
using System.Collections.Concurrent;
using System.Threading.Tasks;
public Dictionary<string, string> ProcessBatch(string[] imagePaths)
{
var results = new ConcurrentDictionary<string, string>();
Parallel.ForEach(imagePaths, file =>
{
var r = BarcodeReader.Read(file);
var first = r.FirstOrDefault();
if (first != null)
results[file] = first.Value;
});
return new Dictionary<string, string>(results);
}
using IronBarCode;
using System.Collections.Concurrent;
using System.Threading.Tasks;
public Dictionary<string, string> ProcessBatch(string[] imagePaths)
{
var results = new ConcurrentDictionary<string, string>();
Parallel.ForEach(imagePaths, file =>
{
var r = BarcodeReader.Read(file);
var first = r.FirstOrDefault();
if (first != null)
results[file] = first.Value;
});
return new Dictionary<string, string>(results);
}
Imports IronBarCode
Imports System.Collections.Concurrent
Imports System.Threading.Tasks
Public Function ProcessBatch(imagePaths As String()) As Dictionary(Of String, String)
Dim results = New ConcurrentDictionary(Of String, String)()
Parallel.ForEach(imagePaths, Sub(file)
Dim r = BarcodeReader.Read(file)
Dim first = r.FirstOrDefault()
If first IsNot Nothing Then
results(file) = first.Value
End If
End Sub)
Return New Dictionary(Of String, String)(results)
End Function
BarcodeXpress Standart Sürümü'nün dakikada 40 sayfa sınırlaması, 40'lık gruplar arasında uyuma, dakikada sayaç izleme veya gecikme ekleme gibi hız limiti işleme kodunun eklenmesine neden olduysa — bu kodu tamamen kaldırın. IronBarcode'da geçirme tavanı yoktur.
PDF Desteği Ekleme
BarcodeXpress, PDF dosyalarından doğrudan barkod okumaz. Tipik bir çözüm, ayrı bir PDF oluşturma kütüphanesi eklemeyi, her sayfayı bellekte bir görüntüye oluşturmayı ve ardından bu görüntüleri birer birer barkod okuyucusuna göndermeyi içerir.
BarcodeXpress Yaklaşımı:
// Requires a separate PDF library (not shown — varies by team choice)
// Pattern: render each PDF page to a Bitmap, then pass it to Analyze.
foreach (Bitmap pageBitmap in pdfRenderer.RenderPages("document.pdf"))
{
using (pageBitmap)
{
_barcodeXpress.reader.BarcodeTypes = Enum.GetValues(typeof(BarcodeType));
Result[] barcodes = _barcodeXpress.reader.Analyze(pageBitmap);
// ... collect results
}
}
// Requires a separate PDF library (not shown — varies by team choice)
// Pattern: render each PDF page to a Bitmap, then pass it to Analyze.
foreach (Bitmap pageBitmap in pdfRenderer.RenderPages("document.pdf"))
{
using (pageBitmap)
{
_barcodeXpress.reader.BarcodeTypes = Enum.GetValues(typeof(BarcodeType));
Result[] barcodes = _barcodeXpress.reader.Analyze(pageBitmap);
// ... collect results
}
}
Imports System
Imports System.Drawing
' Requires a separate PDF library (not shown — varies by team choice)
' Pattern: render each PDF page to a Bitmap, then pass it to Analyze.
For Each pageBitmap As Bitmap In pdfRenderer.RenderPages("document.pdf")
Using pageBitmap
_barcodeXpress.reader.BarcodeTypes = [Enum].GetValues(GetType(BarcodeType))
Dim barcodes As Result() = _barcodeXpress.reader.Analyze(pageBitmap)
' ... collect results
End Using
Next
IronBarcode Yaklaşımı:
using IronBarCode;
// One call — no rendering step, no external dependency
var results = BarcodeReader.Read("document.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: [{barcode.Format}] {barcode.Value}");
}
using IronBarCode;
// One call — no rendering step, no external dependency
var results = BarcodeReader.Read("document.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: [{barcode.Format}] {barcode.Value}");
}
Imports IronBarCode
' One call — no rendering step, no external dependency
Dim results = BarcodeReader.Read("document.pdf")
For Each barcode In results
Console.WriteLine($"Page {barcode.PageNumber}: [{barcode.Format}] {barcode.Value}")
Next
Eğer BarcodeXpress okuma iş akışını desteklemek için sadece Aspose.PDF, PdfiumViewer, itext7 veya başka bir PDF kütüphanesi eklendiyse, geçişten sonra kaldırılabilir. Ek seçenekler için IronBarcode PDF okuma kılavuzuna bakın, sayfa aralığı seçimi dahil.
Barkod Oluşturucu
BarcodeXpress Yaklaşımı:
using System.Drawing;
using Accusoft.BarcodeXpressSdk;
public void GenerateBarcode(string data, string outputPath)
{
_barcodeXpress.writer.BarcodeType = BarcodeType.Code128Barcode;
_barcodeXpress.writer.BarcodeValue = data;
// CreateBitmap returns a System.Drawing.Bitmap; persist via Bitmap.Save.
using Bitmap bitmap = _barcodeXpress.writer.CreateBitmap();
bitmap.Save(outputPath);
}
using System.Drawing;
using Accusoft.BarcodeXpressSdk;
public void GenerateBarcode(string data, string outputPath)
{
_barcodeXpress.writer.BarcodeType = BarcodeType.Code128Barcode;
_barcodeXpress.writer.BarcodeValue = data;
// CreateBitmap returns a System.Drawing.Bitmap; persist via Bitmap.Save.
using Bitmap bitmap = _barcodeXpress.writer.CreateBitmap();
bitmap.Save(outputPath);
}
Imports System.Drawing
Imports Accusoft.BarcodeXpressSdk
Public Sub GenerateBarcode(data As String, outputPath As String)
_barcodeXpress.writer.BarcodeType = BarcodeType.Code128Barcode
_barcodeXpress.writer.BarcodeValue = data
' CreateBitmap returns a System.Drawing.Bitmap; persist via Bitmap.Save.
Using bitmap As Bitmap = _barcodeXpress.writer.CreateBitmap()
bitmap.Save(outputPath)
End Using
End Sub
IronBarcode Yaklaşımı:
using IronBarCode;
public void GenerateBarcode(string data, string outputPath)
{
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng(outputPath);
}
using IronBarCode;
public void GenerateBarcode(string data, string outputPath)
{
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng(outputPath);
}
Imports IronBarCode
Public Sub GenerateBarcode(data As String, outputPath As String)
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.SaveAsPng(outputPath)
End Sub
Akıcı zincir mülk atamalarını, CreateBitmap çağrısını ve Bitmap.Save adımını değiştirir. Veritabanında saklama veya bir API'den döndürecek şekilde barkodu ikili veri olarak almak için:
byte[] pngBytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ToPngBinaryData();
byte[] pngBytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ToPngBinaryData();
Dim pngBytes As Byte() = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128).ToPngBinaryData()
QR Kod Oluşturma
BarcodeXpress Yaklaşımı:
_barcodeXpress.writer.BarcodeType = BarcodeType.QRCodeBarcode;
_barcodeXpress.writer.BarcodeValue = data;
using Bitmap bitmap = _barcodeXpress.writer.CreateBitmap();
bitmap.Save("qr.png");
// Logo overlay required manual GDI+ drawing on the returned Bitmap
_barcodeXpress.writer.BarcodeType = BarcodeType.QRCodeBarcode;
_barcodeXpress.writer.BarcodeValue = data;
using Bitmap bitmap = _barcodeXpress.writer.CreateBitmap();
bitmap.Save("qr.png");
// Logo overlay required manual GDI+ drawing on the returned Bitmap
Imports System.Drawing
_barcodeXpress.writer.BarcodeType = BarcodeType.QRCodeBarcode
_barcodeXpress.writer.BarcodeValue = data
Using bitmap As Bitmap = _barcodeXpress.writer.CreateBitmap()
bitmap.Save("qr.png")
' Logo overlay required manual GDI+ drawing on the returned Bitmap
End Using
IronBarcode Yaklaşımı:
using IronBarCode;
using IronSoftware.Drawing;
// Simple QR
QRCodeWriter.CreateQrCode("https://example.com", 500)
.SaveAsPng("qr.png");
// With branded logo
QRCodeWriter.CreateQrCode("https://example.com", 500)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded.png");
// With high error correction (for logo overlays)
QRCodeWriter.CreateQrCode(
"https://example.com",
500,
QRCodeWriter.QrErrorCorrectionLevel.Highest)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded-high-ecc.png");
// Colored QR code
QRCodeWriter.CreateQrCode("https://example.com", 300)
.ChangeBarCodeColor(Color.DarkBlue)
.SaveAsPng("qr-colored.png");
using IronBarCode;
using IronSoftware.Drawing;
// Simple QR
QRCodeWriter.CreateQrCode("https://example.com", 500)
.SaveAsPng("qr.png");
// With branded logo
QRCodeWriter.CreateQrCode("https://example.com", 500)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded.png");
// With high error correction (for logo overlays)
QRCodeWriter.CreateQrCode(
"https://example.com",
500,
QRCodeWriter.QrErrorCorrectionLevel.Highest)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded-high-ecc.png");
// Colored QR code
QRCodeWriter.CreateQrCode("https://example.com", 300)
.ChangeBarCodeColor(Color.DarkBlue)
.SaveAsPng("qr-colored.png");
Imports IronBarCode
Imports IronSoftware.Drawing
' Simple QR
QRCodeWriter.CreateQrCode("https://example.com", 500) _
.SaveAsPng("qr.png")
' With branded logo
QRCodeWriter.CreateQrCode("https://example.com", 500) _
.AddBrandLogo("logo.png") _
.SaveAsPng("qr-branded.png")
' With high error correction (for logo overlays)
QRCodeWriter.CreateQrCode( _
"https://example.com", _
500, _
QRCodeWriter.QrErrorCorrectionLevel.Highest) _
.AddBrandLogo("logo.png") _
.SaveAsPng("qr-branded-high-ecc.png")
' Colored QR code
QRCodeWriter.CreateQrCode("https://example.com", 300) _
.ChangeBarCodeColor(Color.DarkBlue) _
.SaveAsPng("qr-colored.png")
Logo gömme, hata düzeltme seviyesi ve renk özelleştirmesi akıcı API'ye yerleşiktir. BarcodeXpress, bu özelliklerin herhangi biri için başlangıç dosyasını yazdıktan sonra manuel GDI+ çizimi gerektirir. Daha fazla QR kod seçeneği için, QR kod oluşturma kılavuzuna bakın.
Accusoft BarcodeXpress API'den IronBarcode Haritalama Referansı
| Accusoft BarcodeXpress | IronBarcode |
|---|---|
new BarcodeXpress(".") |
Statik yöntemler — örnek gerektirmez |
Licensing.SetSolutionName("...") |
IronBarCode.License.LicenseKey = "key" |
Licensing.SetSolutionKey(a, b, c, d) |
(removed — not needed) |
Licensing.SetOEMLicenseKey(string) |
(removed — no OEM/runtime key concept) |
new Bitmap(path) + reader.Analyze(bitmap) |
BarcodeReader.Read(path) |
reader.BarcodeTypes = new[] { BarcodeType.Code128Barcode, ... } |
(removed — auto-detection handles all formats) |
result.BarcodeValue |
result.Value |
result.BarcodeType |
result.Format |
writer.BarcodeType = BarcodeType.Code128Barcode |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) |
writer.BarcodeValue = "data" |
(first argument to CreateBarcode) |
writer.CreateBitmap() + bitmap.Save(path) |
.SaveAsPng(path) |
writer.BarcodeType = BarcodeType.QRCodeBarcode |
QRCodeWriter.CreateQrCode(data, size) |
| 40 S/DK Standart sınır | Herhangi bir katmanda veri işleme sınırı yok |
Yaygın Göç Sorunları ve Çözümleri
Sorun 1: Mülk Adı Derleme Hataları
BarcodeXpress: Sonuç nesneleri IronBarcode'da bulunmayan BarcodeValue ve BarcodeType'i gösterir.
Çözüm: Derleme öncesi çözüm genelinde arama-ve-değiştirme çalıştırın:
grep -r "\.BarcodeValue" --include="*.cs" .
grep -r "\.BarcodeType" --include="*.cs" .
grep -r "\.BarcodeValue" --include="*.cs" .
grep -r "\.BarcodeType" --include="*.cs" .
Tüm dosyalarda bulunan result.BarcodeValue'i result.Value ile ve result.BarcodeType'i result.Format ile değiştirin.
Sorun 2: Bağımsız Lisans Yapılandırma Çağrıları
BarcodeXpress: SetSolutionName, SetSolutionKey ve SetOEMLicenseKey çağrıları — ve kodlanmış çıktıda " UNLICENSED accusoft.com " filigranını tespit eden özel iddialar dahil — birçok kod tabanında filigranlı çıktı arıza moduna karşı savunma olarak bulunur.
Çözüm: Tüm bu çağrı noktalarını bulun ve silin — IronBarcode'un eşdeğer bir durumu yoktur. Lisans anahtarı ya geçerlidir ya da değildir ve eğer geçerli değilse, deneme limitleri bireysel çözülen değerleri bozmadan eşit olarak uygulanır:
grep -r "SetOEMLicenseKey" --include="*.cs" .
grep -r "SetSolutionName" --include="*.cs" .
grep -r "SetSolutionKey" --include="*.cs" .
grep -r "UNLICENSED accusoft" --include="*.cs" .
grep -r "SetOEMLicenseKey" --include="*.cs" .
grep -r "SetSolutionName" --include="*.cs" .
grep -r "SetSolutionKey" --include="*.cs" .
grep -r "UNLICENSED accusoft" --include="*.cs" .
Tüm bu çağrı siteleri silinebilir.
Sorun 3: Docker Lisans Dosyası Montajını Çevre Değişkenine Kaydırma
BarcodeXpress: Docker dağıtımları genellikle bir BarcodeXpress lisans yapılandırma dosyasını bilinen bir yolda konteynere bir COPY veya birim montaj talimatı kullanarak monte eder.
Çözüm: Yapılandırma dosyası kopyasını kaldırın ve bir ortam değişkeniyle değiştirin:
# Remove this
COPY accusoft-license.lic /app/license/
# Add this
ENV IRONBARCODE_LICENSE=YOUR-LICENSE-KEY
Uygulama başlamasında:
IronBarCode.License.LicenseKey =
Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
IronBarCode.License.LicenseKey =
Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
Imports System
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
Kubernetes'te, lisans anahtarı kıl kabuğu yapılandırmasında gizli bir referans olur:
env:
- name: IRONBARCODE_LICENSE
valueFrom:
secretKeyRef:
name: ironbarcode-secrets
key: license-key
env:
- name: IRONBARCODE_LICENSE
valueFrom:
secretKeyRef:
name: ironbarcode-secrets
key: license-key
Sorun 4: Hız Sınırı İşleme Kodu
BarcodeXpress: Standart Sürüm'ün dakikada 40 PPM tavanı altında büyük grupları işleyen ekipler genellikle belgeler arasında uyuma, dakikada sayaç izleme veya limit içinde kalmak için gecikme ekleme gibi kodlar ekledi.
Çözüm: Tüm hız sınırlama kodlarını kaldırın. Bunu şununla bulun:
grep -r "40\|PPM\|pagesPerMinute\|minuteStart" --include="*.cs" .
grep -r "40\|PPM\|pagesPerMinute\|minuteStart" --include="*.cs" .
IronBarcode, hız tavanı yoktur. — Altyapınızın desteklediği hızda işleyin.
Konu 5: İleti Güvenliği — Örnek Havuzu Kaldırılması
BarcodeXpress: Eşzamanlı işlemeyi destekleyen kod tabanları genellikle bir BarcodeXpress örnekleri havuzu tutar veya iş parçacığı başına durumsal okuyucuyu izole etmek için bir ThreadLocal<BarcodeXpress> deseni kullanır.
Çözüm: Havuzlama mantığını tamamen kaldırın. IronBarcode'un BarcodeReader.Read ve BarcodeWriter.CreateBarcode durumsuz statik yöntemlerdir. Herhangi bir sayıda ileti tarafından yapılan eşzamanlı çağrılar birbirlerine engel olmaz.
Accusoft BarcodeXpress Geçiş Kontrol Listesi
Geçiş Öncesi Görevler
Herhangi bir kod değişikliği yapmadan önce tüm BarcodeXpress kullanımını belirlemek için kod tabanını denetleyin:
grep -r "BarcodeXpress" --include="*.cs" .
grep -r "Accusoft" --include="*.cs" .
grep -r "SetSolutionName" --include="*.cs" .
grep -r "SetSolutionKey" --include="*.cs" .
grep -r "SetOEMLicenseKey" --include="*.cs" .
grep -r "reader\.Analyze" --include="*.cs" .
grep -r "writer\.CreateBitmap" --include="*.cs" .
grep -r "\.BarcodeValue" --include="*.cs" .
grep -r "\.BarcodeType" --include="*.cs" .
grep -r "BarcodeType\." --include="*.cs" .
grep -r "BarcodeXpress" --include="*.cs" .
grep -r "Accusoft" --include="*.cs" .
grep -r "SetSolutionName" --include="*.cs" .
grep -r "SetSolutionKey" --include="*.cs" .
grep -r "SetOEMLicenseKey" --include="*.cs" .
grep -r "reader\.Analyze" --include="*.cs" .
grep -r "writer\.CreateBitmap" --include="*.cs" .
grep -r "\.BarcodeValue" --include="*.cs" .
grep -r "\.BarcodeType" --include="*.cs" .
grep -r "BarcodeType\." --include="*.cs" .
BarcodeTypesatamalarında açıkça listelenen barkod formatlarını not edin - bunların hepsi IronBarcode'da otomatik olarak algılanır- Kaldırılabilecek herhangi bir hız-sınır yönetim kodunu belirleyin
- Yalnızca BarcodeXpress okumasını desteklemek için eklenen PDF işleme kitaplıklarını belirleyin — bunlar da kaldırılabilir -IronBarcode lisans anahtarınızı edinin ve gizli bilgiler yöneticinize ekleyin
Kod Güncelleme Görevleri
- Tüm
.csprojdosyalarındanAccusoft.BarcodeXpress.NetCore'i kaldırın - Barkod işlevselliği gerektiren tüm
.csprojdosyalarınaIronBarcodeekleyin - Tüm dosyalarda
using Accusoft.BarcodeXpressSdk;'iusing IronBarCode;ile değiştirin - Uygulama başlangıcına
IronBarCode.License.LicenseKey = ...ekleyin - Tüm
BarcodeXpressyapıcı çağrıları ve örnek alanları silin - Tüm
SetSolutionName,SetSolutionKeyveSetOEMLicenseKeyçağrılarını silin - Çözülen çıktıları
UNLICENSED accusoft.comfiligranını tarayan özel iddiaları silin new Bitmap(path)+reader.Analyze(bitmap)'iBarcodeReader.Read(path)ile değiştirin- Tüm
reader.BarcodeTypes = ...atamalarını kaldırın result.BarcodeValue'iresult.Valueile değiştirinresult.BarcodeType'iresult.Formatile değiştirinwriter.CreateBitmap()+bitmap.Save(path)'iBarcodeWriter.CreateBarcode(data, encoding).SaveAsPng(path)ile değiştirin- Hız-sınırlama kısıtlama kodunu kaldırın
- PDF işleme ara kodunu var ise kaldırın
- BarcodeXpress örnekleri için örnek havuzlamayı veya
ThreadLocaldesenlerini kaldırın - Dockerfile ve docker-compose dosyalarından lisans dosyası bağlantılarını kaldırın
- Docker ve konteyner yapılandırmalarına
IRONBARCODE_LICENSEçevre değişkeni ekleyin - Kubernetes gizli bilgilerini ve pod özelliklerini güncelleyin
- CI/CD hattı gizliliklerini güncelleyin —
ACCUSOFT_SOLUTION_KEYveACCUSOFT_RUNTIME_KEY'i kaldırın;IRONBARCODE_LICENSEekleyin
Geçiş Sonrası Testler
- Çözümü oluşturun — yeniden adlandırılmış özelliklerden kalan derleme hatalarını düzeltin
- Tüm barkod okuma işlemlerine karşı birim testleri çalıştırın
- Tüm barkod oluşturma işlemlerine karşı birim testleri çalıştırın
- Uygun durumda PDF girdileri ile test yapın
- Herhangi bir aktarım kısıtlama davranışını doğrulamak için bir toplu işleme testi çalıştırın
- Bir aşama ortamına dağıtın ve lisans anahtarının ortam değişkeninden doğru bir şekilde çözüldüğünü doğrulayın
IronBarcode'a Geçmenin Temel Faydaları
İki Anahtar Lisans Karmaşıklığının Ortadan Kalkması: SetSolutionName, SetSolutionKey ve SetOEMLicenseKey kurulumu tamamen ortadan kalkar. Bir anahtar, geliştirme aşamasından üretime kadar tüm ortamları kapsar ve deneme modu, önceden satın alma benchmark testi için gerçek belgeler üzerinde mümkün olduğu için her birini UNLICENSED accusoft.com ile damgalamak yerine tam çözülen değerler döndürür.
Çalışma Zamanı Lisansı asgari Alışveriş Yok: BarcodeXpress herhangi bir üretim dağıtımı için en az beş çalışma zamanı lisansı gerektirir. IronBarcode'un çalışma zamanı lisansı kavramı yoktur — tek süresiz anahtar, içinde bulunduğu seviye dahilinde herhangi bir sayıda üretim dağıtımını kapsar.
Tavan Olmayan Aktarım: Standart Sürüm 40-PPM üst sınırı ve sınırda kalmak için yazılmış olan herhangi bir hız sınırı kodu kaldırılabilir. IronBarcode, temel donanım ve ağın desteklediği herhangi bir hızda işlem yapar, yazılım dayatılan herhangi bir tavan fiyatlandırma basamaklarında yoktur.
Yerel PDF Okuma: BarcodeReader.Read("document.pdf") PDF dosyalarını doğrudan işler, sayfa numarası, format, değer ve güven puanı ile sayfa başına sonuçları döndürür. Yalnızca BarcodeXpress'i desteklemek için eklenen herhangi bir PDF işleme kitaplığı kaldırılabilir, bu da bağımlılıkları ve lisanslama maliyetlerini azaltır.
Durumsuz İş Parçacığı Güvenliği: BarcodeReader.Read ve BarcodeWriter.CreateBarcode durumsuz statik yöntemlerdir. Örnek havuzları, ThreadLocal desenleri ve iş parçacığı başına başlatma blokları tamamen kaldırılabilir. Parallel.ForEach ile eşzamanlı işlem, iş parçacığı çözümlerinin kaldırılmasının ötesinde yapısal değişiklik gerektirmez.
Basitleştirilmiş Konteyner Dağıtımı: Docker ve Kubernetes dağıtımları, lisans yapılandırması için tek bir ortam değişkeni kullanır. Lisans dosyası dağıtımı, lisans sunucusu altyapısı ve yapılandırma dosyası bağlantı noktaları tamamen kaldırılır.
Sıkça Sorulan Sorular
Accusoft BarcodeXpress'ten IronBarcode'a neden geçmeliyim?
Yaygın nedenler arasında lisanslamanın basitleştirilmesi (SDK + runtime anahtar karmaşıklığının kaldırılması), veri geçiş limitlerinin ortadan kaldırılması, yerel PDF desteği kazanılması, Docker/CI/CD dağıtımının iyileştirilmesi ve üretim kodunda API tekrarlama azalması yer alır.
Accusoft BarcodeXpress 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.
Accusoft BarcodeXpress'ten IronBarcode'a geçişte ne kadar kod değişir?
Çoğu geçiş daha az kod satırıyla sonuçlanır. Lisanslama tekrarlamaları, örnek oluşturucular ve açık format yapılandırması kaldırılır. Temel okuma/yazma işlemleri, daha temiz sonuç nesneleriyle daha kısa IronBarcode eşdeğerlerine dönüştürülür.
Geçiş sırasında hem Accusoft BarcodeXpress hem de IronBarcode kurulu kalmalı mı?
Hayır. Çoğu geçiş doğrudan değişim yapılır, paralel bir işletim yerine geçer. Bir hizmet sınıfını bir seferde geçirin, NuGet referansını değiştirin ve sonraki sınıfa geçmeden önce başlatma ve API çağrı desenlerini güncelleyin.
IronBarcode için NuGet paketi adı nedir?
Paket 'IronBarCode' (büyük B ve C harfleriyle). 'Install-Package IronBarCode' veya 'dotnet add package IronBarCode' ile kurun. Kodda kullanılan yönerge 'using IronBarCode;' şeklindedir.
IronBarcode, Accusoft BarcodeXpress ile karşılaştırıldığında Docker dağıtımını nasıl basitleştirir?
IronBarcode, harici SDK dosyaları veya montajlı lisans yapılandırması olmayan bir NuGet paketidir. Docker'da, IRONBARCODE_LICENSE_KEY ortam değişkenini ayarlayın ve paket lisans doğrulamasını başlangıçta kendi kendine yapar.
IronBarcode, Accusoft BarcodeXpress'ten geçişten sonra tüm barkod formatlarını otomatik olarak algılıyor mu?
Evet. IronBarcode, desteklenen tüm formatlardaki sembolojiyi otomatik olarak algılar. Açık BarcodeTypes sayımı gerekli değildir. Format zaten biliniyorsa ve performans önemliyse, BarcodeReaderOptions arama alanını optimize etmek için sınırlamayı sağlar.
IronBarcode, ayrı bir kütüphane olmadan PDF'lerden barkod okuyabiliyor mu?
Evet. BarcodeReader.Read("document.pdf") PDF dosyalarını yerel olarak işlemler. Sonuçlar her barkod için SayfaNumarası, Format, Değer ve Güven içerir. Harici bir PDF render adımı gerekmez.
IronBarcode, paralel barkod işlemeyi nasıl yönetiyor?
IronBarcode'un statik yöntemleri durumsuz ve thread-safe'dir. Dağıtılmış dosya listeleri üzerinde per-thread örnek yönetimi olmadan doğrudan Parallel.ForEach kullanın. BarcodeReaderOptions.MaxParallelThreads, iç thread bütçesini kontrol eder.
Accusoft BarcodeXpress'ten IronBarcode'a geçerken hangi sonuç özellikleri değişir?
Yaygın yeniden adlandırmalar: BarcodeValue, Value olur; BarcodeType, Format olur. IronBarcode sonuçları ayrıca Güven ve SayfaNumarası ekler. Çözüm çapında arama-değiştirme, mevcut sonuç işleme kodundaki yeniden adlandırmaları ele alır.
Bir CI/CD hattında IronBarcode lisanslamasını nasıl ayarlayabilirim?
IRONBARCODE_LICENSE_KEY'i bir boru hattı sırrı olarak saklayın ve uygulama başlangıç kodunda IronBarCode.License.LicenseKey olarak atayın. Bir sır, geliştirme, test, aşama ve üretim dahil olmak üzere tüm ortamları kapsar.
IronBarcode, özel biçimlendirmeye sahip QR kodu üretimini destekliyor mu?
Evet. QRCodeWriter.CreateQrCode() özelleştirilmiş renkler için ChangeBarCodeColor(), logo yerleştirme için AddBrandLogo(), yapılandırılabilir hata düzeltme seviyeleri ve PNG, JPG, PDF ve akış dahil birden çok çıktı formatını destekler.

