IronOCR ile Büyük PDF Dosyalarını İşleme

This article was translated from English: Does it need improvement?
Translated
View the article in English

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

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;
Imports IronPdf

Using pdf = IronPdf.PdfDocument.FromFile(pdfPath)
    Dim pageCount = pdf.PageCount
End Using
$vbLabelText   $csharpLabel

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());
Imports IronOcr
Imports IronPdf
Imports System.Text

Dim ocr As New IronTesseract()
Dim pdfPath As String = "large.pdf"
Using pdf = PdfDocument.FromFile(pdfPath)
    Dim pageCount As Integer = pdf.PageCount
    Dim textBuilder As New StringBuilder()
    For i As Integer = 0 To pageCount - 1
        Using input As New OcrInput()
            input.LoadPdfPage(pdfPath, i, 80)
            Dim result = ocr.Read(input)
            textBuilder.Append(result.Text)
            textBuilder.Append(" ") ' Add space between pages
        End Using
    Next
    Console.WriteLine(textBuilder.ToString().Trim())
End Using
$vbLabelText   $csharpLabel

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);
Imports IronTesseract

Dim pdf = PdfDocument.FromFile(pdfPath)
Dim stream = pdf.CompressPdfToStream(CompressStructTree:=True)
Dim ocrTesseract = New IronTesseract()
Using ocrInput As New OcrInput()
    ocrInput.LoadPdfPage(stream, 1)
End Using
$vbLabelText   $csharpLabel

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);
Imports System

Dim pdf = PdfDocument.FromFile("D:\hugePdf.pdf")
Dim stream = pdf.CompressPdfToStream(JpegQuality:=75, CompressStructTree:=True)
$vbLabelText   $csharpLabel

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 OcrInputusing 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
Teknik Yazar

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ı...

Daha Fazla Oku
Başlamaya Hazır mısınız?
Nuget İndirmeler 6,136,090 | Sürüm: 2026.7 yeni yayınlandı
Still Scrolling Icon

Hâlâ Kaydırıyor Musunuz?

Hızlıca kanıt ister misiniz? PM > Install-Package IronOcr
örnek çalıştır görüntünüzün aranabilir metin haline gelmesini izleyin.