Бесплатные способы извлечения таблиц из PDF в C#

1c55343f4838da40920a83800b123b6c.png

PDF (Portable Document Format) — это формат файлов, который широко используется для обмена и хранения электронных документов. Его популярность привела к тому, что многие важные данные хранятся в PDF-файлах в виде таблиц. Однако когда нам нужно использовать эти данные для дальнейшего анализа, обработки или импорта в другие системы, ручное извлечение табличных данных из PDF становится громоздким и сопряжено с ошибками. Поэтому автоматизация извлечения табличных данных из PDF-файлов стала важным требованием.

Для достижения этой цели я попробовал использовать распространенные библиотеки с открытым исходным кодом, такие как iTextSharp и PdfSharp. Учебники, которые я нашел в интернете для этого, были несколько летней давности и не очень эффективны в использовании, часть кода даже не работала. Наконец, я обнаружил, что использование Free Spire.Office for .NET для извлечения данных из таблиц является более удобным и точным. В этой статье я поделюсь двумя фрагментами кода C#, которые позволят извлечь табличные данные из PDF и сохранить их в TXT-файл и Excel-файл соответственно.

  • Извлечение таблиц с определенной страницы и сохранение в текстовый файл на C#

  • Извлечение таблиц с определенной страницы и сохранение в файл Excel на C#

Установка Free Spire.Office с помощью NuGet

Вы можете установить пакет FreeSpire.Office, выполнив поиск и установку через «Tool» → «NuGet Package Manager» → «Manage NuGet Packages for Solution», или установить его с помощью следующей команды NuGet:

PM> Install-Package FreeSpire.Office

Извлечение таблиц с определенной страницы и сохранение в текстовый файл на C#

Нижеприведенный код получает таблицу с указанной страницы PDF, затем записывает данные таблицы в StringBuilder с сохранением стиля форматирования данных. Наконец, данные из StringBuilder записываются в TXT-документ.

using Spire.Pdf;
using Spire.Pdf.Utilities;
using System.Text;

namespace ExtractTablesFromPage
{
    class Program
    {
        static void Main(string[] args)
        {
            // Создать объект PdfDocument
            PdfDocument doc = new PdfDocument();

            // Загрузить образец PDF-файла
            doc.LoadFromFile(@"C:\Users\Administrator\Desktop\table.pdf");

            // Создать объект StringBuilder
            StringBuilder builder = new StringBuilder();

            // Инициализировать экземпляр класса PdfTableExtractor
            PdfTableExtractor extractor = new PdfTableExtractor(doc);

            // Объявить массив PdfTable
            PdfTable[] tableList = null;

            // Извлечь таблицы с определенной страницы
            tableList = extractor.ExtractTable(0);

            // Определить, является ли список таблиц пустым
            if (tableList != null && tableList.Length > 0)
            {
                // Перебрать таблицы в списке
                foreach (PdfTable table in tableList)
                {
                    // Получить количество строк и столбцов в определенной таблице
                    int row = table.GetRowCount();
                    int column = table.GetColumnCount();

                    // Перебрать строки и столбцы
                    for (int i = 0; i < row; i++)
                    {
                        for (int j = 0; j < column; j++)
                        {
                            // Получить текст из определенной ячейки
                            string text = table.GetText(i, j);

                            // Добавить текст в StringBuilder
                            builder.Append(text + " ");
                        }
                        builder.Append("\r\n");
                    }
                }
            }

            // Записать в файл .txt
            File.WriteAllText("Table.txt", builder.ToString());
        }
    }
}

Извлечение таблиц с определенной страницы и сохранение в файл Excel на C#

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

using Spire.Pdf;
using Spire.Pdf.Utilities;
using Spire.Xls;

namespace ExtractTablesToExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            // Создать объект PdfDocument
            PdfDocument doc = new PdfDocument();

            // Загрузить образец PDF-файла
            doc.LoadFromFile(@"C:\Users\Administrator\Desktop\table.pdf");

            // Создать объект Workbook
            Workbook workbook = new Workbook();

            // Очистить рабочие листы по умолчанию
            workbook.Worksheets.Clear();

            // Инициализировать экземпляр класса PdfTableExtractor
            PdfTableExtractor extractor = new PdfTableExtractor(doc);

            // Объявить массив PdfTable
            PdfTable[] tableList = null;

            // Извлечь таблицы с определенной страницы
            tableList = extractor.ExtractTable(0);

            int sheetNumber = 1;

            // Определить, является ли список таблиц пустым
            if (tableList != null && tableList.Length > 0)
            {

                // Перебрать таблицы в списке
                foreach (PdfTable table in tableList)
                {

                    // Добавить рабочий лист
                    Worksheet sheet = workbook.Worksheets.Add(String.Format("sheet{0}", sheetNumber));

                    // Получить количество строк и столбцов в определенной таблице
                    int row = table.GetRowCount();
                    int column = table.GetColumnCount();

                    // Перебрать строки и столбцы
                    for (int i = 0; i < row; i++)
                    {
                        for (int j = 0; j < column; j++)
                        {
                            // Получить текст из определенной ячейки
                            string text = table.GetText(i, j);

                            // Напишите текст в определенной ячейке
                            sheet.Range[i+1,j+1].Value = text;

                        }
                    }
                }
                sheetNumber++;
            }
		
	     // Сохраните рабочую книгу в файл Excel
            workbook.SaveToFile("ToExcel.xlsx", ExcelVersion.Version2013);
        }
    }
}

© Habrahabr.ru