# Gestion des fichiers PDF volumineux dans IronOCR
Exécuter l'OCR sur des PDFs multi-pages volumineux peut provoquer un pic de mémoire et faire planter le processus. Le coupable habituel est le chargement de chaque page en mémoire en même temps.
```txt
System.OutOfMemoryException
```
`OcrInput.LoadPdf("large.pdf")` lit toutes les pages en une seule fois. Le système d'imagerie d'IronOCR rend ensuite chaque page simultanément, et comme le DPI est par défaut à `200`, l'empreinte mémoire augmente rapidement. Sur un gros document, cela signifie un `OutOfMemoryException` ou un blocage de ressources.
## Solution
La solution est de traiter le PDF une page à la fois et de maintenir le DPI de rendu aussi bas que la qualité du texte le permet.
### 1. Obtenez le nombre de pages
Ouvrez le document avec `IronPdf.PdfDocument` (ou toute bibliothèque PDF) pour lire combien de pages il contient.
```csharp
using var pdf = IronPdf.PdfDocument.FromFile(pdfPath);
var pageCount = pdf.PageCount;
```
### 2. Chargez une page à la fois
Parcourez les pages et chargez chaque page individuellement avec `OcrInput.LoadPdfPage("file.pdf", pageIndex, dpi)`. Lorsque la qualité visuelle se maintient, baissez le DPI aussi bas que `80` pour économiser la mémoire.
### 3. Lisez et concaténez
Passez chaque entrée de page unique à `IronTesseract.Read()` et ajoutez le résultat à un `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());
```
Le `using` sur chaque `OcrInput` libère les données d'image de la page avant l'itération suivante, de sorte que la mémoire reste constante à travers la boucle au lieu de croître avec le nombre de pages.
### Option : Compressez d'abord le PDF
Pour les fichiers très complexes ou riches en images, la boucle page par page peut encore avoir des difficultés. Compressez le PDF avec l'API de compression d'IronPDF avant l'OCR pour réduire les données d'image qu'IronOCR doit gérer. Cela est particulièrement efficace sur les documents numérisés ou riches en images.
Compressez directement vers un flux, puis chargez ce flux dans `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);
```
Lorsqu'un PDF contient des images intégrées, réduisez `JpegQuality` pendant la compression pour réduire encore les données :
```csharp
var pdf = PdfDocument.FromFile(@"D:\hugePdf.pdf");
var stream = pdf.CompressPdfToStream(JpegQuality: 75, CompressStructTree: true);
```
[[w:(Réutilisez le même MemoryStream à travers les itérations de boucle ? Réinitialisez sa position à 0 avant chaque lecture. Un flux est consommé une fois lu, donc la lecture suivante échoue si la position n'est pas réinitialisée.)]]
## Conseils de débogage
- **Réduisez le DPI :** des valeurs dans la plage de `80` à `100` réduisent fortement l'utilisation de la mémoire lorsque le texte reste lisible.
- **Évitez `LoadPdf()` sur des fichiers volumineux :** lisez tout le document en une seule fois uniquement lorsqu'il est vraiment petit.
- **Débarrassez-vous tôt :** enveloppez `OcrInput` dans des déclarations `using` afin que la mémoire soit libérée entre les pages.
- **Parallélisez avec précaution :** exécutez les pages en parallèle uniquement lorsque la machine dispose de mémoire et de CPU supplémentaires ; cela se retourne contre vous sur les PDFs volumineux.
Exécuter l'OCR sur des PDFs multi-pages volumineux peut provoquer un pic de mémoire et faire planter le processus. Le coupable habituel est le chargement de chaque page en mémoire en même temps.
System.OutOfMemoryException
System.OutOfMemoryException
Text
OcrInput.LoadPdf("large.pdf") lit toutes les pages en une seule fois. Le système d'imagerie d'IronOCR rend ensuite chaque page simultanément, et comme le DPI est par défaut à 200, l'empreinte mémoire augmente rapidement. Sur un gros document, cela signifie un OutOfMemoryException ou un blocage de ressources.
Solution
La solution est de traiter le PDF une page à la fois et de maintenir le DPI de rendu aussi bas que la qualité du texte le permet.
1. Obtenez le nombre de pages
Ouvrez le document avec IronPdf.PdfDocument (ou toute bibliothèque PDF) pour lire combien de pages il contient.
using var pdf = IronPdf.PdfDocument.FromFile(pdfPath);var pageCount = pdf.PageCount;
using var pdf = IronPdf.PdfDocument.FromFile(pdfPath);
var pageCount = pdf.PageCount;
C#
2. Chargez une page à la fois
Parcourez les pages et chargez chaque page individuellement avec OcrInput.LoadPdfPage("file.pdf", pageIndex, dpi). Lorsque la qualité visuelle se maintient, baissez le DPI aussi bas que 80 pour économiser la mémoire.
3. Lisez et concaténez
Passez chaque entrée de page unique à IronTesseract.Read() et ajoutez le résultat à un 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#
Le using sur chaque OcrInput libère les données d'image de la page avant l'itération suivante, de sorte que la mémoire reste constante à travers la boucle au lieu de croître avec le nombre de pages.
Option : Compressez d'abord le PDF
Pour les fichiers très complexes ou riches en images, la boucle page par page peut encore avoir des difficultés. Compressez le PDF avec l'API de compression d'IronPDF avant l'OCR pour réduire les données d'image qu'IronOCR doit gérer. Cela est particulièrement efficace sur les documents numérisés ou riches en images.
Compressez directement vers un flux, puis chargez ce flux dans 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#
Lorsqu'un PDF contient des images intégrées, réduisez JpegQuality pendant la compression pour réduire encore les données :
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#
Avertissement: Réutilisez le même MemoryStream à travers les itérations de boucle ? Réinitialisez sa position à 0 avant chaque lecture. Un flux est consommé une fois lu, donc la lecture suivante échoue si la position n'est pas réinitialisée.
Conseils de débogage
Réduisez le DPI : des valeurs dans la plage de 80 à 100 réduisent fortement l'utilisation de la mémoire lorsque le texte reste lisible.
Évitez LoadPdf() sur des fichiers volumineux : lisez tout le document en une seule fois uniquement lorsqu'il est vraiment petit.
Débarrassez-vous tôt : enveloppez OcrInput dans des déclarations using afin que la mémoire soit libérée entre les pages.
Parallélisez avec précaution : exécutez les pages en parallèle uniquement lorsque la machine dispose de mémoire et de CPU supplémentaires ; cela se retourne contre vous sur les PDFs volumineux.
Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes et créer des manuels bien structurés et visuellement attrayants.