IRONSOFTWAREHOME
DIĞER BILEŞENLERLE KARŞILAŞTIRIN

Infragistics Barkod ve IronBarcode: YalnızcaWPFOkuyucu ve Platform-Agnostik API

Curtis Chau
Curtis Chau
Updated: 19 Mayıs 2026

Infragistics barkod okuma, WPF'de çalışır. Oraya ulaşmak için bir BarcodeReader örneği, bir DecodeComplete olay işleyicisi, geri çağrıyı asenkron koda köprülemek için bir TaskCompletionSource<string>, bir URI'den yükleme için bir BitmapImage ve desteklemek istediğiniz her Symbology ailesinin bit düzeyinde bir OR'si gerekir — Decode()'a ikinci argüman olarak geçilir. Bir aileyi dışarıda bırakın — örneğin, bayraklardan Symbology.QRCode çıkarın — ve görüntülerinizdeki herhangi bir QR barkodu sessizce hiç bir şey döndürmez. Hiçbir istisna yok. Hiçbir uyarı yok. Sadece boş bir sonuç.

Bu,WPFtarafıdır.WinFormstarafında, Infragistics.Win.UltraWinBarcode paketi oluşturma kontrolleri içerir ancak hiç okuma sınıfı yoktur.WinFormsprojenizde barkodları okumanız gerekiyorsa, Infragistics barkod paketinde çağrılacak bir şey yoktur. Aynı durum herhangi birASP.NET Coredenetleyicisi, konsol aracı, Azure Fonksiyonu, Blazor Sunucu bileşeni veya Docker konteyneri için de geçerlidir. Infragistics barkod desteği UI çerçeve sınırlarında mevcuttur:WPFüretim ve olay yollu okuma alır;WinFormssadece üretim alır; geri kalan hiçbir şey almaz.

Bu karşılaştırma, bu ayrımın uygulamada ne anlama geldiğini inceler, ardından IronBarcode'un her proje türünde aynı şekilde davranan tek bir statik API ile aynı işi nasıl ele aldığını inceler.

Infragistics Barkod Desteğini Anlamak

Infragistics, en köklü .NET UI bileşen satıcılarından biridir. Barkod işlevini kapsayan abonelik olan Infragistics Ultimate suite, WinForms, WPF, ASP.NET, Blazor ve mobil için yüzlerce kontrol içerir. Infragistics'in ağlarını, grafiklerini veya zamanlayıcılarını zaten kullanan ekipler için barkod kontrolleri mantıklı bir eklentidir: zaten abonelik için ödeme yapmaktadırlar.

Ancak barkod desteği birleşik bir kütüphane değildir. Sadece kısmen üst üste binen ayrı yeteneklere sahip iki ayrı derlemeyle sağlanır.

WinForms: UltraWinBarcode

Infragistics.Win.UltraWinBarcode paketi, UltraWinBarcode sınıfı aracılığıylaWinFormsuygulamalarında barkod oluşturma sağlar. API basittir:

// InfragisticsWinFormsgeneration
using Infragistics.Win.UltraWinBarcode;

var barcode = new UltraWinBarcode();
barcode.Symbology = Symbology.Code128;
barcode.Data = "ITEM-12345";
barcode.SaveTo(outputPath);

Bir semiyoloji ayarlayın, verileri atayın, SaveTo() çağırın. WinForms'daki sadece üretim senaryoları için bu işe yarar. Symbology enum'u, Code128, Code39, QR, EAN13 ve diğerleri gibi yaygın formatları kapsar.

Bu derlemede mevcut olmayan şey bir okuyucudur. UltraBarcodeReader sınıfı yok. Scan() yöntemi yok. Sadece Infragistics.Win.UltraWinBarcode paketini kullanarak birWinFormsuygulamasında bir barkod görüntüsünü okumaya çalışırsanız, çağrılacak bir şey yoktur.

WPF: XamBarcode ve BarcodeReader

WPF tarafı, hem bir oluşturma kontrolünü (XamBarcode) hem de ayrı bir okuma sınıfını (BarcodeReader içinden, Infragistics.WPF.BarcodeReader derlemesinden Infragistics.Controls.Barcodes içinde) içerir. Okuyucu,WPFiş parçacığı ve görüntüleme modelini temel alarak olay yönelimlidir.

WPF'de bir barkod okumak için DecodeComplete olayını bağlamak, görüntüleri dosya yolundan ziyade BitmapSource nesneleri olarak yüklemek ve kodunuz asenkron ise geri çağrı modelini beklenir bir şeye dönüştürmek gerekir.

ASP.NET Core, Konsol, Docker: Hiçbir Şey

net8.0 hedefleyen ancakWPFveyaWinFormsUI derlemeleri olmayan bir Infragistics barkod paketi yok.ASP.NET Coreprojeleri, konsol araçları, Azure Fonksiyonları, Blazor Sunucusu ve Linux Docker konteynerleri için hiçbir Infragistics barkod seçeneği yoktur. Kütüphane UI çerçevesine bağlıdır.

WPFOkuma Düzeni

Infragistics ile WPF'de bir barkod okumanın gerçekte neye benzediği işte bu şekildedir:

// InfragisticsWPFreading: event-driven, requiresWPFassemblies
using Infragistics.Controls.Barcodes;
using System.Windows.Media.Imaging;

private BarcodeReader _reader;
private TaskCompletionSource<string> _result;

public InfragisticsBarcodeService()
{
    _reader = new BarcodeReader();
    _reader.DecodeComplete += OnDecodeComplete;
}

public async Task<string> ReadBarcodeAsync(string imagePath)
{
    _result = new TaskCompletionSource<string>();

    // Load asWPFBitmapSource — not a file path
    var bitmap = new BitmapImage(new Uri(imagePath, UriKind.Absolute));

    // Build the Symbology flags. The enum is [Flags];
    // EAN-8/EAN-13/UPC-A/UPC-E share a single EanUpc flag,
    // and Code 39 is exposed as Code39Ext. Use Symbology.All
    // to search every supported family.
    var symbologies = Symbology.Code128 |
                      Symbology.Code39Ext |
                      Symbology.QRCode |
                      Symbology.EanUpc |
                      Symbology.Interleaved2Of5;

    // Symbology is the second argument to Decode/DecodeAsync,
    // not a property on the reader. Result comes via callback.
    _reader.DecodeAsync(bitmap, symbologies);

    return await _result.Task;
}

private void OnDecodeComplete(object sender, ReaderDecodeArgs e)
{
    _result?.TrySetResult(e.SymbolFound ? e.Value : "No barcode found");
}

public void Dispose()
{
    if (_reader != null)
    {
        _reader.DecodeComplete -= OnDecodeComplete;
        _reader = null;
    }
}
C#

Bu, bir barkod okumak için yaklaşık 35 satırlık bir altyapıdır. Aslında neler oluyor, sayalım:

  1. Bir BarcodeReader örneği oluşturulur ve alan olarak canlı tutulur.
  2. Kurucuya bir olay işleyici bağlanır.
  3. ReadBarcodeAsync'a her çağrı, paylaşılan bir alana atanan yeni bir TaskCompletionSource<string> oluşturur — bu, bu hizmetin yazıldığı haliyle iş parçacığı güvenli olmadığı anlamına gelir. Eşzamanlı çağrılar _result'u üzerine yazar.
  4. Görüntü bir BitmapImage olarak bir Uri'den yüklenmelidir — bir dosya yolu dizesi, bir bayt dizisi veya bir akış değil.
  5. DecodeAsync(), olayı asenkron olarak tetikler. TaskCompletionSource, geri çağrı dünyası ile asenkron/bekleme dünyası arasındaki yapıştırıcıdır.
  6. Geri çağrı, e.SymbolFound doğru olduğunda e.Value çıkarır.
  7. Dispose() yöntemi, bellek sızıntılarını önlemek için olay işleyicisini çıkarmalıdır.

Bu mantığın hiçbir kısmı barkodlarla ilgili değil. Olay yönelimli tasarımı çevrelemek için gerekli altyapıdır. Üretim kodunda, _result.Task asla tamamlanmazsa durumu da ele almanız gerekir — bir zaman aşımı, bir iptal belirteci veya olayın asla tetiklenmemesine karşı bir koruma.

WinFormsBoşluğu

WinForms boşluğu, ilk başta göründüğünden daha keskin bir kopuştur.WinFormsuygulamaları inşa eden ekipler, genellikle bileşenindeki kodu kullanmak için bakarlar. Buldukları, Infragistics.Win.UltraWinBarcode tamamen okuma kabiliyeti sağlamaz.

Bu dökümantasyon ihmali değildir.WinFormsbarkod birimi, bir üretim kontrolü olarak tasarlandı. Eğer birWinFormsuygulamasında — örneğin, bir kullanıcı tarafından yüklenen bir görüntü dosyasından bir barkod okuma veya bir kamera akışından bir barkod çözme gibi — barkod taramanız gerekiyorsa, Infragistics barkod araçları ile bunu yapamazsınız. Tamamen ayrı bir kütüphane getirmeniz gerekir, bu noktada üretim için Infragistics kullanmanın mantıki temeli zayıflar.

Asimetri, karma çerçeve projelerini yürüten ekipler için bir kapsama boşluğu oluşturur. HemWPFmasaüstü istemcisine hem deWinFormsmasaüstü istemcisine sahip bir ekip,WinFormsprojesinde barkod okumak için Infragistics'i kullanamaz, her ne kadar başka her yerde Infragistics kullanıyor olsalar da.

Semoloji Belirlemesi: Sessiz Bir Hata Modu

WPF okuyucusunda Decode()'a Symbology bayrak argümanı, kendi bölümünü hak ediyor çünkü başarısızlık modu sessiz: eksik bir bayrak hatasız boş bir sonuç döndürür.

Okuyucuya çağrı yaptığınızda, aramak istediğiniz her barkod ailesini birlikte OR operatörü ile birleştirirsiniz. Desteklenen aileler QR, EAN/UPC (EanUpc), Kod 39 (Code39Ext), Kod 128, MaxiCode ve Interleaved 2 of 5'dır — DataMatrix enum içinde hiç yer almaz, dolayısıylaWPFokuyucu bunu çözemiyor. Symbology.All enum'daki her şeyi kapsar:

// Build flags explicitly, or use Symbology.All to search every family
var symbologies = Symbology.Code128 |
                  Symbology.Code39Ext |
                  Symbology.QRCode |
                  Symbology.EanUpc |
                  Symbology.Interleaved2Of5;

_reader.DecodeAsync(bitmap, symbologies);

Bir barkod görüntüsü bir QR kodu içeriyorsa ve Symbology.QRCode bayraklar arasında yoksa, e.SymbolFound false döner ve e.Value boştur. Kod çözüm olayı hala tetiklenir. Hiçbir istisna atılmaz. Arayan "Barkod bulunamadı" yanıtını alır ve resmin okunamaz mı yoksa sadece yapılandırılmadığını mı gösterecek bir işaret yoktur.

Uygulamada bu şu anlama gelir:

  • İlk kurulum, geliştiricinin test ettiği formatlar için sorunsuz bir şekilde çalışır.
  • Sistem yeni bir barkod formatı girer (bir tedarikçi etiket türünü değiştirir, yeni bir ürün serisi farklı bir semboloji kullanır).
  • Okuyucu bu aile için tüm resimlerde sessizce başarısız olur.
  • Arıza, "görselde barkod yoksa" gibi görünür, "format yapılandırılmamış" gibi değil.

Bunu hata ayıklayan ekipler, ailelerinin asla bayraklar listesinde olmadığını fark etmeden önce resim kalitesini incelemeye zaman harcar. DataMatrix daha belirgin bir durumdur: eklenecek bir bayrak yoktur, çünküWPFokuyucu bunu hiç desteklemiyor.

IronBarcode, format argümanı gerektirmez. Her okuyuşta desteklenen her formatı otomatik olarak algılar. Unutulacak bir bayrak yoktur.

PlatformMatrisi

Platformlar arası yetenek boşluğu, mimari kısıtı anlamanın en net yoludur:

PlatformInfragistics ÜretimInfragistics OkumaIronBarcode ÜretimIronBarcode Okuma
WPFXamBarcode kontrolüBarcodeReader (olay yönelimli)EvetEvet
WinFormsUltraWinBarcodeMEVCUT DEĞİLEvetEvet
ASP.NET CoreMEVCUT DEĞİLMEVCUT DEĞİLEvetEvet
KonsolMEVCUT DEĞİLMEVCUT DEĞİLEvetEvet
Blazor SunucusuMEVCUT DEĞİLMEVCUT DEĞİLEvetEvet
Docker / LinuxMEVCUT DEĞİLMEVCUT DEĞİLEvetEvet
Azure FunctionsMEVCUT DEĞİLMEVCUT DEĞİLEvetEvet

Bu tablo, saltWPFmasaüstü uygulamalarının ötesinde çalışan ekiplerin, Infragistics barkod desteğinin yetersiz olduğunu görmelerinin nedenini açıkça gösteriyor. Bir projeWinFormsve ASP.NET Core'un veyaWPFve bir arka plan işçi hizmetinin kapsamını açtığı an — Infragistics barkod kütüphanesi yalnızca kod tabanının bir bölümünü kapsıyor.

IronBarcode Anlama

IronBarcode, WinForms,WPFveya herhangi bir UI çerçevesine bağımlılığı olmayan, .NET için özel bir barkod kütüphanesidir. Aynı NuGet paketi, aynı ad alanı ve aynı API, herhangi bir .NET projesinde çalışır: WinForms, WPF, ASP.NET Core, konsol, Blazor Sunucusu, Docker, Azure Fonksiyonları, AWS Lambda.

// IronBarcode: identical code in WinForms, WPF, ASP.NET Core, console, Docker
// NuGet: dotnet add package BarCode
using IronBarCode;

// Read — 2 lines, any platform
var results = BarcodeReader.Read(imagePath);
return results.FirstOrDefault()?.Value ?? "No barcode found";

BarcodeReader.Read() statik bir yöntemdir. Yönetilecek bir örnek yok, bağlanacak bir olay yok, geri çağrı modellerini köprüleyecek bir TaskCompletionSource yok. Bir dosya yolu dizesi, bir bayt dizisi, bir Stream veya toplu işleme için bunların herhangi birinin bir dizisini kabul eder.

Oluşturma için, BarcodeWriter.CreateBarcode() kaydedebileceğiniz veya ikili veri olarak alabileceğiniz bir barkod nesnesi döndürür:

using IronBarCode;

// Generate Code 128
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
             .ResizeTo(400, 100)
             .SaveAsPng("barcode.png");

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

Lisans başlatması uygulama başlangıcında, bir kez yapılır:

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

Yan Yana: Toplu İşleme

Toplu işleme, InfragisticsWPFokuyucusundaki başka bir yapısal sınırlamayı ortaya çıkarır. Okuyucu paylaşılan bir olay işleyicisi kullanıyor ve her çağrıda _result alanı üzerine yazılıyor, bu nedenle yukarıda gösterilen servis sınıfı birden fazla görüntüyü eşzamanlı işlemeyi güvenli bir şekilde yapamaz. Çağrıları sıralamanız gerekir:

// Infragistics: must process sequentially — shared event handler and TaskCompletionSource
// field mean concurrent calls would overwrite _result before the previous decode completes
var service = new InfragisticsBarcodeService();
var results = new List<string>();

foreach (var file in imageFiles)
{
    // Each call must await before starting the next
    var value = await service.ReadBarcodeAsync(file);
    results.Add(value);
}

Bunu eşzamanlı yapmak, önceki bir çözümleme hala devam ederken _result'un üzerine yazılmamasını sağlamak için bir kilit, bir kuyruk veya bir semafor gibi önemli ek altyapı gerektirir. Bu, basit bir I/O operasyonu için önemli bir eşzamanlılık sorunudur.

IronBarcode'un statik BarcodeReader.Read() iş parçacığı güvenlidir. Ek bir senkronizasyon yapmadan aynı anda birden fazla iş parçacığından çağrılabilir. Toplu işler için, doğrudan Parallel.ForEach kullanabilirsiniz:

using IronBarCode;

// IronBarcode: parallel batch with thread-safe static API
var results = new System.Collections.Concurrent.ConcurrentBag<string>();

Parallel.ForEach(imageFiles, file =>
{
    var barcodeResults = BarcodeReader.Read(file);
    foreach (var result in barcodeResults)
    {
        results.Add(result.Value);
    }
});

BarcodeReaderOptions üzerinden paralellik yapılandırabilir ve tek bir çağrıda birden fazla dosya geçirebilirsiniz:

using IronBarCode;

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

var results = BarcodeReader.Read(imageFiles, options);
foreach (var result in results)
{
    Console.WriteLine($"{result.Value} ({result.Format})");
}

Özellik Karşılaştırması

ÖzellikInfragistics BarkodIronBarcode
WinForms barkod okumaMevcut değilEvet
WPF barkod okumaEvet (olay yönelimli)Evet (senkron)
ASP.NET Çekirdek desteğiMevcut değilEvet
Konsol / İşçi HizmetiMevcut değilEvet
Docker / LinuxMevcut değilEvet
Azure FunctionsMevcut değilEvet
Blazor SunucusuMevcut değilEvet
Otomatik format algılamaHayır — Decode() fonksiyonuna Symbology bayrakları gönderilmeliEvet — formatlar otomatik tespit edilir
PDF barkod okumaMevcut değilEvet — kendi içinde, ekstra paket gerektirmez
İş Parçacığı güvenli okumaHayır (paylaşılan etkinlik işleyicisi)Evet (statik API)
Etkinlik odaklı API gereklidirEvet (WPF)Hayır
Açık görüntü yükleme (BitmapSource)EvetHayır — dosya yolu, bayt, akış kabul eder
Senkron okumaHayır (TaskCompletionSource üzerinden köprü oluşturulmalı)Evet
Toplu işlemSadece sıralı (eşzamanlı güvenli değil)Yerleşik paralelleştirme
Görünmez format hatalarıEvet (Symbology ailesi hariç bırakılmış)Hayır
Suite bağımlılığı gereklidirEvet — Infragistics Ultimate aboneliğiHayır — bağımsız paket
Süresiz lisans seçeneğiHayır — yıllık abonelikEvet
Yaklaşık lisans maliyetiYıllık abonelik (Infragistics Ultimate)$999'dan başlayan süresiz (Lite)

API Eşleme Başvurusu

WinForms(UltraWinBarcode) dan IronBarcode'ye

InfragisticsWinForms— UltraWinBarcodeIronBarcode
new UltraWinBarcode()BarcodeWriter.CreateBarcode(data, encoding)
barcode.Symbology = Symbology.Code128BarcodeEncoding.Code128 (CreateBarcode için parametre)
barcode.Data = "ITEM-12345"CreateBarcode()'nün ilk argümanı
barcode.SaveTo(outputPath).SaveAsPng(outputPath)
Okuma API'si mevcut değilBarcodeReader.Read(imagePath)

WPF(BarcodeReader) dan IronBarcode'ye

InfragisticsWPF— BarcodeReaderIronBarcode
new BarcodeReader()Statik sınıf — örnek gerekmez
_reader.DecodeComplete += OnDecodeCompleteGerekli değil
_reader.DecodeAsync(bitmap, Symbology.X |Symbology.Y)Otomatik algılama — yapılandırma gerekmez
new BitmapImage(new Uri(path)) + _reader.Decode(bitmap, ...)BarcodeReader.Read(path)
e.Value (ReaderDecodeArgs içinde)result.Value
e.Symbology (ReaderDecodeArgs içinde)result.Format
TaskCompletionSource<string> asenkron sarmalayıcıSenkron — sarmalayıcı gerekmez
Dispose() — olay işleyicisini ayırGerekli değil — örnek veya etkinlik yok
SadeceWPFprojesiHerhangi bir .NET proje türü

Takımlar Geçiş Yaptığında

Belirli birkaç durum sürekli olarak ekipleri Infragistics barkod desteğinden uzaklaştırıyor.

WinForms'da okuma gerekli. Bu, en yaygın senaryodur. UltraWinBarcode ile barkodları güzelce oluşturan birWinFormsuygulaması, ardından yeni bir gereksinim gelir: bir yüklenmiş görüntüden bir barkod taramak veya baskıdan önce bir etiketi doğrulamak.WinFormsiçin herhangi bir Infragistics okuma API'si yok. Ekip ya ikinci bir kütüphane getiriyor ya da oluşturma kodunu her ikisini de yapan bir şeyle değiştiriyor.

YeniASP.NET Coreuç noktası. Infragistics barkod üretimi olan bir masaüstü uygulamasına bir web API arkadaşı ekleniyor. Uç nokta, görüntü yüklemeleri kabul etmeli ve barkod değerlerini döndürmeli ya da talep üzerine barkod görüntüleri üretmelidir. Infragistics barkod paketleri ile birASP.NET Coreprojesinde bunların hiçbiri mümkün değil. IronBarcode, dotnet add package BarCode ile yüklenir ve bir denetleyici eyleminde aynı şekilde çalışır, bir konsol yönteminde çalıştığı gibi.

Docker dağıtımı. BirWPFuygulaması konteyner haline getiriliyor veya barkod mantığı bir mikro servise çıkarılıyor.WPFmontajları, Linux Docker konteynerlerinde çalışmaz. InfragisticsWPFBarcodeReader onlarlaydı. IronBarcode, Linux x64'ü yerel olarak hedefler.

Toplu işleme performansı. Bir iş akışı yüzlerce veya binlerce barkod görüntüsünü işler. Etkinlik odaklı Infragistics okuyucu, bunları sıralı olarak işler. IronBarcode'un statik okuyucusu iş parçacığı güvenlidir ve herhangi bir eşzamanlılık altyapısı olmadan Parallel.ForEach veya kendi yerleşik MaxParallelThreads seçeneğini destekler.

Üretim sırasında sessiz format hataları. Bir ekip, belirli bir ailenin barkodlarının haftalarca sessizce başarısız olduğunu, çünkü Symbology bayraklarının Decode()'ya iletilen bayraklarında o ailenin olmadığını keşfeder. Otomatik algılamaya geçmek, bu hata modunu tamamen ortadan kaldırır.

Infragistics abonelik kapsamını azaltma. Bazı ekipler, barkod kontrollerinin bir parçası olduğu için özellikle Infragistics Ultimate abonelik fiyatını ödüyorlar. Barkod gereksinimi abonelik için tek neden olduğunda, maliyetin bir kısmına ayrılmış bir barkod kütüphanesi değerlendirmeye değerdir.

Sonuç

Infragistics barkod desteğiyle ilgili merkezi sorun, yetenekle değil, mimariyle ilgilidir.WPFBarcodeReader barkodları okur.WinFormsUltraWinBarcode onları oluşturur. Her bileşenin tasarlandığı dar bağlam içinde, işlev görürler. Sorun şu ki, bu iki bağlam, çoğu .NET ekibinin gerçekten ihtiyaç duyduğu şeyi kapsamaz.

Modern bir .NET uygulamasındaki bir barkod özelliği, nadiren tek bir UI framework'ünde bulunur. BirWinFormsistemcisi ve bir web API'sinde görünür. Bir Docker konteynerinde ve bir masaüstü ortamında çalışır. Bir ASP.NET uç noktasına yüklenen görüntüleri taraması ve bir konsol aracından etiketleri yazdırması gerekir. Bunların hiçbiri Infragistics barkod paketleri ile çalışmaz veWPFokuyucusunun gerekli semboloji bayrakları ile etkinlik odaklı deseni, çalıştığı tek bağlamda bile önemli ölçüde karmaşıklık ekler.

IronBarcode, aynı problemi çözer - barkodları okuma ve üretme - her .NET proje türünde aynı şekilde derlenen ve çalışan bir statik API ile.WPFbir servis sınıfında yazdığınız BarcodeReader.Read() çağrısı, birASP.NET Coredenetleyicisinde yazdığınız ve bir Linux Docker konteynerinde yazdığınız aynı çağrıdır. Olaylar yok, bayraklar yok, TaskCompletionSource yok. Barkod mantığı 35 satır yerine iki satırdır ve bu iki satır her yerde çalışır.

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ılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez