Obsluga duzych plikow PDF w IronOCR

Curtis Chau
Curtis Chau
Updated: 29 czerwca 2026

Uruchamianie OCR na duzych, wielostronicowych plikach PDF moze powodowac skoki pamieci i zatrzymanie procesu. Zwykle sprawca jest ladowanie kazdej strony do pamieci naraz.

System.OutOfMemoryException
Text

OcrInput.LoadPdf("large.pdf") czyta wszystkie strony za jednym razem. System obrazowania IronOCR nastepnie jednoczesnie renderuje kazda strone, a poniewaz DPI domyslnie ustawia sie na 200, uzycie pamieci rosnie szybko. W duzym dokumencie oznacza to OutOfMemoryException lub zablokowanie zasobow.

Rozwiązanie

Rozwiazanie to przetwarzanie pliku PDF strona po stronie i utrzymywanie DPI na renderowaniu na poziomie jak najnizszym z zachowaniem jakosci tekstu.

1. Uzyskaj liczbe stron

Otworz dokument z IronPdf.PdfDocument (lub inna biblioteka PDF), aby sprawdzic, ile ma stron.

using var pdf = IronPdf.PdfDocument.FromFile(pdfPath);
var pageCount = pdf.PageCount;

2. Zaladuj jedna strone na raz

Petla przez strony i laduj kazda oddzielnie z OcrInput.LoadPdfPage("file.pdf", pageIndex, dpi). Gdzie jakosc wizualna utrzymuje sie, obnizaj DPI do 80, aby zachowac pamiec.

3. Czytaj i łacz

Przekaż każdą stronę wejściową do IronTesseract.Read() i dołącz wynik do StringBuilder.

var ocr = new IronTesseract();
var pdfPath = "large.pdf";
using var pdf = IronPdf.PdfDocument.FromFile(pdfPath);
var pageCount = pdf.PageCount;
var textBuilder = new StringBuilder();
for (int i = 0; i < pageCount; i++)
{
    using var input = new OcrInput();
    input.LoadPdfPage(pdfPath, i, 80);
    var result = ocr.Read(input);
    textBuilder.Append(result.Text);
    textBuilder.Append(' '); // Add space between pages
}
Console.WriteLine(textBuilder.ToString().Trim());

using na każdym OcrInput zwalnia dane obrazu strony przed następną iteracją, dzięki czemu pamięć pozostaje płaska w całej pętli zamiast rosnąć wraz z liczbą stron.

Opcja: Najpierw skompresuj PDF

Dla bardzo złożonych lub ciężkich plików przetwarzanie stron może wciąż sprawiać trudności. Skompresuj PDF za pomocą API Kompresji w IronPDF przed OCR, aby zmniejszyć ilość danych obrazu, które IronOCR musi obsłużyć. Najwięcej korzyści przynosi to w przypadku zeskanowanych lub ciężkich dokumentów.

Kompresuj bezpośrednio do strumienia, a następnie załaduj ten strumień do OcrInput:

var pdf = PdfDocument.FromFile(pdfPath);
var stream = pdf.CompressPdfToStream(CompressStructTree: true);
var ocrTesseract = new IronTesseract();
using var ocrInput = new OcrInput();
ocrInput.LoadPdfPage(stream, 1);

Gdy PDF zawiera osadzone obrazy, obniż JpegQuality podczas kompresji, aby jeszcze bardziej zmniejszyć dane:

var pdf = PdfDocument.FromFile(@"D:\hugePdf.pdf");
var stream = pdf.CompressPdfToStream(JpegQuality: 75, CompressStructTree: true);
Ostrzeżenie: Czy można ponownie używać tego samego MemoryStream w obrębie iteracji pętli? Zresetuj jego pozycję do 0 przed każdym odczytem. Strumień zostaje skonsumowany po odczycie, więc kolejny odczyt nie powiedzie się, jeśli pozycja nie zostanie zresetowana.

Wskazówki dotyczące debugowania

  • Obniź DPI: wartości w 80 do 100 znacznie obniżają zużycie pamięci, gdy tekst jest nadal czytelny.
  • Unikaj LoadPdf() w dużych plikach: czytaj cały dokument na raz tylko wtedy, gdy naprawdę jest mały.
  • Zwolnienie wczesne: owiń OcrInput w instrukcje using, aby pamięć była zwalniana między stronami.
  • Równoleglizuj ostrożnie: uruchamiaj strony jednocześnie tylko wtedy, gdy maszyna ma wolną pamięć i CPU; może się nie udać dla dużych PDF.

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podręczników.

Czytaj więcej

Gotowy, aby rozpocząć?

Nuget Downloads 6,357,159Wersja:2026.11właśnie wydany