Работа с границами и размерами текста в PDF-файлах на C# и .NET

Работа с PDF-документами — распространённая задача в современном программировании. Часто требуется извлечь текст или получить информацию о его размере и границах для последующей обработки или анализа. Чтение дополнительной информации о тексте в PDF-документе — распространённая задача, которую можно выполнить с помощью библиотеки SautinSoft.Pdf.

В этой статье мы рассмотрим, как использовать этот SDK для получения границ и размеров текста в PDF-документе с помощью языка программирования C# и .NET.

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

  1. Добавить SautinSoft.PDF из NuGet.
  2. Загрузить PDF-документ.
  3. Пройтись по всем страницам PDF и по элементам содержимого каждой страницы.
  4. Извлечь только элементы текстового содержимого.
  5. Прочитать дополнительную информацию элемента текстового содержимого.
  6. Показать текстовое содержимое.

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

Полный код

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

class Program
{
    /// <summary>
    /// Reading additional info.
    /// </summary>
    /// <remarks>
    /// Details: https://sautinsoft.com/products/pdf/help/net/developer-guide/reading-additional-information.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 pdfFile = Path.GetFullPath(@"..\..\..\table.pdf");
        // Iterate through all PDF pages and through each page's content elements,
        // and retrieve only the text content elements.
        using (var document = PdfDocument.Load(pdfFile))
        {
            foreach (var page in document.Pages)
            {
                var contentEnumerator = page.Content.Elements.All(page.Transform).GetEnumerator();
                while (contentEnumerator.MoveNext())
                {
                    if (contentEnumerator.Current.ElementType == PdfContentElementType.Text)
                    {
                        var textElement = (PdfTextContent)contentEnumerator.Current;
                        var text = textElement.ToString();
                        var font = textElement.Format.Text.Font;
                        var color = textElement.Format.Fill.Color;
                        var bounds = textElement.Bounds;

                        contentEnumerator.Transform.Transform(bounds);
                        // Read the text content element's additional information.
                        Console.WriteLine($"Unicode text: {text}");
                        Console.WriteLine($"Font name: {font.Face.Family.Name}");
                        Console.WriteLine($"Font size: {font.Size}");
                        Console.WriteLine($"Font style: {font.Face.Style}");
                        Console.WriteLine($"Font weight: {font.Face.Weight}");
                        if (color.TryGetRgb(out double red, out double green, out double blue))
                            Console.WriteLine($"Color: Red={red}, Green={green}, Blue={blue}");
                        Console.WriteLine($"Bounds: Left={bounds.Left:0.00}, Bottom={bounds.Bottom:0.00}, Right={bounds.Right:0.00}, Top={bounds.Top:0.00}");
                        Console.WriteLine();
                    }
                }
            }
        }
    }
}

Download

Option Infer On

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

Friend Class Program
	''' <summary>
	''' Reading additional info.
	''' </summary>
	''' <remarks>
	''' Details: https://sautinsoft.com/products/pdf/help/net/developer-guide/reading-additional-information.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 pdfFile As String = Path.GetFullPath("..\..\..\table.pdf")
		' Iterate through all PDF pages and through each page's content elements,
		' and retrieve only the text content elements.
		Using document = PdfDocument.Load(pdfFile)
			For Each page In document.Pages
				Dim contentEnumerator = page.Content.Elements.All(page.Transform).GetEnumerator()
				Do While contentEnumerator.MoveNext()
					If contentEnumerator.Current.ElementType = PdfContentElementType.Text Then
						Dim textElement = CType(contentEnumerator.Current, PdfTextContent)
						Dim text = textElement.ToString()
						Dim font = textElement.Format.Text.Font
						Dim color = textElement.Format.Fill.Color
						Dim bounds = textElement.Bounds

						contentEnumerator.Transform.Transform(bounds)
						' Read the text content element's additional information.
						Console.WriteLine($"Unicode text: {text}")
						Console.WriteLine($"Font name: {font.Face.Family.Name}")
						Console.WriteLine($"Font size: {font.Size}")
						Console.WriteLine($"Font style: {font.Face.Style}")
						Console.WriteLine($"Font weight: {font.Face.Weight}")
						Dim red As Double
						Dim green As Double
						Dim blue As Double
						If color.TryGetRgb(red, green, blue) Then
							Console.WriteLine($"Color: Red={red}, Green={green}, Blue={blue}")
						End If
						Console.WriteLine($"Bounds: Left={bounds.Left:0.00}, Bottom={bounds.Bottom:0.00}, Right={bounds.Right:0.00}, Top={bounds.Top:0.00}")
						Console.WriteLine()
					End If
				Loop
			Next page
		End Using
	End Sub
End Class

Download


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



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

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