Программно извлекать таблицы PDF - PullRequest
21 голосов
/ 06 августа 2010

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

Есть ли что-нибудь в мире (желательнобесплатно), который может извлекать табличные данные из PDF-файлов в более удобочитаемый формат навалом , либо изначально встроенный в приложение, либо пассивно через командную строку или зацикливая процесс в коде (.net)?

Может быть любой формат на самом деле (doc, html), если только таблицы поддерживаются.

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

Любые идеи, пожалуйста, напишите.

Ответы [ 9 ]

12 голосов
/ 15 октября 2010

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

Начните с попытки вывести текст. Это может быть более или менее успешным, в зависимости от того, как построен PDF. Для начала нужно использовать GhostScript или pstotext . Если вам это не удастся, у этого парня есть список инструментов для извлечения текста . Получив текстовый поток, вы можете попытаться программно собрать табличную структуру.

Наконец, если у вас серьёзные проблемы, и если PDF-файлы не взаимодействуют, вы можете сделать OCR. Правильное долгосрочное решение состоит в том, чтобы с самого начала получить данные в правильном формате, выполнив один массивный, болезненный и, возможно, частично ручной процесс; или перейти к источнику и предложить предоставить данные в более удобной форме.

Если вы можете дать более конкретный пример файла PDF, возможно, будет лучший или более точный ответ ... НЕТ общего решения, если это возможно, его нужно будет адаптировать к вашим конкретным исходные данные.

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

Появился новый вопрос SO, связанный с этой библиотекой - iTextSharp - который выглядит, возможно, связанным. ТАК вопрос: Лучший способ извлечь ...

3 голосов
/ 30 сентября 2014
  1. Чтобы узнать, почему формат файла PDF никогда не следует рассматривать как подходящий для размещения извлекаемых структурированных данных , см. Эту статью:

  2. Для удивительногосемейство инструментов, которые становятся все лучше и лучше из недели в неделю для извлечения табличных данных из PDF-файлов (если они не являются отсканированными страницами), противоречащее пункту «1».выше см. эти ссылки:

1 голос
/ 11 апреля 2018

Ознакомьтесь с IvyTools IvyPdf: www.ivytools.net. Может извлекать таблицы и любые другие данные.Если ваши документы хорошо структурированы, их очень легко настроить, но они также могут иметь дело с довольно сложными сценариями.Это бесплатно для личного использования.

1 голос
/ 01 сентября 2011

Если все данные являются текстовыми данными, вы всегда можете использовать iTextSharp. Это бесплатно и вам нужен только "itextsharp.dll".

http://sourceforge.net/projects/itextsharp/

Вот простая функция для чтения текста из PDF.

Public Shared Function GetTextFromPDF(PdfFileName As String) As String
    Dim oReader As New iTextSharp.text.pdf.PdfReader(PdfFileName)

    Dim sOut = ""

    For i = 1 To oReader.NumberOfPages
        Dim its As New iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy

        sOut &= iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(oReader, i, its)
    Next

    Return sOut
End Function

Это, по крайней мере, даст вам текст для начала.

1 голос
/ 17 октября 2010

Формат PDF создается как набор букв, которые не имеют собственного формата или чего-либо еще. Вы можете думать о PDF как о странице, которая прошла через OCR, и вы берете ее оттуда - буквы и их координаты там - все остальное за вами - чтобы выяснить расположение, форматы, столбцы и возможные таблицы.

0 голосов
/ 13 мая 2015

Я недавно столкнулся с этой проблемой.

Альтернативное решение, которое я нашел, состояло в том, чтобы открыть документ PDF в Adobe и экспортировать его в xml.По крайней мере, в моих PDF-файлах он сохранил информацию таблицы, и тогда я смог программно работать с XML для генерации табличных файлов, таких как Excel и т. Д.

Другая проблема, с которой я столкнулся, заключалась в том, что Adobe позволяет экспортировать только один файлв то время, и у меня было много файлов.К счастью, у Adobe также есть функция слияния.В итоге я слил все файлы вместе, а затем экспортировал их как один большой XML-файл и работал с этим файлом, чтобы сгенерировать то, что мне было нужно.

0 голосов
/ 11 октября 2011

Я пытался извлечь простой текст из PDF-файлов с помощью таких инструментов, как pdf2text, но слишком много информации о таблице, форматировании и компоновке теряется для точной реконструкции исходной версии.используйте PDF API для извлечения x, y позиций текстовых полей и строк и используйте эту информацию для восстановления таблицы.

Похоже, существует несколько сторонних инструментов и API, которые пробуют этот подход:

Платная версия Solid Framework , кажется, способна извлекать таблицы из PDF в Excelи CSV автоматически и довольно хорошо из PDF-файлов, которые я бросил на это.

Бесплатная PDF Mechanic , похоже, небольшая программа с графическим интерфейсом, основанная на Solid Framework, которую вы можете использовать, чтобы опробовать их технику извлечения PDF.инструмент pdf2table , который вы могли бы вызвать из своей программы, но я еще не пробовал.

0 голосов
/ 17 октября 2010

Учитывая ваши требования, прямой ответ на ваш вопрос будет совершенно невозможным. Причина в том, что, в отличие от Word / Excel, в спецификации PDF нет объекта с именем Table. Таблица, которую вы видите в этих документах PDF, представляет собой просто серию прямоугольников, нарисованных таким образом, что она выглядит как таблица, и только PDF Writer создал эти файлы PDF, потому что некоторые могут нарисовать структуру таблицы с использованием Series of Line.

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

Incase, вы решили написать свой собственный парсер. Следующая статья даст вам быстрый старт. Код проекта статьи

0 голосов
/ 15 октября 2010

Когда вы говорите

Все, что я нашел до сих пор ... только один документ за раз

Полагаю, вы имеете в виду «это приложение с графическим интерфейсом без интерфейса программирования».

В этом случае вы можете использовать Microsoft UI Automation для программного управления приложением и заставить его делать то, что вы хотите.

UIA ... предоставляет средства для предоставления и сбора информации об элементах пользовательского интерфейса и элементах управления для поддержки доступности пользовательского интерфейса и автоматизации тестирования программного обеспечения ... и совместим как с Win32, так и с .NET Framework.

...