Извлечь таблицы PDF

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

C# API для извлечения таблиц из PDF

Чтобы извлечь данные из таблиц в файлы PDF, мы будем использовать Aspose.PDF for .NET. Это мощный API, предоставляющий широкий спектр функций для работы с PDF. Вы можете либо скачать API, либо установить его с помощью NuGet.

PM> Install-Package Aspose.PDF

Извлечение данных из таблиц PDF в C#

Ниже приведены шаги для извлечения данных из таблиц в PDF-файле с помощью C#.

  • Загрузите документ PDF с помощью класса Document.
  • Пролистайте страницы в PDF, используя коллекцию Document.Pages.
  • В каждой итерации инициализируйте объект TableAbsorber и посещайте выбранную страницу с помощью метода TableAbsorber.Visit(Page).
  • Во вложенном цикле выполните итерацию по списку таблиц в коллекции TableAbsorber.TableList.
  • Для каждой AbsorbedTable в коллекции выполните итерацию по коллекции строк в AbsorbedTable.RowList.
  • Для каждого AbsorbedRow в коллекции выполните итерацию по коллекции ячеек в AbsorbedRow.CellList.
  • Наконец, прокрутите коллекцию TextFragments каждого AbsorbedCell и напечатайте текст.

В следующем примере кода показано, как извлечь текст из таблицы PDF в C#.

// Загрузить исходный PDF-документ
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf"); 

// Пролистайте страницы                      
foreach (var page in pdfDocument.Pages)
{
	// Создайте абсорбер таблицы и посетите страницу
	Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
	absorber.Visit(page);
	
	// Перебрать каждую поглощенную таблицу 
	foreach (AbsorbedTable table in absorber.TableList)
	{
		Console.WriteLine("Table");
		
		// Перебрать каждую строку в таблице
		foreach (AbsorbedRow row in table.RowList)
		{
			// Перебрать каждую ячейку в строке
			foreach (AbsorbedCell cell in row.CellList)
			{       
				// Перебрать текстовые фрагменты
				foreach (TextFragment fragment in cell.TextFragments)
				{
					var sb = new StringBuilder();
					foreach (TextSegment seg in fragment.Segments)
						sb.Append(seg.Text);
					Console.Write($"{sb.ToString()}|");
				}                           
			}
			Console.WriteLine();
		}
	}
}

Извлечь таблицу из определенной области страницы

Ниже приведены шаги для извлечения таблицы из определенной части страницы в PDF-файле с помощью C#.

  • Загрузите документ PDF с помощью класса Document.
  • Выберите нужную Страницу из коллекции Document.Pages.
  • Извлеките квадратную аннотацию страницы.
  • Инициализируйте объект TableAbsorber и посетите страницу с помощью метода TableAbsorber.Visit(Page).
  • Во вложенном цикле выполните итерацию по списку таблиц в коллекции TableAbsorber.TableList.
  • Если таблица находится в регионе, выполните следующие действия.

В следующем примере кода показано, как извлечь таблицу из определенной области страницы PDF.

// Загрузить исходный PDF-документ
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf"); 

// Выберите страницу и извлеките ее квадратную аннотацию.
var page = pdfDocument.Pages[1];
var squareAnnotation =
	page.Annotations.FirstOrDefault(ann => ann.AnnotationType == Annotations.AnnotationType.Square)
	as Annotations.SquareAnnotation;

// Создайте таблицу-поглотитель и посетите страницу
Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
absorber.Visit(page);

// Перебрать каждую поглощенную таблицу в списке 
foreach (AbsorbedTable table in absorber.TableList)
{
	var isInRegion = (squareAnnotation.Rect.LLX < table.Rectangle.LLX) &&
	(squareAnnotation.Rect.LLY < table.Rectangle.LLY) &&
	(squareAnnotation.Rect.URX > table.Rectangle.URX) &&
	(squareAnnotation.Rect.URY > table.Rectangle.URY);

	if (isInRegion)
	{
		// Перебрать каждую строку таблицы
		foreach (AbsorbedRow row in table.RowList)
		{
			// Перебрать каждую ячейку в строке
			foreach (AbsorbedCell cell in row.CellList)
			{
				// Перебрать текстовые фрагменты и распечатать текст
				foreach (TextFragment fragment in cell.TextFragments)
				{
					var sb = new StringBuilder();
					foreach (TextSegment seg in fragment.Segments)
					{
						sb.Append(seg.Text);
					}
					var text = sb.ToString();
					Console.Write($"{text}|");
				}
			}
			Console.WriteLine();
		}
	}
}

Получить бесплатную лицензию

Вы можете использовать Aspose.PDF для .NET без оценочных ограничений, используя временную лицензию.

Вывод

В этой статье вы узнали, как извлекать данные из таблиц в PDF с помощью C#. Кроме того, вы видели, как извлечь таблицу из определенной области страницы в формате PDF. Вы можете узнать больше о C# PDF API, используя документацию. Кроме того, вы можете оставлять свои вопросы на нашем форуме.

Смотрите также