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

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

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

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

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

Извлечение текста из 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[0].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 предоставляет методы для извлечения текста как есть, по словам или по символам. Для каждого фрагмента текста библиотека извлекает:

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

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

using var 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:

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

Приведенные выше примеры хорошо работают в любой среде — на 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(["path_to_your_font_collection"], true);

using var pdf = new PdfDocument("your_document.pdf", config);
// ...

Заключение

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

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