Altbilgi içeriğine atla
VIDEOLAR

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

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

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
SHELL

Adım 2: Ad Alanlarını Güncelleyin

// Remove
using Accusoft.BarcodeXpressSdk;

// Add
using IronBarCode;
// Remove
using Accusoft.BarcodeXpressSdk;

// Add
using IronBarCode;
Imports IronBarCode
$vbLabelText   $csharpLabel

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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" .
SHELL

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" .
SHELL

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

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
YAML

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" .
SHELL

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" .
SHELL
  • BarcodeTypes atamaları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

  1. Tüm .csproj dosyalarından Accusoft.BarcodeXpress.NetCore'i kaldırın
  2. Barkod işlevselliği gerektiren tüm .csproj dosyalarına IronBarcode ekleyin
  3. Tüm dosyalarda using Accusoft.BarcodeXpressSdk;'i using IronBarCode; ile değiştirin
  4. Uygulama başlangıcına IronBarCode.License.LicenseKey = ... ekleyin
  5. Tüm BarcodeXpress yapıcı çağrıları ve örnek alanları silin
  6. Tüm SetSolutionName, SetSolutionKey ve SetOEMLicenseKey çağrılarını silin
  7. Çözülen çıktıları UNLICENSED accusoft.com filigranını tarayan özel iddiaları silin
  8. new Bitmap(path) + reader.Analyze(bitmap)'i BarcodeReader.Read(path) ile değiştirin
  9. Tüm reader.BarcodeTypes = ... atamalarını kaldırın
  10. result.BarcodeValue'i result.Value ile değiştirin
  11. result.BarcodeType'i result.Format ile değiştirin
  12. writer.CreateBitmap() + bitmap.Save(path)'i BarcodeWriter.CreateBarcode(data, encoding).SaveAsPng(path) ile değiştirin
  13. Hız-sınırlama kısıtlama kodunu kaldırın
  14. PDF işleme ara kodunu var ise kaldırın
  15. BarcodeXpress örnekleri için örnek havuzlamayı veya ThreadLocal desenlerini kaldırın
  16. Dockerfile ve docker-compose dosyalarından lisans dosyası bağlantılarını kaldırın
  17. Docker ve konteyner yapılandırmalarına IRONBARCODE_LICENSE çevre değişkeni ekleyin
  18. Kubernetes gizli bilgilerini ve pod özelliklerini güncelleyin
  19. CI/CD hattı gizliliklerini güncelleyin — ACCUSOFT_SOLUTION_KEY ve ACCUSOFT_RUNTIME_KEY'i kaldırın; IRONBARCODE_LICENSE ekleyin

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.

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