Эта страница может содержать автоматически переведенный текст.
Извлечение текста из PDF в C# и VB.NET
Извлечение текста из PDF-документа — обычная задача для разработчиков C# и VB.NET. Вы можете использовать библиотеку Docotic.Pdf для извлечения текста используя всего несколько строк кода в Windows, Linux, macOS, Android, iOS или в облаке.
9.3.17036-dev 14,665 прошло Всего загрузок NuGet 4,191,515Чтобы попробовать примеры кода, вам понадобится библиотека Docotic.Pdf. Скачайте бинарные файлы или используйте пакет NuGet. Чтобы опробовать библиотеку без ограничений ознакомительного режима, вы можете получить бесплатный ограниченный по времени лицензионный ключ здесь.
Существуют разные подходы к извлечению текста. Давайте рассмотрим несколько практических примеров.
Конвертировать 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()
даёт следующий результат для этого документа:
Как вариант, вы можете извлечь текст из отдельных страниц:
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парсить только текст в шапке страницы. Библиотека также поддерживает это. Пример на С#:
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);
}
Этот пример даёт следующий результат для этого документа:
Извлечь подробную информацию о тексте
Вы также можете получить подробную информацию о каждом фрагменте текста для всестороннего анализа. 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");
}
Пример даёт следующий результат для этого документа:
Вы можете использовать следующие методы Docotic.Pdf для получения подробной информации о тексте:
- PdfCanvas.GetTextData() (например, page.Canvas.GetTextData())
- PdfPage.GetWords()
- PdfPage.GetChars()
- PdfPage.GetObjects() (возвращает не только текст, но также и изображения, и векторные пути)
Связанные примеры на 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: