Sıkışık Tablolardan Sıradışı Metin Çıkartma

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

Sıkışık tablo veya form düzenlerinden çıkarılan metin karışık olarak görünür. Yan yana sıralardan karakterler iç içe geçer, örneğin, "Benzersiz Numara 123456789" "U123456789nique Number" olarak çıkarılır.

Bu, yoğun yerleştirilmiş düzenler için page.Lines çıkarımının bilinen bir sınırlamasıdır. page.Lines, yerleşik ve yapılandırılamayan dikey tolerans kullanarak karakterleri gruplar. Bir tablo hücresindeki iki görünür satır arasında sadece bir veya iki nokta mesafe olduğunda, gruplandırıcı her iki satırı bir mantıksal satıra çökertir ve karakterleri soldan sağa sıralayarak iç içe geçirir. ExtractTextFromPage(i) yöntemi varsayılan olarak içerik akış sırasına göredir, bu da form PDF'lerinde görsel okuma sırasıyla eşleşmeyebilir.

Çözüm

Tavsiye Edilen: Ayarlanabilir tolerans ile TextChunks kullanarak çıkarma

Her TextChunk, dikey pozisyona göre gruplamaya ve her satırda yatay pozisyona göre sıralamaya izin veren BoundingBox açığa çıkarır:

using IronPdf.Pages;
using System.Text;

static string ExtractTextUsingTextChunks(IPdfPage page, double rowTolerance = 2.0)
{
    var rows = page.TextChunks
        .Where(c => !string.IsNullOrWhiteSpace(c.Contents))
        .GroupBy(c => Math.Round(c.BoundingBox.Top / rowTolerance) * rowTolerance)
        .OrderByDescending(g => g.Key);

    var extractedText = new StringBuilder();
    foreach (var row in rows)
    {
        var line = string.Join(" ",
            row.OrderBy(c => c.BoundingBox.Left)
               .Select(c => c.Contents.Trim())
               .Where(text => !string.IsNullOrWhiteSpace(text)));
        extractedText.AppendLine(line);
    }
    return extractedText.ToString();
}
using IronPdf.Pages;
using System.Text;

static string ExtractTextUsingTextChunks(IPdfPage page, double rowTolerance = 2.0)
{
    var rows = page.TextChunks
        .Where(c => !string.IsNullOrWhiteSpace(c.Contents))
        .GroupBy(c => Math.Round(c.BoundingBox.Top / rowTolerance) * rowTolerance)
        .OrderByDescending(g => g.Key);

    var extractedText = new StringBuilder();
    foreach (var row in rows)
    {
        var line = string.Join(" ",
            row.OrderBy(c => c.BoundingBox.Left)
               .Select(c => c.Contents.Trim())
               .Where(text => !string.IsNullOrWhiteSpace(text)));
        extractedText.AppendLine(line);
    }
    return extractedText.ToString();
}
Imports IronPdf.Pages
Imports System.Text

Private Shared Function ExtractTextUsingTextChunks(page As IPdfPage, Optional rowTolerance As Double = 2.0) As String
    Dim rows = page.TextChunks _
        .Where(Function(c) Not String.IsNullOrWhiteSpace(c.Contents)) _
        .GroupBy(Function(c) Math.Round(c.BoundingBox.Top / rowTolerance) * rowTolerance) _
        .OrderByDescending(Function(g) g.Key)

    Dim extractedText As New StringBuilder()
    For Each row In rows
        Dim line = String.Join(" ", row.OrderBy(Function(c) c.BoundingBox.Left) _
                                   .Select(Function(c) c.Contents.Trim()) _
                                   .Where(Function(text) Not String.IsNullOrWhiteSpace(text)))
        extractedText.AppendLine(line)
    Next
    Return extractedText.ToString()
End Function
$vbLabelText   $csharpLabel

rowTolerance = 2.0 ile başlayın. Satırlar hala birleşiyorsa, onu 1.0 veya 0.5 olarak düşürün. Daha hassas kontrol için, page.TextChunks yerine page.Characters ikame edin.

Alternatif: Görsel sıra ile çıkarma

Sadece içerik akışı sırası yanlış olan PDF'ler için:

pdf.ExtractTextFromPage(i, TextExtractionOrder.VisualOrder);
pdf.ExtractTextFromPage(i, TextExtractionOrder.VisualOrder);
pdf.ExtractTextFromPage(i, TextExtractionOrder.VisualOrder)
$vbLabelText   $csharpLabel

Satırların görsel olarak birbirine çok yakın olduğu PDF'ler için, TextChunks yaklaşımı dar toleransları daha iyi yönetir.

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 20,088,359 | 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 IronPdf
bir örnek çalıştır HTML'nizi bir PDF'ye dönüştüğünü izleyin.