
Jak OCR-ować PDF w C#: Wyodrębnij tekst ze zeskanowanych dokumentów za pomocą .NET
Zeskanowane dokumenty PDF stanowią stałe wyzwanie dla programistów .NET: tekst występuje wyłącznie w postaci obrazów, co uniemożliwia wyszukiwanie, kopiowanie lub przetwarzanie programowe. Optyczne rozpoznawanie znaków (OCR) rozwiązuje ten problem, przekształcając zeskanowane obrazy w dane, które można edytować i przeszukiwać — zamieniając dokumenty papierowe, zdjęcia zrobione aparatem lub dowolne pliki PDF oparte na obrazach w tekst, który można odczytać maszynowo. Niezależnie od tego, czy celem jest digitalizacja archiwów papierowych, automatyzacja pozyskiwania danych, czy tworzenie procesów przetwarzania dokumentów, możliwość wykonywania OCR na plikach PDF w języku C# jest kluczową funkcją.
IronOCR to biblioteka OCR dla platformy .NET oparta na silniku Tesseract 5 z dodatkowymi ulepszeniami zwiększającymi dokładność. Pozwala programistom na wyodrębnianie tekstu z dowolnego dokumentu PDF — zeskanowanego lub innego — za pomocą zaledwie kilku wierszy kodu. W tym artykułe omówiono podstawowe procesy: podstawowe OCR plików PDF, przetwarzanie wybranych stron, wyodrębnianie danych z określonych obszarów oraz wstępne przetwarzanie obrazów w przypadku trudnych skanów.
Jak przeprowadzić OCR na PDF w C#?
Najszybsza droga do wyodrębniania tekstu z plików PDF w środowisku .NET zaczyna się od zainstalowania IronOCR za pośrednictwem NuGet. Otwórz terminal w katalogu projektu i uruchom:
Po zainstalowaniu pakietu poniższy program z instrukcją najwyższego poziomu odczytuje zeskanowany plik PDF i drukuje wyodrębniony tekst:
using IronOcr;
// Initialize the OCR engine
var ocr = new IronTesseract();
// Load the PDF and perform OCR
using var input = new OcrInput();
input.LoadPdf("scanned-report.pdf");
// Run recognition
OcrResult result = ocr.Read(input);
// Access the extracted text
string text = result.Text;
Console.WriteLine(text);Imports IronOcr
' Initialize the OCR engine
Dim ocr As New IronTesseract()
' Load the PDF and perform OCR
Using input As New OcrInput()
input.LoadPdf("scanned-report.pdf")
' Run recognition
Dim result As OcrResult = ocr.Read(input)
' Access the extracted text
Dim text As String = result.Text
Console.WriteLine(text)
End UsingKlasa IronTesseract owijająca Tesseract 5 z optymalizacjami natywnymi dla .NET zarówno dla .NET Core, jak i .NET Framework. Obiekt OcrInput zarządza ładowaniem PDF oraz wewnętrznym renderowaniem stron. Kiedy wywołany zostaje Read, proces OCR analizuje każdą stronę i zwraca OcrResult zawierający pełny wyodrębniony tekst, plus strukturalne dane o akapitach, liniach, słowach i ich współrzędnych pikselowych.
Wynik może zostać zapisany w pliku tekstowym, przekazany do dalszego przetwarzania, zapisany w bazie danych lub wprowadzony do procesu indeksowania dokumentów. Więcej informacji na temat silnika można znaleźć w dokumentacji Tesseract OCR oraz w Dokumentacji API IronOCR.
Dane wejściowe

Wynik

Jak odczytać konkretne strony z pliku PDF?
Przetwarzanie każdej strony długiego dokumentu powoduje stratę czasu i pamięci, gdy tylko niektóre strony zawierają istotne treści. IronOCR pozwala na celowanie w konkretne strony poprzez przekazanie indeksów stron zaczynających się od zera do LoadPdf:
using IronOcr;
using System.Collections.Generic;
var ocr = new IronTesseract();
// Specify pages to process (zero-based: 0 = first page)
var targetPages = new List<int> { 0, 2, 4 };
using var input = new OcrInput();
input.LoadPdf("lengthy-document.pdf", pageIndices: targetPages);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);Imports IronOcr
Imports System.Collections.Generic
Dim ocr As New IronTesseract()
' Specify pages to process (zero-based: 0 = first page)
Dim targetPages As New List(Of Integer) From {0, 2, 4}
Using input As New OcrInput()
input.LoadPdf("lengthy-document.pdf", pageIndices:=targetPages)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End UsingSelektywne ładowanie stron skraca czas przetwarzania i zmniejsza zużycie pamięci, co ma znaczenie podczas pracy z archiwami liczącymi setki stron, w których tylko kilka zawiera potrzebne dane. Konwencja indeksowania od zera odpowiada standardowym kolekcjom .NET Standard: indeks strony 0 to pierwsza strona dokumentu.
W przypadku dokumentów, w których odpowiednie strony nie są znane z góry, warto najpierw przeprowadzić szybki skan całego dokumentu przy zmniejszonej rozdzielczości (DPI), aby zidentyfikować numery stron, a następnie ponownie uruchomić skanowanie z pełnymi ustawieniami tylko na tych stronach.
Dowiedz się więcej o kontroli na poziomie stron w dokumentacji wyboru stron IronOCR.
Jak wyodrębnić dane z określonego obszaru strony?
Przetwarzanie faktur, digitalizacja formularzy i analizowanie dokumentów strukturalnych często wymagają wyodrębnienia tekstu z określonego obszaru, a nie skanowania całej strony. IronOCR obsługuje OCR ukierunkowane na obszary za pomocą parametru ContentAreas, który przyjmuje tablicę obiektów Rectangle określających, które części każdej strony analizować:
using IronOcr;
using IronSoftware.Drawing;
var ocr = new IronTesseract();
// Define the scan region: X, Y, Width, Height (all in pixels from top-left)
var invoiceFields = new Rectangle[]
{
new Rectangle(130, 290, 250, 50) // Invoice number field
};
using var input = new OcrInput();
input.LoadPdf("invoice.pdf", contentAreas: invoiceFields);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);Imports IronOcr
Imports IronSoftware.Drawing
Dim ocr As New IronTesseract()
' Define the scan region: X, Y, Width, Height (all in pixels from top-left)
Dim invoiceFields As Rectangle() = {
New Rectangle(130, 290, 250, 50) ' Invoice number field
}
Using input As New OcrInput()
input.LoadPdf("invoice.pdf", contentAreas:=invoiceFields)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End UsingKonstruktor Rectangle przyjmuje cztery parametry całkowitoliczbowe: współrzędne X, Y, szerokość i wysokość -- wszystkie mierzone w pikselach od lewego górnego rogu renderowanej strony. Skupienie się na niewielkim obszarze zamiast na całej stronie skraca czas OCR i zmniejsza ryzyko, że silnik wychwyci zakłócenia z otoczenia lub niepowiązane pola tekstowe.
Dla przepływów pracy dotyczących przetwarzania faktur w partiach, połącz wyodrębnianie obszarów z iteracją po result.Pages, aby wyciągnąć strukturalne dane z tej samej pozycji pola na setkach dokumentów. Każdy wynik strony wyświetla rozpoznany tekst dla swojego obszaru treści niezależnie.
Przykład obszaru treści IronOCR zapewnia dodatkowe opcje konfiguracyjne dla scenariuszy multi-regionowych.
Dane wejściowe

Wynik

Jak poprawić dokładność OCR w przypadku zeskanowanych dokumentów?
W rzeczywistości zeskanowane dokumenty często mają problemy z jakością: przekrzywione strony, niską rozdzielczość lub szumy cyfrowe spowodowane przez sprzęt lub oprogramowanie skanujące. IronOCR zawiera zestaw filtrów przetwarzania wstępnego obrazów, które korygują te problemy przed uruchomieniem silnika rozpoznawania:
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
// Load PDF at higher DPI for improved text recognition on small fonts
input.LoadPdf("poor-quality-scan.pdf", dpi: 300);
// Apply image correction filters
input.Deskew(); // Automatically straighten rotated pages
input.DeNoise(); // Remove scanning artifacts and speckles
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);Imports IronOcr
Dim ocr = New IronTesseract()
Using input = New OcrInput()
' Load PDF at higher DPI for improved text recognition on small fonts
input.LoadPdf("poor-quality-scan.pdf", dpi:=300)
' Apply image correction filters
input.Deskew() ' Automatically straighten rotated pages
input.DeNoise() ' Remove scanning artifacts and speckles
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End UsingParametr dpi kontroluje rozdzielczość, w której strony PDF są renderowane przed uruchomieniem rozpoznawania. Wyższe wartości — od 200 do 300 DPI — poprawiają dokładność w przypadku dokumentów zawierających mały lub gęsty tekst, kosztem nieco większego zużycia pamięci podczas przetwarzania. Metoda Deskew automatycznie wykrywa i koryguje obrót strony. DeNoise usuwa plamki i artefakty, które mogą zakłócać krok rozpoznawania znaków.
W przypadku dokumentów wymagających bardziej agresywnej korekcji obrazu, IronOCR zapewnia również poprawę kontrastu, binarizację (konwersję stron na czarno-białe) oraz regulację skali. Połączenie wielu filtrów w sekwencji pozwala odzyskać użyteczny tekst ze skanów, które w przeciwnym razie dałyby zniekształcony wynik. Przejrzyj referencję filtrów obrazów IronOCR dla kompletnej listy dostępnych operacji wstępnego przetwarzania.
Jak radzicie sobie z dokumentami chronionymi hasłem i dokumentami w wielu formatach?
IronOCR nie ogranicza się do standardowych plików PDF. Biblioteka obsługuje szereg scenariuszy wejściowych, które często pojawiają się w procesach przetwarzania dokumentów.
Pliki PDF chronione hasłem są obsługiwane poprzez przekazanie danych uwierzytelniających podczas tworzenia danych wejściowych:
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadPdf("protected.pdf", password: "secret123");
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadPdf("protected.pdf", password:="secret123")
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End UsingFormaty obrazów -- PNG, JPEG, TIFF, BMP, GIF oraz wielostronicowy TIFF -- są ładowane za pomocą odpowiednich metod LoadImage lub LoadImageFrames. Niezależnie od formatu danych wejściowych obowiązują te same filtry przetwarzania wstępnego i opcje kierowania regionalnego.
Dokumenty wielojęzyczne są obsługiwane przez system pakietów językowych IronOCR. Biblioteka standardowo dostarczana jest z angielskim i obsługuje ponad 125 dodatkowych pakietów językowych, obejmujących skrypty łacińskie, cyrylicę, CJK, arabski i inne. Wczytaj dodatkowe języki przed wywołaniem Read:
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.German;Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.GermanDla dokumentów mieszających wiele języków na tej samej stronie dostępny jest tryb MultiLanguage. Jest to szczególnie cenne w przypadku przetwarzania faktur w środowiskach międzynarodowych, gdzie nagłówki, pozycje i adresy mogą występować w różnych językach.
Wdrożenie działa w systemach Windows, Linux, macOS oraz w środowiskach chmurowych, w tym w kontenerach Azure i Docker.
Jak tworzyć pliki PDF z możliwością wyszukiwania na podstawie zeskanowanych dokumentów?
Oprócz wyodrębniania tekstu do ciągów znaków, IronOCR może generować pliki PDF z możliwością wyszukiwania — pliki PDF, w których oryginalny zeskanowany obraz jest zachowany jako warstwa wizualna, a niewidoczna warstwa tekstowa jest osadzona w celu umożliwienia operacji wyszukiwania i kopiowania. Jest to standardowy format generowany przez profesjonalne skanery dokumentów.
Funkcja tworzenia przeszukiwalnych PDF przez IronOCR akceptuje OcrResult i zapisuje nowy plik PDF:
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadPdf("scanned-archive.pdf");
OcrResult result = ocr.Read(input);
// Save as a searchable PDF
result.SaveAsSearchablePdf("output-searchable.pdf");Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadPdf("scanned-archive.pdf")
Dim result As OcrResult = ocr.Read(input)
' Save as a searchable PDF
result.SaveAsSearchablePdf("output-searchable.pdf")
End UsingPlik wyjściowy można otworzyć w dowolnym programie do przeglądania plików PDF. Operacje zaznaczania, wyszukiwania i kopiowania tekstu działają na osadzonej warstwie tekstowej, przy czym zachowany jest oryginalny wygląd skanu. Ten format jest powszechnie wymagany w archiwach zgodności, repozytoriach dokumentów prawnych oraz systemach zarządzania treścią w Enterprise.
Dla dodatkowych formatów wyjściowych obiekt OcrResult również uwidacznia wskaźniki ufności na stronę, ramki obwiedni na poziomie słów oraz strukturalne dane dotyczące akapitów - wszystkie przydatne do dalszych działań klasyfikacyjnych lub indeksacyjnych.
Jak odczytywać kody BarCode i kody QR obok tekstu?
Procesy przetwarzania dokumentów często wymagają wyodrębnienia zarówno tekstu czytelnego dla człowieka, jak i kodów czytelnych dla maszyn z tego samego dokumentu. IronOCR może wykrywać i dekodować kody kreskowe oraz kody QR podczas tego samego przebiegu OCR, bez konieczności korzystania z oddzielnej biblioteki.
Włącz odczytywanie kodów kreskowych na instancji IronTesseract przed przetwarzaniem:
using IronOcr;
var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;
using var input = new OcrInput();
input.LoadPdf("shipment-labels.pdf");
OcrResult result = ocr.Read(input);
// Access recognized text
Console.WriteLine(result.Text);
// Access barcode data
foreach (var barcode in result.Barcodes)
{
Console.WriteLine($"Type: {barcode.Format}, Value: {barcode.Value}");
}Imports IronOcr
Dim ocr As New IronTesseract()
ocr.Configuration.ReadBarCodes = True
Using input As New OcrInput()
input.LoadPdf("shipment-labels.pdf")
Dim result As OcrResult = ocr.Read(input)
' Access recognized text
Console.WriteLine(result.Text)
' Access barcode data
For Each barcode In result.Barcodes
Console.WriteLine($"Type: {barcode.Format}, Value: {barcode.Value}")
Next
End UsingJest to szczególnie przydatne w przypadku przetwarzania etykiet wysyłkowych, zarządzania zapasami oraz wszelkich procesów, w których BARCODES i drukowany tekst pojawiają się razem na skanowanych dokumentach. Przewodnik po odczytywaniu kodów kreskowych IronOCR obejmuje obsługiwane formaty, takie jak Code 128, kody QR, Data Matrix i PDF417.
Jaka jest różnica między typami danych wejściowych IronOCR?
IronOCR oferuje dwa główne sposoby ładowania plików PDF, z których każdy jest dostosowany do różnych scenariuszy:
| Podejście | Klasa | Najlepsze dla | Uwagi |
|---|---|---|---|
| Ogólne uwagi | OcrInput.LoadPdf() | Najczęstsze zastosowania | Obsługuje wszystkie filtry przetwarzania wstępnego, wybór stron, obszary treści |
| Specyficzne dla plików PDF | OcrPdfInput | Proste scenariusze | Wygodna nakładka; mniej opcji konfiguracyjnych |
| Pliki graficzne | OcrInput.LoadImage() | PNG, JPEG, TIFF, BMP | Takie samo przetwarzanie wstępne i kierowanie do regionów jak w przypadku plików PDF |
| Wielostronicowy plik TIFF | OcrInput.LoadImageFrames() | Archiwa faksów, dane ze skanera | Przetwarza każdą klatkę jako oddzielną stronę |
Dla większości scenariuszy produkcyjnych zaleca się podejście OcrInput.LoadPdf(), ponieważ ujawnia pełną funkcjonalność API dotyczącą procesów wstępnych i ustawień. OcrPdfInput działa dobrze dla szybkiego prototypowania lub sytuacji, w których domyślne ustawienia są wystarczające.
Jakie są Twoje kolejne kroki?
Powyższe przykłady kodu obejmują podstawowe procesy IronOCR dotyczące OCR plików PDF w języku C#. Oto krótka lista kontrolna, która pomoże Ci przejść do kolejnego etapu:
- Zainstaluj pakiet:
dotnet add package IronOcrlub wyszukaj IronOCR na NuGet - Uruchom podstawowy przykład: Sprawdź, czy udało się wyodrębnić tekst z przykładowego pliku PDF, zanim zbudujesz pełną logikę potoku
- Zastosuj przetwarzanie wstępne: Jeśli pracujesz z zeskanowanymi dokumentami, dodaj wywołania
DeskewiDeNoisei przetestuj z reprezentatywnymi próbkami - Odkryj dodatkowe funkcje: Wyjście wyszukiwanego PDF, odczytywanie kodów kreskowych, wielojęzykowe wsparcie oraz wyjście danych strukturalnych
- Zapoznaj się z wytycznymi dotyczącymi wdrażania: artykuły dotyczące wdrażania w środowiskach Azure, Docker i Linux obejmują konfigurację specyficzną dla danego środowiska
- Wypróbuj bezpłatną wersję próbną: Bezpłatna próba, aby przetestować pełny zestaw funkcji przed zakupem licencji
- Uzyskaj licencję: opcje licencyjne IronOCR obejmują zarówno indywidualnych programistów, jak i wdrożenia korporacyjne, z możliwością redystrybucji bez opłat licencyjnych
W przypadku pytań dotyczących konkretnych przypadków użycia biblioteka IronOCR zawiera artykuły opisujące krok po kroku dziesiątki scenariuszy. Pełna dokumentacja interfejsu API znajduje się w dokumentacji API IronOCR.

Powiązane artykuły

