Wie man Ergebnisse als durchsuchbares PDF in C# speichert

Speichern von durchsuchbaren PDFs in C#35; mit IronOCR

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

IronOCR ermöglicht es C#-Entwicklern, gescannte Dokumente und Bilder mit Hilfe der OCR-Technologie in durchsuchbare PDFs zu konvertieren, wobei die Ausgabe als Dateien, Bytes oder Streams mit nur wenigen Codezeilen unterstützt wird.

Ein durchsuchbares PDF, oft auch als OCR-PDF (Optical Character Recognition) bezeichnet, ist ein PDF-Dokument, das sowohl gescannte Bilder als auch maschinenlesbaren Text enthält. Diese PDFs entstehen durch die Anwendung von OCR auf gescannte Papierdokumente oder Bilder, wodurch der Text in den Bildern erkannt und in auswählbaren und durchsuchbaren Text umgewandelt wird.

IronOCR bietet eine Lösung zur optischen Zeichenerkennung von Dokumenten und zum Export der Ergebnisse als durchsuchbare PDFs. Es unterstützt den Export durchsuchbarer PDFs als Dateien, Bytes und Datenströme. Diese Fähigkeit ist besonders nützlich bei der Arbeit mit gescannten Dokumenten, bei der Digitalisierung von Papierarchiven oder bei der Durchsuchung älterer PDF-Dateien für ein besseres Dokumentenmanagement.

Schnellstart: Durchsuchbares PDF in einer Zeile exportieren

Setzen Sie RenderSearchablePdf = true, führen Sie Read(...) auf Ihre Eingabe aus und rufen Sie SaveAsSearchablePdf(...) auf - das ist alles, was Sie brauchen, um mit IronOCR ein vollständig durchsuchbares PDF zu erzeugen.

Nuget IconLegen Sie jetzt mit NuGet los, um PDFs zu erstellen:

  1. Installieren Sie IronOCR mit dem NuGet-Paketmanager.

    PM > Install-Package IronOcr

  2. Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.

    new IronOcr.IronTesseract { Configuration = { RenderSearchablePdf = true } } .Read(new IronOcr.OcrImageInput("file.jpg")).SaveAsSearchablePdf("searchable.pdf");
  3. Bereitstellen zum Testen in Ihrer Live-Umgebung

    Beginnen Sie noch heute mit der Nutzung von IronOCR in Ihrem Projekt – mit einer kostenlosen Testversion.
    arrow pointer


Wie exportiere ich OCR-Ergebnisse als durchsuchbare PDF-Datei?

Hier erfahren Sie, wie Sie das Ergebnis mit IronOCR als durchsuchbare PDF-Datei exportieren können. Zuerst müssen Sie die Eigenschaft Configuration.RenderSearchablePdf auf true setzen. Nachdem Sie das OCR-Ergebnisobjekt mit der Read Methode erhalten haben, verwenden Sie die SaveAsSearchablePdf -Methode, indem Sie den Ausgabedateipfad angeben. Der untenstehende Code demonstriert die Verwendung einer Beispiel-TIFF-Datei.

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

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Enable render as searchable PDF
ocrTesseract.Configuration.RenderSearchablePdf = true;

// Add image
using var imageInput = new OcrImageInput("Potter.tiff");
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Export as searchable PDF
ocrResult.SaveAsSearchablePdf("searchablePdf.pdf");
Imports IronOcr

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Enable render as searchable PDF
ocrTesseract.Configuration.RenderSearchablePdf = True

' Add image
Dim imageInput = New OcrImageInput("Potter.tiff")
' Perform OCR
Dim ocrResult As OcrResult = ocrTesseract.Read(imageInput)

' Export as searchable PDF
ocrResult.SaveAsSearchablePdf("searchablePdf.pdf")
$vbLabelText   $csharpLabel

Bei der Arbeit mit mehrseitigen TIFF-Dateien oder komplexen Dokumenten verarbeitet IronOCR automatisch alle Seiten und schließt sie in die durchsuchbare PDF-Ausgabe ein. Die Bibliothek übernimmt automatisch die Seitenanordnung und die Positionierung der Texteinblendungen und gewährleistet so eine genaue Text-Bild-Zuordnung.

Unten sehen Sie einen Screenshot der Beispiel-TIFF-Datei und ein eingebettetes, durchsuchbares PDF. Versuchen Sie, den Text in der PDF-Datei auszuwählen, um seine Durchsuchbarkeit zu überprüfen. Die Auswahlmöglichkeit bedeutet auch, dass der Text in einem PDF-Viewer durchsucht werden kann.

IronOCR verwendet eine bestimmte Schriftart, um den Text auf der Bilddatei zu überlagern, was zu einigen Diskrepanzen in der Textgröße führen kann.

Page from Harry Potter book showing Chapter Eight 'The Deathday Party' with text about Harry meeting Nearly Headless Nick

Arbeiten mit mehrseitigen Dokumenten

Bei PDF OCR-Operationen auf mehrseitigen Dokumenten verarbeitet IronOCR jede Seite nacheinander und behält die ursprüngliche Dokumentstruktur bei. Hier ein Beispiel für die Konvertierung einer mehrseitigen gescannten PDF-Datei in eine durchsuchbare PDF-Datei:

using IronOcr;

// Initialize IronTesseract with configuration
var ocrTesseract = new IronTesseract
{
    Configuration = 
    {
        RenderSearchablePdf = true,
        PageSegmentationMode = TesseractPageSegmentationMode.Auto
    }
};

// Load a multi-page PDF
using var pdfInput = new OcrPdfInput("multi-page-scan.pdf");

// Optionally specify page range (e.g., pages 1-10)
pdfInput.SelectPages(1, 10);

// Perform OCR with progress tracking
OcrResult result = ocrTesseract.Read(pdfInput);

// Save as searchable PDF
result.SaveAsSearchablePdf("searchable-multi-page.pdf");

// Display total pages processed
Console.WriteLine($"Processed {result.Pages.Length} pages");
using IronOcr;

// Initialize IronTesseract with configuration
var ocrTesseract = new IronTesseract
{
    Configuration = 
    {
        RenderSearchablePdf = true,
        PageSegmentationMode = TesseractPageSegmentationMode.Auto
    }
};

// Load a multi-page PDF
using var pdfInput = new OcrPdfInput("multi-page-scan.pdf");

// Optionally specify page range (e.g., pages 1-10)
pdfInput.SelectPages(1, 10);

// Perform OCR with progress tracking
OcrResult result = ocrTesseract.Read(pdfInput);

// Save as searchable PDF
result.SaveAsSearchablePdf("searchable-multi-page.pdf");

// Display total pages processed
Console.WriteLine($"Processed {result.Pages.Length} pages");
Imports IronOcr

' Initialize IronTesseract with configuration
Dim ocrTesseract As New IronTesseract With {
    .Configuration = New OcrConfiguration With {
        .RenderSearchablePdf = True,
        .PageSegmentationMode = TesseractPageSegmentationMode.Auto
    }
}

' Load a multi-page PDF
Using pdfInput As New OcrPdfInput("multi-page-scan.pdf")
    ' Optionally specify page range (e.g., pages 1-10)
    pdfInput.SelectPages(1, 10)

    ' Perform OCR with progress tracking
    Dim result As OcrResult = ocrTesseract.Read(pdfInput)

    ' Save as searchable PDF
    result.SaveAsSearchablePdf("searchable-multi-page.pdf")

    ' Display total pages processed
    Console.WriteLine($"Processed {result.Pages.Length} pages")
End Using
$vbLabelText   $csharpLabel

Wie kann ich bei der Erstellung durchsuchbarer PDFs Filter anwenden?

Die SaveAsSearchablePdf akzeptiert außerdem einen booleschen Wert als zweiten Parameter, mit dem Sie Filter auf ein durchsuchbares PDF anwenden können oder nicht, wodurch Entwickler die Flexibilität erhalten, dies zu wählen. Die Verwendung von Bildoptimierungsfiltern kann die OCR-Genauigkeit erheblich verbessern, insbesondere bei Minderwertigen Scans.

Im Folgenden finden Sie ein Beispiel für die Anwendung des Graustufenfilters und das anschließende Speichern der PDF-Datei mit einem Filter, indem Sie true in den zweiten Parameter von SaveAsSearchablePdf eingeben.

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

var ocr = new IronTesseract();
var ocrInput = new OcrInput();

// Load a PDF file
ocrInput.LoadPdf("invoice.pdf");

// Apply gray scale filter
ocrInput.ToGrayScale();
OcrResult result = ocr.Read(ocrInput);

// Save the result as a searchable PDF with filters applied
result.SaveAsSearchablePdf("outputGrayscale.pdf", true);
Imports IronOcr

Dim ocr As New IronTesseract()
Dim ocrInput As New OcrInput()

' Load a PDF file
ocrInput.LoadPdf("invoice.pdf")

' Apply gray scale filter
ocrInput.ToGrayScale()
Dim result As OcrResult = ocr.Read(ocrInput)

' Save the result as a searchable PDF with filters applied
result.SaveAsSearchablePdf("outputGrayscale.pdf", True)
$vbLabelText   $csharpLabel

Um optimale Ergebnisse zu erzielen, sollten Sie den Filter-Assistenten verwenden, um automatisch die beste Kombination von Filtern für Ihren spezifischen Dokumententyp zu ermitteln. Dieses Tool analysiert Ihre Eingaben und schlägt geeignete Vorverarbeitungsschritte vor.


Wie exportiere ich durchsuchbare PDFs als Bytes oder Streams?

Die Ausgabe des durchsuchbaren PDFs kann auch als Bytes oder Streams mit den Methoden SaveAsSearchablePdfBytes bzw. SaveAsSearchablePdfStream verarbeitet werden. Das folgende Codebeispiel zeigt, wie diese Methoden angewendet werden.

:path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-searchable-pdf-byte-stream.cs
// Export searchable PDF byte
byte[] pdfByte = ocrResult.SaveAsSearchablePdfBytes();

// Export searchable PDF stream
Stream pdfStream = ocrResult.SaveAsSearchablePdfStream();
' Export searchable PDF byte
Dim pdfByte() As Byte = ocrResult.SaveAsSearchablePdfBytes()

' Export searchable PDF stream
Dim pdfStream As Stream = ocrResult.SaveAsSearchablePdfStream()
$vbLabelText   $csharpLabel

Diese Ausgabeoptionen sind besonders nützlich bei der Integration mit Cloud-Speicherdiensten, Datenbanken oder Webanwendungen, bei denen der Zugriff auf das Dateisystem eingeschränkt sein kann. Hier ist ein erweitertes Beispiel mit praktischen Anwendungen:

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

Erwägungen zur Leistung

Bei der Verarbeitung großer Mengen von Dokumenten sollte die Implementierung von Multithreading-OCR-Operationen in Betracht gezogen werden, um den Durchsatz zu erhöhen. IronOCR unterstützt die gleichzeitige Verarbeitung, so dass Sie mehrere Dokumente gleichzeitig bearbeiten können:

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

Erweiterte Konfigurationsoptionen

Für fortgeschrittene Szenarien können Sie die detaillierte Tesseract-Konfiguration nutzen, um die OCR-Engine für bestimmte Dokumenttypen oder Sprachen feinabzustimmen:

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

Zusammenfassung

Die Erstellung durchsuchbarer PDFs mit IronOCR ist einfach und flexibel. Unabhängig davon, ob Sie einzelne Bilder, mehrseitige Dokumente oder Stapelverarbeitungsvorgänge verarbeiten müssen, bietet die Bibliothek robuste Methoden zur Erzeugung durchsuchbarer PDFs in verschiedenen Formaten. Durch die Möglichkeit, als Dateien, Bytes oder Streams zu exportieren, kann das Dokument an jede Anwendungsarchitektur angepasst werden, von Desktop-Anwendungen bis hin zu Cloud-basierten Diensten.

Für fortgeschrittene OCR-Szenarien können Sie die umfassenden Code-Beispiele oder die API-Dokumentation für detaillierte Methodensignaturen und Optionen nutzen.

Häufig gestellte Fragen

Wie erstelle ich eine durchsuchbare PDF-Datei aus gescannten Bildern in C#?

IronOCR macht es einfach, durchsuchbare PDFs aus gescannten Bildern zu erstellen. Setzen Sie einfach RenderSearchablePdf in der Konfiguration auf true, verwenden Sie die Read()-Methode für Ihr Eingabebild und rufen Sie SaveAsSearchablePdf() mit Ihrem gewünschten Ausgabepfad auf. IronOCR führt eine OCR auf dem Bild durch und erzeugt eine PDF-Datei mit auswählbarem, durchsuchbarem Text, der über das Originalbild gelegt wird.

Welche Dateiformate können in durchsuchbare PDFs konvertiert werden?

IronOCR kann verschiedene Bildformate wie JPG, PNG, TIFF und bestehende PDF-Dokumente in durchsuchbare PDFs konvertieren. Die Bibliothek unterstützt sowohl einseitige Bilder als auch mehrseitige Dokumente wie TIFF-Dateien, wobei alle Seiten automatisch verarbeitet werden und die korrekte Seitenreihenfolge in der durchsuchbaren PDF-Ausgabe beibehalten wird.

Kann ich durchsuchbare PDF-Dateien als Byte-Arrays oder Streams anstelle von Dateien exportieren?

Ja, IronOCR unterstützt den Export von durchsuchbaren PDFs in mehreren Formaten. Neben dem direkten Speichern in eine Datei mit SaveAsSearchablePdf() können Sie die OCR-Ergebnisse auch als Byte-Arrays oder Streams exportieren, was die Integration in Webanwendungen, Cloud-Speicher oder Datenbanksysteme erleichtert, ohne dass temporäre Dateien erstellt werden müssen.

Welcher Code ist mindestens erforderlich, um eine durchsuchbare PDF-Datei zu erstellen?

Die Erstellung einer durchsuchbaren PDF-Datei mit IronOCR kann in nur einer Codezeile erfolgen: new IronOcr.IronTesseract { Configuration = { RenderSearchablePdf = true } }.Read(new IronOcr.OcrImageInput("file.jpg")).SaveAsSearchablePdf("searchable.pdf"). Dies demonstriert das schlanke API-Design von IronOCR.

Wie funktioniert das Text-Overlay in durchsuchbaren PDFs?

IronOCR sorgt automatisch für die Positionierung des erkannten Textes als unsichtbare Überlagerung über dem Originalbild in der PDF-Datei. Dies gewährleistet eine genaue Text-Bild-Zuordnung, so dass der Benutzer Text auswählen und suchen kann, ohne dass das visuelle Erscheinungsbild des Originaldokuments beeinträchtigt wird. Die Bibliothek verwendet spezielle Schriftarten und Positionierungsalgorithmen, um dies zu erreichen.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen
Rezensiert von
Jeff Fritz
Jeffrey T. Fritz
Principal Program Manager - .NET Community Team
Jeff ist außerdem Principal Program Manager für das .NET- und Visual Studio-Team. Er ist der ausführende Produzent der .NET Conf Virtual Conference Series und moderiert ‚Fritz and Friends‘, einen Livestream für Entwickler, der zweimal wöchentlich ausgestrahlt wird. Dort spricht er über Technik und schreibt gemeinsam mit den Zuschauern Code. Jeff schreibt Workshops, Präsentationen und plant Inhalte für die größten Microsoft-Entwicklerveranstaltungen, einschließlich Microsoft Build, Microsoft Ignite, .NET Conf und dem Microsoft MVP Summit.
Bereit anzufangen?
Nuget Downloads 5,384,824 | Version: 2026.2 gerade veröffentlicht