Как я могу разобрать таблицу в файле PDF?

У меня есть пользовательская таблица с именем, именем, местом рождения и местом проживания в файле PDF, который я хочу проанализировать на С#. Один из самых простых способов сделать это:

using (PdfLoadedDocument document = new PdfLoadedDocument("foobar"))
{
    for (var i = 0; i < document.Pages.Count; i++)
    {
        Console.WriteLine($"============ PAGE NO. {i+1} ============");
        Console.WriteLine(document.Pages[i].ExtractText());
    }
}

Но проблема в выводе:

============ PAGE NO. 38 ============
John L.SmithSan Francisco5400 Baden

Я никак не могу разделить это с помощью регулярного выражения, поэтому мне нужен способ проанализировать каждый столбец каждой строки, чтобы разделить все значения клиентов. Как я могу проанализировать таблицу в файле PDF с помощью syncfusion?


person SovietPanda    schedule 25.01.2017    source источник
comment
Вы пробовали использовать ...ExtractText(true)?   -  person DavidG    schedule 25.01.2017
comment
@DavidG, к сожалению, ExtractText() не принимает параметр   -  person SovietPanda    schedule 25.01.2017
comment
Уверены ли вы? документы говорят об обратном.   -  person DavidG    schedule 25.01.2017
comment
@DavidG ты прав. Я использовал неправильную версию SyncFusion. Я обновил его и попробовал с параметром true, но без разницы   -  person SovietPanda    schedule 25.01.2017
comment
Возможный дубликат Как читать таблицу из PDF с помощью itextsharp?   -  person bubi    schedule 04.07.2017


Ответы (2)


Вам понадобятся методы, которые возвращают вам координату каждого символа, найденного в pdf. Затем вам нужно выполнить некоторые математические действия (в основном для вычисления расстояния между символами), чтобы узнать, является ли символ частью слова и где само слово расположено по оси x. Это требует довольно много работы и усилий, и я не нашел такого метода в документации по syncfusion.

Я написал класс, который делает то, что вы хотите, но это для проекта Java: PDFLayoutTextStripper (на PDFBox)

person jlink    schedule 25.02.2017

Управление синхронизацией, извлекающее текст из документа PDF на основе структуры содержимого, представленного в документе PDF. Итак, на основе текущей реализации управления Syncfusion мы не можем распознать строки и столбцы, присутствующие в таблице документа PDF.

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

Но мы можем заполнить таблицу документа PDF в Excel, используя Tabula (библиотека с открытым исходным кодом). Я изменил Tabula java (с открытым исходным кодом), чтобы добиться извлечения текста на основе макета из документа PDF в соответствии с вашими требованиями.

Пожалуйста, найдите образец для этой реализации по ссылке ниже:

http://www.syncfusion.com/downloads/support/directtrac/171585/ze/TextExtractionSample649531336

Перед выполнением образца убедитесь в следующем:

  1. Установите Java Runtime Environment (JRE) по ссылке ниже.
    http://www.oracle.com/technetwork/java/javase/downloads/
  2. Перезагрузите машину.
  3. Выполните приведенный выше пример.

Попробуйте это и проверьте, соответствует ли оно вашим требованиям.

person Community    schedule 03.02.2017