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

от автора

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);         }     } }


ссылка на оригинал статьи https://habr.com/ru/articles/746456/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *