IRONSOFTWAREHOME
VIDEOLAR

C#'da Asenkron ve Çoklu İşlem Kullanımı

Curtis Chau
Curtis Chau
Updated: 1 Ağustos 2026

Mindee'den IronOCR'a geçmek, belge işleme işlemini harici bulut sunucularından kaldırıp kendi altyapınıza taşır — sayfa başına faturalandırmayı, üçüncü taraf veri iletimini ve işletim sırasında ağ kullanılabilirliğini ortadan kaldırır. Aşağıdaki bölümler, paket değişimi, ad alanı güncellemeleri ve dört pratik öncesi ve sonrası kod senaryosunu kapsar: fatura bölge çıkarımı, çok sayfalı makbuz PDF işleme, finansal belge ön işleme ve aranabilir PDF arşivleme.

Neden Mindee'den Geçiş Yapılmalı

Mindee gerçek bir sorunu zarif bir şekilde çözer: bir belge gönderin, yapılandırılmış JSON alanları alın. Finansal belgeleri bir harici API'ye iletmenin kabul edilebilir olduğu ve hacmin ılımlı kaldığı ekipler için hızlı sonuçlar sunar. Göç tetikleyicisi genellikle birkaç koşuldan birinin değişmesiyle meydana gelir.

Finansal Veri Bir Uyum Sınırını Aşıyor. Mindee'nin ParseAsync<InvoiceV4> tüm belgeyi harici sunuculara yüklüyor. IBAN kodları, yönlendirme numaraları, satıcı EIN'leri ve maddeler, kamu interneti üzerinden seyahat eder ve sizin kontrolünüz dışındaki donanımlarda işlenir. SOC 2 Tip II sertifikası, Mindee'nin güvenlik uygulamalarına uyduğunu doğrular; belgelerinizi kendi güvenlik çerçevenizin içinde tutmaz. Bir uyum incelemesi, yeni bir müşteri sözleşmesi veya bir veri yerleşim yönetmeliği, üçüncü taraf bulut işlemini çizgi çekiyorsa, Mindee'nin mimarisi, çıkartma doğruluğu ne olursa olsun diskalifiye edici olur.

Sayfa Başına Maliyetler Aleyhinize Ölçeklenir. Başlangıç planı, 1.000 sayfa ayda 49 $ olarak sağlar. Pro planı, ayda 5.000 sayfa 499 $ olarak sağlar. Çok sayfalı PDF'ler her sayfayı sayar. Geliştirme çalışmaları kota dahilindedir. Aylık 4.000 fatura işleyen bir ekip ayda 499 $ öder — yılda 5.988 $ — bu rakam her yıl sıfırlanır ve herhangi bir hacim artışıyla yukarı ölçeklenir. Aylık 24.000 sayfada Kurumsal fiyatlandırma için pazarlık yapıyorsunuz. IronOCR'nin 1.499 $ (Profesyonel katman) süresiz lisansı sınırsız belge hacmi kapsar ve maliyetiniMindeePro'ya karşı dört aydan kısa sürede geri kazandırır.

Async Yineleme Yığınınızda Yayılır. Mindee'nin her işlemi asenkroniktir çünkü her işlem bir ağ isteğidir. Bu zorunlu asenkron zincir kontrolörler, hizmet katmanları ve işçi sınıfları boyunca yukarıya doğru yayılır. Ağ mevcut olmadığında veya Mindee'nin hizmeti bir kesinti yaşadığında, yıkım sonucunda yerel bir geri dönüş olmadan başarısızlık meydana gelir. IronOCR, senkron çalışır — yerel CPU işlemi — ve mimari tutarlılık için async arayüzlerin gerektiği yerde Task.Run ile sarılır.

Önceden Hazırlanmış API Kataloğu Sert Bir Sınıra Sahiptir. Mindee, InvoiceV4, ReceiptV5, PassportV1 ve diğer belge türlerinden küçük bir kataloğu kapsar. Bu listenin dışındaki herhangi bir belge türü, Enterprise planı özel model eğitimi gerektirir: örnek toplama, etiketleme, eğitim süresi ve API'nin kullanıma hazır hale gelmesinden önceki süre. İşletmenizin ihtiyaç duyduğu her yeni belge türü, ayrı bir satıcı katılımını gerektirir. IronOCR, aynı IronTesseract().Read() çağrısını kullanarak herhangi bir belge türünü işler; yeni bir belge türü eklemek, bir eğitim sözleşmesi müzakere etmek değil, çıkarım desenlerini yazmak anlamına gelir.

**API Anahtarı Yönetimi İşletim Yüzeyi Ekler.**Mindeekimlik bilgileri, sunucu tarafında güvenli bir şekilde saklanmalı, periyodik olarak döndürülmeli ve maruziyetten korunmalıdır. Ağ çıkış kuralları,Mindeeuç noktalarına giden HTTPS'e izin vermelidir. Yeniden deneme mantığı, kaçınılmaz ağ hatalarından kaynaklanan HttpRequestException ve MindeeException ele almalıdır. Mindee'yi kaldırmak, tüm bu işletim yüzeyini kaldırır: kimlik bilgileri, çıkış kuralları, ağ G/Ç etrafında yeniden deneme sarmalayıcıları yoktur.

İzole ve Kısıtlı Ortamlar Hariç Bırakılır. Hükümet müteahhitleri, savunma taşeronları, sıkı dış internet kontrolleri olan sağlık ağları ve güvenilir internet bağlantısı olmayan tesislerde konuşlandırılan endüstriyel sistemler, Mindee'yi tasarlandığı şekilde kullanamaz. IronOCR, çıkış erişimi olmadan Docker konteynerlerinde, çıkış kısıtlamaları olan Azure Fonksiyonlarında ve tamamen izole edilmiş ortamlarda aynı şekilde çalışır. Çalışma zamanı sırasında bulut bağımlılığı yoktur. Dağıtım katmanı detayları için IronOCR lisans sayfasını görebilirsiniz.

Temel Sorun

Mindee'nin işlediği her finansal belge sizin kontrol etmediğiniz bir ağ sınırını aşar:

// Mindee: invoice with bank details leaves your infrastructure on this line
var response = await _client.ParseAsync<InvoiceV4>(new LocalInputSource("invoice.pdf"));
// IBAN, routing number, EIN, line items — all transmitted toMindeecloud
C#
// IronOCR: same invoice, same result, zero data transmission
var result = new IronTesseract().Read("invoice.pdf");
// All processing local — bank details never leave your machine
C#

IronOCR vs Mindee: Özellik Karşılaştırması

Aşağıdaki tablo, geçiş kararlarını yönlendiren mimari ve yetenek farklarını yakalar.

ÖzellikMindeeIronOCR
İşleme yeriMindee bulut sunucularıYerel makine / sizin altyapınız
Çalışma zamanı sırasında internet gerekliHer zamanAsla
Veri iletimiÇağrı başına tam belge yüklendiNone
Belge başına maliyetEvet (sayfa başına, plana dayalı)Hayır (süresiz lisans)
Başlangıç fiyatı$49/ay (1.000 sayfa)$999 tek seferlik (Lite)
Çevrimdışı / izole destekDesteklenmiyorTam destek
Yerinde dağıtımMevcut değilTek seçenek
Fatura ayrıştırmaÖnceden hazırlanmış yapısal API (InvoiceV4)OCR + bölge tabanlı veya regex çıkarım
Makbuz ayrıştırmaÖnceden hazırlanmış yapısal API (ReceiptV5)OCR + çıkarım desenleri
Keyfi belge türleriÖzel eğitim olmadan desteklenmiyorTam destek, herhangi bir belge
Özel model eğitimiKurumsal plan + öncül süreGerekli değil
API çağrı deseniAsenkron zorunlu (ağ G/Ç)Eşzamanlı (asenkron opsiyonel)
Hız sınırlamaPlana bağımlıNone
PDF girişiEvetEvet (yerel, dönüştürme yok)
Çok sayfalı PDF işlemeEvetEvet
Aranabilir PDF çıktısıHayırEvet (result.SaveAsSearchablePdf())
Görüntü ön işlemeHiçbiri açığa çıkarılmamışYeniden hizalama, Gürültü Giderme, Kontrast, İkiliye Çevirme, Keskinleştirme, Ölçekleme
Bölge bazlı çıkarımYanıt içindeki alan koordinatlarıGiriş üzerinde CropRectangle
125+ dil desteğiSınırlıEvet (paketlenmiş, tessdata yönetimi yok)
Barkod okumaHayırEvet (OCR ile eşzamanlı)
Yapısal kelime koordinatlarıHayırEvet (Sayfalar, Paragraflar, Satırlar, Kelimeler)
Thread güvenliğiN/A (çağrı başına ağ G/Ç)Yerleşik
Çapraz platformBulut (platform bağımsız)Windows, Linux, macOS, Docker, Azure, AWS
.NET uyumluluğu.NET Standard 2.0+.NET Framework 4.6.2+, .NET 5/6/7/8/9
Ticari destekEvetEvet

Hızlı Başlangıç: Mindee'den IronOCR'ye Geçiş

Adım 1: NuGet Paketini Değiştirin

Mindee paketini kaldırın:

dotnet remove package Mindee
SHELL

NuGet kullanarak IronOCR'u yükleyin:

dotnet add package IronOcr

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

Mindee ad alanı bloğunu IronOCR ad alanı ile değiştirin:

// Before (Mindee)
using Mindee;
using Mindee.Input;
using Mindee.Product.Invoice;
using Mindee.Product.Receipt;
using Mindee.Product.FinancialDocument;

// After (IronOCR)
using IronOcr;
C#

Adım 3: Lisansa İzin Verin

İlk OCR çağrısından önce uygulama başlatılırken lisans anahtarını ekleyin:

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

Kod Göç Örnekleri

Doküman Bölgeleri Kullanarak Fatura Alanı Çıkarımı

Mindee, sunucu tarafı modeli, fatura numaralarının, tarihlerin ve toplamların genellikle nerede göründüğünü bildiğinden, bilinen yerlerde önceden ayrıştırılmış alanlar döndürür.IronOCR eşdeğeri, belgenin belirli bölgelerini okumak için CropRectangle kullanır ve belgeyi iletmeden Mindee'nin çıkarım uzamsal farkındalığını taklit eder.

Mindee Yaklaşımı:

using Mindee;
using Mindee.Input;
using Mindee.Product.Invoice;

public class MindeeZoneExtractor
{
    private readonly MindeeClient _client;

    public MindeeZoneExtractor(string apiKey)
    {
        _client = new MindeeClient(apiKey);
    }

    public async Task<(string invoiceNumber, string supplierName, decimal? total)>
        ExtractKeyFieldsAsync(string filePath)
    {
        // Document transmitted toMindee— spatial field detection happens server-side
        var inputSource = new LocalInputSource(filePath);
        var response    = await _client.ParseAsync<InvoiceV4>(inputSource);
        var prediction  = response.Document.Inference.Prediction;

        // Fields arrive pre-parsed; no zone configuration required on your end
        return (
            prediction.InvoiceNumber?.Value,
            prediction.SupplierName?.Value,
            prediction.TotalAmount?.Value
        );
    }
}
C#

IronOCR Yaklaşımı:

using IronOcr;
using System.Text.RegularExpressions;

public class IronOcrZoneExtractor
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public (string invoiceNumber, string supplierName, string total)
        ExtractKeyFields(string filePath)
    {
        // Zone 1: supplier name — top 12% of document, full width
        var headerRegion = new CropRectangle(0, 0, 850, 120);
        using var headerInput = new OcrInput();
        headerInput.LoadImage(filePath, headerRegion);
        var supplierResult = _ocr.Read(headerInput);

        // Zone 2: invoice number and date — upper-right quadrant
        var metaRegion = new CropRectangle(450, 80, 400, 100);
        using var metaInput = new OcrInput();
        metaInput.LoadImage(filePath, metaRegion);
        var metaResult = _ocr.Read(metaInput);

        // Zone 3: totals block — bottom-right 20%
        var totalsRegion = new CropRectangle(500, 800, 350, 200);
        using var totalsInput = new OcrInput();
        totalsInput.LoadImage(filePath, totalsRegion);
        var totalsResult = _ocr.Read(totalsInput);

        var invoiceNumber = Regex.Match(
            metaResult.Text,
            @"Invoice\s*#?\s*:?\s*([A-Z0-9\-]+)",
            RegexOptions.IgnoreCase).Groups[1].Value;

        var total = Regex.Match(
            totalsResult.Text,
            @"Total\s*(?:Due)?\s*:?\s*\$?([\d,]+\.?\d*)",
            RegexOptions.IgnoreCase).Groups[1].Value;

        // Supplier name is the first substantial text line in the header zone
        var supplierName = supplierResult.Text
            .Split('\n')
            .FirstOrDefault(l => l.Trim().Length > 4)
            ?.Trim();

        return (invoiceNumber, supplierName, total);
    }
}
C#

Bölge tabanlı OCR, Mindee'nin mekansal alan tespitinin amacına uyar: belgeyi tüm sayfaya uygulamak yerine belirli bölgelerini okuyun. CropRectangle(x, y, width, height) piksel koordinatları alır, bu yüzden ayarlama, temsilci bir örnek faturaya karşı ölçüm gerektirir. bölge tabanlı OCR kılavuzu koordinat ölçümü ve bölge örtüşme stratejilerini kapsar. Değişken düzenlere sahip faturalar için, result.Text üzerindeki tam sayfa regex ile bölge çıkarımını birleştirmek en güvenilir sonuçları üretir.

Çok Sayfalı Harcama Rapor PDF İşleme

Mindee, PDF dosyasını kabul eder ve her sayfayı ayrı bir belge birimi olarak işler, her sayfa için yapılandırılmış bir sonuç döndürür. IronOCR, tüm sayfaları tek bir çağrıda işleyen ve her sayfanın içeriğiyle kelime koordinatlarını döndüren OcrInput.LoadPdf() aracılığıyla çok sayfalı PDF'leri yerel olarak okur.

Mindee Yaklaşımı:

using Mindee;
using Mindee.Input;
using Mindee.Product.Receipt;

public class MindeeExpenseReportProcessor
{
    private readonly MindeeClient _client;

    public MindeeExpenseReportProcessor(string apiKey)
    {
        _client = new MindeeClient(apiKey);
    }

    public async Task<List<ExpenseSummary>> ProcessExpenseReportAsync(string pdfPath)
    {
        var summaries = new List<ExpenseSummary>();

        //Mindeeprocesses per-document; each page of a PDF is a separate upload
        // For a 10-page expense report: 10 API calls, 10 pages billed
        var inputSource = new LocalInputSource(pdfPath);
        var response    = await _client.ParseAsync<ReceiptV5>(inputSource);

        var prediction = response.Document.Inference.Prediction;

        summaries.Add(new ExpenseSummary
        {
            MerchantName  = prediction.SupplierName?.Value,
            Date          = prediction.Date?.Value?.ToString(),
            TotalAmount   = prediction.TotalAmount?.Value ?? 0m,
            Category      = prediction.Category?.Value
        });

        return summaries;
    }
}
C#

IronOCR Yaklaşımı:

using IronOcr;
using System.Text.RegularExpressions;

public class IronOcrExpenseReportProcessor
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public List<ExpenseSummary> ProcessExpenseReport(string pdfPath)
    {
        // Load entire multi-page PDF in one call — no per-page upload
        using var input = new OcrInput();
        input.LoadPdf(pdfPath);    // all pages loaded locally

        var result    = _ocr.Read(input);
        var summaries = new List<ExpenseSummary>();

        // Each page maps to one receipt in the expense report
        foreach (var page in result.Pages)
        {
            var pageText = page.Text;

            // Skip pages without receipt content
            if (!pageText.Contains("Total", StringComparison.OrdinalIgnoreCase))
                continue;

            var merchantName = page.Lines
                .FirstOrDefault(l => l.Text.Trim().Length > 4)
                ?.Text.Trim();

            var totalMatch = Regex.Match(
                pageText,
                @"(?:Total|Amount\s+Due|Grand\s+Total)\s*:?\s*\$?([\d,]+\.\d{2})",
                RegexOptions.IgnoreCase);

            var dateMatch = Regex.Match(
                pageText,
                @"\b(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})\b");

            var categoryMatch = Regex.Match(
                pageText,
                @"(?:Category|Dept|Department)\s*:?\s*(.+)",
                RegexOptions.IgnoreCase);

            summaries.Add(new ExpenseSummary
            {
                PageNumber   = page.PageNumber,
                MerchantName = merchantName,
                Date         = dateMatch.Success ? dateMatch.Value : null,
                TotalAmount  = totalMatch.Success
                    ? decimal.Parse(totalMatch.Groups[1].Value.Replace(",", ""))
                    : 0m,
                Category     = categoryMatch.Success
                    ? categoryMatch.Groups[1].Value.Trim()
                    : null,
                Confidence   = page.Words.Any()
                    ? page.Words.Average(w => (double)w.Confidence)
                    : 0
            });
        }

        return summaries;
    }
}

public class ExpenseSummary
{
    public int    PageNumber   { get; set; }
    public string MerchantName { get; set; }
    public string Date         { get; set; }
    public decimal TotalAmount { get; set; }
    public string Category     { get; set; }
    public double Confidence   { get; set; }
}
C#

Mindee ile 10 sayfalı bir harcama raporu PDF işlemi 10 API çağrısı ve 10 faturalı sayfa üretir. IronOCR, aynı dosyayı tek bir yerel çağrıda işler, sayfa başına maliyet olmadan ve her sayfada ağ turu olmadan. result.Pages koleksiyonu, sayfa başına metin, kelime seviyesinde sınırlayıcı kutular ve düzen bilinçli çıkarım için satır pozisyonları sağlar. Parola korumalı PDF yükleme ve sayfa aralığı seçimi için PDF giriş kılavuzu ve kelime koordinatlarıyla çalışma için yapılandırılmış okuma sonuç kılavuzu'na bakınız.

Tarama Faturası Ön İşleme Hattı

Mindee'nin bulut işlemi, alan çıkarımının çalıştırılmasından önce kendi görüntü normalleştirmesini uygular. Bu normalleştirmenin kalitesi belirsizdir — üzerinde bir kontrolünüz yoktur ve ne tür bir ön işlem çalıştırıldığına dair bir görünürlüğünüz yoktur. Taransöz faturasında eğiklik, gölge veya düşük kontrast olduğunda, Mindee, gönderim öncesinde taramayı iyileştirmenize imkan tanımadan daha düşük güven puanları döndürür. IronOCR, her belgenin tanıma başlamadan önce ihtiyaç duyduğu tam düzeltmeleri uygulamanıza olanak tanıyan ön işleme hattını açıkça gösterir.

Mindee Yaklaşımı:

using Mindee;
using Mindee.Input;
using Mindee.Product.Invoice;

public class MindeeScanProcessor
{
    private readonly MindeeClient _client;

    public MindeeScanProcessor(string apiKey)
    {
        _client = new MindeeClient(apiKey);
    }

    public async Task<ScanResult> ProcessScannedInvoiceAsync(string scanPath)
    {
        //Mindeeapplies internal normalization — no developer control over preprocessing
        var inputSource = new LocalInputSource(scanPath);
        var response    = await _client.ParseAsync<InvoiceV4>(inputSource);
        var prediction  = response.Document.Inference.Prediction;

        return new ScanResult
        {
            InvoiceNumber = prediction.InvoiceNumber?.Value,
            Total         = prediction.TotalAmount?.Value,
            // Per-field confidence: only proxy for scan quality
            InvoiceNumberConfidence = prediction.InvoiceNumber?.Confidence,
            TotalConfidence         = prediction.TotalAmount?.Confidence
        };
    }
}
C#

IronOCR Yaklaşımı:

using IronOcr;
using System.Text.RegularExpressions;

public class IronOcrScanProcessor
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public ScanResult ProcessScannedInvoice(string scanPath)
    {
        // First pass: read without preprocessing
        var quickResult = _ocr.Read(scanPath);

        OcrResult result;

        if (quickResult.Confidence < 75)
        {
            // Low confidence — apply full preprocessing pipeline
            using var input = new OcrInput();
            input.LoadImage(scanPath);
            input.Deskew();       // correct page rotation up to ±45 degrees
            input.DeNoise();      // remove scanner artifacts and speckle
            input.Contrast();     // normalize contrast for faded or overexposed scans
            input.Sharpen();      // sharpen blurred text edges

            result = _ocr.Read(input);
        }
        else
        {
            result = quickResult;
        }

        var invoiceNumber = Regex.Match(
            result.Text,
            @"Invoice\s*(?:Number|#|No\.?)?\s*:?\s*([A-Z0-9\-]+)",
            RegexOptions.IgnoreCase).Groups[1].Value;

        var total = Regex.Match(
            result.Text,
            @"(?:Total|Amount\s+Due)\s*:?\s*\$?([\d,]+\.\d{2})",
            RegexOptions.IgnoreCase).Groups[1].Value;

        return new ScanResult
        {
            InvoiceNumber    = invoiceNumber,
            Total            = total,
            DocumentConfidence = result.Confidence,
            PreprocessingApplied = quickResult.Confidence < 75
        };
    }
}

public class ScanResult
{
    public string InvoiceNumber        { get; set; }
    public string Total                { get; set; }
    public double DocumentConfidence   { get; set; }
    public bool   PreprocessingApplied { get; set; }
}
C#

Çift geçişli desen — önce hızlı okuma, düşük güvenliğe sahip olanlarda ön işleme —, temiz taramalarda tam ön işlem maliyetinden kaçınır. Hafif eğik düz yatak taramaları, faks eserleri, fotokopi faturaları gibi hesap borçlarında en yaygın tarama kalitesi senaryoları için Deskew() ve DeNoise() birlikte çoğu tanıma doğruluğunu geri kazanır. görüntü kalitesi düzeltme rehberi, her mevcut filtreyi, farklı tarama kusurları için en iyi hangi kombinasyonların çalıştığı konusunda kılavuzluk ile belgeler. görüntü yönü düzeltme rehberi, ters tarama yapılmış belgeler için otomatik döndürmeyi kapsar.

Finansal Belgeler için Aranabilir PDF Arşivleme

Mindee herhangi bir PDF çıktısı üretmez. Mimarisi yalnızca giriştir: bir belge gönderin, JSON alanlarını alın. Taransöz faturalarını aranabilir bir formatta arşivleyen ekipler, bu hattı Mindee'nin çıkarımından ayrı olarak sürdürmelidir. IronOCR, alan çıkarımında kullanılan aynı tanıma geçişinden doğrudan aranabilir PDF'ler üretir — ek bir kütüphane yoktur, ikinci bir işleme adımı yoktur.

Mindee Yaklaşımı:

using Mindee;
using Mindee.Input;
using Mindee.Product.Invoice;

public class MindeeArchiveProcessor
{
    private readonly MindeeClient _client;

    public MindeeArchiveProcessor(string apiKey)
    {
        _client = new MindeeClient(apiKey);
    }

    public async Task ArchiveInvoiceAsync(string scanPath, string archivePath)
    {
        // Extract fields viaMindee(document transmitted to cloud)
        var inputSource = new LocalInputSource(scanPath);
        var response    = await _client.ParseAsync<InvoiceV4>(inputSource);
        var prediction  = response.Document.Inference.Prediction;

        //Mindeereturns no PDF output — searchable PDF requires a separate library
        // (e.g., iTextSharp, PdfSharp, or a separate OCR library)
        // The scan at scanPath is the only PDF available for archiving;
        // it remains image-only with no embedded text layer
        Console.WriteLine($"Fields extracted. Searchable PDF: not available from Mindee.");
        Console.WriteLine($"Invoice: {prediction.InvoiceNumber?.Value}");
    }
}
C#

IronOCR Yaklaşımı:

using IronOcr;
using System.Text.RegularExpressions;

public class IronOcrArchiveProcessor
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public ArchiveResult ArchiveInvoice(string scanPath, string archiveOutputPath)
    {
        // Apply preprocessing before recognition and archiving
        using var input = new OcrInput();
        input.LoadPdf(scanPath);   // works with both PDF scans and image files
        input.Deskew();
        input.DeNoise();

        var result = _ocr.Read(input);

        // Extract fields from the same recognition pass
        var invoiceNumber = Regex.Match(
            result.Text,
            @"Invoice\s*#?\s*:?\s*([A-Z0-9\-]+)",
            RegexOptions.IgnoreCase).Groups[1].Value;

        var vendor = result.Pages.FirstOrDefault()?.Lines
            .FirstOrDefault(l => l.Text.Trim().Length > 4)
            ?.Text.Trim();

        var totalMatch = Regex.Match(
            result.Text,
            @"Total\s*(?:Due)?\s*:?\s*\$?([\d,]+\.\d{2})",
            RegexOptions.IgnoreCase);

        // Write searchable PDF to archive in one call — no separate library needed
        result.SaveAsSearchablePdf(archiveOutputPath);

        return new ArchiveResult
        {
            InvoiceNumber    = invoiceNumber,
            VendorName       = vendor,
            Total            = totalMatch.Success ? totalMatch.Groups[1].Value : null,
            ArchivePath      = archiveOutputPath,
            DocumentConfidence = result.Confidence,
            PageCount        = result.Pages.Count()
        };
    }
}

public class ArchiveResult
{
    public string InvoiceNumber      { get; set; }
    public string VendorName         { get; set; }
    public string Total              { get; set; }
    public string ArchivePath        { get; set; }
    public double DocumentConfidence { get; set; }
    public int    PageCount          { get; set; }
}
C#

result.SaveAsSearchablePdf(), tanınan metin katmanını doğrudan çıkış PDF'ine yerleştirir ve her kelimenin seçilebilir ve aranabilir olduğu bir dosya oluşturur. Alan çıkarımı ve arşivleme aynı geçişte çalışır — bir _ocr.Read(input) çağrısı hem kalıp eşleşmesi için result.Text hem de arşiv için result.SaveAsSearchablePdf() sağlar. aranabilir PDF kılavuzu, HOCR dışa aktarımı ve PDF OCR kullanım alanı sayfası belge arşivleme hatları için üretim dağıtım kalıplarını kapsar.

FinancialDocumentV1 Özel Uç Noktasının Kaldırılması

Mindee'nin FinancialDocumentV1 API'si, belge türünü otomatik olarak algılayarak hem faturaları hem de makbuzları işler. Bunu kullanan ekipler, her belge türü yüklenirken malesef daha yüksek bulut bağımlılığı maliyetine uğrar.IronOCR kullanarak, belge yapısını ve bulut çağrısı olmadan çıkarma mantığını yönlendirmek için kelime seviyesindeki konumsal verileri kullanır.

Mindee Yaklaşımı:

using Mindee;
using Mindee.Input;
using Mindee.Product.FinancialDocument;

public class MindeeFinancialRouter
{
    private readonly MindeeClient _client;

    public MindeeFinancialRouter(string apiKey)
    {
        _client = new MindeeClient(apiKey);
    }

    public async Task<FinancialSummary> ProcessFinancialDocumentAsync(string filePath)
    {
        // All financial documents uploaded for auto-detection and parsing
        var inputSource = new LocalInputSource(filePath);
        var response    = await _client.ParseAsync<FinancialDocumentV1>(inputSource);
        var prediction  = response.Document.Inference.Prediction;

        return new FinancialSummary
        {
            DocumentType  = prediction.DocumentType?.Value,  // "INVOICE" or "RECEIPT"
            InvoiceNumber = prediction.InvoiceNumber?.Value,
            Date          = prediction.Date?.Value?.ToString(),
            TotalAmount   = prediction.TotalAmount?.Value,
            SupplierName  = prediction.SupplierName?.Value,
            CustomerName  = prediction.CustomerName?.Value
        };
    }
}
C#

IronOCR Yaklaşımı:

using IronOcr;
using System.Text.RegularExpressions;

public class IronOcrFinancialRouter
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public FinancialSummary ProcessFinancialDocument(string filePath)
    {
        var result = _ocr.Read(filePath);
        var text   = result.Text;

        // Detect document type using structural keywords from word data
        var isInvoice = DetectInvoice(result);

        if (isInvoice)
        {
            return new FinancialSummary
            {
                DocumentType  = "INVOICE",
                InvoiceNumber = Regex.Match(text,
                    @"Invoice\s*#?\s*:?\s*([A-Z0-9\-]+)",
                    RegexOptions.IgnoreCase).Groups[1].Value,
                Date          = Regex.Match(text,
                    @"(?:Invoice\s+)?Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})",
                    RegexOptions.IgnoreCase).Groups[1].Value,
                TotalAmount   = ParseAmount(text,
                    @"Total\s*(?:Due|Amount)?\s*:?\s*\$?([\d,]+\.\d{2})"),
                SupplierName  = ExtractTopLine(result),
                CustomerName  = Regex.Match(text,
                    @"Bill\s+To\s*:?\s*\n?(.+)",
                    RegexOptions.IgnoreCase).Groups[1].Value.Trim()
            };
        }
        else
        {
            // Receipt structure: merchant at top, no "Bill To" section
            return new FinancialSummary
            {
                DocumentType = "RECEIPT",
                Date         = Regex.Match(text,
                    @"\b(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})\b").Value,
                TotalAmount  = ParseAmount(text,
                    @"(?:Total|Amount\s+Due|Grand\s+Total)\s*:?\s*\$?([\d,]+\.\d{2})"),
                SupplierName = ExtractTopLine(result)
            };
        }
    }

    private bool DetectInvoice(OcrResult result)
    {
        // Invoice indicators: "Invoice", "Bill To", "Due Date", line items with quantities
        var text = result.Text;
        var invoiceSignals = new[] { "Invoice", "Bill To", "Due Date", "Purchase Order" };
        return invoiceSignals.Any(s =>
            text.IndexOf(s, StringComparison.OrdinalIgnoreCase) >= 0);
    }

    private string ExtractTopLine(OcrResult result)
    {
        return result.Pages
            .FirstOrDefault()
            ?.Lines
            .FirstOrDefault(l => l.Text.Trim().Length > 4)
            ?.Text.Trim();
    }

    private decimal? ParseAmount(string text, string pattern)
    {
        var match = Regex.Match(text, pattern, RegexOptions.IgnoreCase);
        if (match.Success &&
            decimal.TryParse(match.Groups[1].Value.Replace(",", ""), out var val))
            return val;
        return null;
    }
}

public class FinancialSummary
{
    public string   DocumentType  { get; set; }
    public string   InvoiceNumber { get; set; }
    public string   Date          { get; set; }
    public decimal? TotalAmount   { get; set; }
    public string   SupplierName  { get; set; }
    public string   CustomerName  { get; set; }
}
C#

Belge türü algılama mantığı, Mindee'nin sunucu tarafı DocumentType alanını result.Text karşısına basit bir anahtar kelime taramasıyla değiştirir. Finansal belgelerin büyük çoğunluğu için, 'Fatura' veya 'Gönderilen Kişi' varlığı faturaları belirsiz bir şekilde tanımlar; eksikliği makbuzları tanımlar. result.Pages içindeki kelime seviyesi pozisyon verileri, belge kümeniz sınır durumlarını içeriyorsa daha karmaşık düzen tabanlı algılama sağlar. okuma sonuçları kılavuzu, sınırlayıcı koordinatlarıyla birlikte Words, Lines ve Paragraphs dahil olmak üzere tam nesne modelini açıklar.

Mindee API'si ile IronOCR Haritalama Başvuru

MindeeIronOCR Karşılığı
new MindeeClient(apiKey)new IronTesseract() — API anahtarı gerekmez
new LocalInputSource(filePath)new OcrInput() + input.LoadImage(filePath) veya ocr.Read(filePath)
_client.ParseAsync<InvoiceV4>(input)_ocr.Read(filePath) + result.Text üzerinde regex çıkarımı
_client.ParseAsync<ReceiptV5>(input)_ocr.Read(filePath) + makbuz çıkarım kalıpları
_client.ParseAsync<PassportV1>(input)_ocr.Read(filePath) + CropRectangle ile MRZ bölgesi çıkarımı
_client.ParseAsync<FinancialDocumentV1>(input)_ocr.Read(filePath) + result.Text üzerinde belge türü algılama
response.Document.Inference.Predictionresult.Text, result.Pages, result.Lines, result.Words
prediction.InvoiceNumber?.ValueRegex.Match(result.Text, @"Invoice\s*#?\s*:?\s*([A-Z0-9\-]+)")
prediction.SupplierName?.Valueİlk sayfanın üst satırı result.Pages[0].Lines.First() aracılığıyla
prediction.TotalAmount?.ValueRegex.Match(result.Text, @"Total\s*:?\s*\$?([\d,]+\.\d{2})")
prediction.LineItemsresult.Lines, satır öğesi regex kalıplarına göre filtrelendi
prediction.SupplierPaymentDetails[].IbanRegex.Match(result.Text, @"IBAN\s*:?\s*([\w\s]+)")
prediction.InvoiceDate?.ValueRegex.Match(result.Text, @"Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{4})")
field.Confidenceresult.Confidence (belge seviyesi) veya word.Confidence (kelime başına)
catch (MindeeException ex)Eşdeğer yok — tanıma esnasında ağ hataları yok
await Task.Delay(100) (oran sınırı)Gerekli değil — hız sınırı yok
input.LoadPdf(path)ocrInput.LoadPdf(path) — aynı işlem, tamamen yerel
API anahtarı yapılandırmadaLisans anahtarı IronOcr.License.LicenseKey = "..." ile — dönüşüme ihtiyaç yok

Yaygın Göç Sorunları ve Çözümleri

Sorun 1: CropRectangle Koordinatları Belge Düzeniyle Uyumlu Değil

Mindee: Mekansal alan koordinatları sunucu tarafında işlenir. Mindee'nin modeli geliştiriciden herhangi bir koordinat yapılandırması olmaksızın farklı fatura düzenlerine uyum sağlar.

Çözüm: Satıcı setinizden belgelerin temsili bir örneğiyle karşılaştırarak bölge koordinatlarını ölçün. Herhangi bir resim düzenleyiciyi açın, piksel boyutlarını okuyun ve CropRectangle(x, y, width, height) buna göre tanımlayın. Değişken düzenlere sahip faturalar için, önce tüm belgeyi okuyun ve bölgeleri dinamik olarak bulmak için kelime konum verilerini kullanın:

var result  = _ocr.Read("invoice.jpg");
var allWords = result.Pages.First().Words;

// Find the word "Total" and read the region 50px to its right
var totalLabel = allWords.FirstOrDefault(w =>
    w.Text.Equals("Total", StringComparison.OrdinalIgnoreCase));

if (totalLabel != null)
{
    var valueRegion = new CropRectangle(
        totalLabel.X + totalLabel.Width + 5,
        totalLabel.Y - 5,
        200,
        totalLabel.Height + 10);

    using var valueInput = new OcrInput();
    valueInput.LoadImage("invoice.jpg", valueRegion);
    var valueResult = _ocr.Read(valueInput);
    Console.WriteLine($"Total: {valueResult.Text.Trim()}");
}
C#

bölge tabanlı OCR örneği, bu dinamik bölge desenini eksiksiz bir çalışan örnekte gösterir.

Sorun 2:MindeeKaldırıldıktan Sonra Asenkron Çağrı Siteleri Kırılır

Mindee: TümMindeeAPI yüzeyi asenkrondur çünkü ağ G/Ç'sidir. await _client.ParseAsync<t>() üzerinde inşa edilen denetleyiciler ve servis yöntemleri, çağrı zinciri boyunca asenkron olur.

Çözüm: IronOCR'nin Read() yöntemi senkron çalışır. Mevcut asenkron çağrı yerleri, senkron çağrısı Task.Run içerisinde sararak hemen çalışır hale gelir:

// Existing async signature preserved for callers
public async Task<string> ExtractInvoiceNumberAsync(string filePath)
{
    return await Task.Run(() =>
    {
        var result = new IronTesseract().Read(filePath);
        return Regex.Match(result.Text,
            @"Invoice\s*#?\s*:?\s*([A-Z0-9\-]+)",
            RegexOptions.IgnoreCase).Groups[1].Value;
    });
}
C#

Yüksek verimli ASP.NET senaryoları için, Task.Run sarmalayıcılara ve yerel async yoluna karar vermeden önce async OCR kılavuzu inceleyin.

Sorun 3: Düşük Kalitede Taramalarda Çıkarım Doğruluğu Düşüyor

Mindee: Mindee'nin ön işlemesi içsel ve otomatiktir. Tarama kalitesi sorunları, geliştirici müdahalesi olmadan yeniden gönderimden önce alan güven puanlarını düşürür.

Çözüm: IronOCR'nin ön işleme hattını tanımadan önce uygulayın. Deskew() ve DeNoise() kombinasyonu, hesaplar ödeme akışında görülen tipik düz yatak tarama kusurlarının çoğunda doğruluğu geri kazanır:

using var input = new OcrInput();
input.LoadImage("faded-invoice.jpg");
input.Deskew();
input.DeNoise();
input.Contrast();    // for faded or low-contrast thermal paper receipts
input.Binarize();    // convert to clean black-and-white before recognition
var result = new IronTesseract().Read(input);
C#

Ağır bozulmuş taramalar için input.DeepCleanBackgroundNoise() daha yoğun bir arka plan kaldırma geçişi uygular. görüntü kalitesi düzeltme rehberi, eşikleri belgeler ve filtre sihirbazı, bir verilen belge örneğinde hangi filtrelerin doğruluğu arttırdığını belirlemenize yardımcı olur.

Sorun 4: API Anahtarı ve Ağ Çıkış Yapılandırılması Kaldırıldı

Mindee: Uygulama ayarlarında depolanan API anahtarı, api.mindee.net'a çıkıcı HTTPS'ye izin veren ağ çıkış kuralları ve HttpRequestException sarmalayıcı geri döngü mantığı tümü gereken altyapıdır.

Çözüm: Üçü de birlikte kaldırılır.MindeeAPI anahtarı girişi yapılandırmadan silinir. Ağ çıkış kuralı geçersiz kılınır. try/catch (HttpRequestException) bloğu kaldırılır. Kalan tek kimlik bilgisi, başlangıçta bir kez ayarlanan IronOCR lisans anahtarıdır:

// appsettings.json: remove "Mindee:ApiKey"
// Firewall: revoke egress rule for api.mindee.net
// Startup.cs or Program.cs:
IronOcr.License.LicenseKey = Configuration["IronOcr:LicenseKey"];
//Hayırrotation schedule, no secure storage beyond standard config secret management
C#

Sorun 5: Çoklu Sayfa PDF Sayfa Sayma Faturalandırması

Mindee: Mindee'ye yüklenen 12 sayfalık bir satıcı bildirimi, aylık kotaya karşı 12 sayfa tüketir. Pro katman aşma oranlarında, eğer sınıra yakınsanız, bu tek belge, aylık allotmanın ötesinde ek olarak 1,20 $ maliyet gerektirir.

Çözüm: IronOCR, çoklu sayfalı PDF'leri sayfa başına sıfır maliyetle işler. Tüm belgeyi yükleyin ve sayfaları yineleyin:

using var input = new OcrInput();
input.LoadPdf("vendor-statement.pdf");   // 12 pages — no billing unit increment
var result = new IronTesseract().Read(input);

foreach (var page in result.Pages)
    Console.WriteLine($"Page {page.PageNumber}: {page.Text.Length} characters recognized");
C#

Sorun 6: FinancialDocumentV1 Bağımlılığı Tek Bir Desenle Değiştirilemez

Mindee: FinancialDocumentV1, belge tipi otomatik olarak algılar ve alanları belge türüne göre dallanma olmadan çıkarır.

Çözüm: Anahtar kelime varlığını kullanarak hafif bir dedektör oluşturun. Finansal belgeler, 'Fatura', 'Gönderilen Kişi' veya 'Ödeme Tarihi' içeren faturalar ve 'Makbuz', 'Teşekkürler' içeren, fatura işaretçileri içermeyen makbuzlar olarak temiz bir şekilde bölünür. İki çıkarım yöntemi artı üç satırlık bir dedektör, iyi biçimlendirilmiş belgelerde doğruluğu kaybetmedenMindeeAPI çağrısını değiştirir:

var result  = _ocr.Read(filePath);
var summary = result.Text.IndexOf("Invoice", StringComparison.OrdinalIgnoreCase) >= 0
    ? ExtractInvoiceFields(result)
    : ExtractReceiptFields(result);
C#

Mindee Geçiş Kontrol Listesi

Öncesi-Geçiş

TümMindeekullanımlarını kod tabanında denetleyin:

grep -r "using Mindee" --include="*.cs" .
grep -r "MindeeClient\|ParseAsync\|InvoiceV4\|ReceiptV5\|PassportV1\|FinancialDocumentV1" --include="*.cs" .
grep -r "LocalInputSource\|MindeeException" --include="*.cs" .
grep -r "Mindee:ApiKey\|mindee_api_key\|MINDEE_API_KEY" --include="*.json" --include="*.env" --include="*.yml" .
SHELL

Keşif bulguları:

  • Benzersiz çağrı yerlerini ParseAsync<t> kullanarak sayın
  • Hangi belge türlerinin kullanıldığını not alın (InvoiceV4, ReceiptV5, PassportV1, FinancialDocumentV1) -Mindeeçağrılarından yayılan tüm asenkron yöntem zincirlerini belirleyin
  • Yapılandırma dosyalarında ve gizli yeniliklerde API anahtarı referanslarını bulundurun -Mindeeağ çağrılarının etrafında çevrilen yeniden deneme mantığını belirleyin -Mindeeuç noktalarına giden dış trafiğe izin veren ağ çıkış kurallarını belirleyin

Kod Geçişi

  1. Proje dosyasından Mindee NuGet paketini kaldırın 2.IronOCR yüklemek için dotnet add package IronOcr çalıştırın
  2. Uygulama başlangıcına IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY" ekleyin
  3. Tüm using Mindee, using Mindee.Input ve using Mindee.Product.* yönergelerini kaldırın
  4. MindeeClient yapılandırma enjeksiyonunu IronTesseract başlatma veya DI kaydı ile değiştirin
  5. Her ParseAsync<InvoiceV4> çağrısını _ocr.Read(filePath) artı fatura çıkarım yöntemleri ile değiştirin
  6. Her ParseAsync<ReceiptV5> çağrısını _ocr.Read(filePath) artı makbuz çıkarım yöntemleri ile değiştirin
  7. Her ParseAsync<PassportV1> çağrısını CropRectangle ile MRZ alanı üzerinde bölge tabanlı OCR ile değiştirin
  8. Her ParseAsync<FinancialDocumentV1> çağrısını, belge türü dedektörü + yönlendirme deseni ile değiştirin
  9. Tüm await Task.Delay(...) oran sınırlı uygunluk çizgilerini kaldırın
  10. OCR yollarından tüm catch (MindeeException) ve catch (HttpRequestException) bloklarını kaldırın
  11. Tarama belge yolları için Deskew, DeNoise, Contrast ile birlikte OcrInput ön işleme çağrılarını ekleyin
  12. Herhangi bir belge arşivleme yollarına result.SaveAsSearchablePdf(archivePath) ekleyin
  13. Tüm yapılandırma dosyalarından ve gizli yeniliklerdenMindeeAPI anahtarını kaldırın
  14. Ağ taklidi olmadan eşzamanlı çalışan bir şekilde entegrasyon testlerini güncelleyin

Geçiş Sonrası

  • Kullanılan her belge türünü kapsayan 20-30 belge örneği setine karşı çıkarım doğruluğunu doğrulayın
  • Temiz taramaların temsili örneklerinde result.Confidence değerlerini 80'in üzerinde onaylayın; 80'in altına düşerse ön işleme uygulayın
  • Eğik ve bozulmuş tarama örneklerinde ön işlem hattını (Deskew, DeNoise) test edin
  • Çok sayfalı PDF'lerin doğru result.Pages.Count ve sayfa başı içerik ürettiğini doğrulayın
  • result.SaveAsSearchablePdf() çıktısının Adobe Acrobat ve sistem PDF görüntüleyicilerinde aranabilir olduğunu onaylayın
  • Tedarikçi kümenizdeki belge düzen varyasyonları karşısında tüm bölge tabanlı çıkarımı (CropRectangle) test edin
  • Task.Delay çağrıları olmadan toplu işlem yapın ve herhangi bir iş parçacığı sorunu olmadığını doğrulayın
  • Uygulamanın doğru bir şekilde çalışıp çalışmadığını ve dış internet erişimi olmadan başladığını doğrulayın
  • Her giriş noktasında ilk _ocr.Read() çağrısından önce lisans anahtarı başlatmanın çalıştığını doğrulayın
  • Yapılandırmada, ortam değişkenlerinde veya gizli anahtarlardaMindeeAPI anahtarı referanslarının kalmadığını kontrol edin

IronOCR'a Geçişin Ana Faydaları

Finansal Belgeler Üzerinde Tam Veri Egemenliği. Geçiş sonrası, satıcı IBAN kodları, yönlendirme numaraları, müşteri EIN'leri ve madde madde liste öğeleri altyapınızı terk etmez. Uyumluluk kapsamı yalnızca kuruluşunuzu kapsar. Üçüncü taraf AI satıcılarıyla yapılan işlemci anlaşmaları denetim izi listenizden kaldırılır. GLBA, CMMC, FedRAMP veya veri konumlandırma gereksinimleri altında çalışan ekipler, harici bulut iletimini gerektiren uyumluluk incelemesine gerek kalmadan finansal belgeleri işleyebilirler.

Hacimden Bağımsız Tahmin Edilebilir Maliyet. $999'daki IronOCR Lite lisansı, belgelerin sınırsız işlenmesi ile tek bir geliştiriciyi kapsar. Aylık 500 fatura işlem hacminden 50.000'e ölçekleme, ek bir maliyet getirmez. Yıl sonu işlem artışları, yığın hata düzeltme çalışmaları ve geliştirme test döngüleri, herhangi bir fatura sayacı artırımı oluşturmaz. Aylık 5.000 sayfa işleyen bir takımın üç yıllık toplam sahiplik maliyeti, yaklaşık $17,964 (Mindee Pro) - $1,499–$2,399 (IronOCR süresiz lisans) arasına düşer. Katman detayları için tam IronOCR ürün sayfasını görüntüleyin.

**Kalıcı Olarak Sahip Olunan Çıkarma Mantığı.**IronOCR çıkarma desenleri, depo içerisindeki basit C# kodlarıdır. Bunlar, herhangi bir dış satıcı yayına programından veya API versiyonlama kararlarından bağımsız olarak sürüm kontrolü yapılabilir, incelenebilir, test edilebilir ve dağıtılabilir. Mindee, InvoiceV5 yayınladığında ve InvoiceV4 devre dışı bıraktığında, bu, satıcı tarafından uygulanan bir geçiş son tarihtir. Çıkarım kalıplarını sürdürdüğünüzde, iyileştirme bir git commit'dir.

Gerçek Dünyadaki Tarama Kalitesi İçin Ön İşlem Kontrolü. Borç hesapları operasyonları, her biri farklı ayarlarda farklı ekipmanlarla taranan onlarca veya yüzlerce satıcıdan faturalar alır. IronOCR'nin ön işleme hattı — Deskew(), DeNoise(), Contrast(), Sharpen(), Binarize() — her tarama kategorisindeki belirli kusurları ele alır. Termal makbuz fotoğrafı, düz yataklı taranan çok sayfalı fatura ile farklı kusurlara sahiptir; her yol için uygun filtreleri uygulayabilirsiniz. Mindee'nin ön işleme süreci görünmez ve yapılandırılamaz. Tam filtre kataloğunu görüntülemek için ön işleme özellikleri sayfasına bakın.

**Tek Adımda Aranabilir PDF Arşivleme.**IronOCR yoluyla işlenen her fatura, result.SaveAsSearchablePdf() ile aranabilir bir PDF olarak arşivlenebilir. Tanınan metin katmanı, çıktı dosyasına gömülüdür ve bu sayede belge yönetim sistemleri, SharePoint kütüphaneleri ve kurumsal içerik depolarında her kelime tam metin aranabilir olur.Mindeehiçbir PDF çıktısı sağlamaz; aranabilir arşivleme daha önce ayrı bir kütüphane, ayrı bir işleme geçişi ve ek bakım gerektiriyordu. Geçişten sonra, çıkarım ve arşivleme tek bir _ocr.Read(input) çağrısında birleştirilir.

Mimari Değişiklik Olmadan Her Yerde Dağıtım. IronOCR, Windows, Linux, macOS, Docker, Azure App Service, AWS Lambda ve Google Cloud Run gibi ortamlarda aynı NuGet paketi ve aynı başlatmayla dağıtılır. İzole ortamlar, fabrika zemin sistemleri ve güvenli devlet tesisleri değişiklik yapmadan çalışır. Docker dağıtım kılavuzu, Azure kılavuzu ve AWS kılavuzu, her platform için ortama özgü yapılandırmayı kapsar.

Lütfen dikkate alın: Adobe Acrobat, Mindee, PDFSharp, Tesseract ve iText, ilgili sahiplerinin tescilli ticari markalarıdır. Bu site, Adobe Inc., Google, Mindee, empira Software GmbH veya iText Group ile bağlantılı, onaylı veya sponsorlu değildir. Tüm ürün adları, logolar ve markalar ilgili sahiplerinin mülkiyetindedir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadı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
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