IRONSOFTWAREHOME
VIDEOLAR

Syncfusion OCR'den IronOCR'ye geçiş yapma

Curtis Chau
Curtis Chau
Updated: 1 Ağustos 2026

Bu kılavuz, senaryolu belgeler ve PDF'lerden metin çıkarması gereken .NET geliştiriciler içinSyncfusion OCRİşlemcisinden IronOCR'a tam geçişi anlatmaktadır. Bu, Syncfusion.PDF.OCR.Net.Core'yı IronOcr NuGet paketine değiştirmek için gerekli olan özel yapılandırma değişikliklerini, kod yeniden yazımlarını ve dağıtım temizliğini kapsar, özellikle herSyncfusion OCRdağıtımının gerektirdiği tessdata dosya yönetimini ve Tesseract ikili yol yapılandırmasının ortadan kaldırılmasına odaklanır.

Neden Syncfusion OCR'den Geçiş Yapmalı

Syncfusion OCR, bir 1.600 bileşenli paketin içinde gömülü bir Tesseract sarmalayıcıdır. Sadece metin çıkarılması gereken takımlar için bu mimari, her seviyede sürtünme yaratır: kurulum, dağıtım, bakım ve lisanslama.

Tessdata klasörü her ortamı takip eder. Her geliştirici çalışma istasyonu, CI koşucusu, ön üretim sunucusu ve üretim konteyneri, uygulamanın kullandığı her dil için .traineddata dosyaları içeren bir tessdata dizinine ihtiyaç duyar. Tek başına İngilizce, standart model için 23 MB veya en iyi LSTM modeli için 94 MB'dır. Beş dil uygulaması, her dağıtım aracıya 100–500 MB ekler. Bu klasör, OCRProcessor yapıcısının beklediği tam yolda olmalıdır, aksi takdirde uygulama başlangıçta hemen hata verir. Bu, bir defaya mahsus bir kurulum maliyeti değil — yeni bir ortam sağlandığında ortaya çıkan tekrarlayan bir işletim maliyetidir.

Tesseract ikili yol yapılandırması, ortamlar arasında bozulur. OCRProcessor yapıcısı, hedef platformların her birinde doğru şekilde çözülmesi gereken tessdata dizinine bir yol gerektirir. Bir Windows geliştirici makinesinde (@"tessdata/") çalışan yol, dağıtım hattı klasörü açıkça kopyalamadıkça, bir Linux konteynerinde başarısız olur. Docker görüntüsü oluşturmalara COPY tessdata/ /app/tessdata/ katmanı içermelidir. CI boru hatları tessdata indirmelerini betiklemelidir. İzole ortamlar ikili dosya dağıtımını NuGet paketi geri yüklemesinden ayrı olarak yönetmelidir. Her ortam, sessiz bir OCR hatası veya çalışma zamanında istisna üreten bir yol uyumsuzluğu için yeni bir fırsat ekler.

PDF merkezli mimari, görüntü girişi için dönüştürme yükü getirir. Syncfusion'un OCRProcessor objeleri kabul eder, görüntü dosyaları değil. Bir JPG'den metin çıkarmak, bir PdfDocument oluşturmayı, bir sayfa eklemeyi, görüntüyü üzerine çizmeyi, bir MemoryStream içine kaydetmeyi, bir PdfLoadedDocument olarak yeniden yüklemeyi ve ardından OCR çalıştırmayı gerektirir — metin tanıma adımından önce dokuz işlem. Bu, her görüntü öncelikli OCR iş akışı için yürütme yükü ve kod karmaşıklığı ekler.

Paket lisanslama, büyüme tarafından tetiklenen uyumluluk olayları oluşturur. Syncfusion topluluk lisansı, beşten az geliştirici, on çalışandan az personel, yılda 1 milyon dolar veya daha az gelir ve yaşam boyu 3 milyon dolar veya daha az dış fonlama gerektirir — hepsi aynı anda. Herhangi bir eşik aşılırsa, lisans hemen geçersiz olur ve yılda geliştirici başına 995-1.595 $ arasında ticari yükseltme gerektirir. Syncfusion OCR'yi ticari olarak üç yıl boyunca kullanan beş geliştiriciden oluşan bir ekip,IronOCR Professional'dan bir kerelik 2.999 $'lık bir maliyetle aynı metin çıkarma yeteneğine sahip, 14.925–23.925 $ öder.

Yerleşik ön işleme olmadığı için bozulmuş taramalar için dış bağımlılıklar gereklidir. Tesseract, rotasyona uğramış, gürültülü veya düşük kontrastlı görüntülerde ön işleme olmadan kötü sonuçlar üretir. Syncfusion hiçbir ön işleme API'si sunmaz. Deskew, denoise veya kontrast düzeltmesine ihtiyaç duyan geliştiriciler, ayrı bir görüntüleme kütüphanesi (System.Drawing, SkiaSharp, ImageSharp) eklemelidir, filtreleri uygulamalı ve OCR başlamadan önce çıktı PDF gidiş-dönüşüne bağlamalıdır. Bu, üçüncü taraf bir bağımlılıktır ve IronOCR'un yerleşik yöntemler olarak sunduğu yetenek için ek 20-40 kod satırıdır.

Yalnızca OCR gerekiyor, ancak tüm paket lisanslı. Syncfusion, hangi özelliklerin gerçekten kullanıldığına bakılmaksızın Syncfusion.Pdf.Net.Core, Syncfusion.Compression.Net.Core ve diğer geçişli bağımlılıkları ekler. Odaklanmış bir belge işleme hizmeti inşa eden ekipler için, bu bağımlılık grafiği, metin çıkarımıyla hiçbir ilgisi olmayan bileşenler için — yapı süresi, konteyner görüntü boyutu ve lisanslama maliyeti açısından — önemli bir ağırlık taşır.

Temel Sorun

Syncfusion OCR, herhangi bir OCR çağrısı mümkün olmadan önce bir tessdata dosya sistemi yolunun yapılandırılmasını gerektirir:

// Syncfusion: tessdata path required — fails in any environment where this path is wrong
private const string TessDataPath = @"tessdata/";

using var document = new PdfLoadedDocument("scanned-invoice.pdf");
using var processor = new OCRProcessor(TessDataPath);  // throws if path does not resolve
processor.Settings.Language = Languages.English;
processor.PerformOCR(document);

var text = new StringBuilder();
foreach (PdfLoadedPage page in document.Pages)
    text.AppendLine(page.ExtractText());
C#

IronOCR, yol yapılandırması gerektirmez. Dil verileri paketle birlikte paketlenmiştir:

// IronOCR: no tessdata path, no path configuration, no folder to deploy
var text = new IronTesseract().Read("scanned-invoice.pdf").Text;
C#

IronOCR vs Syncfusion OCR: Özellik Karşılaştırması

Aşağıdaki tablo, Syncfusion OCR'den göç eden takımlar için en önemli yetenekleri kapsar.

ÖzellikSyncfusion OCRIronOCR
NuGet PaketiSyncfusion.PDF.OCR.Net.Core (paket)IronOcr (bağımsız)
Gerekli tessdataEvet — manuel indirme ve yol yapılandırmasıHayır — dahili olarak paketlenmiştir
Doğrudan Görüntü OCRHayır — PDF dönüşüm turu gerektirirEvet — LoadImage() veya doğrudan yol
Doğrudan PDF OCREvet — birincil giriş modeliEvet — birinci sınıf destek
Otomatik Ön İşlemeHayır — harici kütüphane gerekliEvet — çarpık düzeltme, gürültü engelleme, kontrast, binariz
Aranabilir PDF ÇıktısıEvet — PerformOCR()'den sonra kaydetEvet — result.SaveAsSearchablePdf()
Desteklenen Diller60+ manuel tessdata indirme yoluyla125'ten fazla NuGet dil paketleri üzerinden
Çok Dilli EşzamanlıEvet — Languages enum üzerinde bit bayraklarıEvet — AddSecondaryLanguage()
Bölge Tabanlı OCRHayırEvet — CropRectangle
Barkod OkumaHayırEvet — ocr.Configuration.ReadBarCodes = true
Yapıya Bağlı ÇıktıSayfalar sadece page.ExtractText() ileSayfalar, paragraflar, satırlar, kelimeler, karakterler koordinatlarla birlikte
Güven SkoruHayırEvet — result.Confidence ve kelime başına puanlar
hOCR Dışa AktarmaHayırEvet
Akış GirişiYalnızca PDF akışı aracılığıylaGörüntüler ve PDF'ler için doğrudan akış girişi
İş Parçacığı Güvenliğiİş parçacığı güvenli olarak belgelenmemişTam — her bir thread için bir IronTesseract örneği
Çapraz PlatformEvet — ancak tessdata her platformda çözülmelidirEvet — tek NuGet, yol yapılandırması yok
Docker DağıtımıGörüntüde tessdata katmanı gerektirirTek paket, ek katmanlar yok
Lisanslama ModeliYıllık paket aboneliği ($995–$1,595/geliştirici/yıl)Süresiz (Lite $999, Pro $1,499, Enterprise $2,999)
Topluluk Lisansı KısıtlamalarıGelir, çalışan ve fonlama sınırları ile denetim haklarıÜcretsiz deneme için hiçbir kısıtlama yok
OCR MotoruTesseract 5 (standart sarmalayıcı)Doğruluk iyileştirmeleri ile optimize edilmiş Tesseract 5

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

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

Sadece OCR özelliği için çekilenSyncfusion OCRve diğer Syncfusion paketlerini kaldırın:

dotnet remove package Syncfusion.PDF.OCR.Net.Core
dotnet remove package Syncfusion.Pdf.Net.Core
dotnet remove package Syncfusion.Compression.Net.Core
SHELL

NuGet kullanarak IronOCR'u yükleyin:

dotnet add package IronOcr

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

Syncfusion ad alanı ithalatlarını tek IronOCR ad alanı ile değiştirin:

// Before (Syncfusion)
using Syncfusion.OCRProcessor;
using Syncfusion.Pdf;
using Syncfusion.Pdf.Parsing;

// After (IronOCR)
using IronOcr;
C#

Adım 3: Lisansa İzin Verin

Uygulama başlangıcında, herhangi bir OCR çağrısından önce bir kez lisans başlatma ekleyin:

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

Paket kaydı gerekli değildir. Topluluk lisansı uygunluk kontrolü gerekli değildir. Anahtar, statik bir özelliğe atanan düz bir dizedir.

Kod Göç Örnekleri

Tessdata Yolu Ortadan Kaldırma ve OCR Başlatma

Syncfusion kod tabanları genellikle dizinin varlığını ve gerekli .traineddata dosyalarının mevcut olup olmadığını kontrol eden tessdata doğrulama mantığını içerir. Bu koruma kodu mevcuttur, çünkü eksik bir tessdata dosyası çalışma zamanında bir istisna oluşturur ve kayıp dil dosyalarından kaynaklanan üretim olayları, takımların savunmacı denetimler yazmasının yeterince yaygın olması durumudur.

Syncfusion OCR Yaklaşımı:

using Syncfusion.OCRProcessor;
using Syncfusion.Pdf.Parsing;

public class DocumentOcrService
{
    // Path hardcoded — different on every deployment target
    private const string TessDataPath = @"tessdata/";

    private bool ValidateTessdataBeforeUse(string languageCode)
    {
        // Guard required because missing files cause runtime exceptions
        if (!Directory.Exists(TessDataPath))
            throw new InvalidOperationException(
                "tessdata directory not found. Download from github.com/tesseract-ocr/tessdata_best");

        string filePath = Path.Combine(TessDataPath, $"{languageCode}.traineddata");
        if (!File.Exists(filePath))
            throw new InvalidOperationException(
                $"{languageCode}.traineddata not found — file must be downloaded manually");

        return true;
    }

    public string ExtractText(string pdfPath, string languageCode = "eng")
    {
        ValidateTessdataBeforeUse(languageCode);  // defensive check before every call

        using var document = new PdfLoadedDocument(pdfPath);
        using var processor = new OCRProcessor(TessDataPath);
        processor.Settings.Language = Languages.English;
        processor.PerformOCR(document);

        var sb = new StringBuilder();
        foreach (PdfLoadedPage page in document.Pages)
            sb.AppendLine(page.ExtractText());

        return sb.ToString();
    }
}
C#

IronOCR Yaklaşımı:

using IronOcr;

public class DocumentOcrService
{
    //Hayırtessdata path — no validation logic — no defensive checks
    public string ExtractText(string pdfPath)
    {
        return new IronTesseract().Read(pdfPath).Text;
    }
}
C#

Tüm ValidateTessdataBeforeUse yöntemi ve TessDataPath sabiti silinir. Tessdata klasörünü kopyalayan dağıtım boru hattı adımları kaldırılır. .traineddata dosyalarını indiren CI betiği kaldırılır. Tessdata'yı konteyner görüntüsüne kopyalayan Dockerfile katmanı kaldırılır. Bu kodun hiçbirinin değiştirilmesi gerekmez - artık gerekli değildir. IronTesseract kurulum kılavuzu, varsayılanların ötesinde bir yapılandırmanın gerekli olması durumunda mevcut tüm başlatma seçeneklerini kapsamaktadır.

Aranabilir PDF Üretim Boru Hattı

Syncfusion'un arama yapılabilir PDF çıktısı, yüklü bir belgede PerformOCR()'ı çağırarak çalışır, bu görünmez bir metin katmanı ekler, ardından değiştirilmiş belge bir akışa kaydedilir. Bu desen iki akışın — giriş ve çıkış — yönetilmesini gerektirir ve OCR ve kaydetme adımları aynı değiştirebilir belge nesnesi üzerinde ayrı işlemlerdir.

Syncfusion OCR Yaklaşımı:

using Syncfusion.OCRProcessor;
using Syncfusion.Pdf.Parsing;

public class SearchablePdfService
{
    private const string TessDataPath = @"tessdata/";

    public void ConvertToSearchable(string inputPdfPath, string outputPdfPath)
    {
        // Load document — mutable: PerformOCR modifies it in place
        using var document = new PdfLoadedDocument(inputPdfPath);
        using var processor = new OCRProcessor(TessDataPath);

        processor.Settings.Language = Languages.English;

        // Step 1: OCR modifies the document object
        processor.PerformOCR(document);

        // Step 2: Save the modified document to a separate output file
        using var outputStream = new FileStream(outputPdfPath, FileMode.Create, FileAccess.Write);
        document.Save(outputStream);
    }

    public byte[] ConvertToSearchableBytes(string inputPdfPath)
    {
        using var document = new PdfLoadedDocument(inputPdfPath);
        using var processor = new OCRProcessor(TessDataPath);

        processor.Settings.Language = Languages.English;
        processor.PerformOCR(document);

        using var outputStream = new MemoryStream();
        document.Save(outputStream);
        return outputStream.ToArray();
    }
}
C#

IronOCR Yaklaşımı:

using IronOcr;

public class SearchablePdfService
{
    public void ConvertToSearchable(string inputPdfPath, string outputPdfPath)
    {
        var result = new IronTesseract().Read(inputPdfPath);
        result.SaveAsSearchablePdf(outputPdfPath);
    }

    public byte[] ConvertToSearchableBytes(string inputPdfPath)
    {
        using var input = new OcrInput();
        input.LoadPdf(inputPdfPath);

        var result = new IronTesseract().Read(input);

        // SaveAsSearchablePdf also accepts a MemoryStream
        using var ms = new MemoryStream();
        result.SaveAsSearchablePdf(ms);
        return ms.ToArray();
    }
}
C#

Syncfusion'un kullandığı değiştirilebilir belge modeli — burada PerformOCR() yüklenen belgeyi kaydedilmeden önce yerinde değiştirir — IronOCR'un değişmez okuma-sonra-çıktı desenine dönüştürülür. OcrResult nesnesi tanınan metni tutar ve bu sonuçtan arama yapılabilir bir PDF olarak kaydedilebilir, düz metin olarak dışa aktarılabilir veya yapılandırılmış veri olarak gezilebilir. aranabilir PDF nasıl yapılır kılavuzu ve aranabilir PDF örneği, PDF/A uygunluk ayarları dahil ek çıktı seçeneklerini kapsar.

Akış Tabanlı PDF OCR Boru Hattı

HTTP yükleme, mesaj kuyruğu veya blob depolama yoluyla PDF belgeleri alan üretim hizmetleri genellikle akışlarla çalışır dosya yolları yerine. Syncfusion, PdfLoadedDocument aracılığıyla akışları kabul eder, ancak tessdata yol kısıtlaması hala geçerlidir — akışın işlendiği sunucuda tessdata klasörü bulunmalıdır.

Syncfusion OCR Yaklaşımı:

using Syncfusion.OCRProcessor;
using Syncfusion.Pdf.Parsing;

public class StreamOcrService
{
    private const string TessDataPath = @"tessdata/";

    public string ExtractFromStream(Stream pdfStream)
    {
        // Stream input works, but tessdata path constraint remains
        using var document = new PdfLoadedDocument(pdfStream);
        using var processor = new OCRProcessor(TessDataPath);

        processor.Settings.Language = Languages.English;
        processor.PerformOCR(document);

        var sb = new StringBuilder();
        foreach (PdfLoadedPage page in document.Pages)
            sb.AppendLine(page.ExtractText());

        return sb.ToString();
    }

    public async Task<string> ExtractFromStreamAsync(Stream pdfStream)
    {
        //Hayırnative async — must wrap in Task.Run
        return await Task.Run(() => ExtractFromStream(pdfStream));
    }
}
C#

IronOCR Yaklaşımı:

using IronOcr;

public class StreamOcrService
{
    public string ExtractFromStream(Stream pdfStream)
    {
        using var input = new OcrInput();
        input.LoadPdf(pdfStream);    // accepts Stream directly

        return new IronTesseract().Read(input).Text;
    }

    public async Task<string> ExtractFromStreamAsync(Stream pdfStream)
    {
        using var input = new OcrInput();
        input.LoadPdf(pdfStream);

        var ocr = new IronTesseract();
        var result = await ocr.ReadAsync(input);   // native async support
        return result.Text;
    }
}
C#

LoadPdf() yöntemi OcrInput üzerinde doğrudan Stream kabul eder, ara dosya yazma gerekmez.IronOCR ayrıca yerel asenkron entegrasyon için ReadAsync() yöntemi sağlar — Task.Run() sarmalayıcıya gerek yoktur. Web API denetleyicileri, Azure İşlevleri ve diğer async hizmet desenleri için bu, doğrudan bir API uyumudur. akış girdisi kılavuzu, görüntü akışları ve çok sayfalı TIFF akışları dahil tüm akış yükleme seçeneklerini belgeler. async OCR kılavuzu, uzun süreli belge grupları için iptal belirteci desteği ve ilerleme geri çağrıları kapsar.

Yapıya Bağlı Paragraf ve Kelime Çıkarımı

Syncfusion'un metin çıkarma modeli iki seviye sunar: Tam belge için result.Text aracılığıyla birleştirilmiş metin ve page.ExtractText() yineleyerek sayfa başına metin. Alt sayfa yapısı yoktur — kelime koordinatları, paragraf sınırları, her bir belirtec için güven puanları yoktur. Belirli alanları konumuna göre bulması veya düşük güven belirteçleri filtrelemesi gereken uygulamalar kendi ayrıştırma mantığını birleştirilmiş dize üzerine uygulamalıdır.

Syncfusion OCR Yaklaşımı:

using Syncfusion.OCRProcessor;
using Syncfusion.Pdf.Parsing;

public class StructuredExtractionService
{
    private const string TessDataPath = @"tessdata/";

    public Dictionary<int, string> ExtractPerPage(string pdfPath)
    {
        var pageTexts = new Dictionary<int, string>();

        using var document = new PdfLoadedDocument(pdfPath);
        using var processor = new OCRProcessor(TessDataPath);

        processor.Settings.Language = Languages.English;
        processor.PerformOCR(document);

        // Page-level is the finest granularity available
        int pageNum = 1;
        foreach (PdfLoadedPage page in document.Pages)
        {
            pageTexts[pageNum] = page.ExtractText();
            pageNum++;
        }

        return pageTexts;
        //Hayırword coordinates, no paragraph boundaries, no per-token confidence
    }
}
C#

IronOCR Yaklaşımı:

using IronOcr;

public class StructuredExtractionService
{
    public void ExtractWithStructure(string pdfPath)
    {
        var result = new IronTesseract().Read(pdfPath);

        Console.WriteLine($"Overall confidence: {result.Confidence}%");

        foreach (var page in result.Pages)
        {
            Console.WriteLine($"Page {page.PageNumber}: {page.Words.Length} words");

            foreach (var paragraph in page.Paragraphs)
            {
                Console.WriteLine($"  Paragraph at ({paragraph.X}, {paragraph.Y}):");
                Console.WriteLine($"  {paragraph.Text}");
            }
        }
    }

    public IEnumerable<string> ExtractHighConfidenceWords(string pdfPath, int minConfidence = 80)
    {
        var result = new IronTesseract().Read(pdfPath);

        // Per-word confidence filtering — not possible with Syncfusion's page-level model
        return result.Pages
            .SelectMany(p => p.Words)
            .Where(w => w.Confidence >= minConfidence)
            .Select(w => w.Text);
    }
}
C#

Yapıya bağlı çıktı modeli, paragrafları, satırları, kelimeleri ve karakterleri sınır kutusu koordinatları ve bireysel güven puanları ile açığa çıkarır. Bu, özellikle fatura alanı çıkarma, form ayrıştırma ve belge sınıflandırma için kullanışlıdır - burada metnin sayfada nerede göründüğünü bilmek, metnin ne dediği kadar önemlidir. okuma sonuçları kılavuzu ve OcrResult API referansı tam nesne grafiğini belgeliyor.

Paralel Yürütme ile Toplu Belge İşleme

Yüksek hacimli OCR hizmetleri düzinelerce veya yüzlerce belgeyi aynı anda işler. Syncfusion, OCRProcessor'ın thread güvenliğini belgelememektedir, bu da ardışık işleme zorunluluk getirir veya geliştiricilerin kendi örnek havuzlarını uygulamalarını gerektirir.IronOCR örnekleri, her bir thread için yaratmak güvenlidir, ilave senkronizasyona ihtiyaç duymadan doğrudan Parallel.ForEach veya PLINQ kullanımı sağlar.

Syncfusion OCR Yaklaşımı:

using Syncfusion.OCRProcessor;
using Syncfusion.Pdf.Parsing;

public class BatchOcrService
{
    private const string TessDataPath = @"tessdata/";

    public Dictionary<string, string> ProcessBatch(IEnumerable<string> pdfPaths)
    {
        var results = new Dictionary<string, string>();

        // Sequential processing — OCRProcessor thread safety not guaranteed
        foreach (var path in pdfPaths)
        {
            using var document = new PdfLoadedDocument(path);
            using var processor = new OCRProcessor(TessDataPath);

            processor.Settings.Language = Languages.English;
            processor.PerformOCR(document);

            var sb = new StringBuilder();
            foreach (PdfLoadedPage page in document.Pages)
                sb.AppendLine(page.ExtractText());

            results[path] = sb.ToString();
        }

        return results;
    }
}
C#

IronOCR Yaklaşımı:

using IronOcr;

public class BatchOcrService
{
    public Dictionary<string, string> ProcessBatch(IEnumerable<string> pdfPaths)
    {
        var results = new ConcurrentDictionary<string, string>();

        // Parallel processing — IronTesseract is safe per-thread
        Parallel.ForEach(pdfPaths, pdfPath =>
        {
            var ocr = new IronTesseract();   // one instance per thread
            var text = ocr.Read(pdfPath).Text;
            results[pdfPath] = text;
        });

        return new Dictionary<string, string>(results);
    }
}
C#

Her thread için bir IronTesseract örneği oluşturmak, paralel işleme için belgelenmiş desenidir. Paylaşılan durum yok, kilit uyuşmazlığı yok, örnek havuzu altyapısı gerekmiyor. çoklu iş parçacığı örneği, tipik belge parti boyutları için iş hacmi karşılaştırmalarını gösterir ve hız optimizasyonu kılavuzu, gecikmeye duyarlı iş yükleri için motor yapılandırma seçeneklerini kapsar.

Syncfusion OCR API'den IronOCR Haritalama Referansı

Syncfusion OCRIronOCR KarşılığıNotlar
Syncfusion.PDF.OCR.Net.CoreIronOcrNuGet paketini değiştir
Syncfusion.OCRProcessorIronOcrTek bir isim alanı
Syncfusion.PdfKaldırArtık gerekli değil
Syncfusion.Pdf.ParsingKaldırArtık gerekli değil
SyncfusionLicenseProvider.RegisterLicense()IronOcr.License.LicenseKey =String atama, suite kaydı yok
new OCRProcessor(tessdataPath)new IronTesseract()Yol argümanı yok
PdfLoadedDocument(filePath)Yolu doğrudan ocr.Read(path)'ya geçirinYa da OcrInput'u LoadPdf() ile kullanın
PdfLoadedDocument(stream)input.LoadPdf(stream)Akış desteği doğrudandır
processor.Settings.Language = Languages.Englishocr.Language = OcrLanguage.EnglishOcrLanguage enum
Languages.English |Languages.Frenchocr.Language = OcrLanguage.English; ocr.AddSecondaryLanguage(OcrLanguage.French)Ekleyici desen, bitwise bayrakları değiştirir
processor.PerformOCR(document)ocr.Read(input)OcrResult doğrudan döndürür
page.ExtractText()result.Text veya result.Pages[i].TextTüm metin için döngü gerekli değil
document.Pages yinelemeresult.Pages[] diziParagraflar, kelimeler, karakterler dahildir
OCR sonrası document.Save(outputStream)result.SaveAsSearchablePdf(path)Özel yöntem
Tessdata doğrulama mantığıTamamen kaldırDoğrulanacak tessdata yok
Manual tessdata yol sabitiTamamen kaldırIronOCR tarafından gerekmez
PdfBitmap görüntüden-PDF'ye dönüşüminput.LoadImage(imagePath)Resim OCR için PDF yolculuğu yok
Ön işleme API'si yokinput.Deskew(), input.DeNoise(), input.Contrast()OcrInput içine yerleşik

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

Sorun 1: Paketleri Değiştirdikten Sonra Tessdata Dizini Bulunamadı

Syncfusion OCR: Tessdata dizin doğrulama kontrolü başlangıçta ya da her çağrıda koruma olarak yazılmıştır. Syncfusion'u kaldırdıktan ve IronOCR'u yükledikten sonra, bu doğrulama kodu hala derlenir (Syncfusion ad alanları değil, System.IO kullanır) ancak artık olmayan bir işlemi korur. Yerinde bırakmak, gelecekteki geliştirmecileri yanıltabilecek ölü kod olarak kalır.

Çözüm: Tüm tessdata doğrulama mantığını tamamen silin. TessDataPath sabitini, tüm Directory.Exists(TessDataPath) kontrollerini, bütün File.Exists(Path.Combine(TessDataPath, ...)) kontrolerini ve her türlü başlangıç doğrulama yöntemini kaldırın. IronOCR, eksik olacak tessdata olmadığı için tessdata ile ilgili istisnalar atmaz:

// Delete these entirely — they have no equivalent in IronOCR
// private const string TessDataPath = @"tessdata/";
// private bool ValidateTessdata() { ... }

// The only error handling needed after migration:
try
{
    return new IronTesseract().Read(pdfPath).Text;
}
catch (FileNotFoundException)
{
    throw new ArgumentException($"PDF file not found: {pdfPath}");
}
C#

Sorun 2: Çalışma Zamanında Dil Dosyaları Mevcut Değil

Syncfusion OCR: Dil .traineddata dosyaları, dosya sistemi eserleri olarak dağıtıldı, CopyToOutputDirectory olarak işaretlendi ve derleme sisteminden kopyalandı. Projeden tessdata klasörünü çıkardıktan sonra, dil ile ilgili CI adımları ve .csproj girdileri, silinen dosyalara hâlâ referans verebilir, bu da derleme uyarılarına veya hatlarına sebep olabilir.

Çözüm: Bütün tessdata ile ilgili girdileri .csproj dosyalarından ve CI ardışık düzen tanımlarından kaldırın. Bunun yerine dil paketlerini NuGet paketleri olarak yükleyin:

# Languages install as NuGet packages — no manual file management
dotnet add package IronOcr.Languages.French
dotnet add package IronOcr.Languages.German
dotnet add package IronOcr.Languages.ChineseSimplified
SHELL
// Language configuration after migration
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.French;
ocr.AddSecondaryLanguage(OcrLanguage.German);
var result = ocr.Read("multilingual-report.pdf");
C#

Çoklu diller rehberi, dil paketi kurulumunu ve desteklenen 125+ dil içinOcrLanguage enumdeğerlerini kapsar.

Sorun 3: Aranabilir PDF Çıkış Bayt Sırası Farklılaşıyor

Syncfusion OCR: Aranabilir PDF, document.Save(stream) documenti mutasyona uğrattıktan sonra PerformOCR()'i çağırarak üretildi. Bayt dizisinin bazı alt tüketicileri, Syncfusion'un belirli PDF yapısını, meta veri alanlarını veya üretici dizgesini beklemek üzere yazılmış olabilir.

Çözüm: IronOCR'un SaveAsSearchablePdf(), metin katmanı içeren standart bir PDF üretir. Alt tüketicilerinizle (PDF görüntüleyicileri, arama dizinleri, arşivleme sistemleri) uyumluluğu doğrulamak için çıktıyı test edin. Bayt bazında aynı çıktının gerekli olduğu durumlarda, metin çıkarılabilirliğini karşılaştıran geçiş testi (ham baytlar değil) uygun kabul kriteridir:

// Verify the searchable PDF contains the expected text
var result = new IronTesseract().Read("scanned.pdf");
result.SaveAsSearchablePdf("output-searchable.pdf");

// Validation: confirm text layer is present and readable
var verificationText = new IronTesseract().Read("output-searchable.pdf").Text;
Assert.True(verificationText.Contains("expected content"));
C#

Sorun 4: Geçiş Denemesinden Sonra Docker İmaj Boyutu Artışı

Syncfusion OCR: Bazı ekipler, test sırasında önlem olarak tessdata dosyalarını Docker imajında bırakarak geçiş yapmayı dener. Bu, hem tessdata katmanının hem de IronOCR paketinin imajda bulunmasına yol açar, gereksiz yere imaj boyutunu artırır.

Çözüm: Geçiş yapılan görüntüyü oluşturmadan önce tessdata COPY katmanını Dockerfile'den silin.IronOCR paketi tamamen kendi kendine yetkindir. Docker dağıtım kılavuzu, Alpine, Debian ve Ubuntu hedefleri için doğrulanmış temel imajlar ve yapılandırma sağlar:

# Remove this layer entirely after migration
# COPY tessdata/ /app/tessdata/

# IronOCR requires only the standard .NET runtime
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "YourService.dll"]
Text

Sorun 5: İki Aşamalı PerformOCR / ExtractText Deseni için Doğrudan Karşılık Gelmiyor

Syncfusion OCR: Bazı çağırma kodu, yöntemler arasında bir PdfLoadedDocument referansı geçirir — bir yöntem PerformOCR()'ı çağırır ve başka bir ExtractText()'yı çağırır — bu, belgenin nesne durumundaki mutasyona dayanır. Bu desen IronOCR'de yoktur çünkü Read() kendine yeterli bir sonuç nesnesi döndürür.

Çözüm: Ayrık OCR/çıkarım desenlerinin herhangi birini, bir dosya yolu veya akış kabul eden ve bir OcrResult döndüren tek bir metoda dönüştürün. Sonuç nesnesi her şeyi taşır - metin, sayfalar, paragraflar, güven, ve aranabilir PDF olarak kaydetme yeteneği:

// Replace split PerformOCR / ExtractText pattern
public OcrResult ProcessDocument(string pdfPath)
{
    // One call, immutable result, all data available
    return new IronTesseract().Read(pdfPath);
}

// Callers decide what they need from the result
var result = service.ProcessDocument("contract.pdf");
var fullText = result.Text;
var confidence = result.Confidence;
result.SaveAsSearchablePdf("contract-searchable.pdf");
C#

Sorun 6: Geçişten Sonra Topluluk Lisans Kaydı Kodunun Kalması

Syncfusion OCR: Uygulama başlangıcında Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense() çağrısı, paket lisansını kaydeder. Bu çağrı genellikle Program.cs, Startup.cs, veya statik bir başlatıcı içinde yer alır. Syncfusion paketlerini kaldırdıktan sonra, bu satır bir derleme hatasına neden olur.

Çözüm: SyncfusionLicenseProvider.RegisterLicense() çağrısını silin ve onu IronOCR lisans başlatma ile değiştirin. Ayrıca topluluk lisansı uygunluk mantığını, uyumluluk belgelerine yapılan referansları veya gelir ve çalışan eşik değerleri hakkındaki yorumları kaldırın - bunlar IronOCR için geçerli değildir:

//Kaldır(causes compile error after package removal)
// Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("SYNCFUSION-KEY");

// Add at application startup
IronOcr.License.LicenseKey = "YOUR-IRONOCR-KEY";
C#

Syncfusion OCR Geçiş Kontrol Listesi

Öncesi-Geçiş

Sürüm yapmadan önce kod tabanını tarayın ve tümSyncfusion OCRkullanımını tanımlayın:

# Find all Syncfusion namespace imports
grep -r "using Syncfusion" --include="*.cs" .

# Find OCRProcessor usage
grep -r "OCRProcessor\|PerformOCR\|PdfLoadedDocument\|ExtractText" --include="*.cs" .

# Find tessdata path references
grep -r "TessDataPath\|tessdata\|traineddata" --include="*.cs" .

# Find Syncfusion license registration
grep -r "SyncfusionLicenseProvider\|RegisterLicense" --include="*.cs" .

# Find csproj tessdata copy rules
grep -r "tessdata\|traineddata" --include="*.csproj" .

# Find Dockerfile tessdata layers
grep -r "tessdata" Dockerfile* docker-compose*.yml .
SHELL

Herhangi bir kod yazmadan önce sonuçları envanterleyin. Hangi dosyaların OCR çağrılarını içerdiğini, hangi dosyaların tessdata doğrulamalarını içerdiğini ve hangi boru hattı tanımlarının tessdata klasörüne atıfta bulunduğunu not edin.

Kod Geçişi

  1. Tüm .csproj dosyalarından Syncfusion.PDF.OCR.Net.Core, Syncfusion.Pdf.Net.Core ve ilgili paketleri kaldırın.
  2. OCR gerçekleştiren her projede dotnet add package IronOcr çalıştırın.
  3. Kullanılan İngilizce olmayan diller için NuGet aracılığıyla dil paketlerini yükleyin: dotnet add package IronOcr.Languages.[Language].
  4. Tüm servis sınıflarından private const string TessDataPath sabitini silin.
  5. Bütün tessdata doğrulama metodlarını (ValidateTessdata() ve benzer korumaları) silin.
  6. Uygulama başlangıcında SyncfusionLicenseProvider.RegisterLicense() ile IronOcr.License.LicenseKey = "YOUR-KEY" değiştirin.
  7. using Syncfusion.OCRProcessor; using Syncfusion.Pdf; using Syncfusion.Pdf.Parsing; with using IronOcr;.
  8. Her new OCRProcessor(TessDataPath) başlatmasını new IronTesseract() ile değiştirin.
  9. PdfLoadedDocument + processor.PerformOCR() + page.ExtractText() zincirlerini ocr.Read(path).Text ile değiştirin.
  10. Syncfusion'un bitwise dil bayraklarını (Languages.English|Languages.French plus ocr.AddSecondaryLanguage() çağrıları.
  11. Aranabilir PDF çıktısı için document.Save(stream)'u PerformOCR() ardından result.SaveAsSearchablePdf(path) ile değiştirin.
  12. Görüntüden-PDF'ye dönüşüm döngülerini doğrudan input.LoadImage(imagePath) veya ocr.Read(imagePath) ile değiştirin.
  13. Tüm .csproj dosyalarından tessdata CopyToOutputDirectory girdilerini kaldırın.
  14. Tüm CI/CD boru hattı tanımlarındaki tessdata indirme adımlarını kaldırın.
  15. Tüm Dockerfile'lardan tessdata COPY katmanlarını kaldırın.

Geçiş Sonrası

  • Göç öncesi kullanılan aynı örnek belgelerde PDF OCR çıktısının beklenen metin içeriğini ürettiğini doğrulayın.
  • JPG, PNG, BMP gibi görüntülerde OCR'nin herhangi bir PDF dönüşüm adımı olmadan çalıştığını doğrulayın.
  • Yüklü NuGet dil paketlerini kullanarak çok dilli belgelerin doğru tanındığını doğrulayın.
  • Üretilen dosyayı bir PDF görüntüleyicide açarak aranabilir PDF çıktısını test edin ve metin seçme ve aramanın çalıştığını doğrulayın.
  • Güncellenmiş Dockerfile'dan oluşturulmuş yeni bir Docker konteynerinde uygulamayı çalıştırarak tessdata ile ilgili başlangıç hatası olmadığını doğrulayın.
  • Uygulamanın, herhangi bir Syncfusion.Licensing çağrısı veya herhangi bir Syncfusion isim alanı referansı olmadan başladığını doğrulayın.
  • result.Confidence genellikle temiz belgeler için %80–99 arasında makul bir değer döndürdüğünü doğrulayın, böylece OCR motorunun aktif olduğunu doğrulayın.
  • Paralel toplu işleme testi yaparak eşzamanlı OCR çağrı çalıştırarak iş parçacığı istisnaları veya bozuk sonuçlar olmadığını doğrulayın.
  • Düşük kaliteli veya döndürülmüş taramalarda metin çıkarım doğruluğunu göç öncesi ve sonrası karşılaştırın, otomatik ön işleme boru hattından iyileşmeyi not edin.

IronOCR'a Geçişin Ana Faydaları

Dağıtım karmaşıklığı tek bir NuGet paketine düşer. Geçişten sonra, her bir ortam — geliştirici çalışma istasyonu, CI koşucusu, ön üretim konteyneri, üretim sunucusu — tam olarak bir şey gerektirir: IronOcr NuGet paketi derleme sistemi tarafından geri yüklenir. Tessdata klasörü yok. Yapılanacak bir dosya sistemi yolu yok. Dil dosyası indirme betikleri yok. 100–500 MB'lık ikili veri taşıyan Dockerfile katmanları yok. Konteyner görselleri daha küçük, CI boru hatları daha basit ve yeni ortamlar manuel müdahale olmadan ilk yapıda doğru şekilde tanımlanır.

Lisanslama maliyetleri tahmin edilebilir ve yinelenmez hale gelir. Tek seferlik sonsuz lisans alımı, yıllık geliştirici başına yenileme döngüsünün yerini alır.IronOCR Professional'ı ($2.999) satın alan beş geliştiricilik ekip, kütüphaneye süresiz sahip olur ve bir yıllık güncellemeler dahildir. Takip edilecek gelir eşikleri, izlenecek çalışan sayısı sınırları, tutulacak denetim düzenlemeleri ve uyumluluk belgeleri yok. Büyüme olayları — yeni müteahhitler, büyük sözleşmeler, finansman turları — lisanslama incelemelerini tetiklemez.

OCR boru hattı, harici bağımlılıklar olmadan bozuk belgeleri işler. Deskew, gürültü giderme, kontrast geliştirme, ikili hale getirme ve çözünürlük ölçeklendirme, OcrInput üzerinde yöntem olarak mevcuttur. Ayrı bir görüntüleme kütüphanesine gerek yok. Hafif bir döndürülme, tarayıcı gürültüsü veya düşük kontrasta sahip belgeler, daha önce System.Drawing veya SkiaSharp kullanılarak ön işleme aşamasını gerektiriyordu ancak şimdi aynıIronOCR çağrısı içinde ele alınabilir. görüntü kalitesi düzeltme kılavuzu ve ön işleme özellikleri sayfası, mevcuttaki tüm filtreleri ve tanıma doğruluğuna olan etkilerini belgeliyor.

Yapılandırılmış çıktı, alan düzeyinde belge zekasını sağlar. OcrResult nesnesi, tüm belge yapısını — sayfalar, paragraflar, satırlar, kelimeler ve karakterler olmak üzere — kapsam kutuları koordinatları ve token başına güven puanları ile birlikte sunar. Önceden alan sınırlarını bulmak için birleştirilmiş metin dizelerini ayrıştıran uygulamalar, bunun yerine doğrudan paragraf ve kelime koordinat verilerini kullanabilir. Fatura işleme, form çıkarma ve belge sınıflandırma iş akışları, Syncfusion'un sayfa düzeyindeki modelinin sağlayamayacağı mekansal bilgilere erişir. PDF OCR kullanım durumu sayfası yaygın belge zekası kalıplarını kapsar.

Paralel toplu işleme altyapı olmadan ölçeklenir. Her bir thread için bir IronTesseract örneği oluşturmak eksiksiz bir threading stratejisidir — örnek havuzu yok, semafor yönetimi yok, ardışık işleme kısıtlamaları yok. Saatte 500 belge işleyen bir toplu hizmet, mevcut CPU çekirdeklerini Parallel.ForEach ile ve tek satırdaki senkronizasyon ile doyurabilir. Kendi kendine yeten motor mimarisi, her iş parçacığının paylaşılan değiştirilebilir durum olmadan bağımsız çalıştığı anlamına gelir.

125+ dil, ikili dosya yönetimi olmadan kullanılabilir. Her dil paketi, standart paket yöneticisi aracılığıyla bir NuGet paketi olarak yüklenir. Sürüm yönetimi, güncelleme edinimi ve bağımlılık çözümü, her diğer proje bağımlılığını yöneten aynı araçlar tarafından ele alınır. Bir hizmete Japonca veya Arapça OCR eklemek, bir dotnet add package komutu gerektirir, GitHub'dan manuel bir indirme veya dağıtım hattı güncellemeleri gerektirmez. diller dizini kurulum komutları ile desteklenen tüm yazılar listeler.

Lütfen dikkate alın: Syncfusion ve Tesseract kendi sahiplerinin tescilli ticari markalarıdır. Bu site, Google veya Syncfusion ile ilişkili değildir, onaylanmamıştır veya desteklenmemektedir. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. 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