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:UsersAdministratorDesktoptable.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("rn"); } } } // Записать в файл .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:UsersAdministratorDesktoptable.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); } } }
Источник новости: habr.com