Przejdź do treści stopki
PORóWNAJ Z INNYMI KOMPONENTAMI

Cloudmersive Barcode API vs IronBarcode: Porównanie bibliotek kodów kreskowych C#

Przy 10 000 kodów kreskowych dziennie — realistycznej liczbie w przypadku przetwarzania faktur, weryfikacji etykiet wysyłkowych lub przyjmowania dokumentów — Cloudmersive BarCode API kosztuje około 3650 USD rocznie. Przy tej samej objętości każdy kod kreskowy wydłuża czas przesyłu w obie strony o 100–500 ms. Każdy dokument, każdy obraz, każdy fragment danych z kodu kreskowego opuszcza Twoją sieć i trafia na serwery Cloudmersive.

Tak w skrócie wygląda model Cloudmersive. Dla zespołów, które napotykają ten problem w trakcie realizacji projektu — po zbudowaniu integracji, po podłączeniu klucza API — te trzy fakty często stanowią nieprzyjemną niespodziankę. Niniejsze porównanie ma na celu wyjaśnienie ich przed zbudowaniem integracji.

Zrozumienie interfejsu API Cloudmersive BarCode

Cloudmersive oferuje zbiór interfejsów API REST obejmujących konwersję dokumentów, OCR, przetwarzanie obrazów i operacje związane z kodami BARCODE. Funkcjonalność BARCODE stanowi część szerszego portfolio API. Dla programistów .NET firma Cloudmersive udostępnia pakiet kliencki NuGet, który obsługuje ich punkty końcowe REST:

// Cloudmersive: HTTP client, per-request billing, data leaves your network
using Cloudmersive.APIClient.NETCore.Barcode.Api;
using Cloudmersive.APIClient.NETCore.Barcode.Client;

Configuration.Default.ApiKey.Add("Apikey", "YOUR-CLOUDMERSIVE-API-KEY");
var apiInstance = new GenerateBarcodeApi();

// Each call = HTTPS request to Cloudmersive servers
byte[] result = apiInstance.GenerateBarcodeQRCode("https://example.com");
// Cloudmersive: HTTP client, per-request billing, data leaves your network
using Cloudmersive.APIClient.NETCore.Barcode.Api;
using Cloudmersive.APIClient.NETCore.Barcode.Client;

Configuration.Default.ApiKey.Add("Apikey", "YOUR-CLOUDMERSIVE-API-KEY");
var apiInstance = new GenerateBarcodeApi();

// Each call = HTTPS request to Cloudmersive servers
byte[] result = apiInstance.GenerateBarcodeQRCode("https://example.com");
Imports Cloudmersive.APIClient.NETCore.Barcode.Api
Imports Cloudmersive.APIClient.NETCore.Barcode.Client

Configuration.Default.ApiKey.Add("Apikey", "YOUR-CLOUDMERSIVE-API-KEY")
Dim apiInstance As New GenerateBarcodeApi()

' Each call = HTTPS request to Cloudmersive servers
Dim result As Byte() = apiInstance.GenerateBarcodeQRCode("https://example.com")
$vbLabelText   $csharpLabel

Ważną rzeczą, którą należy zrozumieć w odniesieniu do tego kodu, jest to, co faktycznie robi: wysyła żądanie HTTPS do infrastruktury Cloudmersive, czeka na odpowiedź i zwraca wynik. Każda linia kodu w integracji Cloudmersive jest zgodna z tym wzorcem. Nie ma przetwarzania lokalnego. Nie ma ścieżki offline. Każda operacja wymaga aktywnego połączenia internetowego i dostępnego serwera Cloudmersive.

Wzorzec klienta HTTP

SDK .NET firmy Cloudmersive to wygenerowany klient API. W tle działa HttpClient, który wykonuje wywołania REST. Z faktu tego wynikają następujące implikacje:

  • Opóźnienia sieciowe są nieuniknione i znaczące (100–500 ms na wywołanie)
  • Twoje dane są przesyłane do i z serwerów zewnętrznych przy każdej operacji
  • Ograniczenia szybkości są egzekwowane na poziomie API
  • Klucze API tracą ważność i należy je regularnie wymieniać
  • Awarie Cloudmersive całkowicie wstrzymują przetwarzanie BarCode
  • Niezawodność produkcji wymaga logiki ponownych prób, obsługi limitów czasu i wyłączników awaryjnych

W przypadku skanowania BarCode w procesie przetwarzania dokumentów — gdzie można przetwarzać setki dokumentów na godzinę — nie są to tylko teoretyczne obawy.

Koszt w skali

Cloudmersive stosuje cennik oparty na liczbie zleceń. Dokładny koszt jednego żądania zależy od poziomu subskrypcji, ale podstawowy model jest taki sam na każdym poziomie: każda operacja związana z kodem kreskowym zużywa jedno żądanie z miesięcznego limitu.

Obliczenia przy typowych wielkościach produkcji:

Dzienne obciążenie Miesięczny wolumen Roczny koszt (szacunkowy) IronBarcode
100/dzień ~3000/miesiąc ~240 USD/rok 749 USD jednorazowo
1000/dzień ~30 000/miesiąc ~1200 USD/rok 749 USD jednorazowo
10 000/dzień ~300 000/miesiąc ~3650 USD/rok 749 USD jednorazowo
50 000/dzień ~1 500 000/miesiąc ~18 000 USD+/rok 749 USD jednorazowo
100 000/dzień ~3 000 000/miesiąc ~36 500 USD/rok 749 USD jednorazowo

Licencja wieczysta IronBarcode w cenie 749 USD (wersja Lite, dla jednego programisty) obejmuje nieograniczoną liczbę operacji związanych z kodami kreskowymi. Nie ma opłaty za każde zlecenie, niezależnie od jego wielkości. Zespół przetwarzający 10 000 kodów kreskowych dziennie zwraca koszt licencji w mniej niż dziesięć dni w porównaniu z kwotą, jaką zapłaciłby Cloudmersive rocznie.

W przypadku zespołu składającego się z 3 programistów licencja Plus za jednorazową opłatą w wysokości 1499 USD jest porównywalna z opcją za 3650 USD rocznie przy 10 000 BarCodes dziennie. Licencja IronBarcode zwraca się w ciągu pięciu miesięcy dzięki oszczędnościom w Cloudmersive.

Klif skalowalności

Ceny ustalane na żądanie stwarzają konkretny problem wraz ze wzrostem wykorzystania: koszt rośnie liniowo wraz z wolumenem. Jeśli liczba przetwarzanych dokumentów wzrośnie z 2000 do 20 000 miesięcznie, rachunek za Cloudmersive wzrośnie dziesięciokrotnie. Koszty inżynieryjne nie rosną — ten sam kod przetwarza więcej dokumentów — ale rosną koszty związane z API.

IronBarcode nie posiada tej właściwości. Przetwarzanie dziesięciokrotnie większej liczby BARCODE-ów nie wiąże się z żadnymi dodatkowymi kosztami.

Wpływ opóźnień

Każda operacja związana z kodami barcode w Cloudmersive obejmuje:

  1. Serializacja żądania (bajty obrazu lub dane BARCODE)
  2. Nawiązywanie lub ponowne wykorzystanie połączenia HTTPS
  3. Przesyłanie danych na serwery Cloudmersive
  4. Oczekiwanie na przetworzenie po stronie serwera
  5. Otrzymanie odpowiedzi
  6. Deserializacja wyniku

Zmierzony czas opóźnienia dla operacji związanych z kodami BARCODE w Cloudmersive wynosi zazwyczaj 100–500 ms na wywołanie, w zależności od obciążenia serwera, odległości geograficznej i rozmiaru obrazu. Przy 250 ms na wywołanie:

Objętość Całkowite obciążenie sieci
10 BarCodes 2,5 sekundy
100 BarCodes 25 sekund
1000 BARCODE'ów 4,2 minuty
10 000 BARCODES 41,7 minuty
100 000 BARCODES ~7 godzin

W przypadku punktów końcowych przeznaczonych dla użytkowników — formularza internetowego, w którym użytkownik przesyła obraz i oczekuje wyniku — opóźnienie wynoszące 250 ms przy skanowaniu pojedynczego BARCODE-a może być akceptowalne. W przypadku zadań przetwarzania dokumentów w tle dominującym kosztem przepływu pracy staje się skumulowane opóźnienie.

Lokalne przetwarzanie w IronBarcode trwa 10–50 ms na BarCode na typowym sprzęcie. Przy 10 000 BarCode'ów daje to łącznie około 8 minut w porównaniu z 41 minutami samego obciążenia sieciowego w modelu Cloudmersive.

Opóźnienia w ASP.NET Core

W przypadku punktów końcowych API internetowego, które muszą spełniać wymagania SLA dotyczące czasu odpowiedzi, opóźnienie Cloudmersive stanowi stałą wartość minimalną. Punkt końcowy, który odczytuje BARCODE i zwraca wartość, nie może odpowiadać szybciej niż w ciągu 100 ms, niezależnie od sprzętu serwera, ponieważ minimalny czas przesyłu w obie strony do zewnętrznego API jest dyktowany fizyką sieci.

IronBarcode przetwarza dane lokalnie. Minimalne opóźnienie zależy od sprzętu i złożoności obrazu.

Suwerenność danych

Każda operacja związana z kodami BARCODE w Cloudmersive powoduje przesłanie danych do serwerów Cloudmersive. W przypadku odczytu BarCode oznacza to, że Państwa obrazy — potencjalnie zawierające identyfikatory pacjentów, numery kont finansowych, adresy wysyłkowe, identyfikatory pracowników lub zastrzeżone dane dotyczące zapasów — opuszczają Państwa sieć.

Konsekwencje w zakresie zgodności z przepisami zależą od otoczenia regulacyjnego:

Przepisy Model Cloudmersive IronBarcode
HIPAA Dane medyczne (PHI) w obrazach BARCODE wymagają umowy BAA z Cloudmersive; dane opuszczają sieć Całe przetwarzanie odbywa się lokalnie — nie jest wymagańa umowa BAA
RODO Dane osobowe przesyłane na serwery w USA; adequacy assessment required Brak transmisji danych — RODO w uproszczeniu
ITAR Dane techniczne związane z obronnością nie mogą być przekazywane do usług zewnętrznych W pełni zlokalizowane — zgodne z ITAR już w fazie projektowania
CMMC Informacje nieklasyfikowane jako tajne nie mogą przechodzić przez sieci zewnętrzne Brak zewnętrznych wywołań sieciowych
FedRAMP Dane rządowe USA wymagają usług w chmurze autoryzowanych przez FedRAMP Nie dotyczy — przetwarzanie lokalne
PCI DSS Dane posiadaczy kart zawarte w BarCodes wymagają szczególnego traktowania w przypadku transmisji zewnętrznej Dane nigdy nie opuszczają Twojego środowiska
Sieci typu air-gapped Niemożliwe — wymaga połączenia z Internetem Pełne wsparcie — działa bez dostępu do sieci
Wewnętrzna polityka dotycząca danych Wiele organizacji zabrania wysyłania danych operacyjnych do zewnętrznych interfejsów API Brak transmisji stron trzecich

W przypadku zadań związanych z opieką zdrowotną, obronnością, usługami finansowymi lub administracją publiczną model chmury Cloudmersive często dyskwalifikuje tę platformę jeszcze przed oceną funkcji lub kosztów. Dane opuszczają Twoją sieć — to właśnie ten fakt dyskwalifikuje tę platformę.

IronBarcode przetwarza wszystko lokalnie. Obrazy BarCode nigdy nie opuszczają komputera hosta. Nie ma żadnej transmisji danych.

Wiarygodność

Cloudmersive jest zależnością zewnętrzną. Niezawodność przetwarzania BarCodes w Twojej aplikacji zależy od czasu działania platformy Cloudmersive.

Co dzieje się podczas awarii

W przypadku zakłóceń w działaniu usług Cloudmersive:

  • Operacje odczytu BarCode kończą się niepowodzeniem lub przekraczają limit czasu
  • Żądania generowania kodów kreskowych zwracają błędy
  • Zatrzymanie potoków przetwarzania dokumentów
  • Każda zaimplementowana logika ponownej próby zaczyna zużywać moc obliczeniową, czekając na przywrócenie

Jeśli przetwarzanie kodów kreskowych znajduje się na ścieżce krytycznej — system przyjmowania zamówień, proces przyjmowania towarów, formularz rejestracji pacjenta — awaria Cloudmersive oznacza awarię Twojej aplikacji.

Ograniczanie szybkości

Cloudmersive stosuje limity liczby jednoczesnych żądań w każdym poziomie cenowym. Na niższych poziomach limit ten wynosi zaledwie 1 żądanie równoległe, co oznacza, że równoległe przetwarzanie dokumentów jest szeregowane przez API. Przekroczenie miesięcznego limitu powoduje niepowodzenie operacji lub ich nieograniczone oczekiwanie w kolejce.

Kod produkcyjny wykorzystujący Cloudmersive musi obsługiwać:

// Production Cloudmersive code requires significant infrastructure
using Cloudmersive.APIClient.NETCore.Barcode.Api;
using Cloudmersive.APIClient.NETCore.Barcode.Client;
using System;
using System.Threading;
using System.Threading.Tasks;

public class CloudmersiveBarcodeService
{
    private readonly BarcodeScanApi _scanApi;
    private static int _requestCount = 0;

    public CloudmersiveBarcodeService()
    {
        Configuration.Default.ApiKey.Add("Apikey", "YOUR-CLOUDMERSIVE-API-KEY");
        _scanApi = new BarcodeScanApi();
    }

    public async Task<string> ScanWithRetry(byte[] imageBytes, int maxRetries = 3)
    {
        for (int attempt = 1; attempt <= maxRetries; attempt++)
        {
            try
            {
                // Track quota consumption
                Interlocked.Increment(ref _requestCount);

                using var stream = new System.IO.MemoryStream(imageBytes);
                var result = await _scanApi.BarcodeScanImageAsync(stream);

                if (result.Successful == true)
                    return result.RawText;

                throw new InvalidOperationException("Scan unsuccessful");
            }
            catch (ApiException ex) when (ex.ErrorCode == 429)
            {
                // Rate limited — exponential backoff
                if (attempt < maxRetries)
                    await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)));
                else
                    throw;
            }
            catch (Exception) when (attempt < maxRetries)
            {
                // Network error — retry
                await Task.Delay(TimeSpan.FromMilliseconds(500 * attempt));
            }
        }
        throw new InvalidOperationException("All retry attempts failed");
    }
}
// Production Cloudmersive code requires significant infrastructure
using Cloudmersive.APIClient.NETCore.Barcode.Api;
using Cloudmersive.APIClient.NETCore.Barcode.Client;
using System;
using System.Threading;
using System.Threading.Tasks;

public class CloudmersiveBarcodeService
{
    private readonly BarcodeScanApi _scanApi;
    private static int _requestCount = 0;

    public CloudmersiveBarcodeService()
    {
        Configuration.Default.ApiKey.Add("Apikey", "YOUR-CLOUDMERSIVE-API-KEY");
        _scanApi = new BarcodeScanApi();
    }

    public async Task<string> ScanWithRetry(byte[] imageBytes, int maxRetries = 3)
    {
        for (int attempt = 1; attempt <= maxRetries; attempt++)
        {
            try
            {
                // Track quota consumption
                Interlocked.Increment(ref _requestCount);

                using var stream = new System.IO.MemoryStream(imageBytes);
                var result = await _scanApi.BarcodeScanImageAsync(stream);

                if (result.Successful == true)
                    return result.RawText;

                throw new InvalidOperationException("Scan unsuccessful");
            }
            catch (ApiException ex) when (ex.ErrorCode == 429)
            {
                // Rate limited — exponential backoff
                if (attempt < maxRetries)
                    await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)));
                else
                    throw;
            }
            catch (Exception) when (attempt < maxRetries)
            {
                // Network error — retry
                await Task.Delay(TimeSpan.FromMilliseconds(500 * attempt));
            }
        }
        throw new InvalidOperationException("All retry attempts failed");
    }
}
Imports Cloudmersive.APIClient.NETCore.Barcode.Api
Imports Cloudmersive.APIClient.NETCore.Barcode.Client
Imports System
Imports System.Threading
Imports System.Threading.Tasks

Public Class CloudmersiveBarcodeService
    Private ReadOnly _scanApi As BarcodeScanApi
    Private Shared _requestCount As Integer = 0

    Public Sub New()
        Configuration.Default.ApiKey.Add("Apikey", "YOUR-CLOUDMERSIVE-API-KEY")
        _scanApi = New BarcodeScanApi()
    End Sub

    Public Async Function ScanWithRetry(imageBytes As Byte(), Optional maxRetries As Integer = 3) As Task(Of String)
        For attempt As Integer = 1 To maxRetries
            Try
                ' Track quota consumption
                Interlocked.Increment(_requestCount)

                Using stream As New System.IO.MemoryStream(imageBytes)
                    Dim result = Await _scanApi.BarcodeScanImageAsync(stream)

                    If result.Successful = True Then
                        Return result.RawText
                    End If

                    Throw New InvalidOperationException("Scan unsuccessful")
                End Using
            Catch ex As ApiException When ex.ErrorCode = 429
                ' Rate limited — exponential backoff
                If attempt < maxRetries Then
                    Await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)))
                Else
                    Throw
                End If
            Catch ex As Exception When attempt < maxRetries
                ' Network error — retry
                Await Task.Delay(TimeSpan.FromMilliseconds(500 * attempt))
            End Try
        Next
        Throw New InvalidOperationException("All retry attempts failed")
    End Function
End Class
$vbLabelText   $csharpLabel

IronBarcode nie wymaga niczego z tego. Nie ma limitów szybkości, kluczy API, infrastruktury ponownych prób ani śledzenia limitów:

// IronBarcode: local, instant, no cost per call
// NuGet: dotnet add package IronBarcode
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-KEY";

// Generate — no network call
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");

// Read — no network call
var result = BarcodeReader.Read("barcode.png").First();
Console.WriteLine(result.Value);
// IronBarcode: local, instant, no cost per call
// NuGet: dotnet add package IronBarcode
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-KEY";

// Generate — no network call
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");

// Read — no network call
var result = BarcodeReader.Read("barcode.png").First();
Console.WriteLine(result.Value);
Imports IronBarCode

' IronBarcode: local, instant, no cost per call
' NuGet: dotnet add package IronBarcode

IronBarCode.License.LicenseKey = "YOUR-KEY"

' Generate — no network call
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
    .SaveAsPng("qr.png")

' Read — no network call
Dim result = BarcodeReader.Read("barcode.png").First()
Console.WriteLine(result.Value)
$vbLabelText   $csharpLabel

Brak logiki ponownych prób. Brak obsługi limitów szybkości. Brak obsługi wyjątków HTTP. Brak zarządzania limitami.

Zrozumienie IronBarcode

IronBarcode to natywna biblioteka .NET, która przetwarza kody kreskowe całkowicie na komputerze hosta. Obsługuje odczyt i generowanie ponad 50 formatów kodów kreskowych, natywnie przetwarza pliki PDF i działa na każdej platformie .NET od .NET Framework 4.6.2 do .NET 9.

Kluczowe cechy:

  • W pełni lokalne przetwarzanie: brak połączeń sieciowych podczas jakiejkolwiek operacji związanej z BarCode
  • Brak kosztów za każde żądanie: jedna licencja obejmuje nieograniczoną liczbę operacji związanych z BarCode
  • Brak limitów szybkości: przetwarzaj tyle BarCode'ów, ile obsługuje Twój sprzęt
  • Brak zewnętrznych zależności w czasie wykonywania: nie jest wymagańe połączenie z Internetem
  • Natywna obsługa plików PDF: odczytuj BarCODE-y z plików PDF bez konieczności uprzedniego wyodrębniania obrazów
  • Pełny odczyt i zapis: Generowanie BARCODE-ów we wszystkich głównych formatach, odczyt z obrazów, plików PDF i strumieni
// NuGet: dotnet add package IronBarcode
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-KEY";

// QR code generation
QRCodeWriter.CreateQrCode("https://example.com", 500)
    .SaveAsPng("qr.png");

// QR code with brand logo
QRCodeWriter.CreateQrCode("https://example.com", 500)
    .AddBrandLogo("logo.png")
    .SaveAsPng("branded-qr.png");

// Code128 generation
BarcodeWriter.CreateBarcode("SHIP-2024031500428", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");

// Get bytes for embedding in document or API response
byte[] bytes = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .ToPngBinaryData();

// Read from image
var results = BarcodeReader.Read("barcode.png");
foreach (var r in results)
{
    Console.WriteLine($"{r.Format}: {r.Value}");
}

// Read from PDF — native, no image extraction step
var pdfResults = BarcodeReader.Read("invoices.pdf");
foreach (var r in pdfResults)
{
    Console.WriteLine($"Page {r.PageNumber}: {r.Value}");
}

// Multi-barcode detection
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
};
var multiResults = BarcodeReader.Read("manifest.png", options);
// NuGet: dotnet add package IronBarcode
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-KEY";

// QR code generation
QRCodeWriter.CreateQrCode("https://example.com", 500)
    .SaveAsPng("qr.png");

// QR code with brand logo
QRCodeWriter.CreateQrCode("https://example.com", 500)
    .AddBrandLogo("logo.png")
    .SaveAsPng("branded-qr.png");

// Code128 generation
BarcodeWriter.CreateBarcode("SHIP-2024031500428", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");

// Get bytes for embedding in document or API response
byte[] bytes = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .ToPngBinaryData();

// Read from image
var results = BarcodeReader.Read("barcode.png");
foreach (var r in results)
{
    Console.WriteLine($"{r.Format}: {r.Value}");
}

// Read from PDF — native, no image extraction step
var pdfResults = BarcodeReader.Read("invoices.pdf");
foreach (var r in pdfResults)
{
    Console.WriteLine($"Page {r.PageNumber}: {r.Value}");
}

// Multi-barcode detection
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
};
var multiResults = BarcodeReader.Read("manifest.png", options);
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR-KEY"

' QR code generation
QRCodeWriter.CreateQrCode("https://example.com", 500) _
    .SaveAsPng("qr.png")

' QR code with brand logo
QRCodeWriter.CreateQrCode("https://example.com", 500) _
    .AddBrandLogo("logo.png") _
    .SaveAsPng("branded-qr.png")

' Code128 generation
BarcodeWriter.CreateBarcode("SHIP-2024031500428", BarcodeEncoding.Code128) _
    .SaveAsPng("barcode.png")

' Get bytes for embedding in document or API response
Dim bytes As Byte() = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) _
    .ToPngBinaryData()

' Read from image
Dim results = BarcodeReader.Read("barcode.png")
For Each r In results
    Console.WriteLine($"{r.Format}: {r.Value}")
Next

' Read from PDF — native, no image extraction step
Dim pdfResults = BarcodeReader.Read("invoices.pdf")
For Each r In pdfResults
    Console.WriteLine($"Page {r.PageNumber}: {r.Value}")
Next

' Multi-barcode detection
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True
}
Dim multiResults = BarcodeReader.Read("manifest.png", options)
$vbLabelText   $csharpLabel

Porównanie funkcji

Funkcja Cloudmersive BarCode API IronBarcode
Miejsce przetwarzania Serwery Cloudmersive Lokalnie — tylko na Twoim komputerze
Wymagane połączenie z Internetem Tak — każda operacja Nie
Transmisja danych Wszystkie obrazy/dane przesłane do Cloudmersive None
Opóźnienie na operację 100–500 ms (sieć) 10–50 ms (lokalnie)
Model kosztowy Na żądanie, miesięczny limit Jednorazowa Licencja wieczysta
Koszt 10 000 BARCODE-ów dziennie ~3650 USD/rok 749 USD jednorazowo
Limity częstotliwości Tak — równoległe i miesięczne None
Tryb offline / Air-Gapped Niemożliwe Pełne wsparcie
HIPAA Wymagana certyfikacja BAA; data leaves network Tylko lokalnie — nie jest wymagańa umowa BAA
RODO Dane przesyłane na serwery w USA Brak transferu danych
ITAR / CMMC Zabrania się przekazywania treści na zewnątrz Zgodność z projektem
Skutki awarii Twoje przetwarzanie zostaje zatrzymane Brak zależności zewnętrznych
Generowanie kodów kreskowych Tak Tak
Odczytywanie BarCode Tak Tak
Natywna obsługa plików PDF Nie — wyodrębnij obrazy osobno Tak — bezpośredni odczyt plików PDF
Wykrywanie wielu BarCodes Ograniczone Tak — ExpectMultipleBarcodes = true
Odzyskiwanie uszkodzonych kodów BarCode Podstawowe Oparte na ML, ReadingSpeed.ExtremeDetail
Obsługiwane formaty Typowe formaty Ponad 50 formatów
Ponowne próby/obsługa błędów Wymagane w kodzie produkcyjnym Nie jest potrzebne
Obsługa platformy .NET Framework Tylko .NET Core .NET Framework 4.6.2+ do .NET 9
Docker / Linux Za pośrednictwem klienta HTTP Język ojczysty
Azure Functions Za pośrednictwem klienta HTTP Język ojczysty

Przewodnik po mapowaniu API

Cloudmersive IronBarcode
Configuration.Default.ApiKey.Add("Apikey", "key") IronBarCode.License.LicenseKey = "key"
new GenerateBarcodeApi() Statyczne — nie wymaga instancji
new BarcodeScanApi() Statyczne — nie wymaga instancji
apiInstance.GenerateBarcodeQRCode(value) BarcodeWriter.CreateBarcode(value, BarcodeEncoding.QRCode).ToPngBinaryData()
apiInstance.GenerateBarcodeCode128By(value) BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128).ToPngBinaryData()
apiInstance.GenerateBarcodeEAN13(value) BarcodeWriter.CreateBarcode(value, BarcodeEncoding.EAN13).ToPngBinaryData()
scanApi.BarcodeScanImage(imageFile) BarcodeReader.Read(imageBytes)
result.RawText result.Value
result.Type result.Format
result.Successful == true Zbiór wyników nie jest pusty
HTTPS do serwerów Cloudmersive Przetwarzanie lokalne — bez sieci
Opóźnienie 100–500 ms 10–50 ms lokalnie
Wykorzystanie miesięcznego limitu Nieograniczona — bez limitów
Wymagana rotacja kluczy API Jednorazowy klucz licencyjny
Wymagana logika ponownej próby Nie jest potrzebne

Kiedy zespoły się zmieniają

Powodem przejścia z Cloudmersive na IronBarcode jest prawie zawsze jedna z czterech sytuacji:

Wymóg zgodności: Kontrola bezpieczeństwa, umowa z klientem lub audyt regulacyjny wykazały, że obrazy BARCODE-ów zawierających dane wrażliwe opuszczają sieć. Zgodność z HIPAA, RODO lub ITAR wymaga przetwarzania lokalnego. Integracja z Cloudmersive musi zostać zastąpiona bez względu na koszty i wygodę.

Niespodzianka kosztowa przy większej skali: Projekt rozpoczyna się od niewielkiego wolumenu, gdzie bezpłatne lub niedrogie poziomy Cloudmersive pokrywają koszty użytkowania. Wraz ze wzrostem liczby użytkowników aplikacji lub rozbudową procesu przetwarzania dokumentów, miesięczny rachunek rośnie proporcjonalnie. W pewnym momencie — zazwyczaj przy kosztach rzędu 100–200 USD miesięcznie — zespół dokonuje kalkulacji progu rentowności w porównaniu z Licencją wieczystą IronBarcode i decyduje się na migrację.

Środowisko typu odizolowane: Aplikacja musi działać w środowisku bez dostępu do Internetu — na hali fabrycznej, w obiekcie rządowym, w placówce opieki zdrowotnej z ograniczeniami sieciowymi. Cloudmersive nie działa w tych środowiskach. IronBarcode działa bez połączenia z siecią.

Opóźnienie w umowie SLA: Umowa o gwarantowanym poziomie usług wymaga czasów odpowiedzi, których nie da się zagwarantować ze względu na obciążenie sieci Cloudmersive. Lokalne przetwarzanie za pomocą IronBarcode sprawia, że operacje związane z kodami kreskowymi mieszczą się w ramach umowy SLA.

Przykładowy proces przetwarzania dokumentów

Realistyczny scenariusz w Enterprise: zespół ds. zobowiązań przetwarza 2000 faktur dziennie. Każda faktura jest plikiem PDF zawierającym jeden lub więcej BarCodes dla numeru zamówienia, kodu dostawcy i odniesień do pozycji.

Podejście Cloudmersive:

  • 2000 faktur × średnio 3 BARCODES = 6000 wywołań API dziennie
  • Przy 250 ms na wywołanie: 25 minut czasu oczekiwania w sieci dziennie
  • Miesięcznie: ~180 000 żądań → znaczący poziom subskrypcji
  • Roczny koszt: około 2000–4000 USD
  • Ryzyko: Przetwarzanie zostaje zatrzymane, jeśli usługa Cloudmersive jest niedostępna
  • Zgodność: Faktury AP mogą zawierać numery kont przekazywane na zewnątrz

Podejście IronBarcode:

using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-KEY";

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
};

string[] invoicePaths = Directory.GetFiles("invoices", "*.pdf");

foreach (var invoicePath in invoicePaths)
{
    // One call per invoice — processes all pages and all barcodes
    var barcodes = BarcodeReader.Read(invoicePath, options);

    foreach (var barcode in barcodes)
    {
        Console.WriteLine($"Invoice: {invoicePath} | Page: {barcode.PageNumber} | {barcode.Format}: {barcode.Value}");
    }
}
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-KEY";

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
};

string[] invoicePaths = Directory.GetFiles("invoices", "*.pdf");

foreach (var invoicePath in invoicePaths)
{
    // One call per invoice — processes all pages and all barcodes
    var barcodes = BarcodeReader.Read(invoicePath, options);

    foreach (var barcode in barcodes)
    {
        Console.WriteLine($"Invoice: {invoicePath} | Page: {barcode.PageNumber} | {barcode.Format}: {barcode.Value}");
    }
}
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR-KEY"

Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True
}

Dim invoicePaths As String() = Directory.GetFiles("invoices", "*.pdf")

For Each invoicePath As String In invoicePaths
    ' One call per invoice — processes all pages and all barcodes
    Dim barcodes = BarcodeReader.Read(invoicePath, options)

    For Each barcode In barcodes
        Console.WriteLine($"Invoice: {invoicePath} | Page: {barcode.PageNumber} | {barcode.Format}: {barcode.Value}")
    Next
Next
$vbLabelText   $csharpLabel
  • 2000 faktur przetworzonych lokalnie w ciągu kilku minut, a nie 25 minut obciążenia sieci
  • Roczny koszt: 749 USD jednorazowo (jeden programista)
  • Ryzyko: Brak zależności zewnętrznych
  • Zgodność z przepisami: Dane z faktur nigdy nie opuszczają sieci

Wnioski

Cloudmersive BarCode API to usługa REST w chmurze. Jej cena zależy od tego, jak często z niej korzystasz. Jego opóźnienie zależy od internetu. Jego dostępność zależy od infrastruktury Cloudmersive. Twoje dane są przesyłane na serwery zewnętrzne przy każdej operacji związanej z BarCode.

Są to właściwości strukturalne modelu API w chmurze, a nie konkretne zarzuty wobec Cloudmersive. Model sprawdza się dobrze w przypadku prototypowania na małą skalę lub aplikacji, w których żadna z tych właściwości nie ma znaczenia. Wraz ze wzrostem wolumenu i zaostrzeniem wymagań staje się to kosztowne, powolne i potencjalnie niezgodne z przepisami.

Jednorazowa licencja IronBarcode w cenie 749 USD obejmuje nieograniczoną liczbę operacji związanych z kodami kreskowymi, działa lokalnie bez transmisji danych, przetwarza pliki PDF natywnie i nie wymaga żadnej infrastruktury ponownych prób, jakiej wymagają integracje Cloudmersive w środowisku produkcyjnym. Przy 10 000 BARCODE-ów dziennie, już w ciągu pierwszych dwóch tygodni IronBarcode wychodzi na plus.

Często Zadawane Pytania

Czym jest Cloudmersive BarCode API?

Cloudmersive BarCode API to biblioteka kodów kreskowych .NET służąca do generowania i odczytywania kodów kreskowych w aplikacjach C#. Jest to jedna z kilku alternatyw rozważanych przez programistów przy wyborze rozwiązania do obsługi kodów kreskowych w projektach .NET.

Jakie są główne różnice między Cloudmersive BarCode API a IronBarcode?

IronBarcode wykorzystuje statyczne, bezstanowe API, które nie wymaga zarządzania instancjami, podczas gdy Cloudmersive BarCode API zazwyczaj wymaga utworzenia i konfiguracji instancji przed użyciem. IronBarcode zapewnia również natywną obsługę plików PDF, automatyczne wykrywanie formatów oraz licencjonowanie za pomocą jednego klucza we wszystkich środowiskach.

Czy licencja na IronBarcode jest łatwiejsza do uzyskania niż licencja na Cloudmersive BarCode API?

IronBarcode wykorzystuje pojedynczy klucz licencyjny obejmujący zarówno wdrożenia deweloperskie, jak i produkcyjne. Upraszcza to procesy CI/CD oraz konfiguracje Docker w porównaniu z systemami licencyjnymi, które oddzielają klucze SDK od kluczy środowiska uruchomieniowego.

Czy IronBarcode obsługuje wszystkie formaty kodów kreskowych obsługiwane przez Cloudmersive BarCode API?

IronBarcode obsługuje ponad 30 symboli kodów kreskowych, w tym QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 i wiele innych. Automatyczne wykrywanie formatu oznacza, że nie jest wymagane jawne wyliczanie formatów.

Czy IronBarcode obsługuje natywne odczytywanie kodów kreskowych z plików PDF?

Tak. IronBarcode odczytuje kody kreskowe bezpośrednio z plików PDF za pomocą BarcodeReader.Read("document.pdf") bez konieczności korzystania z oddzielnej biblioteki do renderowania plików PDF. Wyniki dla każdej strony obejmują numer strony, format kodu kreskowego, wartość oraz wskaźnik pewności.

W jaki sposób IronBarcode radzi sobie z przetwarzaniem wsadowym w porównaniu z Cloudmersive BarCode API?

Metody statyczne IronBarcode są bezstanowe i z natury bezpieczne dla wątków, co umożliwia bezpośrednie użycie Parallel.ForEach bez zarządzania instancjami dla poszczególnych wątków. Nie ma ograniczeń przepustowości w żadnym przedziale cenowym.

Jakie wersje .NET obsługuje IronBarcode?

IronBarcode obsługuje .NET Framework 4.6.2+, .NET Core 3.1 oraz .NET 5, 6, 7, 8 i 9 w jednym pakiecie NuGet. Obsługiwane platformy to Windows x64/x86, Linux x64 oraz macOS x64/ARM.

Jak zainstalować IronBarcode w projekcie .NET?

Zainstaluj IronBarcode za pomocą NuGet: uruchom polecenie „Install-Package IronBarCode” w konsoli menedżera pakietów lub „dotnet add package IronBarCode” w interfejsie CLI. Nie są wymagane żadne dodatkowe instalatory SDK ani pliki uruchomieniowe.

Czy mogę przetestować IronBarcode przed zakupem, w przeciwieństwie do Cloudmersive?

Tak. Tryb próbny IronBarcode zwraca pełne, zdekodowane wartości BarCode — tylko wygenerowane obrazy wyjściowe są opatrzone znakiem wodnym. Przed podjęciem decyzji o zakupie można sprawdzić dokładność odczytu na własnych dokumentach.

Jaka jest różnica w cenie między Cloudmersive BarCode API a IronBarcode?

Cena IronBarcode zaczyna się od 749 USD za Licencję wieczystą dla jednego programisty, obejmującą etapy rozwoju i produkcji. Szczegóły dotyczące cen i opcji zakupu hurtowego są dostępne na stronie licencyjnej IronBarcode. Nie ma wymogu posiadania oddzielnej licencji na środowisko uruchomieniowe.

Czy migracja z Cloudmersive BarCode API do IronBarcode jest prosta?

Migracja z Cloudmersive BarCode API do IronBarcode polega przede wszystkim na zastąpieniu wywołań API opartych na instancjach statycznymi metodami IronBarcode, usunięciu standardowych fragmentów kodu dotyczących licencji oraz aktualizacji nazw właściwości wyników. Większość migracji wiąże się raczej z redukcją kodu niż z jego dodawaniem.

Czy IronBarcode generuje kody QR z logo?

Tak. Funkcja QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") osadza obraz marki w kodzie QR w sposób natywny z konfigurowalną korekcją błędów. Kolorowe kody QR są również obsługiwane za pomocą funkcji ChangeBarCodeColor().

Jordi Bardia
Inżynier oprogramowania
Jordi jest najbardziej biegły w Pythonie, C# i C++. Kiedy nie wykorzystuje swoich umiejętności w Iron Software, programuje gry. Dzieląc odpowiedzialność za testowanie produktów, rozwój produktów i badania, Jordi wnosi ogromną wartość do ciągłej poprawy produktów. Różnorodne doświadczenia ...
Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie