Extrahovat text PDF csharp

Formát PDF se nyní všude používá ke generování různých typů dokumentů, jako jsou faktury, obchodní zprávy atd. Při programovém zpracování souborů PDF může být nutné extrahovat text z PDF. Pro takové případy tento článek ukazuje jednoduché, výkonné a vysokorychlostní řešení pro extrakci textu PDF. Pojďme se tedy naučit, jak extrahovat text ze souborů PDF v C#.

Níže je uveden seznam funkcí, o kterých budeme v tomto blogu diskutovat:

C# Knihovna extrakce textu PDF

K extrahování textu ze souborů PDF použijeme Aspose.PDF for .NET. Je to výkonná knihovna bohatá na funkce pro generování a zpracování souborů PDF. Tuto knihovnu můžete snadno použít pro své úlohy manipulace s PDF. Také vám umožňuje extrahovat text ze souborů PDF zcela zdarma. Můžete si stáhnout jeho knihovnu DLL nebo ji nainstalovat pomocí NuGet.

PM> Install-Package Aspose.PDF 

Jak extrahovat text z PDF v C#

Čtení textového obsahu z dokumentu PDF je často používaná funkce. Můžete extrahovat veškerý text ze všech stránek dokumentu najednou. Následují kroky k extrahování textu ze souboru PDF v C#.

  1. Načíst dokument PDF
  2. Vytvořte objekt TextAbsorber
  3. Přijměte absorbér pro všechny stránky
  4. Zapište extrahovaný text do souboru a uložte jej

Níže uvedený fragment kódu následuje tyto kroky a ukazuje, jak extrahovat text z celého dokumentu PDF v C#.

// Otevřete dokument PDF
Document pdfDocument = new Document(dataDir + "ExtractTextAll.pdf");
// Vytvořte objekt TextAbsorber pro extrahování textu
TextAbsorber textAbsorber = new TextAbsorber();
// Přijměte absorbér pro všechny stránky
pdfDocument.Pages.Accept(textAbsorber);
// Získejte extrahovaný text
string extractedText = textAbsorber.Text;
// Vytvořte zapisovač a otevřete soubor
TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt");
// Napište do souboru řádek textu
tw.WriteLine(extractedText);
// Zavřete stream
tw.Close();

C#: Vyhledejte a extrahujte text z konkrétní stránky v PDF

Po prozkoumání extrakce textu na úrovni dokumentu pojďme extrahovat text z konkrétní stránky dokumentu PDF. Jednoduše postupujte podle níže uvedených kroků a proveďte extrakci textu pro konkrétní stránku PDF.

  1. Načíst dokument PDF
  2. Vytvořte objekt TextAbsorber
  3. Přijměte absorbér pro konkrétní stránku
  4. Zapište extrahovaný text do souboru a uložte jej

Následující fragment kódu čte a extrahuje text ze stránky v souboru PDF pomocí C#:

// Otevřete dokument PDF
Document pdfDocument = new Document(dataDir + "ExtractTextAll.pdf");
// Přístup k požadované stránce v dokumentu PDF
Page page = pdfDocument.Pages[1];
// Vytvořte objekt TextAbsorber pro extrahování textu
TextAbsorber textAbsorber = new TextAbsorber();
// Přijměte absorbér pro zadanou stránku
page.Accept(textAbsorber);
// Získejte extrahovaný text
string extractedText = textAbsorber.Text;
// Vytvořte zapisovač a otevřete soubor
TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt");
// Napište do souboru řádek textu
tw.WriteLine(extractedText);
// Zavřete stream
tw.Close();

Extrahujte text ze specifické oblasti stránky PDF

Udělejme tuto extrakci textu o další krok dále. Zvažte nalezení nějakého textu z konkrétní oblasti stránky. Zde je důležité pochopit, že základní měřicí jednotkou v Aspose.PDF je bod, kde 72 bodů odpovídá 1 palci. Navíc je levý dolní roh považován za počátek (0,0) stránky.

Následují kroky k extrahování textu z určité oblasti nebo části stránky v PDF.

  1. Načíst zdrojový dokument PDF
  2. Vytvořte objekt TextAbsorber
  3. Nastavte TextSearchOptions a zadejte pravoúhlé souřadnice
  4. Přijměte absorbér pro konkrétní stránku
  5. Zapište extrahovaný text do souboru

Níže uvedený fragment kódu ukazuje, jak extrahovat text z konkrétní oblasti stránky v C#.

// Otevřete dokument
Document pdfDocument = new Document(dataDir + "ExtractTextAll.pdf");
// Vytvořte objekt TextAbsorber pro extrahování textu
TextAbsorber absorber = new TextAbsorber();
absorber.TextSearchOptions.LimitToPageBounds = true;
absorber.TextSearchOptions.Rectangle = new Aspose.Pdf.Rectangle(100, 200, 250, 350);
// Přijměte absorbér pro první stránku
pdfDocument.Pages[1].Accept(absorber);
// Získejte extrahovaný text
string extractedText = absorber.Text;
// Vytvořte zapisovač a otevřete soubor
TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt");
// Napište do souboru řádek textu
tw.WriteLine(extractedText);
// Zavřete stream
tw.Close();

C# Extrahujte text z PDF pomocí regulárních výrazů

Z dokumentu PDF můžete také extrahovat text, který odpovídá nějakému vzoru. Můžete například chtít extrahovat některá konkrétní slova nebo čísla. Pro tento účel byste museli navrhnout regulární výraz. Knihovna použije tento regulární výraz k nalezení shodného textu v dokumentu PDF.

Níže jsou uvedeny kroky k vyhledání a extrahování konkrétního textu ze souborů PDF pomocí regulárního výrazu.

  • Načíst vstupní PDF dokument
  • Vytvořte objekt TextAbsorber
  • Navrhněte a nastavte regulární výraz tak, aby odpovídal nějakému textu
  • Procházejte každý extrahovaný textový fragment

Následující fragment kódu C# používá regulární výraz, který hledá text obsahující 4 číslice, například 1999,2000 atd. na všech stránkách dokumentu.

// otevřít dokument
Document pdfDocument = new Document(dataDir + @"Test.pdf");
// vytvořte objekt TextAbsorber a najděte všechny výskyty vstupní hledané fráze
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;
// přijměte absorbér pro všechny stránky
pdfDocument.Pages.Accept(textFragmentAbsorber);
// získat extrahované fragmenty textu
TextFragmentCollection textFragmentCollection = textFragmentAbsorber.TextFragments;     
// procházet fragmenty
foreach (TextFragment textFragment in textFragmentCollection)
{
    Console.WriteLine(textFragment.Text);
}

Extrahujte text z tabulky PDF v C#

V předchozích příkladech jsme pracovali s třídou TextAbsorber, ale extrahování textu z tabulky je trochu jiné. Chcete-li extrahovat text z tabulky v PDF, musíte proto postupovat podle následujících kroků:

  1. Načtěte zdrojový soubor PDF
  2. Vytvořte objekt třídy TableAbsorber
  3. Iterujte přes AbsorbedTable
  4. Procházejte každou buňku v každém řádku tabulky

Níže uvedený fragment kódu extrahuje text z buněk tabulky v PDF pomocí 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);
            }
        }
    }
}

Extrahujte zvýrazněný text z PDF v C#

Zvýrazněný text je v souborech PDF přítomen jako anotace. Obsahují označený text, který je odlišuje od běžného textu v dokumentu. Níže uvedené kroky popisují, jak extrahovat zvýrazněný text pomocí C#:

  1. Načíst zdrojový dokument
  2. Projděte všechny anotace
  3. Filtr TextMarkupAnnotation
  4. Načíst zvýrazněné části textu

Následuje úryvek kódu založený na výše uvedených krocích, lze jej použít k získání zvýrazněného textu ze souborů PDF v C#.

Document doc = new Document(dataDir + "ExtractHighlightedText.pdf");
// Projděte všechny anotace
foreach (Annotation annotation in doc.Pages[1].Annotations)
{
    // Filtr TextMarkupAnnotation
    if (annotation is TextMarkupAnnotation)
    {
        TextMarkupAnnotation highlightedAnnotation = annotation as TextMarkupAnnotation;
        // Načíst zvýrazněné části textu
        TextFragmentCollection collection = highlightedAnnotation.GetMarkedTextFragments();
        foreach (TextFragment tf in collection)
        {
            // Zobrazit zvýrazněný text
            Console.WriteLine(tf.Text);
        }
    }
}

Extrakce textu C# PDF s nízkou spotřebou paměti

Následují dva různé přístupy k optimalizaci spotřeby paměti při extrahování textu z dokumentů PDF pomocí jazyka C#.

i) Použití metody Reset() a FreeMemory().

Někdy může extrakce textu spotřebovat velkou paměť a procesor. Možná, když je vstupní soubor velký a obsahuje hodně textu. Je to proto, že objekt TextFragmentAbsorber ukládá všechny nalezené textové fragmenty do paměti.

Proto řešení, které zde doporučujeme, je zavolat metodu absorber.Reset() po zpracování každé stránky. Navíc, pokud provádíte pouze operace čtení, můžete uvolnit paměť drženou objekty stránky pomocí metody page.FreeMemory().

Následují kroky k minimalizaci spotřeby paměti při extrakci textu PDF v C#.

  1. Načíst zdrojový dokument PDF
  2. Zadejte TextEditOptions
  3. Přečtěte si TextFragment
  4. Zavolejte metodu Reset()
  5. Zavolejte metodu FreeMemory()

Následující fragment kódu ukazuje, jak snížit spotřebu paměti při extrakci textu z PDF v 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);
    //Přečtěte si něco z fragmentů
    count += absorber.TextFragments.Count;
    absorber.Reset();
    page.FreeMemory();
    //GC.Collect();        
}

ii) Použití výčtu MemorySaving

Aspose.PDF for .NET API podporuje konfiguraci režimu úspory paměti při čtení textu ze souboru PDF. Výčet TextExtractionOptions.TextFormattingMode slouží účelu optimální spotřeby zdrojů. Následující kroky shrnují kroky, které musíte pro tento přístup dodržet:

  1. Načíst zdrojový soubor PDF
  2. Vytvořte objekt TextDevice
  3. Nastavit TextExtractionOptions
  4. Extrahujte text a zapište text do souboru

Níže uvedený fragment kódu demonstruje přístup šetřící paměť pomocí C#:

// Otevřete dokument
Document pdfDocument = new Document(dataDir + "Test.pdf");
System.Text.StringBuilder builder = new System.Text.StringBuilder();
// Řetězec pro uložení extrahovaného textu
string extractedText = "";
foreach (Page pdfPage in pdfDocument.Pages)
{
    using (MemoryStream textStream = new MemoryStream())
    {
        // Vytvořte textové zařízení
        TextDevice textDevice = new TextDevice();

        // Nastavení možností extrakce textu - nastavení režimu extrakce textu (Raw nebo Pure)
        TextExtractionOptions textExtOptions = new
        TextExtractionOptions(TextExtractionOptions.TextFormattingMode.MemorySaving);
        textDevice.ExtractionOptions = textExtOptions;
        // Převeďte konkrétní stránku a uložte text do streamu
        textDevice.Process(pdfPage, textStream);
        // Převeďte konkrétní stránku a uložte text do streamu
        textDevice.Process(pdfDocument.Pages[1], textStream);
        // Zavřete datový proud paměti
        textStream.Close();
        // Získejte text z paměti
        extractedText = Encoding.Unicode.GetString(textStream.ToArray());
    }
    builder.Append(extractedText);
}
dataDir = dataDir + "Memory_Text_Extracted.txt";
// Uložte extrahovaný text do textového souboru
File.WriteAllText(dataDir, builder.ToString());

Bezplatná knihovna extrakce textu C# PDF

Můžete získat bezplatnou dočasnou licenci a extrahovat text ze souborů PDF bez jakýchkoli omezení.

Prozkoumejte knihovnu C# PDF

Více o knihovně C# PDF se můžete dozvědět pomocí dokumentace. V případě jakéhokoli dotazu nás prosím kontaktujte na Free Support Forums.

Závěr

V tomto článku jste se naučili, jak extrahovat text ze souborů PDF v C#. S pomocí ukázek kódu jste viděli, jak extrahovat text z PDF, stránku v PDF, extrahovat zvýrazněný text a mnoho dalšího. Poskytnuté ukázky kódu a knihovnu C# PDF můžete snadno integrovat do svých aplikací .NET.

Viz také