Sonuçları C#'de Aranabilir PDF Olarak Kaydetme

IronOCR ile C# İçinde Aranabilir PDF'ler Kaydedin

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

IronOCR, C# geliştiricilerine, taranmış belgeleri ve görselleri OCR teknolojisi kullanarak aranabilir PDF'lere dönüştürmelerine olanak tanır, dosya, bayt veya akış olarak çıkış destekler, birkaç satır kod ile.

Aranabilir PDF, genellikle bir OCR (Optik Karakter Tanıma) PDF'si olarak adlandırılan, hem taranmış görseller hem de makine tarafından okunabilir metin içeren bir PDF belgesi türüdür. Bu PDF'ler, taranmış kağıt belgeler veya görseller üzerinde OCR işlemi gerçekleştirerek, görsellerdeki metni tanıyıp seçilebilir ve aranabilir metne dönüştürerek oluşturulur.

SaveAsSearchablePdf, ReadPhoto, ReadScreenShot ve ReadDocumentAdvanced sonuçlarında da mevcuttur ve fotoğraf ve gelişmiş belge OCR iş akışlarından aranabilir PDF oluşturmaya olanak tanır. Bu özellik, kağıt arşivleri dijitalleştirmek veya daha iyi belge yönetimi sağlamak için eski PDF'leri aranabilir hale getirmek adına özellikle kullanışlıdır.

Hızlı Başlangıç: Bir Satırda Aranabilir PDF Dışa Aktarma

RenderSearchablePdf = true'yi ayarlayın, girdinizde Read(...)'yi çalıştırın ve SaveAsSearchablePdf(...)'yi çağırın. IronOCR ile tamamen aranabilir bir PDF oluşturmak için tek yapmanız gereken bu.

  1. IronOCR aşağıdaki NuGet Paket Yöneticisi ile yükleyin

    PM > Install-Package IronOcr
  2. Bu kod parçacığını kopyalayın ve ç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 için dağıtım yapın

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

    arrow pointer


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

Sonucu IronOCR kullanarak aranabilir bir PDF olarak dışa aktarmak için, Configuration.RenderSearchablePdf özelliğini true olarak ayarlayın, Read yönteminden OCR sonuç nesnesini alın ve çıktı dosya yoluyla SaveAsSearchablePdf'yi çağırın.

Giriş

Harry Potter romanından bir sayfa, TIFF dosyası olarak taranmış ve OcrImageInput aracılığıyla yüklenmiştir. Sayfa, aranabilir PDF metin katmanı için gerçekçi bir girdi olan yoğun basılı metin içeriyor.

Harry'in Neredeyse Kafasız Nick ile tanıştığı ▲Ölüm Günü Partisi▲ başlıklı Kısım Sekiz ile birlikte Harry Potter kitabından bir sayfa

potter.tiff: Görünmeyen bir metin katmanına sahip aranabilir PDF üretmek için OCR girdi 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: Aranabilir PDF çıktısı. OCR metin katmanını doğrulamak için herhangi bir kelimeyi seçin ya da arayın.

Oluşan PDF, tanınan her kelimenin üzerine yerleştirilmiş görünmez bir metin katmanı ile orijinal taranan sayfa görüntüsünü gömer. Metin katmanının bulunduğunu doğrulamak için izleyicide herhangi bir kelimeyi seçin veya arayın.

IronOCR, örtüşme için özel bir yazı tipi kullanır, bu da metin boyutunun orijinaline göre biraz farklılık göstermesine neden olabilir.

Çok sayfalı TIFF dosyaları veya karmaşık belgelerle çalışırken, IronOCR tüm sayfaları otomatik olarak işler ve bunları çıktıya dahil eder. Kütüphane, sayfa sıralamasını ve metin örtüşme konumlandırmasını otomatik olarak işler, böylece doğru metin-görüntü eşlemesi sağlar.

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

ReadPhoto, ReadScreenShot veya ReadDocumentAdvanced kullanıldığında, aranabilir PDF dışa aktarma özelliği de kullanılabilir. Bu yöntemlerin her biri, SaveAsSearchablePdf'yi destekleyen bir sonuç türü döndürür.

İsteğe bağlı olarak, bu yöntemleri çağırırken ModelType parametresini geçebilirsiniz. Varsayılan ayar Normal iken, Enhanced hızdan ödün vererek daha yüksek doğruluk sağlar.

Giriş

LoadImage aracılığıyla yüklenen, üzerine metin yazılmış bir duvar resminin fotoğrafı. Sahne, gerçek dünya ortamına yerleştirilmiş birden fazla WORD içerir, bu da onu ReadPhoto ile Enhanced modeli için pratik bir test haline getirir.

InPut için ReadPhoto OCR olarak kullanılan metni içeren fotoğraf.

photo.png: ReadPhoto üzerinden Enhanced modeliyle yüklenmiş duvar duvarı fotoğrafı ve aranabilir PDF üretmek için kullanıldı.

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 elde edilen aranabilir PDF çıktısı. Metin katmanı, herhangi bir PDF izleyicisi aracılığıyla tam metin aramasını destekler.

Elde edilen aranabilir PDF, tanınan kelimeler üzerinde görünmez bir metin katmanı içerir. PDF izleyicisinde 'Milk' araması, orijinal fotoğraftaki boyalı metinden doğrudan çıkarılan 3 eşleşme döndürür.

Aynı yaklaşım, ReadDocumentAdvanced ile de geçerlidir; bu, OcrDocAdvancedResult değerini döndürür:

Giriş

LoadImage aracılığıyla yüklenen taranmış bir fatura. ReadDocumentAdvanced modeli tarafından tanınan ve aranabilir bir metin katmanı olarak gömülen yapılandırılmış alanlar (satıcı adı, satır öğeleri ve toplamlar) içerir.

Giriş için ReadDocumentAdvanced OCR olarak kullanılan fatura belgesi.

invoice.png: OcrInput'a yüklenmiş ve Enhanced model ile ReadDocumentAdvanced'e geçirilmiş 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'den elde edilen aranabilir PDF çıktısı. Fatura alanları seçilebilir ve aranabilir.

SaveAsSearchablePdf, ReadPassport veya ReadLicensePlate sonuçları için desteklenmez ve bir ExtensionAdvancedScanException. hatası verir.

Çok Sayfalı Belgelerle Çalışma

Çok sayfalı belgeler üzerindeki PDF OCR işlemleriyle çalışırken, IronOCR her sayfayı ardışık olarak işler ve orijinal belge yapısını korur.

Giriş

OcrPdfInput aracılığıyla yüklenen Hartwell Capital Management'ın 11 sayfalık yıllık raporu. Sayfa 1–10 (indeks 0–9) 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üştürme 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 sayfa, tam metin araması için görünmez bir metin katmanına sahiptir.

Elde edilen PDF, orijinal raporun (sayfalar 1-10) 10 sayfasını içerir ve her biri çıkarılan içeriği seçilebilir ve herhangi bir PDF izleyicisinde aranabilir yapan görünmez bir metin katmanına sahiptir.

Aranabilir PDF 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 boole değeri kabul eder. Görüntü optimizasyon filtrelerini kullanmak, özellikle düşük kaliteli taramalar ile çalışırken OCR doğruluğunu önemli ölçüde artırabilir.

Aşağıdaki örnekte gri tonlama filtresi uygulanır ve filtrelenmiş görüntüyü aranabilir PDF çıktısına gömmek için ikinci argüman olarak true geçirilir.

: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

En iyi sonuçlar için, belgenizin türü için en iyi filtre kombinasyonunu otomatik olarak belirlemek için Filtre Sihirbazını kullanmayı düşünün. Bu araç, girişinizi 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 yaparken veya kopyalarken bozuk karakterler gösteriyorsa, sorun, aranabilir metin katmanında varsayılan olarak kullanılan yazı tipinden kaynaklanmaktadır. Varsayılan olarak, SaveAsSearchablePdf, tüm Unicode karakterlerini tam olarak desteklemeyen Times New Roman yazı tipini kullanır. Bu, aksanlı veya ASCII dışı karakterlerle dillere etki eder.

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

Ayrıca dördüncü bir parametre olarak özel bir yazı tipi adı 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, OcrResult, OcrPhotoResult ve OcrDocAdvancedResult dahil olmak üzere tüm sonuç türleri için geçerlidir; bu nedenle, düzeltme, sonucu hangi okuma yönteminin ürettiğine bakılmaksızın işe yarar.

Bu, başlangıçta Times New Roman fontu ile dizilmiş belgeler için Liberation Serif önerilir çünkü orijinal boşlukları ve düzeni metrik olarak 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 aranabilir PDF'yi bir bayt dizisi veya akış olarak geri döndürmeyi de destekler.


Aranabilir PDF'leri Bayt veya Akış Olarak Nasıl Dışa Aktarırım?

Aranabilir PDF çıktısı, sırasıyla SaveAsSearchablePdfBytes ve SaveAsSearchablePdfStream yöntemleri kullanılarak baytlar veya akışlar olarak da işlenebilir. Aşağıdaki kod örneği, bu yöntemlerin nasıl kullanılacağını gösterir.

: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 çıktı seçenekleri, dosya sistemi erişiminin sınırlı olabileceği bulut depolama hizmetleri, veritabanları veya web uygulamalarıyla entegre olurken özellikle kullanışlıdır. Aşağıdaki örnek pratik uygulamaları gösterir:

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 Hususları

Büyük belge hacimlerini işlerken, geçirgenliği artırmak için çok iş parçacıklı OCR işlemleri uygulamayı düşünün. IronOCR, eşzamanlı işlemeyi destekler ve böylece birden fazla belgeyi aynı anda yapabilmenizi 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

Gelişmiş 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ını 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 olmak üzere üç çıktı yönteminin tümü için de geçerlidir. Aşağıdaki Özette, uygun çıktı formatlarıyla aranabilir PDF yöntemlerinin tam seti toplanmaktadır.

Özet

IronOCR ile aranabilir PDF'ler oluşturmak basit ve esnektir. İster tek bir görüntüyü, ister çok sayfalı belgeleri, ReadPhoto aracılığıyla fotoğrafları veya ReadDocumentAdvanced aracılığıyla gelişmiş belge taramalarını işlemek isteyin, 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şmiş ML modelleri arasında seçim yapmak üzere ModelType parametresini kullanın. Dosyalar, baytlar veya akışlar olarak dışa aktarma yeteneği, masaüstü uygulamalardan bulut tabanlı hizmetlere kadar tüm uygulama mimarilerine uyum sağlar.

Daha gelişmiş OCR senaryoları için, kapsamlı kod örneklerini keşfedin veya ayrıntılı metod imzaları ve seçenekler için API belgelerine başvurun.

Sıkça Sorulan Sorular

Taranmış görüntülerden C# ile nasıl aranabilir bir PDF oluşturabilirim?

IronOCR kullanarak taranmış görüntülerden aranabilir PDF'ler oluşturmak basittir. Yapılandırmada RenderSearchablePdf'i true olarak ayarlayın, giriş görüntünüzde Read() yöntemini kullanın ve istediğiniz çıktı yolu ile SaveAsSearchablePdf() çağrısı yapın. IronOCR, görüntü üzerinde OCR yaparak orijinal görüntü üzerine seçilebilir, aranabilir metin içeren bir PDF oluşturacaktır.

Hangi dosya formatları aranabilir PDF'lere dönüştürülebilir?

IronOCR, JPG, PNG, TIFF ve mevcut PDF belgeleri dahil çeşitli görüntü formatlarını aranabilir PDF'lere dönüştürebilir. Kütüphane, tek sayfalık görüntüler ve çok sayfalı belgeler (örneğin TIFF dosyaları) gibi belgeleri otomatik olarak işler ve çıkan aranabilir PDF'de doğru sayfa sıralamasını korur.

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

Evet, IronOCR, aranabilir PDF'leri birden fazla formatta dışa aktarmayı destekler. SaveAsSearchablePdf() yöntemiyle doğrudan bir dosyaya kaydetmenin yanı sıra, OCR sonuçlarını bayt dizileri veya akışlar olarak da dışa aktarabilirsiniz; bu sayede geçici dosyalar oluşturmadan web uygulamaları, bulut depolama veya veritabanı sistemleriyle entegrasyon kolaylaşır.

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

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

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

IronOCR, tanınan metni, PDF'deki orijinal görüntünün üzerine görünmez bir katman olarak konumlandırmayı otomatik olarak ele alır. Bu, kullanıcıların metni seçmesi ve araması için doğru metin-görüntü eşlemeyi sağlar ve orijinal belgenin görsel görünümünü korur. Kütüphane, bu süreçte özel yazı tipleri ve konumlandırma algoritmaları kullanır.

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

Evet, SaveAsSearchablePdf ReadPhoto, ReadScreenShot ve ReadDocumentAdvanced sonuçları için desteklenir. Her yöntem, aranabilir PDF dışa aktarmasını destekleyen bir sonuç türü döndürür, bu sayede gerçek dünya fotoğrafları, ekran görüntüleri veya karmaşık belge taramalarını aranabilir PDF'lere dönüştürmek kolaylaşır.

ModelType parametresi ne işe yarar?

ModelType parametresi, OCR için hangi önceden eğitilmiş ML modelinin kullanılacağını kontrol eder. Normal varsayılan olarak görüntüleri hızlı sonuçlar için 960 piksele küçültür. Enhanced 2560 piksele kadar görüntüleri destekleyerek daha detaylı ve yüksek çözünürlüklü girdiler için doğruluğu artırır.

Neden aranabilir PDF'deki kopyaladığım veya aradığım karakterler bozulmuş görünüyor?

Bu durum, aranabilir metin katmanında kullanılan varsayılan font (Times New Roman) tüm Unicode karakterlerini tam olarak desteklemediği için ortaya çıkar. Bunu düzeltmek için SaveAsSearchablePdf yönteminin üçüncü parametresi olarak Unicode uyumlu bir font dosyası geçin. Eğer belgeleriniz Times New Roman ile dizayn edilmişse ve diğer yazı tipleriyle aralık tutarsızlıkları fark ederseniz, aynı glyf ölçütlerini paylaşan ve orijinal düzeni koruyan Liberation Serif'i deneyin.

IronOCR veri doğruluğunu nasıl artırabilir?

IronOCR, gelişmiş tanıma algoritmaları ve görüntü düzeltme özellikleriyle veri doğruluğunu artırır, böylece metin çıkarım sürecinin hem güvenilir hem de kesin olmasını sağlar.

IronOCR için ücretsiz bir deneme mevcut mu?

Evet, Iron Software, IronOCR'nin özelliklerini ve yeteneklerini, bir satın alma kararı vermeden önce test edebilmek için ücretsiz bir deneme sunar.

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ı...

Daha Fazla Oku
Gözden Geçiren
Jeff Fritz
Jeffrey T. Fritz
Baş Program Yöneticisi - .NET Topluluğu Ekibi
Jeff, .NET ve Visual Studio ekipleri için bir Baş Program Yöneticisidir. .NET Conf sanal konferans serisinin baş yapımcısıdır ve haftada iki kez canlı yayınlanan 'Fritz and Friends' adlı bir akış programı sunar; burada izleyicilerle birlikte teknoloji konuşur ve kod yazar. Jeff, en büyük Microsoft geliştirici etkinlikleri için atölyeler, sunumlar ve içerik planları yazar, Microsoft Build, Microsoft Ignite, .NET Conf ve Microsoft MVP Summit gibi etkinliklerde yer alır.
Başlamaya Hazır mısınız?
Nuget İndirmeler 5,896,332 | Sürüm: 2026.5 just released
Still Scrolling Icon

Hâlâ Kaydırıyor Musunuz?

Hızlıca kanıt ister misiniz? PM > Install-Package IronOcr
örnek çalıştır görüntünüzün aranabilir metin haline gelmesini izleyin.