IRONSOFTWAREHOME
FILMY

Migrating from Neodynamic Barcode to IronBarcode

Curtis Chau
Curtis Chau
Updated: 1 sierpnia 2026

Ten przewodnik zapewnia kompletną ścieżkę migracji z Neodynamic.SDK.Barcode i Neodynamic.SDK.BarcodeReader do IronBarcode. Obejmuje to usunięcie obu pakietów Neodynamic, zastąpienie konfiguracji podwójnej licencji jednym kluczem, tłumaczenie wywołań API generowania i odczytu oraz proces uzyskania możliwości odczytu kodów kreskowych 2D, co nie było możliwe w przypadku zestawu produktów Neodynamic. Przewodnik jest przeznaczony dla programistów, którzy posiadają istniejący kod Neodynamic i potrzebują systematycznego, plik po pliku podejścia do przeprowadzenia migracji.

Dlaczego warto przejść z Neodynamic BarCode

2D Reading Gap: Neodynamic BarCode Professional SDK generuje kody kreskowe QR, DataMatrix, PDF417 i Aztec. Żaden z tych formatów nie może być odczytany przez towarzyszący mu zestaw SDK BarCode Reader. Projekt, który generuje kody QR na etykiety produktów, kontenery transportowe lub śledzenie dokumentów, nie może odczytać tych samych kodów za pomocą czytnika zakupionego wraz z generatorem.IronBarcode odczytuje i generuje kody QR, DataMatrix, PDF417, Aztec oraz wszystkie inne obsługiwane formaty 2D za pośrednictwem tej samej biblioteki IronBarcode i tej samej licencji.

Podwójne obciążenie produktów: Każdy projekt, który używa obu SDK Neodynamic, niesie ze sobą dwa PackageReference wpisy, dwie dyrektywy using, dwa bloki licencjonowania i dwa oddzielne cykle aktualizacji. Nakład pracy powtarza się na każdym komputerze programisty, w każdym potoku CI i w każdym środowisku produkcyjnym. Wynikiem tej migracji jest połączenie dwóch pakietów o odrębnych wymaganiach konserwacyjnych w jedną zależność z jedną licencją.

Problem trzeciej biblioteki: zespoły, które napotkały lukę w odczycie 2D i zdecydowały się ją obejść zamiast przeprowadzać migrację, zazwyczaj dodawały trzecią bibliotekę — najczęściej wybierano ZXing.Net — specjalnie w celu obsługi odczytu kodów QR. Decyzja ta zamienia jedno ograniczenie na inną złożoność: trzy zależności związane z kodami kreskowymi, z których każda ma własne ograniczenia dotyczące wersji, własne informacje o wydaniu oraz własny potencjał konfliktów w przypadku aktualizacji środowiska uruchomieniowego .NET lub zależnego frameworka.IronBarcode zastępuje wszystkie trzy.

Złożoność cenowa: Neodynamic BarCode Professional SDK jest cenowo licencjonowany na dewelopera (Basic od około 352 USD, Ultimate od około 705 USD przez ComponentSource). SDK Barcode Reader ma osobny koszt. Projekt, który potrzebuje zarówno generowania, jak i odczytu 1D, musi zakupić oba, a łączny koszt rośnie z wielkością zespołu oprócz opłaty za Reader. Projekt, który wymaga odczytu 2D, wciąż nie może spełnić tego wymagania w żadnej cenie w ramach produktów Neodynamic.IronBarcode Lite obejmuje generowanie i odczytywanie — 1D i 2D — pod pojedynczą licencją. Aktualne ceny są na stronie licencyjnej IronBarcode.

Podstawowy problem

Głównym problemem w każdym kodzie źródłowym, który wykorzystywał oba zestawy SDK firmy Neodynamic do obsługi pełnego przepływu pracy związanego z kodami barcode, było to, że odczyt kodów QR nigdy nie był możliwy:

// Before: Neodynamic BarCode Reader does not support QR codes
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string ReadQrCode(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.Read(bitmap);

    // Results are always null or empty for 2D barcodes
    if (results == null || !results.Any())
    {
        throw new NotSupportedException(
            "Neodynamic Barcode Reader does not support QR codes");
    }

    return results.First().Value;
}
C#

Po migracji do IronBarcode ta sama operacja staje się standardowym wywołaniem odczytu bez obsługi specyficznej dla formatu:

// After:IronBarcode reads QR codes with the same call used for all formats
using IronBarCode;

public string ReadQrCode(string imagePath)
{
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value;
}
C#

Każdy throw new NotSupportedException(...) placeholder w bazie kodu, która odwołuje się do odczytu kodów kreskowych 2D, jest usuwany podczas tej migracji i zastępowany działającym wywołaniem odczytu.

##IronBarcode a Neodynamic BarCode: porównanie funkcji

FunkcjaNeodynamic BarCode ProfessionalNeodynamic BarCode ReaderIronBarcode
Generowanie kodów 128, EAN-13, UPC-ATakNie dotyczyTak
Generowanie kodów QR, DataMatrix, PDF417TakNie dotyczyTak
Odczytywanie kodów kreskowych 1DNie dotyczyTakTak
Odczytywanie kodów QRNie dotyczyNieTak
Odczyt DataMatrixNie dotyczyNieTak
Odczyt PDF417Nie dotyczyNieTak
Natywny odczyt BARCODE z plików PDFNieNieTak
Automatyczne wykrywanie formatuNie dotyczyNieTak
Wymagane pakiety NuGet111 (obejmuje oba)
Wymagane klucze licencyjne11 (osobno)1 (obejmuje wszystko)
Zależność od System.DrawingTakTakNie
Obsługa systemu Linux / DockerOgraniczoneOgraniczoneTak
Obsługa .NET 8 / .NET 9TakOgraniczoneTak
Asynchroniczne odczytywanie partii danychNieNieTak

Szybki start: Migracja z Neodynamic BarCode do IronBarcode

Krok 1: Usuń oba pakiety Neodynamic

Oba pakiety muszą zostać usunięte. Nie mają one wspólnych zależności, które miałyby wpływ na kolejność usuwania:

dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
SHELL

Zweryfikuj, czy oba wpisy zostały usunięte z pliku .csproj przed kontynuowaniem.

Krok 2: Dodaj IronBarcode

dotnet add package IronBarcode
SHELL

Krok 3: Zastąp konfigurację podwójnej licencji

Usuń oba bloki licencji Neodynamic i zastąp je jednym przypisaniem klucza IronBarcode. To przypisanie wykonywane jest raz podczas uruchamiania aplikacji — w Program.cs, Startup.cs lub w komponencie głównym aplikacji:

// Before: two license blocks, two products
using Neodynamic.SDK.Barcode;
using Neodynamic.SDK.BarcodeReader;

BarcodeProfessional.LicenseOwner = "Your Company";
BarcodeProfessional.LicenseKey = "GEN-LICENSE-KEY";

Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Your Company";
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-LICENSE-KEY";
// After: one key covers generation and reading across all formats
using IronBarCode;

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

Wszelkie pliki konfiguracyjne, zmienne środowiskowe lub magazyny kluczy, w których przechowywane są klucze licencyjne Neodynamic, można wycofać z użytku po zweryfikowaniu migracji.

Przykłady migracji kodu

Generowanie kodu kreskowego Code 128 BarCode

Podejście Neodynamic:

using Neodynamic.SDK.Barcode;
using System.Drawing.Imaging;

public void GenerateCode128(string data, string outputPath)
{
    var barcode = new BarcodeProfessional();
    barcode.Code = data;
    barcode.Symbology = Symbology.Code128;
    barcode.BarcodeUnit = BarcodeUnit.Pixel;

    System.Drawing.Image image = barcode.GetBarcodeImage();
    image.Save(outputPath, ImageFormat.Png);
}

Podejście IronBarcode:

using IronBarCode;

public void GenerateCode128(string data, string outputPath)
{
    BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .SaveAsPng(outputPath);
}

Import System.Drawing.Imaging nie jest już wymagany. Instancja BarcodeInfo i jej przypisania właściwości łączą się w jedno wywołanie metody. Opcje dotyczące rozmiaru, adnotacji i formatu wyjściowego można znaleźć w przewodniku dotyczącym tworzenia kodów kreskowych 1D.

Generowanie kodu QR

Podejście Neodynamic:

using Neodynamic.SDK.Barcode;

public void GenerateQrCode(string data, string outputPath)
{
    var barcode = new BarcodeProfessional();
    barcode.Code = data;
    barcode.Symbology = Symbology.QRCode;
    barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H;

    barcode.GetBarcodeImage().Save(outputPath, System.Drawing.Imaging.ImageFormat.Png);
}

Podejście IronBarcode:

using IronBarCode;

public void GenerateQrCode(string data, string outputPath)
{
    QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
        .SaveAsPng(outputPath);
}

Tłumaczenie generowane zmienia jedynie powierzchnię API. Kluczową zmianą wprowadzoną przez tę migrację jest to, że ta sama aplikacja może teraz odczytywać generowane przez siebie kody QR, korzystając z tej samej biblioteki IronBarcode i tej samej licencji. Pełne omówienie tworzenia kodów kreskowych 2D znajduje się w przewodniku dotyczącym tworzenia kodów kreskowych 2D.

Odczytywanie BarCodes 1D

Podejście Neodynamic:

using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string[] Read1DBarcodes(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.Read(bitmap);
    return results?.Select(r => r.Value).ToArray() ?? Array.Empty<string>();
}

Podejście IronBarcode:

using IronBarCode;

public string[] Read1DBarcodes(string imagePath)
{
    var results = BarcodeReader.Read(imagePath);
    return results.Select(r => r.Value).ToArray();
}

Konstrukcja Bitmap i import System.Drawing są usuwane.IronBarcode akceptuje bezpośrednio ścieżkę do pliku. Nazwa właściwości result.Value jest taka sama w obu API, więc kod downstream przetwarzający wartości zwracane nie ulega zmianom. Aby zapoznać się z opcjami odczytu i wstępnego przetwarzania obrazów zawierających wiele kodów kreskowych, zapoznaj się z przewodnikiem dotyczącym odczytu kodów kreskowych z obrazów.

Odczytywanie kodów QR (wcześniej niemożliwe)

Podejście Neodynamic:

// This method could not be implemented with Neodynamic Barcode Reader
public string ReadQrCode(string imagePath)
{
    throw new NotSupportedException(
        "Neodynamic Barcode Reader does not support QR codes");
}

Podejście IronBarcode:

using IronBarCode;

public string ReadQrCode(string imagePath)
{
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value;
}

Każdy placeholder throw new NotSupportedException(...), który odnosi się do odczytu kodów kreskowych 2D, staje się standardowym wywołaniem odczytu. Treść metody zmienia się z rzucanego wyjątku na działającą implementację. Nie jest wymagane żadne specjalne traktowanie kodów QR;IronBarcode automatycznie rozpoznaje format.

Odczytywanie BarCodes z dokumentów PDF (nowa funkcja)

Podejście Neodynamic:

// Neodynamic Reader cannot read barcodes from PDF files directly
// An image extraction step using a separate library was required before reading
// Nie direct equivalent exists
C#

Podejście IronBarcode:

using IronBarCode;

public void ReadBarcodesFromPdf(string pdfPath)
{
    var results = BarcodeReader.Read(pdfPath);

    foreach (var result in results)
    {
        Console.WriteLine($"Value: {result.Value} | Format: {result.Format} | Page: {result.PageNumber}");
    }
}

IronBarcode odczytuje kody kreskowe bezpośrednio z dokumentów PDF na wszystkich stronach. W wyniku zwracany jest numer strony, na której znaleziono każdy BARCODE. Ta funkcja nie wymaga żadnej dodatkowej biblioteki ani pośredniego etapu wyodrębniania obrazu.

Dokumentacja API Neodynamic Barcode do IronBarcode

API NeodynamicOdpowiednik IronBarcodeUwagi
BarcodeInfo.LicenseOwner = "..."IronBarCode.License.LicenseKey = "key"Połączono w jeden klucz
BarcodeInfo.LicenseKey = "..."(part of single key above)Brak oddzielnego pola właściciela
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner(removed)Nie jest wymagane
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey(removed)Nie jest wymagane
new BarcodeInfo()BarcodeWriter.CreateBarcode(data, encoding)Statyczne, bez instancji
barcode.Value = dataPierwszy parametr CreateBarcodeZaliczone na etapie tworzenia
barcode.Symbology = Symbology.Code128BarcodeEncoding.Code128Drugi parametr
barcode.Symbology = Symbology.QRCodeBarcodeEncoding.QRCodeObsługa pełnego cyklu (round-trip) jest teraz dostępna
barcode.QRCodeECL = QRCodeErrorCorrectionLevel.HQRCodeWriter.QrErrorCorrectionLevel.HighestRóżne punkty wejścia do klas
barcode.GetImage().Save(path, ImageFormat.Png).SaveAsPng(path)Płynny, bez wyliczenia ImageFormat
BarcodeReader.Read(bitmap)BarcodeReader.Read(imagePath)Ścieżka do pliku zastępuje bitmapę
result.Valueresult.ValueTa sama nazwa właściwości
Symbology.DataMatrixBarcodeEncoding.DataMatrixTylko generowanie → generowanie i odczyt
throw new NotSupportedException(...) do odczytu 2DBarcodeReader.Read(imagePath)Zastąp działającą implementacją

Typowe problemy związane z migracją i ich rozwiązania

Problem 1: Kolejność usuwania dwóch pakietów

Problem: Usunięcie przez programistów tylko jednego pakietu Neodynamic i pozostawienie drugiego powoduje błędy kompilacji, ponieważ te dwa zestawy SDK nie mają wspólnych typów, ale niektóre pliki źródłowe mogą importować obie przestrzenie nazw w tym samym pliku.

Rozwiązanie: Usuń oba pakiety przed wprowadzeniem jakichkolwiek zmian w kodzie źródłowym. Po usunięciu obu, przeszukaj wszystkie dyrektywy using Neodynamic.SDK.Barcode i using Neodynamic.SDK.BarcodeReader i usuń je razem:

dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
SHELL

Następnie sprawdź za pomocą:

grep -r "Neodynamic.SDK" --include="*.cs" .
SHELL

Problem 2: Uporządkowanie konfiguracji podwójnej licencji

Problem: Dwa bloki licencji Neodynamic często pojawiają się w różnych lokalizacjach — jeden w klasie startowej aplikacji, a drugi w inicjatorze usług. Jeśli usunie się tylko jeden blok, pozostały kod odwołuje się do przestrzeni nazw, która już nie istnieje, i nie da się go skompilować.

Rozwiązanie: Wyszukaj wszystkie cztery przypisania właściwości licencji Neodynamic i usuń je razem przed dodaniem klucza IronBarcode:

grep -r "LicenseOwner\|LicenseKey" --include="*.cs" .
SHELL

Zastąp wszystkie cztery wiersze jednym zadaniem:

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

Problem 3: Usunięcie wyjątku NotSupportedException z bloków Catch

Problem: Niektóre bazy kodu, które używały Neodynamic Reader, dodawały bloki catch (NotSupportedException) specyficznie w celu obsługi cichej awarii odczytu kodów kreskowych 2D. Te bloki catch muszą zostać usunięte wraz z kodem wywołującym wyjątek; w przeciwnym razie klauzula catch odnosi się do ścieżki kodu, która nie może się już zdarzyć.

Rozwiązanie: Wyszukaj NotSupportedException w plikach związanych z kodami kreskowymi i przeanalizuj każde wystąpienie. Jeśli wyjątek został zgłoszony w odpowiedzi na próbę odczytu formatu 2D, usuń zarówno instrukcję throw, jak i catch:

grep -r "NotSupportedException" --include="*.cs" .
SHELL

Zastąp ciało metody wyrzucającej BarcodeReader.Read(imagePath) i usuń odpowiadającą klauzulę catch od każdego wywołującego.

Lista kontrolna migracji BarCode Neodynamic

Przed migracją

  • Wyszukaj wszystkie odniesienia do paczek Neodynamic: grep -r "Neodynamic.SDK" --include="*.csproj" .
  • Wyszukaj wszystkie dyrektywy using Neodynamic: grep -r "using Neodynamic" --include="*.cs" .
  • Wyszukiwanie lokalizacji konfiguracji licencji: grep -r "LicenseOwner\|LicenseKey" --include="*.cs" .
  • Wyszukaj wszystkie miejsca tworzenia instancji BarcodeInfo: grep -r "new BarcodeInfo\(\)" --include="*.cs" .
  • Wyszukaj wszystkie wywołania odczytu Neodynamic: grep -r "BarcodeReader.Read" --include="*.cs" .
  • Wyszukaj wszystkie użycia NotSupportedException w ścieżkach kodów kreskowych: grep -r "NotSupportedException" --include="*.cs" .
  • Zidentyfikuj wszelkie biblioteki stron trzecich (ZXing.Net lub podobne), które zostały dodane specjalnie w celu wypełnienia luki w odczycie 2D — można je usunąć po migracji
  • Zapisz wszystkie klucze licencyjne Neodynamic, aby po weryfikacji można je było usunąć z magazynów sekretów

Zadania związane z aktualizacją kodu

  1. Uruchom dotnet remove package Neodynamic.SDK.Barcode
  2. Uruchom dotnet remove package Neodynamic.SDK.BarcodeReader
  3. Uruchom dotnet add package IronBarcode
  4. Usuń wszystkie dyrektywy using Neodynamic.SDK.Barcode i using Neodynamic.SDK.BarcodeReader
  5. Dodaj using IronBarCode we wszystkich plikach, które wykonują operacje na kodach kreskowych
  6. Usuń oba bloki konfiguracji licencji Neodynamic
  7. Dodaj IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY" raz podczas uruchamiania aplikacji
  8. Zastąp new BarcodeInfo() + przypisania właściwości + barcode.GetImage().Save(...) za pomocą BarcodeWriter.CreateBarcode(data, encoding).SaveAsPng(path)
  9. Zastąp wzorce QRCodeWriter odpowiednio używając QRCodeWriter.CreateQrCode()
  10. Zastąp wywołania BarcodeReader.Read(bitmap) przez usunięcie konstrukcji new Bitmap(imagePath) i przekazanie ścieżki do pliku bezpośrednio do BarcodeReader.Read(imagePath)
  11. Usuń wszystkie placeholdery throw new NotSupportedException(...) dla odczytu 2D i zastąp BarcodeReader.Read(imagePath)
  12. Usuń odpowiadające bloki catch (NotSupportedException) od wywołujących
  13. Usuń wszelkie biblioteki stron trzecich, które zostały dodane wyłącznie w celu wypełnienia luki w odczycie Neodynamic 2D

Testy po migracji

  • Sprawdź, czy generowanie BarCode'ów Code 128 daje wyniki zgodne z poprzednimi wymiarami i ustawieniami DPI
  • Sprawdź, czy generowanie kodów QR zapewnia wynik nadający się do skanowania
  • Sprawdź, czy odczyt BarCodes 1D zwraca te same wartości, co poprzednia implementacja Neodynamic Reader
  • Zweryfikuj, czy odczyt kodu QR kończy się powodzeniem na obrazach, które wcześniej wyrzucały NotSupportedException
  • Sprawdź, czy odczyt kodów DataMatrix i PDF417 przebiega pomyślnie, jeśli formaty te pojawiają się w danych wejściowych aplikacji
  • Sprawdź odczyt BarCodes w plikach PDF, jeśli aplikacja przetwarza dokumenty PDF
  • Sprawdź, czy wszystkie odniesienia do kluczy licencyjnych Neodynamic zostały usunięte z plików konfiguracyjnych i zmiennych środowiskowych
  • Sprawdź, czy biblioteka 2D innej firmy (jeśli była) została całkowicie usunięta i czy żadne pozostałe importy do niej nie odwołują się

Kluczowe korzyści wynikające z migracji do IronBarcode

Ujednolicona funkcja odczytu i zapisu: Po migracji każdy symbol, który może wygenerować IronBarcode, może być również odczytany za pomocą tej samej biblioteki IronBarcode. Zlikwidowano asymetrię między generatorem a czytnikiem firmy Neodynamic — gdzie kody QR, DataMatrix, PDF417 i Aztec mogły być generowane, ale nie odczytywane. Aplikacje, które wcześniej wymagały obejścia lub biblioteki zewnętrznej do odczytu 2D, zyskują tę możliwość bez dodatkowej integracji.

Zarządzanie pojedynczą licencją: Jeden pakiet NuGet, jeden klucz licencyjny i jeden blok konfiguracyjny zastępują dwie oddzielne subskrypcje produktów. Odnawianie, rotacja kluczy i zarządzanie zmiennymi środowiskowymi stają się o połowę mniej skomplikowane. Zmniejszenie nakładów administracyjnych ma charakter ciągły, a nie jednorazowy.

**Natywny odczyt kodów kreskowych z plików PDF:**IronBarcode odczytuje kody kreskowe bezpośrednio z dokumentów PDF, zwracając metadane dotyczące numeru strony wraz z wartościami kodów kreskowych. Aplikacje przetwarzające listy przewozowe, faktury lub dokumentację medyczną zawierającą osadzone kody kreskowe nie wymagają już pośredniego etapu wyodrębniania obrazu ani dodatkowej biblioteki PDF do obsługi odczytu kodów kreskowych. Zobacz pełną listę obsługiwanych formatów BARCODE, aby zapoznać się z kompletnym zestawem symboli i typów danych wejściowych.

Eliminacja zależności od System.Drawing: SDK Neodynamic zależą od System.Drawing, który wymaga dodatkowej konfiguracji natywnych bibliotek na Linuksie i w kontenerach Docker.IronBarcode nie ma zależności System.Drawing, co oznacza, że ta sama baza kodu działa na Windows, Linuksie i w kontenerowych środowiskach chmurowych bez zmian w konfiguracji zależnej od platformy.

Uproszczony koszt licencji zapewniającej pełną funkcjonalność: Projekt, który wymagał zarówno zestawów SDK firmy Neodynamic, jak i trzeciej biblioteki do odczytu 2D, płacił za trzy zależności, aby osiągnąć to, co IronBarcode zapewnia w ramach jednej licencji. W przypadku projektów wymagających generowania oraz odczytu 2D migracja konsoliduje zarówno ślad techniczny, jak i koszty licencji w jednym produkcie komercyjnym. Aktualne informacje o cenach są dostępne na stronie licencyjnej IronBarcode.

Neodynamic i ZXing.NET są zarejestrowanymi znakami towarowymi ich właścicieli. Ta strona nie jest powiązana, zatwierdzona ani sponsorowana przez Neodynamic lub ZXing.NET. Wszystkie nazwy produktów, logo i marki są własnością ich odpowiednich właścicieli. Porównania mają charakter wyłącznie informacyjny i odzwierciedlają informacje dostępne publicznie w momencie pisania.)}]

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podręczników.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta