Эта страница может содержать автоматически переведенный текст.

Извлечение текста из PDF в C# и VB.NET

Извлечение текста из PDF-документа — обычная задача для разработчиков C# и VB.NET. Вы можете использовать библиотеку Docotic.Pdf для извлечения текста используя всего несколько строк кода в Windows, Linux, macOS, Android, iOS или в облаке.

Библиотека Docotic.Pdf 9.3.17036-dev Регрессионные тесты 14,665 прошло Всего загрузок NuGet 4,191,515

Чтобы попробовать примеры кода, вам понадобится библиотека Docotic.Pdf. Скачайте бинарные файлы или используйте пакет NuGet. Чтобы опробовать библиотеку без ограничений ознакомительного режима, вы можете получить бесплатный ограниченный по времени лицензионный ключ здесь.

Существуют разные подходы к извлечению текста. Давайте рассмотрим несколько практических примеров.

Извлечь текст из PDF

Конвертировать PDF в простой текст

Вы можете использовать простой текст для индексирования, чтения или какого-либо анализа содержимого PDF. Этот пример показывает, как преобразовать PDF в текст на C#:

using BitMiracle.Docotic.Pdf;

using (var pdf = new PdfDocument("your_document.pdf"))
{
    string documentText = pdf.GetText();
    Console.WriteLine(documentText);
}

PdfDocument.GetText() даёт следующий результат для этого документа: Результат извлечения обычного текста из PDF-документа в C# .NET

Как вариант, вы можете извлечь текст из отдельных страниц:

using (var pdf = new PdfDocument("your_document.pdf"))
{
    for (int i = 0; i < pdf.PageCount; ++i)
    {
        string pageText = pdf.Pages[i].GetText();
        using (var writer = new StreamWriter($"page_{i}.txt"))
            writer.Write(pageText);
    }
}

Соответствующие примеры C# и VB.NET доступны на GitHub.

Конвертировать PDF в форматированный текст

Вы можете использовать форматированный текст для анализа некоторых структурированных текстовых данных или для отображения текста в виде формат удобного для чтения человеком. В этом примере показано, как преобразовать PDF в форматированный текст на C#:

using (var pdf = new PdfDocument("your_document.pdf"))
{
    string formattedText = pdf.GetTextWithFormatting(); // или используйте pdf.Pages[i].GetTextWithFormatting()
    Console.WriteLine(formattedText);
}

PdfDocument.GetTextWithFormatting() даёт следующий результат для этого документа: Результат извлечения форматированного текста из PDF-документа в C# .NET

Извлечение простого или форматированного текста из определенной области

Возможно, вам потребуется извлечь текст только из определенной части страницы PDF. Например, чтобы раcпарсить только текст в шапке страницы. Библиотека также поддерживает это. Пример на С#:

using (var pdf = new PdfDocument("your_document.pdf"))
{
    var page = pdf.Pages[0];
    var options = new PdfTextExtractionOptions
    {
        Rectangle = new PdfRectangle(0, 0, page.Width, 100),
        WithFormatting = false
    };
    string areaText = page.GetText(options);
    Console.WriteLine(areaText);
}

Этот пример даёт следующий результат для этого документа: Результат извлечения текста из определенной области в C# .NET

Извлечь подробную информацию о тексте

Вы также можете получить подробную информацию о каждом фрагменте текста для всестороннего анализа. Docotic.Pdf предоставляет методы для извлечения текста как есть, по словам или по символам. Для каждого фрагмента текста библиотека извлекает:

  • Текст в кодировке Юникод
  • Границы на странице
  • Шрифт
  • Размер шрифта
  • Матрица преобразования, полезная для масштабированного и повернутого текста
  • Режим рендеринга
  • Цвет заливки, прозрачность, шаблон заливки
  • Стиль контура
  • Подробная информация о каждом символе

В этом примере показано, как извлечь текст по словам со страницы PDF на C#:

using (PdfDocument pdf = new PdfDocument("your_document.pdf"))
{
    PdfPage page = pdf.Pages[0];
    foreach (PdfTextData data in page.GetWords())
    {
        Console.WriteLine(
            $"{{\n" +
            $"  text: '{data.GetText()}',\n" +
            $"  bounds: {data.Bounds},\n" +
            $"  font name: '{data.Font.Name}',\n" +
            $"  font size: {data.FontSize},\n" +
            $"  transformation matrix: {data.TransformationMatrix},\n" +
            $"  rendering mode: '{data.RenderingMode}',\n" +
            $"  brush: {data.Brush},\n" +
            $"  pen: {data.Pen}\n" +
            $"}},"
        );

        page.Canvas.DrawRectangle(data.Bounds);
    }

    pdf.Save("result.pdf");
}

Пример даёт следующий результат для этого документа: Результат извлечения подробной информации о тексте из PDF в C# .NET

Вы можете использовать следующие методы Docotic.Pdf для получения подробной информации о тексте:

Связанные примеры на GitHub:

Извлечение двунаправленного текста и текста справа налево

Docotic.Pdf правильно извлекает текст на арабском, иврите и персидском языке из PDF-документов.

Внутри PDF-документов текст хранится в соответствии с визуальным порядком. Это означает, что текст на языках с записью справа налево хранится в обратном порядке. Docotic.Pdf переупорядочивает извлеченный текст в соответствии с его логическим порядком. Это то, чего обычно ожидают читатели текста, написанного справа налево.

Вам не нужно делать ничего особенного. Просто используйте приведенные выше фрагменты кода, чтобы получить текст RTL в правильном порядке.

OCR (распознавание текста)

Если PDF-файлы, с которыми вы имеете дело, содержат изображения с текстом, вы можете извлечь текст с помощью оптического распознавание символов.

Следующие примеры показывают, как это сделать с помощью Docotic.Pdf и Tesseract:

Более подробную информацию можно найти в статье OCR PDF в .NET.

Загрузка шрифтов в облачных средах

Приведенные выше примеры отлично работают в любой среде — в Windows, Linux, macOS. На облачных платформах, таких как AWS Lambda, возможно, вам потребуется выполнить еще один шаг настройки.

Существуют документы PDF, в которых используются невстроенные шрифты. По умолчанию Docotic.Pdf загружает такие шрифты из коллекции системных шрифтов (например, C:/Windows/Fonts или /usr/share/fonts). Однако, облачные платформы могут ограничить доступ к этим коллекциям шрифтов.

В своем приложении вы можете развернуть собственную коллекцию популярных шрифтов. Найдите и скопируйте общедоступные файлы шрифтов в ваш проект. Пометьте все файлы шрифтов с помощью CopyToOutputDirectory = Always в вашем .NET проекте. Чтобы использовать коллекцию, инициализируйте PdfDocument с помощью специального DirectoryFontLoader:

PdfConfigurationOptions config = PdfConfigurationOptions.Create();
config.FontLoader = new DirectoryFontLoader(new[] { "path_to_your_font_collection" }, true);
using (PdfDocument pdf = new PdfDocument("your_document.pdf", config))
{
   ...
}

Вывод

Вы можете использовать библиотеку Docotic.Pdf для извлечения простого или форматированного текста из PDF на C# и VB.NET. Вы также можете извлечь подробную информацию о каждом фрагменте текста. Вы можете скачать Docotic.Pdf здесь.

Посмотрите примеры на C# и VB.NET для извлечения текста из PDF: