Чтение таблиц из файла PDF с использованием С#

Я хочу читать таблицы внутри pdf файла, у меня есть pdf файл со всей таблицей, какой SDK используется в С# для распознавания таблиц внутри pdf файлов и некоторого механизма для чтения ячейки по ячейке?

Может ли кто-нибудь предложить, если вы знаете какие-либо DLL, которые распознают таблицы внутри pdf файлов.

Ответ 1

В формате PDF нет понятия "таблица", так как его векторная грамматика состоит из простых примитивов, связанных с путями (то есть строк, кривых, контуров шрифтов...) и выборочного содержимого (то есть растровых изображений).

Однако хороший эвристический алгоритм мог обнаружить слабое присутствие так называемого "табличного" представления (т.е. типично, пересекающихся линий, смешанных с содержимым).

Ответ 2

iTextPdf может быть тем, что вы ищете. Я не использовал его, но слышал очень хорошие вещи. Кроме того, он является открытым исходным кодом и бесплатным (для некоммерческого использования), что всегда приятно.

Ответ 3

Я знаю, что это старый вопрос, но кому-то это может понадобиться

"Совершенно очевидно" введение:
PDF файлы представляют собой поток графического объекта (например, строки) и текст. Когда PDF визуализируется, человеческий глаз понимает, что есть таблицы из-за линий и текста между ними.

Решение (мое)
Начиная с чтения PDF (iTextSharp), вам необходимо:
1. прочитайте строки (надеюсь, только вертикальные и горизонтальные линии),
2. присоединиться к строкам (строка таблицы может быть несколько строк, например, один на ячейку),
3. понять, где находятся таблицы (иногда создавая гипотезу, основанную на ваших потребностях); 4. необязательно найти текст за пределами таблиц (лучше сохранить весь текст) и вставить его в параграфы,
5. Вставьте текст внутри ячеек таблицы

Если вам нужно что-то уже написанное для начала (для работы с моими pdf файлами), вы можете найти что-то здесь https://github.com/bubibubi/ExtractTablesFromPdf
Он использует версию GPL iTextSharp.

Ответ 4

PDFBox

Из IKVM.NET успешно используется для анализа PDF-документов в .NET.

Использование PDFBox для разбора PDF файлов довольно просто:

private static string parseUsingPDFBox(string filename) 
{
  PDDocument doc = PDDocument.load(filename);
  PDFTextStripper stripper = new PDFTextStripper();
  return stripper.getText(doc); 
}

Ответ 5

Мне нужно было то же самое для проекта. Мой процесс немного накладные, но он работает достаточно хорошо. Когда я его немного улучшу, я отправлю его. Ешьте основной поток:

  • использовать libpdf для преобразования pdf в json
  • импортировать json файл для получения текстовых строк с их координатами
  • использовать ghostscript для преобразования PDF в изображение
  • используйте Aforge blobcounter, чтобы получить ячейки таблицы.
  • группировать ячейки в таблицы
  • используйте расположение и размер ячейки, чтобы определить, какие текстовые строки содержат

Ответ 6

Можете ли вы принести сюда свой код или в списке основных строк кода?

Буби, ты написал хороший ответ. Я не проверял это. Но как определить, есть ли таблица с разными типами разделительных линий? А как насчет таблиц без строк?

DZ