# Obsluga duzych plikow PDF w IronOCR
Uruchamianie OCR na duzych, wielostronicowych plikach PDF moze powodowac skoki pamieci i zatrzymanie procesu. Zwykle sprawca jest ladowanie kazdej strony do pamieci naraz.
```txt
System.OutOfMemoryException
```
`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.
```csharp
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`.
```csharp
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`:
```csharp
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:
```csharp
var pdf = PdfDocument.FromFile(@"D:\hugePdf.pdf");
var stream = pdf.CompressPdfToStream(JpegQuality: 75, CompressStructTree: true);
```
[[w:(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.
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
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;
using var pdf = IronPdf.PdfDocument.FromFile(pdfPath);
var pageCount = pdf.PageCount;
C#
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());
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());
C#
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);
var pdf = PdfDocument.FromFile(pdfPath);
var stream = pdf.CompressPdfToStream(CompressStructTree: true);
var ocrTesseract = new IronTesseract();
using var ocrInput = new OcrInput();
ocrInput.LoadPdfPage(stream, 1);
C#
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);
var pdf = PdfDocument.FromFile(@"D:\hugePdf.pdf");
var stream = pdf.CompressPdfToStream(JpegQuality: 75, CompressStructTree: true);
C#
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.