Извлечение текста в пределах границ на C# и .Net

Извлечение текста из PDF-документов — важная задача для многих приложений, будь то анализ данных, автоматизация бизнес-процессов или составление отчётов. В этой статье мы рассмотрим, как извлечь текст из PDF-документа по заданным границам (координатам) с помощью C# и .NET.

Пошаговое руководство:

  1. Добавить SautinSoft.PDF из NuGet.
  2. Загрузить PDF-документ.
  3. Извлечь текстовое содержимое из заданных границ.
  4. Нарисовать извлеченный текст.
  5. Вывести на консоль: координаты, положение текста и результат.

Входной файл:

Выходной результат:

Полный код

using System;
using System.IO;
using SautinSoft;
using SautinSoft.Pdf;
using SautinSoft.Pdf.Content;

class Program
{
    /// <summary>
    /// How to extract text by given bounds.
    /// </summary>
    /// <remarks>
    /// Details: https://sautinsoft.com/products/pdf/help/net/developer-guide/extract-text-from-pdf-by-given-bounds.php
    /// </remarks>
    static void Main()
    {
        // Before starting this example, please get a free trial key:
        // https://sautinsoft.com/start-for-free/

        // Apply the key here:
        // PdfDocument.SetLicense("...");
        string inpFile = Path.GetFullPath(@"..\..\..\extract-text.pdf");

        using (var document = PdfDocument.Load(inpFile))
        {
            // Get the page from which we want to make the extraction
            var page = document.Pages[0];

            // NOTE: In PDF, location (0, 0) is at the bottom-left corner of the page
            // and the positive y axis extends vertically upward.
            var pageBounds = page.CropBox;

            // Extract text content from the given bounds
            var text = page.Content.GetText(new PdfTextOptions
            {
                Bounds = new PdfQuad(
                    new PdfPoint(20, pageBounds.Top - 20),
                    new PdfPoint(pageBounds.Right, pageBounds.Top - 20),
                    new PdfPoint(pageBounds.Right, pageBounds.Top - 120),
                    new PdfPoint(20, pageBounds.Top - 120)),
                Order = PdfTextOrder.Reading
            });

            // Writing the extracted text
            Console.WriteLine($"Result: {text}");
            Console.WriteLine($"Text position: " +
                $"(X: {text.Bounds.Left:0.##}, " +
                $"Y: {text.Bounds.Bottom:0.##}), " +
                $"Width: {text.Bounds.Width:0.##}, " +
                $"Height: {text.Bounds.Height:0.##}.");
            Console.ReadKey();
        }
    }
}

Download

Option Infer On

Imports System
Imports System.IO
Imports SautinSoft
Imports SautinSoft.Pdf
Imports SautinSoft.Pdf.Content

Friend Class Program
	''' <summary>
	''' How to extract text by given bounds.
	''' </summary>
	''' <remarks>
	''' Details: https://sautinsoft.com/products/pdf/help/net/developer-guide/extract-text-from-pdf-by-given-bounds.php
	''' </remarks>
	Shared Sub Main()
		' Before starting this example, please get a free trial key:
		' https://sautinsoft.com/start-for-free/

		' Apply the key here:
		' PdfDocument.SetLicense("...");
		Dim inpFile As String = Path.GetFullPath("..\..\..\extract-text.pdf")

		Using document = PdfDocument.Load(inpFile)
			' Get the page from which we want to make the extraction
			Dim page = document.Pages(0)

			' NOTE: In PDF, location (0, 0) is at the bottom-left corner of the page
			' and the positive y axis extends vertically upward.
			Dim pageBounds = page.CropBox

			' Extract text content from the given bounds
			Dim text = page.Content.GetText(New PdfTextOptions With {
				.Bounds = New PdfQuad(New PdfPoint(20, pageBounds.Top - 20), New PdfPoint(pageBounds.Right, pageBounds.Top - 20), New PdfPoint(pageBounds.Right, pageBounds.Top - 120), New PdfPoint(20, pageBounds.Top - 120)),
				.Order = PdfTextOrder.Reading
			})

			' Writing the extracted text
			Console.WriteLine($"Result: {text}")
			Console.WriteLine($"Text position: " & $"(X: {text.Bounds.Left:0.##}, " & $"Y: {text.Bounds.Bottom:0.##}), " & $"Width: {text.Bounds.Width:0.##}, " & $"Height: {text.Bounds.Height:0.##}.")
			Console.ReadKey()
		End Using
	End Sub
End Class

Download


Если вам нужен пример кода или у вас есть вопрос: напишите нам по адресу support@sautinsoft.ru или спросите в онлайн-чате (правый нижний угол этой страницы) или используйте форму ниже:



Вопросы и предложения всегда приветствуются!

Мы разрабатываем компоненты .Net с 2002 года. Мы знаем форматы PDF, DOCX, RTF, HTML, XLSX и Images. Если вам нужна помощь в создании, изменении или преобразовании документов в различных форматах, мы можем вам помочь. Мы напишем для вас любой пример кода абсолютно бесплатно.