# IronOCR ile Büyük PDF Dosyalarını İşleme
Büyük çok sayfalı PDF'lerde OCR çalıştırmak, bellek kullanımını artırabilir ve süreci çökertebilir. Genellikle suçlu olan, her sayfayı aynı anda belleğe yüklemektir.
```txt
System.OutOfMemoryException
```
`OcrInput.LoadPdf("large.pdf")` tüm sayfaları tek seferde okur. IronOCR'un görüntüleme sistemi daha sonra her sayfayı aynı anda işler ve DPI varsayılan olarak `200` olduğundan, bellek kullanımı hızla artar. Büyük bir belgede bu, `OutOfMemoryException` veya kaynak tıkanması anlamına gelir.
## Çözüm
Çözüm, PDF'yi bir sayfa bir sayfa işleyip, render DPI'sini metin kalitesinin izin verdiği kadar düşük tutmaktır.
### 1. Sayfa Sayısını Alın
Kaç sayfa olduğunu öğrenmek için belgeyi `IronPdf.PdfDocument` (veya herhangi bir PDF kütüphanesi) ile açın.
```csharp
using var pdf = IronPdf.PdfDocument.FromFile(pdfPath);
var pageCount = pdf.PageCount;
```
### 2. Her seferinde bir sayfa yükleyin
Sayfalar boyunca döngü yapın ve her birini ayrı ayrı `OcrInput.LoadPdfPage("file.pdf", pageIndex, dpi)` ile yükleyin. Görsel kalite korunuyorsa, belleği korumak için DPI'yı `80` kadar düşürün.
### 3. Oku ve Birleştir
Her tek sayfalık girdiyi `IronTesseract.Read()`'a iletin ve sonucu `StringBuilder`'a ekleyin.
```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());
```
Her `OcrInput` üzerindeki `using`, bir sonraki yinelemeden önce sayfanın görüntü verilerini serbest bırakır, bu yüzden bellek sayfa sayısıyla büyümek yerine döngü boyunca sabit kalır.
### Seçenek: Önce PDF'yi Sıkıştırın
Çok karmaşık veya görüntü ağırlıklı dosyalar için, sayfa bazlı döngü hala zorlanabilir. IronPDF'nin Sıkıştırma API'sini kullanarak PDF'yi OCR'dan önce sıkıştırın, böylece IronOCR'nin işlemesi gereken görüntü verisi azalır. Bu, taranmış veya görüntü ağırlıklı belgelerde en çok fayda sağlar.
Doğrudan bir akışa sıkıştırın, ardından o akışı `OcrInput`'a yükleyin:
```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);
```
Bir PDF gömülü görüntüler içerdiğinde, veriyi daha fazla küçültmek için sıkıştırma sırasında `JpegQuality`'ı düşürün:
```csharp
var pdf = PdfDocument.FromFile(@"D:\hugePdf.pdf");
var stream = pdf.CompressPdfToStream(JpegQuality: 75, CompressStructTree: true);
```
[[w:(Aynı MemoryStream'i döngü yinelemeleri arasında yeniden kullanmak mı? Her okumadan önce pozisyonunu 0'a sıfırlayın. Bir akış okunduktan sonra tüketilir, bu yüzden pozisyon sıfırlanmazsa sonraki okuma başarısız olur.)]]
## Hata Ayıklama İpuçları
- **DPI'yı düşürün:** metin hala okunabilir olduğunda, bellek kullanımını keskin bir şekilde azaltan `80` ile `100` aralığındaki değerler.
- **Büyük dosyalarda `LoadPdf()`'dan kaçının:** belge küçük olduğunda tamamını tek seferde okuyun.
- **Erken İmha Edin:** bellek sayfalar arasında serbest bırakılsın diye `OcrInput`'ı `using` ifadeleri içine sarın.
- **Dikkatli paralelleştirin:** makinada yedek bellek ve CPU olduğunda sayfaları eşzamanlı çalıştırın; bu, büyük PDF'lerde geri teper.
Büyük çok sayfalı PDF'lerde OCR çalıştırmak, bellek kullanımını artırabilir ve süreci çökertebilir. Genellikle suçlu olan, her sayfayı aynı anda belleğe yüklemektir.
System.OutOfMemoryException
System.OutOfMemoryException
Text
OcrInput.LoadPdf("large.pdf") tüm sayfaları tek seferde okur. IronOCR'un görüntüleme sistemi daha sonra her sayfayı aynı anda işler ve DPI varsayılan olarak 200 olduğundan, bellek kullanımı hızla artar. Büyük bir belgede bu, OutOfMemoryException veya kaynak tıkanması anlamına gelir.
Çözüm
Çözüm, PDF'yi bir sayfa bir sayfa işleyip, render DPI'sini metin kalitesinin izin verdiği kadar düşük tutmaktır.
1. Sayfa Sayısını Alın
Kaç sayfa olduğunu öğrenmek için belgeyi IronPdf.PdfDocument (veya herhangi bir PDF kütüphanesi) ile açın.
using var pdf = IronPdf.PdfDocument.FromFile(pdfPath);var pageCount = pdf.PageCount;
using var pdf = IronPdf.PdfDocument.FromFile(pdfPath);
var pageCount = pdf.PageCount;
C#
2. Her seferinde bir sayfa yükleyin
Sayfalar boyunca döngü yapın ve her birini ayrı ayrı OcrInput.LoadPdfPage("file.pdf", pageIndex, dpi) ile yükleyin. Görsel kalite korunuyorsa, belleği korumak için DPI'yı 80 kadar düşürün.
3. Oku ve Birleştir
Her tek sayfalık girdiyi IronTesseract.Read()'a iletin ve sonucu StringBuilder'a ekleyin.
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#
Her OcrInput üzerindeki using, bir sonraki yinelemeden önce sayfanın görüntü verilerini serbest bırakır, bu yüzden bellek sayfa sayısıyla büyümek yerine döngü boyunca sabit kalır.
Seçenek: Önce PDF'yi Sıkıştırın
Çok karmaşık veya görüntü ağırlıklı dosyalar için, sayfa bazlı döngü hala zorlanabilir. IronPDF'nin Sıkıştırma API'sini kullanarak PDF'yi OCR'dan önce sıkıştırın, böylece IronOCR'nin işlemesi gereken görüntü verisi azalır. Bu, taranmış veya görüntü ağırlıklı belgelerde en çok fayda sağlar.
Doğrudan bir akışa sıkıştırın, ardından o akışı OcrInput'a yükleyin:
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#
Bir PDF gömülü görüntüler içerdiğinde, veriyi daha fazla küçültmek için sıkıştırma sırasında JpegQuality'ı düşürün:
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#
Uyarı: Aynı MemoryStream'i döngü yinelemeleri arasında yeniden kullanmak mı? Her okumadan önce pozisyonunu 0'a sıfırlayın. Bir akış okunduktan sonra tüketilir, bu yüzden pozisyon sıfırlanmazsa sonraki okuma başarısız olur.
Hata Ayıklama İpuçları
DPI'yı düşürün: metin hala okunabilir olduğunda, bellek kullanımını keskin bir şekilde azaltan 80 ile 100 aralığındaki değerler.
Büyük dosyalarda LoadPdf()'dan kaçının: belge küçük olduğunda tamamını tek seferde okuyun.
Erken İmha Edin: bellek sayfalar arasında serbest bırakılsın diye OcrInput'ı using ifadeleri içine sarın.
Dikkatli paralelleştirin: makinada yedek bellek ve CPU olduğunda sayfaları eşzamanlı çalıştırın; bu, büyük PDF'lerde geri teper.
Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.