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

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

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

Библиотека Docotic.Pdf 9.5.17615-dev Регрессионные тесты 14,813 прошло Всего загрузок NuGet 4,924,084

Чтобы попробовать примеры кода, вам понадобится библиотека Docotic.Pdf. Получите библиотеку и бесплатный лицензионный ключ с ограниченным сроком действия на странице Скачать PDF библиотеку C# .NET.

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

Извлечь текст из 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: