Extrahera text PDF csharp

PDF-format används nu överallt för att generera olika typer av dokument såsom fakturor, affärsrapporter etc. När du bearbetar PDF-filerna programmatiskt kan du behöva extrahera text från en PDF. För sådana fall visar den här artikeln en enkel, kraftfull och höghastighetslösning för PDF-textextraktion. Så låt oss lära oss hur man extraherar text från PDF-filer i C#.

Följande är en lista över funktioner som vi kommer att diskutera i den här bloggen:

C# PDF Text Extraction Library

För att extrahera text från PDF-filer kommer vi att använda Aspose.PDF för .NET. Det är ett kraftfullt och funktionsrikt bibliotek för att generera och bearbeta PDF-filer. Du kan enkelt använda det här biblioteket för dina PDF-manipuleringsuppgifter. Det låter dig också extrahera text från PDF-filer absolut gratis. Du kan antingen ladda ner dess DLL eller installera den med NuGet.

PM> Install-Package Aspose.PDF 

Hur man extraherar text från en PDF i C#

Att läsa textinnehåll från ett PDF-dokument är en ofta använd funktion. Du kan extrahera all text från alla sidor i dokumentet på en gång. Följande är stegen för att extrahera text från en PDF-fil i C#.

  1. Ladda PDF-dokument
  2. Skapa TextAbsorber objekt
  3. Acceptera absorbenten för alla sidor
  4. Skriv extraherad text till en fil och spara den

Nedanstående kodsnutt följer dessa steg och visar hur man extraherar text från ett helt PDF-dokument i C#.

// Öppna PDF-dokument
Document pdfDocument = new Document(dataDir + "ExtractTextAll.pdf");
// Skapa TextAbsorber-objekt för att extrahera text
TextAbsorber textAbsorber = new TextAbsorber();
// Acceptera absorbenten för alla sidor
pdfDocument.Pages.Accept(textAbsorber);
// Hämta den extraherade texten
string extractedText = textAbsorber.Text;
// Skapa en författare och öppna filen
TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt");
// Skriv en textrad till filen
tw.WriteLine(extractedText);
// Stäng strömmen
tw.Close();

C#: Sök och extrahera text från en specifik sida i PDF

Efter att ha utforskat textextraktionen på dokumentnivå, låt oss extrahera text från en specifik sida i ett PDF-dokument. Följ bara stegen nedan för att extrahera text för en viss PDF-sida.

  1. Ladda PDF-dokument
  2. Skapa TextAbsorber objekt
  3. Acceptera absorbenten för en specifik sida
  4. Skriv extraherad text till en fil och spara den

Följande kodsnutt läser och extraherar text från en sida i en PDF-fil med C#:

// Öppna PDF-dokument
Document pdfDocument = new Document(dataDir + "ExtractTextAll.pdf");
// Åtkomst till önskad sida i PDF-dokument
Page page = pdfDocument.Pages[1];
// Skapa TextAbsorber-objekt för att extrahera text
TextAbsorber textAbsorber = new TextAbsorber();
// Acceptera absorbenten för angiven sida
page.Accept(textAbsorber);
// Hämta den extraherade texten
string extractedText = textAbsorber.Text;
// Skapa en författare och öppna filen
TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt");
// Skriv en textrad till filen
tw.WriteLine(extractedText);
// Stäng strömmen
tw.Close();

Extrahera text från specifik region på PDF-sidan

Låt oss ta denna textextraktion ytterligare ett steg längre. Överväg att hitta lite text från ett specifikt område på sidan. Det är viktigt att förstå här att den grundläggande mätenheten i Aspose.PDF är punkt, där 72 punkter är lika med 1 tum. Dessutom anses det nedre vänstra hörnet som ursprunget (0,0) för sidan.

Följande är stegen för att extrahera text från ett specifikt område eller avsnitt av sidan i en PDF.

  1. Ladda käll-PDF-dokument
  2. Skapa TextAbsorber objekt
  3. Ställ in TextSearchOptions och ange rektangulära koordinater
  4. Acceptera absorbenten för specifik sida
  5. Skriv extraherad text till en fil

Kodavsnittet nedan visar hur man extraherar text från en specifik region på en sida i C#.

// Öppna dokumentet
Document pdfDocument = new Document(dataDir + "ExtractTextAll.pdf");
// Skapa TextAbsorber-objekt för att extrahera text
TextAbsorber absorber = new TextAbsorber();
absorber.TextSearchOptions.LimitToPageBounds = true;
absorber.TextSearchOptions.Rectangle = new Aspose.Pdf.Rectangle(100, 200, 250, 350);
// Acceptera absorbenten för första sidan
pdfDocument.Pages[1].Accept(absorber);
// Hämta den extraherade texten
string extractedText = absorber.Text;
// Skapa en författare och öppna filen
TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt");
// Skriv en textrad till filen
tw.WriteLine(extractedText);
// Stäng strömmen
tw.Close();

C# Extrahera text från PDF med reguljära uttryck

Du kan också extrahera text från ett PDF-dokument som matchar något mönster. Du kanske till exempel vill extrahera några specifika ord eller siffror. För detta ändamål skulle du behöva designa ett reguljärt uttryck. Biblioteket kommer att använda det regexet för att hitta matchande text i PDF-dokumentet.

Nedan är stegen för att söka och extrahera specifik text från PDF-filer med hjälp av regex.

  • Ladda inmatat PDF-dokument
  • Skapa TextAbsorber objekt
  • Designa och ställ in ett reguljärt uttryck för att matcha viss text
  • Gå igenom varje extraherat textfragment

Följande C#-kodavsnitt använder ett regex som söker efter texten som innehåller 4 siffror, till exempel 1999,2000, etc. på alla sidor i dokumentet.

// öppet dokument
Document pdfDocument = new Document(dataDir + @"Test.pdf");
// skapa TextAbsorber-objekt för att hitta alla instanser av den inmatade sökfrasen
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber(@"\d{4}"); //like 1999-2020                                                                                                                // set text search option to specify regular expression usage
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;
// acceptera absorbenten för alla sidor
pdfDocument.Pages.Accept(textFragmentAbsorber);
// hämta de extraherade textfragmenten
TextFragmentCollection textFragmentCollection = textFragmentAbsorber.TextFragments;     
// slinga genom fragmenten
foreach (TextFragment textFragment in textFragmentCollection)
{
    Console.WriteLine(textFragment.Text);
}

Extrahera text från en PDF-tabell i C#

Vi har arbetat med TextAbsorber-klassen i tidigare exempel, men att extrahera text från en tabell är lite annorlunda. Därför måste du följa stegen nedan för att extrahera text från en tabell i en PDF:

  1. Ladda käll-PDF-filen
  2. Skapa ett objekt av klassen TableAbsorber
  3. Iterera genom AbsorbedTable
  4. Gå igenom varje cell i varje rad i tabellen

Nedan kodavsnitt extraherar texten från en tabells celler i PDF med C#.

Document pdfDocument = new Document(dataDir + "Test.pdf");
TableAbsorber absorber = new TableAbsorber();
absorber.Visit(pdfDocument.Pages[1]);
foreach (AbsorbedTable table in absorber.TableList)
{
    foreach (AbsorbedRow row in table.RowList)
    {
        foreach (AbsorbedCell cell in row.CellList)
        {
            TextFragment textfragment = new TextFragment();
            TextFragmentCollection textFragmentCollection = cell.TextFragments;
            foreach (TextFragment fragment in textFragmentCollection)
            {
                Console.WriteLine(fragment.Text);
            }
        }
    }
}

Extrahera markerad text från en PDF i C#

Markerad text finns som anteckning i PDF-filer. De innehåller markerad text som skiljer dem från den vanliga texten i ett dokument. Stegen nedan beskriver hur man extraherar den markerade texten med C#:

  1. Ladda källdokument
  2. Gå igenom alla kommentarer
  3. Filter TextMarkupAnnotation
  4. Hämta markerade textfragment

Följande är ett kodavsnitt baserat på stegen ovan, det kan användas för att få markerad text från PDF-filer i C#.

Document doc = new Document(dataDir + "ExtractHighlightedText.pdf");
// Gå igenom alla kommentarer
foreach (Annotation annotation in doc.Pages[1].Annotations)
{
    // Filtrera TextMarkupAnnotation
    if (annotation is TextMarkupAnnotation)
    {
        TextMarkupAnnotation highlightedAnnotation = annotation as TextMarkupAnnotation;
        // Hämta markerade textfragment
        TextFragmentCollection collection = highlightedAnnotation.GetMarkedTextFragments();
        foreach (TextFragment tf in collection)
        {
            // Visa markerad text
            Console.WriteLine(tf.Text);
        }
    }
}

C# PDF-textextraktion med låg minnesförbrukning

Följande är två olika metoder för att optimera minnesförbrukningen samtidigt som text extraheras från PDF-dokument med C#-språket.

i) Använda metoden Reset() och FreeMemory().

Ibland kan textextraktion konsumera enormt minne och processor. Möjligen när indatafilen är enorm och innehåller mycket text. Det beror på att objektet TextFragmentAbsorber lagrar alla hittade textfragment i minnet.

Därför är lösningen vi rekommenderar här att anropa absorber.Reset()-metoden efter bearbetning av varje sida. Dessutom, om du endast gör läsoperationer kan du frigöra minnet som innehas av sidobjekt med metoden page.FreeMemory().

Följande är stegen för att minimera minnesförbrukningen i PDF-textextraktion i C#.

  1. Ladda käll-PDF-dokument
  2. Ange TextEditOptions
  3. Läs TextFragment
  4. Anropa metoden Reset()
  5. Anropa metoden FreeMemory()

Följande kodsnutt visar hur man sänker minnesförbrukningen i textextraktion från en PDF i C#:

Document pdfDocument = new Document(dataDir + @"ITF-TTF Manual.pdf");
TextFragmentAbsorber absorber = new TextFragmentAbsorber(new TextEditOptions(TextEditOptions.FontReplace.RemoveUnusedFonts));
foreach (Page page in pdfDocument.Pages)
{
    page.Accept(absorber);
    //Läs något från fragment
    count += absorber.TextFragments.Count;
    absorber.Reset();
    page.FreeMemory();
    //GC.Collect();        
}

ii) Använda minnessparande uppräkning

Aspose.PDF för .NET API stöder konfigurering av minnessparläge när du läser text från en PDF-fil. TextExtractionOptions.TextFormattingMode-uppräkningen tjänar syftet med optimal resursförbrukning. Följande steg sammanfattar de steg du måste följa för detta tillvägagångssätt:

  1. Ladda käll-PDF-fil
  2. Skapa TextDevice objekt
  3. Ställ in TextExtractionOptions
  4. Extrahera text och skriv text till en fil

Nedan kodsnutt visar den minnessparande metoden med C#:

// Öppna dokumentet
Document pdfDocument = new Document(dataDir + "Test.pdf");
System.Text.StringBuilder builder = new System.Text.StringBuilder();
// Sträng för att hålla extraherad text
string extractedText = "";
foreach (Page pdfPage in pdfDocument.Pages)
{
    using (MemoryStream textStream = new MemoryStream())
    {
        // Skapa textenhet
        TextDevice textDevice = new TextDevice();

        // Ställ in textextraktionsalternativ - ställ in textextraktionsläge (Raw eller Pure)
        TextExtractionOptions textExtOptions = new
        TextExtractionOptions(TextExtractionOptions.TextFormattingMode.MemorySaving);
        textDevice.ExtractionOptions = textExtOptions;
        // Konvertera en viss sida och spara text i strömmen
        textDevice.Process(pdfPage, textStream);
        // Konvertera en viss sida och spara text i strömmen
        textDevice.Process(pdfDocument.Pages[1], textStream);
        // Stäng minnesströmmen
        textStream.Close();
        // Få text från minnesströmmen
        extractedText = Encoding.Unicode.GetString(textStream.ToArray());
    }
    builder.Append(extractedText);
}
dataDir = dataDir + "Memory_Text_Extracted.txt";
// Spara den extraherade texten i en textfil
File.WriteAllText(dataDir, builder.ToString());

Gratis C# PDF Text Extraction Library

Du kan få en gratis tillfällig licens och extrahera text från PDF-filer utan några begränsningar.

Utforska C# PDF-biblioteket

Du kan lära dig mer om C# PDF-biblioteket med hjälp av dokumentation. Vid eventuella frågor, vänligen kontakta oss på Free Support Forums.

Slutsats

I den här artikeln har du lärt dig hur du extraherar text från PDF-filer i C#. Med hjälp av kodexempel har du sett hur du extraherar text från en PDF, en sida i PDF, extraherar markerad text och mycket mer. Du kan enkelt integrera de medföljande kodexemplen och C# PDF-biblioteket i dina .NET-applikationer.

Se även