Sonuclari C# ile Aranabilir PDF olarak Kaydetme

IronOCR ile C# kullanarak Arama Yapılabilir PDF'leri Kaydedin

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronOCR, taranmış belgeleri ve görüntüleri arama yapılabilir PDF'lere dönüştürmek için C# geliştiricilerine OCR teknolojisi sunar ve çıktıyı dosyalar, baytlar veya akışlar olarak sadece birkaç satır kod ile destekler.

Arama yapılabilir bir PDF, genellikle bir OCR (Optik Karakter Tanıma) PDF'si olarak adlandırılır, taranan görüntüleri ve makineler tarafından okunabilir metni içeren bir PDF belgesi türüdür. Bu PDF'ler, taranmış kağıt belgeleri veya görüntüler üzerinde OCR gerçekleştirerek, görüntülerdeki metni tanıyıp seçilebilir ve aranabilir metne dönüştürerek oluşturulur.

SaveAsSearchablePdf, fotoğraf ve gelişmiş belge OCR iş akışlarından aranabilir PDF oluşturmayı etkinleştirerek, ReadPhoto, ReadScreenShot ve ReadDocumentAdvanced sonuçlarında da mevcuttur. Bu özelliğin, kağıt arşivlerini dijitalleştirmede veya eski PDF'leri daha iyi belge yönetimi için aranabilir hale getirmede özellikle yararlı olduğu kanıtlanmıştır.

Hızlı Başlangıç: Tek Satırda Arama Yapılabilir PDF Dışa Aktarma

Girdinize RenderSearchablePdf = true ayarlayın, Read(...) çalıştırın ve SaveAsSearchablePdf(...) çağırın. IronOCR ile tam aranabilir bir PDF oluşturmak için bu kadar basit.

  1. NuGet Paket Yöneticisi ile https://www.nuget.org/packages/IronOcr yükleyin

    PM > Install-Package IronOcr
  2. Bu kod parçasını kopyalayıp çalıştırın.

    new IronOcr.IronTesseract { Configuration = { RenderSearchablePdf = true } } .Read(new IronOcr.OcrImageInput("file.jpg")).SaveAsSearchablePdf("searchable.pdf");
  3. Canlı ortamınızda test etmek için dağıtın

    Bugün projenizde IronOCR kullanmaya başlayın ücretsiz deneme ile

    arrow pointer


OCR Sonuçlarını Aranabilir PDF Olarak Nasıl Dışa Aktarım?

Sonucu aranabilir bir PDF olarak dışa aktarmak için, IronOCR kullanarak, Configuration.RenderSearchablePdf özelliğini true olarak ayarlayın, Read metodundan OCR sonuç nesnesini elde edin ve çıkış dosya yolu ile SaveAsSearchablePdf çağırın.

Girdi

TIFF dosyası olarak taranan ve OcrImageInput aracılığıyla yüklenen bir Harry Potter romanından tek bir sayfa. Sayfa, arama yapılabilir PDF metin katmanı testi için gerçekçi bir giriş olan yoğun basılı metin içerir.

Harry'nin Neredeyse Kafasız Nick ile tanıştığını anlatan metinle, 'Ölüm Günü Partisi' bölümü gösteren Harry Potter kitabının sayfası

potter.tiff: Görünmez bir metin katmanı ile aranabilir PDF üretmek için OCR girdisi olarak kullanılan taranmış roman sayfası.

:path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-searchable-pdf.cs
using IronOcr;

// Create the OCR engine: defaults to English with balanced speed and accuracy
IronTesseract ocrTesseract = new IronTesseract();

// Required: without this flag the text overlay layer is not built, and SaveAsSearchablePdf produces a plain image PDF
ocrTesseract.Configuration.RenderSearchablePdf = true;

// Wrap the TIFF in OcrImageInput: handles DPI detection and page layout automatically
using var imageInput = new OcrImageInput("Potter.tiff");
// Run OCR; returns a result containing the recognized text and spatial layout data
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Write the output: the original scanned image is preserved with an invisible text layer on top
ocrResult.SaveAsSearchablePdf("searchablePdf.pdf");
Imports IronOcr

' Create the OCR engine: defaults to English with balanced speed and accuracy
Dim ocrTesseract As New IronTesseract()

' Required: without this flag the text overlay layer is not built, and SaveAsSearchablePdf produces a plain image PDF
ocrTesseract.Configuration.RenderSearchablePdf = True

' Wrap the TIFF in OcrImageInput: handles DPI detection and page layout automatically
Using imageInput As New OcrImageInput("Potter.tiff")
    ' Run OCR; returns a result containing the recognized text and spatial layout data
    Dim ocrResult As OcrResult = ocrTesseract.Read(imageInput)

    ' Write the output: the original scanned image is preserved with an invisible text layer on top
    ocrResult.SaveAsSearchablePdf("searchablePdf.pdf")
End Using
$vbLabelText   $csharpLabel

Çıktı

searchablePdf.pdf: Arama yapılabilir PDF çıktısı. OCR metin katmanının doğruluğunu kontrol etmek için herhangi bir kelimeyi seçin veya arayın.

Elde edilen PDF, her tanınmış kelime üzerinde yerleştirilmiş görünmez bir metin katmanı olan orijinal taranmış sayfa görüntüsünü içerir. Metin katmanının mevcut olduğunu onaylamak için görüntüleyicide herhangi bir kelimeyi seçin veya arayın.

IronOCR, yerleştirmede özel bir yazı tipi kullanır, bu da orijinal metin boyutuna kıyasla küçük farklara neden olabilir.

Çok sayfalı TIFF dosyaları veya karmaşık belgelerle çalışırken, IronOCR tüm sayfaları otomatik olarak işler ve onları çıktıya dahil eder. Kütüphane, sayfa sırasını ve metin yerleştirme konumlarını otomatik olarak yönetir ve doğru metin-görüntü eşlemelerini sağlar.

Fotoğraflardan veya Gelişmiş Belge Taramalarından Aranabilir PDF'leri Nasıl Oluştururum?

Aranabilir PDF dışa aktarma, ReadPhoto, ReadScreenShot veya ReadDocumentAdvanced kullanıldığında da mevcuttur. Bu yöntemlerin her biri, SaveAsSearchablePdf destekleyen bir sonuç türü döndürür.

Bu yöntemleri çağırırken isteğe bağlı olarak bir ModelType geçebilirsiniz. Varsayılan Normal, ancak Enhanced hız pahasına daha iyi doğruluk sağlar.

Girdi

LoadImage aracılığıyla yüklenen, üzerinde boya ile yazı olan bir duvar resmi fotoğrafı. Sahne, gerçek dünyada yer alan çeşitli sözcükler içerdiğinden, ReadPhoto ile Enhanced modelinin pratik bir testi olur.

Metin içeren fotoğraf, ReadPhoto OCR için giriş olarak kullanıldı

photo.png: Aranabilir PDF üretmek için ReadPhoto ile Yükseltilmiş model kullanılarak yüklenen duvar resmi fotoğrafı.

using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("photo.png");

// ReadPhoto with Enhanced model
OcrPhotoResult photoResult = ocr.ReadPhoto(input, ModelType.Enhanced);
Console.WriteLine(photoResult.Text);

// Save as searchable PDF
byte[] pdfBytes = photoResult.SaveAsSearchablePdf();
File.WriteAllBytes("searchable-photo.pdf", pdfBytes);
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("photo.png");

// ReadPhoto with Enhanced model
OcrPhotoResult photoResult = ocr.ReadPhoto(input, ModelType.Enhanced);
Console.WriteLine(photoResult.Text);

// Save as searchable PDF
byte[] pdfBytes = photoResult.SaveAsSearchablePdf();
File.WriteAllBytes("searchable-photo.pdf", pdfBytes);
Imports IronOcr

Dim ocr As New IronTesseract()
Using input As New OcrInput()
    input.LoadImage("photo.png")

    ' ReadPhoto with Enhanced model
    Dim photoResult As OcrPhotoResult = ocr.ReadPhoto(input, ModelType.Enhanced)
    Console.WriteLine(photoResult.Text)

    ' Save as searchable PDF
    Dim pdfBytes As Byte() = photoResult.SaveAsSearchablePdf()
    File.WriteAllBytes("searchable-photo.pdf", pdfBytes)
End Using
$vbLabelText   $csharpLabel

Çıktı

searchable-photo.pdf: ReadPhoto'dan arama yapılabilir PDF çıktısı. Metin katmanı, herhangi bir PDF görüntüleyicide tam metin aramasını destekler.

Ortaya çıkan aranabilir PDF, tanınan kelimelerin üzerine yerleşik görünmez bir metin katmanı içerir. PDF görüntüleyicide 'Süt' araması yapıldığında, orijinal fotoğraflamadan direkt çıkarılan 3 eşleşme döndürülür.

Aynı yaklaşım, bir OcrDocAdvancedResult döndüren ReadDocumentAdvanced ile çalışır:

Girdi

LoadImage üzerinden yüklenen taranmış bir fatura. Satıcı adı, sıra kalemlerinin ve toplamların Enhanced modeli ile tanınarak, aranabilir bir metin katmanı olarak ilişkilendirilmiş yapılandırılmış alanlar içerir.

Fatura belgesi, ReadDocumentAdvanced OCR için giriş olarak kullanıldı

invoice.png: Yükseltilmiş model ile ReadDocumentAdvanced'e geçirilen OcrInput'a yüklenen taranmış fatura.

using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("invoice.png");

// ReadDocumentAdvanced with Enhanced model
OcrDocAdvancedResult docResult = ocr.ReadDocumentAdvanced(input, ModelType.Enhanced);
byte[] docPdfBytes = docResult.SaveAsSearchablePdf();
File.WriteAllBytes("searchable-doc.pdf", docPdfBytes);
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("invoice.png");

// ReadDocumentAdvanced with Enhanced model
OcrDocAdvancedResult docResult = ocr.ReadDocumentAdvanced(input, ModelType.Enhanced);
byte[] docPdfBytes = docResult.SaveAsSearchablePdf();
File.WriteAllBytes("searchable-doc.pdf", docPdfBytes);
Imports IronOcr

Dim ocr As New IronTesseract()
Using input As New OcrInput()
    input.LoadImage("invoice.png")

    ' ReadDocumentAdvanced with Enhanced model
    Dim docResult As OcrDocAdvancedResult = ocr.ReadDocumentAdvanced(input, ModelType.Enhanced)
    Dim docPdfBytes As Byte() = docResult.SaveAsSearchablePdf()
    File.WriteAllBytes("searchable-doc.pdf", docPdfBytes)
End Using
$vbLabelText   $csharpLabel

Çıktı

searchable-doc.pdf: ReadDocumentAdvanced'dan gelen aranabilir PDF çıktısı. Fatura alanları seçilebilir ve aranabilir.

SaveAsSearchablePdf, ReadPassport veya ReadLicensePlate sonuçları için desteklenmez ve bir ExtensionAdvancedScanException fırlatır.

Çok Sayfalı Belgelerle Çalışma

Çok sayfalı belgelerde PDF OCR işlemleriyle uğraşırken, IronOCR her sayfayı sırayla işler ve orijinal belge yapısını korur.

Girdi

Hartwell Capital Management'tan 11 sayfalık yıllık rapor OcrPdfInput aracılığıyla yüklendi. 1-10 (dizin 0-9) sayfalar PageIndices aralığı kullanılarak seçilir ve tek bir Read çağrısında işlenir.

multi-page-scan.pdf: Çok sayfalı aranabilir PDF dönüşümü için giriş olarak kullanılan 11 sayfalık Hartwell Capital Management yıllık raporu.

:path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-multi-page.cs
using IronOcr;

// Create the OCR engine. RenderSearchablePdf is false by default; no need to set it when using OcrPdfInput directly
var ocrTesseract = new IronTesseract();

// Load pages 1–10 (indices 0–9) only; PageIndices avoids loading and OCR-ing the full document unnecessarily
using var pdfInput = new OcrPdfInput("multi-page-scan.pdf", PageIndices: Enumerable.Range(0, 10));

// Run OCR across all selected pages in order
OcrResult result = ocrTesseract.Read(pdfInput);

// Write the searchable PDF; true = apply the input's image filters to the embedded page images in the output
result.SaveAsSearchablePdf("searchable-multi-page.pdf", true);
Imports IronOcr

' Create the OCR engine. RenderSearchablePdf is false by default; no need to set it when using OcrPdfInput directly
Dim ocrTesseract As New IronTesseract()

' Load pages 1–10 (indices 0–9) only; PageIndices avoids loading and OCR-ing the full document unnecessarily
Using pdfInput As New OcrPdfInput("multi-page-scan.pdf", PageIndices:=Enumerable.Range(0, 10))
    ' Run OCR across all selected pages in order
    Dim result As OcrResult = ocrTesseract.Read(pdfInput)

    ' Write the searchable PDF; true = apply the input's image filters to the embedded page images in the output
    result.SaveAsSearchablePdf("searchable-multi-page.pdf", True)
End Using
$vbLabelText   $csharpLabel

Çıktı

searchable-multi-page.pdf: 10 sayfalık aranabilir PDF çıktısı. Her sayfada tam metin araması için görünmez bir metin katmanı bulunur.

Elde edilen PDF, orijinal raporun 1-10 sayfalarını içerir ve her biri, herhangi bir PDF görüntüleyicide seçilebilir ve aranabilir hale getiren görünmez bir metin katmanına sahiptir.

Aranabilir PDF'ler Oluştururken Filtreleri Nasıl Uygularım?

SaveAsSearchablePdf ikinci parametresi, gömülü çıktıya görüntü filtrelerinin uygulanıp uygulanmayacağını kontrol eden bir bool kabul eder. Görüntü iyileştirme filtreleri kullanmak, özellikle düşük kaliteli taramalarla uğraşırken OCR doğruluğunu önemli ölçüde artırabilir.

Aşağıdaki örnek, gri tonlama filtresini uygular ve filtelenmiş görüntüyü aranabilir PDF çıktısına gömmek için ikinci argüman olarak true geçirir.

:path=/static-assets/ocr/content-code-examples/how-to/image-quality-correction-searchable-pdf.cs
using IronOcr;

// Create OCR engine: filters are applied at the OcrInput level, so no configuration changes are needed here
var ocr = new IronTesseract();
var ocrInput = new OcrInput();

// Load the scanned PDF as the OCR source
ocrInput.LoadPdf("invoice.pdf");

// Convert to grayscale: removes color noise that can reduce OCR accuracy on color-printed documents
ocrInput.ToGrayScale();
// Run OCR on the preprocessed input
OcrResult result = ocr.Read(ocrInput);

// Write the searchable PDF; true = embed the grayscale-filtered image rather than the original color scan
result.SaveAsSearchablePdf("outputGrayscale.pdf", true);
Imports IronOcr

' Create OCR engine: filters are applied at the OcrInput level, so no configuration changes are needed here
Dim ocr As New IronTesseract()
Dim ocrInput As New OcrInput()

' Load the scanned PDF as the OCR source
ocrInput.LoadPdf("invoice.pdf")

' Convert to grayscale: removes color noise that can reduce OCR accuracy on color-printed documents
ocrInput.ToGrayScale()
' Run OCR on the preprocessed input
Dim result As OcrResult = ocr.Read(ocrInput)

' Write the searchable PDF; True = embed the grayscale-filtered image rather than the original color scan
result.SaveAsSearchablePdf("outputGrayscale.pdf", True)
$vbLabelText   $csharpLabel

Optimal sonuçlar için, belirli belge türünüz için en iyi filtre kombinasyonunu otomatik olarak belirlemek üzere Filtre Sihirbazı'nı kullanmayı düşünün. Bu araç, girdisini analiz eder ve uygun ön işleme adımlarını önerir.

Aranabilir PDF'lerde Yanlış Karakterleri Nasıl Düzeltirim?

Metin, PDF'de görsel olarak doğru görünüyorsa ancak arama veya kopyalama yaptığınızda bozuk karakterler gösteriyorsa, sorun, aranabilir metin katmanında varsayılan kullanılan yazı tipinden kaynaklanmaktadır. Varsayılan olarak, SaveAsSearchablePdf, tüm Unicode karakterlerini tam olarak desteklemeyen Times New Roman kullanır. Bu, aksanlı veya ASCII olmayan karakterlere sahip dilleri etkiler.

Bunu düzeltmek için, üçüncü parametre olarak Unicode uyumlu bir yazı tipi dosyası sağlayın.

result.SaveAsSearchablePdf("output.pdf", false, "Fonts/LiberationSerif-Regular.ttf");
result.SaveAsSearchablePdf("output.pdf", false, "Fonts/LiberationSerif-Regular.ttf");
result.SaveAsSearchablePdf("output.pdf", False, "Fonts/LiberationSerif-Regular.ttf")
$vbLabelText   $csharpLabel

Bir dördüncü parametre olarak özel bir yazı tipi adı da belirtebilirsiniz:

result.SaveAsSearchablePdf("output.pdf", false, "Fonts/LiberationSerif-Regular.ttf", "MyFont");
result.SaveAsSearchablePdf("output.pdf", false, "Fonts/LiberationSerif-Regular.ttf", "MyFont");
result.SaveAsSearchablePdf("output.pdf", False, "Fonts/LiberationSerif-Regular.ttf", "MyFont")
$vbLabelText   $csharpLabel

Bu, tüm sonuç türleri için geçerlidir: OcrResult, OcrPhotoResult ve OcrDocAdvancedResult, bu nedenle düzeltme, sonucu hangi okuma yönteminin ürettiğinden bağımsız olarak çalışır.

Lütfen dikkate alinBaşlangıçta Times New Roman ile dizayn edilmiş belgeler için, Liberation Serif önerilir çünkü metrik uyumludur ve orijinal aralığı ve düzeni korur. Genel amaçlı çok dilli kullanım için, Noto Sans veya DejaVu Sans iyi alternatiflerdir.

Bir dosya yoluna yazmanın mümkün olmadığı senaryolar için, IronOCR ayrıca arama yapılabilir PDF'yi bir bayt dizisi veya akış olarak döndürmeyi destekler.


Arama Yapılabilir PDF'leri Bayt veya Akış Olarak Nasıl Dışa Aktarabilirim?

Aranabilir PDF'nin çıktısı, SaveAsSearchablePdfBytes ve SaveAsSearchablePdfStream yöntemlerini kullanarak bayt veya akışlar olarak da ele alınabilir. Aşağıdaki kod örneği bu yöntemlerin nasıl kullanılacağını göstermektedir.

:path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-searchable-pdf-byte-stream.cs
// Return as a byte array: suited for storing in a database or sending in an HTTP response body
byte[] pdfByte = ocrResult.SaveAsSearchablePdfBytes();

// Return as a stream: suited for uploading to cloud storage or piping to another I/O operation without buffering the full file
Stream pdfStream = ocrResult.SaveAsSearchablePdfStream();
' Return as a byte array: suited for storing in a database or sending in an HTTP response body
Dim pdfByte As Byte() = ocrResult.SaveAsSearchablePdfBytes()

' Return as a stream: suited for uploading to cloud storage or piping to another I/O operation without buffering the full file
Dim pdfStream As Stream = ocrResult.SaveAsSearchablePdfStream()
$vbLabelText   $csharpLabel

Bu çıkış seçenekleri, sınırlı dosya sistemi erişiminin olabileceği bulut depolama hizmetleri, veritabanları veya web uygulamaları ile entegre edilirken özellikle faydalıdır. Aşağıdaki örnek pratik uygulamaları göstermektedir:

using IronOcr;
using System.IO;

public class SearchablePdfExporter
{
    public async Task ProcessAndUploadPdf(string inputPath)
    {
        var ocr = new IronTesseract
        {
            Configuration = { RenderSearchablePdf = true }
        };

        // Process the input
        using var input = new OcrImageInput(inputPath);
        var result = ocr.Read(input);

        // Option 1: Save to database as byte array
        byte[] pdfBytes = result.SaveAsSearchablePdfBytes();
        // Store pdfBytes in database BLOB field

        // Option 2: Upload to cloud storage using stream
        using (Stream pdfStream = result.SaveAsSearchablePdfStream())
        {
            // Upload stream to Azure Blob Storage, AWS S3, etc.
            await UploadToCloudStorage(pdfStream, "searchable-output.pdf");
        }

        // Option 3: Return as web response
        // return File(pdfBytes, "application/pdf", "searchable.pdf");
    }

    private async Task UploadToCloudStorage(Stream stream, string fileName)
    {
        // Cloud upload implementation
    }
}
using IronOcr;
using System.IO;

public class SearchablePdfExporter
{
    public async Task ProcessAndUploadPdf(string inputPath)
    {
        var ocr = new IronTesseract
        {
            Configuration = { RenderSearchablePdf = true }
        };

        // Process the input
        using var input = new OcrImageInput(inputPath);
        var result = ocr.Read(input);

        // Option 1: Save to database as byte array
        byte[] pdfBytes = result.SaveAsSearchablePdfBytes();
        // Store pdfBytes in database BLOB field

        // Option 2: Upload to cloud storage using stream
        using (Stream pdfStream = result.SaveAsSearchablePdfStream())
        {
            // Upload stream to Azure Blob Storage, AWS S3, etc.
            await UploadToCloudStorage(pdfStream, "searchable-output.pdf");
        }

        // Option 3: Return as web response
        // return File(pdfBytes, "application/pdf", "searchable.pdf");
    }

    private async Task UploadToCloudStorage(Stream stream, string fileName)
    {
        // Cloud upload implementation
    }
}
Imports IronOcr
Imports System.IO
Imports System.Threading.Tasks

Public Class SearchablePdfExporter
    Public Async Function ProcessAndUploadPdf(inputPath As String) As Task
        Dim ocr As New IronTesseract With {
            .Configuration = New TesseractConfiguration With {
                .RenderSearchablePdf = True
            }
        }

        ' Process the input
        Using input As New OcrImageInput(inputPath)
            Dim result = ocr.Read(input)

            ' Option 1: Save to database as byte array
            Dim pdfBytes As Byte() = result.SaveAsSearchablePdfBytes()
            ' Store pdfBytes in database BLOB field

            ' Option 2: Upload to cloud storage using stream
            Using pdfStream As Stream = result.SaveAsSearchablePdfStream()
                ' Upload stream to Azure Blob Storage, AWS S3, etc.
                Await UploadToCloudStorage(pdfStream, "searchable-output.pdf")
            End Using

            ' Option 3: Return as web response
            ' Return File(pdfBytes, "application/pdf", "searchable.pdf")
        End Using
    End Function

    Private Async Function UploadToCloudStorage(stream As Stream, fileName As String) As Task
        ' Cloud upload implementation
    End Function
End Class
$vbLabelText   $csharpLabel

Performans Dikkatleri

Büyük miktarda belge işlerken, verimliliği artırmak için çoklu iş parçacıklı OCR işlemlerini uygulamayı düşünün. IronOCR eşzamanlı işlemeyi destekler ve aynı anda birden fazla belgeyi işlemenizi sağlar:

using IronOcr;
using System.Threading.Tasks;
using System.Collections.Concurrent;

public class BatchPdfProcessor
{
    private readonly IronTesseract _ocr;

    public BatchPdfProcessor()
    {
        _ocr = new IronTesseract
        {
            Configuration = 
            {
                RenderSearchablePdf = true,
                // Configure for optimal performance
                Language = OcrLanguage.English
            }
        };
    }

    public async Task ProcessBatchAsync(string[] filePaths)
    {
        var results = new ConcurrentBag<(string source, string output)>();

        await Parallel.ForEachAsync(filePaths, async (filePath, ct) =>
        {
            using var input = new OcrImageInput(filePath);
            var result = _ocr.Read(input);

            string outputPath = Path.ChangeExtension(filePath, ".searchable.pdf");
            result.SaveAsSearchablePdf(outputPath);

            results.Add((filePath, outputPath));
        });

        Console.WriteLine($"Processed {results.Count} files");
    }
}
using IronOcr;
using System.Threading.Tasks;
using System.Collections.Concurrent;

public class BatchPdfProcessor
{
    private readonly IronTesseract _ocr;

    public BatchPdfProcessor()
    {
        _ocr = new IronTesseract
        {
            Configuration = 
            {
                RenderSearchablePdf = true,
                // Configure for optimal performance
                Language = OcrLanguage.English
            }
        };
    }

    public async Task ProcessBatchAsync(string[] filePaths)
    {
        var results = new ConcurrentBag<(string source, string output)>();

        await Parallel.ForEachAsync(filePaths, async (filePath, ct) =>
        {
            using var input = new OcrImageInput(filePath);
            var result = _ocr.Read(input);

            string outputPath = Path.ChangeExtension(filePath, ".searchable.pdf");
            result.SaveAsSearchablePdf(outputPath);

            results.Add((filePath, outputPath));
        });

        Console.WriteLine($"Processed {results.Count} files");
    }
}
Imports IronOcr
Imports System.Threading.Tasks
Imports System.Collections.Concurrent

Public Class BatchPdfProcessor
    Private ReadOnly _ocr As IronTesseract

    Public Sub New()
        _ocr = New IronTesseract With {
            .Configuration = New OcrConfiguration With {
                .RenderSearchablePdf = True,
                ' Configure for optimal performance
                .Language = OcrLanguage.English
            }
        }
    End Sub

    Public Async Function ProcessBatchAsync(filePaths As String()) As Task
        Dim results As New ConcurrentBag(Of (source As String, output As String))()

        Await Task.Run(Sub()
                           Parallel.ForEach(filePaths, Sub(filePath)
                                                           Using input As New OcrImageInput(filePath)
                                                               Dim result = _ocr.Read(input)

                                                               Dim outputPath As String = Path.ChangeExtension(filePath, ".searchable.pdf")
                                                               result.SaveAsSearchablePdf(outputPath)

                                                               results.Add((filePath, outputPath))
                                                           End Using
                                                       End Sub)
                       End Sub)

        Console.WriteLine($"Processed {results.Count} files")
    End Function
End Class
$vbLabelText   $csharpLabel

İleri Seviye Yapılandırma Seçenekleri

Daha gelişmiş senaryolar için, belirli belge türleri veya diller için OCR motorunu ince ayar yapmak amacıyla ayrıntılı Tesseract yapılandırması kullanabilirsiniz:

var advancedOcr = new IronTesseract
{
    Configuration = 
    {
        RenderSearchablePdf = true,
        TesseractVariables = new Dictionary<string, object>
        {
            { "preserve_interword_spaces", 1 },
            { "tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" }
        },
        PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn
    },
    Language = OcrLanguage.EnglishBest
};
var advancedOcr = new IronTesseract
{
    Configuration = 
    {
        RenderSearchablePdf = true,
        TesseractVariables = new Dictionary<string, object>
        {
            { "preserve_interword_spaces", 1 },
            { "tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" }
        },
        PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn
    },
    Language = OcrLanguage.EnglishBest
};
Imports IronOcr

Dim advancedOcr As New IronTesseract With {
    .Configuration = New TesseractConfiguration With {
        .RenderSearchablePdf = True,
        .TesseractVariables = New Dictionary(Of String, Object) From {
            {"preserve_interword_spaces", 1},
            {"tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"}
        },
        .PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn
    },
    .Language = OcrLanguage.EnglishBest
}
$vbLabelText   $csharpLabel

Bu yapılandırma seçenekleri, SaveAsSearchablePdf, SaveAsSearchablePdfBytes ve SaveAsSearchablePdfStream üç çıkış yöntemine de eşit şekilde uygulanır. Aşağıdaki Özet, uygun çıktı formatlarıyla birlikte tam bir arama yapılabilir PDF yöntemleri dizisi toplar.

Özet

IronOCR ile arama yapılabilir PDF'ler oluşturmak basit ve esnektir. Tekli resimler, çok sayfalı belgeler, ReadPhoto aracılığıyla fotoğraflar veya ReadDocumentAdvanced aracılığıyla gelişmiş belge taramaları işlemeniz gerekip gerekmediğine bakılmaksızın, kütüphane çeşitli formatlarda aranabilir PDF'ler oluşturmak için sağlam yöntemler sunar. Doğruluk için standart ve geliştirilmiş ML modelleri arasında seçim yapmak için ModelType parametresini kullanın. Dosya, bayt veya akış olarak dışa aktarma yeteneği, masaüstü uygulamalarından bulut tabanlı hizmetlere kadar herhangi bir uygulama mimarisine uyarlanabilir hale getirir.

Daha gelişmiş OCR senaryoları için, kapsamlı kod örneklerini inceleyin veya ayrıntılı yöntem imzaları ve seçenekleri için API belgelerine bakın.

Sıkça Sorulan Sorular

Taralı görüntülerden C#'ta aranabilir bir PDF'yi nasıl oluşturabilirim?

IronOCR, taralı görüntülerden aranabilir PDF'ler oluşturmayı basit hale getirir. Yapılandırmada RenderSearchablePdf'i true olarak ayarlayın, giriş görüntünüzde Read() yöntemini kullanın ve istediğiniz çıkış yoluyla SaveAsSearchablePdf() çağrısı yapın. IronOCR, görüntüdeki OCR işlemini gerçekleştirir ve orijinal görüntü üzerinde seçilebilir, aranabilir metin içeren bir PDF oluşturur.

Hangi dosya biçimleri aranabilir PDF'lere dönüştürülebilir?

IronOCR, JPG, PNG, TIFF ve mevcut PDF belgelerini aranabilir PDF'lere dönüştürebilir. Kütüphane, tek sayfalık görüntüleri ve TIFF dosyaları gibi çok sayfalı belgeleri destekler, tüm sayfaları otomatik olarak işleyerek ve çıktıda doğru sayfa sıralamasını koruyarak aranabilir PDF oluşturur.

Aranabilir PDF'leri dosya yerine bayt dizileri veya akışlar olarak dışa aktarabilir miyim?

Evet, IronOCR çeşitli formatlarda aranabilir PDF'leri dışa aktarmayı destekler. SaveAsSearchablePdf() ile doğrudan bir dosyaya kaydetmenin yanı sıra, OCR sonuçlarını bayt dizileri veya akışlar olarak da dışa aktarabilirsiniz; bu, web uygulamaları, bulut depolama veya veritabanı sistemleriyle geçici dosyalar oluşturmadan entegrasyonunu kolaylaştırır.

Aranabilir bir PDF oluşturmak için gereken en az kod nedir?

IronOCR ile bir aranabilir PDF oluşturmak sadece bir satır kodla yapılabilir: new IronOcr.IronTesseract { Configuration = { RenderSearchablePdf = true } }.Read(new IronOcr.OcrImageInput('file.jpg')).SaveAsSearchablePdf('searchable.pdf'). Bu, IronOCR'un sadeleştirilmiş API tasarımını gösterir.

Aranabilir PDF'lerdeki görünmez metin katmanı nasıl çalışır?

IronOCR, tanınan metni PDF'nin orijinal görünümünü koruyarak seçilebilir ve aranabilir metin sağlamak için orijinal resimin üstüne görünmez bir katman olarak konumlandırmayı otomatik olarak yönetir. Kütüphane, bunun için özel yazı tipleri ve konumlandırma algoritmalarını kullanır.

Fotoğraflardan veya ekran görüntülerinden aranabilir PDF'ler oluşturabilir miyim?

Evet, SaveAsSearchablePdf ReadPhoto, ReadScreenShot ve ReadDocumentAdvanced sonuçlarında desteklenmektedir. Her yöntem, gerçek fotoğrafları, ekran görüntülerini veya karmaşık doküman taramalarını aranabilir PDF'lere dönüştürmeyi kolaylaştıran aranabilir PDF dışa aktarımını destekleyen bir sonuç türü döndürür.

ModelType parametresi ne yapar?

ModelType parametresi, OCR için hangi önceden eğitilmiş ML modelinin kullanılacağını kontrol eder. Normal, hızlı sonuçlar almak için görüntüleri 960 piksele yeniden boyutlandırarak işlem yapar ve varsayılan ayardır. Enhanced, 2560 piksele kadar olan görüntüleri destekleyerek daha yüksek çözünürlüklü girdilerde daha iyi detay ve doğruluk sağlar.

Kopyalanan veya aranan karakterler aranabilir PDF'mde neden bozulmuş görünüyor?

Bu, aranabilir metin katmanında kullanılan varsayılan yazı tipi (Times New Roman) tüm Unicode karakterlerini tam olarak desteklemediği için meydana gelir. Bunu düzeltmek için SaveAsSearchablePdf'nin üçüncü parametresi olarak Unicode uyumlu bir yazı tipi dosyası geçirin. Belgeleriniz başlangıçta Times New Roman ile ayarlanmış ve diğer yazı tiplerinde boşluk tutarsızlıkları fark ederseniz, aynı harf şekilleri ve orijinal düzeni koruyan Liberation Serif'i deneyin.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında lisans derecesine sahiptir (Carleton Üniversitesi) ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirme üzerine uzmanlaşmıştır. Kullanıcı dostu ve estetik açıdan hoş arayüzler tasarlamaya tutkuyla bağlı olan Curtis, modern çerç...

Daha Fazlasını Oku
İnceleyen
Jeff Fritz
Jeffrey T. Fritz
Baş Program Yöneticisi - .NET Topluluk Ekibi
Jeff, aynı zamanda .NET ve Visual Studio ekipleri için Baş Program Yöneticisi'dir. Microsoft geliştirici etkinlikleri (Microsoft Build, Microsoft Ignite, .NET Conf, Microsoft MVP Summit) için atölye çalışmaları, sunumlar yazar ve içerik planlar ve haftada iki kez yayınlanan 'Fritz ve Arkadaşları' canlı yayınının ev sahibidir.
Başlamaya Hazır mısınız?
Nuget İndirmeler 5,585,834 | Sürüm: 2026.4 just released
Still Scrolling Icon

Hala Kaydiriyor musunuz?

Hızlı bir kanit mi istiyorsunuz? PM > Install-Package IronOcr
örnekleri çalıştır resminizin aranabilir metne donuşünü izleyin.