PDF стал одним из наиболее широко используемых форматов документов во множестве областей. В различных случаях он используется для создания счетов-фактур, где данные представлены в табличной форме. В таких случаях вам может потребоваться проанализировать PDF-файл, чтобы программно прочитать данные из таблиц. Для этого в статье рассказывается, как извлекать данные из таблиц PDF с помощью C#.
- C# API для извлечения таблиц 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.
- Если таблица находится в регионе, выполните следующие действия.
- Перебрать набор строк в AbsorbedTable.RowList.
- Для каждого AbsorbedRow в коллекции выполните итерацию по коллекции ячеек в AbsorbedRow.CellList.
- Наконец, прокрутите коллекцию TextFragments каждого AbsorbedCell и напечатайте текст.
В следующем примере кода показано, как извлечь таблицу из определенной области страницы 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, используя документацию. Кроме того, вы можете оставлять свои вопросы на нашем форуме.