Эта страница может содержать автоматически переведенный текст.
Извлечение текста из PDF в C# и VB.NET
Извлечение текста из PDF-документа — обычная задача для разработчиков C# и VB.NET. Вы можете использовать библиотеку Docotic.Pdf для извлечения текста используя всего несколько строк кода в Windows, Linux, macOS, Android, iOS или в облаке.
9.5.17615-dev 14,813 прошло Всего загрузок NuGet 4,924,084Чтобы попробовать примеры кода, вам понадобится библиотека Docotic.Pdf. Получите библиотеку и бесплатный лицензионный ключ с ограниченным сроком действия на странице Скачать PDF библиотеку C# .NET.
Существуют разные подходы к извлечению текста. Давайте рассмотрим несколько практических примеров.
Конвертировать 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: