Программно извлекать таблицы PDF
У меня есть куча PDF-документов с табличными данными в них, которые мне нужно извлечь в более читаемый формат для хранения в электронной таблице, базе данных или что-то еще.
Есть ли что-нибудь в мире (желательно бесплатно), которое может получать табличные данные из PDF файлов в более читаемый формат в массе, либо встроенный в приложение, либо пассивно через командную строку или цикл цикла в коде (.net)?
Может быть любой формат на самом деле (doc, html) до тех пор, пока поддерживаются таблицы.
Все, что я нашел до сих пор, является одноразовым (только один документ за раз, у меня сотни, чего не происходит) или не поддерживает структуру таблицы.
Любые идеи, пожалуйста, публикуйте.
Ответы
Ответ 1
Это гигантская стычка. Как правило, извлечение текстового содержимого PDF файла выполняется против того, что PDF хочет сделать.
Начните с попытки получить текст. Это может быть более или менее успешным, в зависимости от того, как создается PDF файл. Одно место для запуска - GhostScript или pstotext. Если это вас не устраивает, у этого парня есть список инструментов для извлечения текста. После того, как у вас есть текстовый поток, вы можете попытаться повторно собрать табличную структуру программно.
Наконец, если вы находитесь в тяжелой форме, и если файлы PDF не работают, вы можете сделать OCR. Правильное долгосрочное решение заключается в том, чтобы получить данные в правильном формате с самого начала, либо путем одиночного, массового, болезненного и, вероятно, частично ручного процесса; или перейти к источнику и предложить, чтобы данные были представлены в более удобной форме.
Если вы можете дать более конкретный пример файла PDF, может быть лучший или более точный ответ... нет никакого общего решения этого, если это возможно, его нужно будет адаптировать к вашим конкретным исходным данным.
Обратите внимание на довольно заостренный ответ на общий вопрос... не помогает с тем, что у вас есть проблема перед вы, но, возможно, это обеспечит полезную верхнюю обложку, когда объясните своему боссу, почему нет очевидного ответа?; -)
Появился новый вопрос SO, который ссылается на эту библиотеку - iTextSharp - который, вероятно, связан. SO вопрос: Лучший способ извлечения...
Ответ 2
-
Для получения информации о том, почему формат PDF файла никогда не должен считаться подходящим для размещения извлекаемых структурированных данных, см. в этой статье:
-
Для удивительной семьи инструментов, которые становятся лучше и лучше от недели к неделе для извлечения табличных данных из PDF файлов (если только они не являются отсканированными страницами), противоречивая точка '1.' выше, см. следующие ссылки:
Ответ 3
PDF-формат создается как набор букв, которые не имеют встроенного формата или чего-то еще. Вы можете думать о PDF так же, как о странице, которая прошла через OCR, и вы берете ее оттуда - буквы и их координаты есть - отдых зависит от вас - для определения макета, форматов, столбцов и возможных таблиц.
Ответ 4
Если все данные являются текстовыми данными, вы всегда можете использовать 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
Это, по крайней мере, даст вам текст для начала.
Ответ 5
Когда вы говорите
Все, что я нашел до сих пор... только один документ за раз
Я предполагаю, что вы имеете в виду "приложение с графическим интерфейсом, без интерфейса программирования".
В этом случае вы можете использовать Microsoft UI Automation, чтобы программно управлять приложением и заставить его делать то, что вы хотите.
UIA... предоставляет средства для публикации и сбора информации об элементах и элементах пользовательского интерфейса для поддержки доступности пользовательского интерфейса и автоматизации тестирования программного обеспечения... и совместим как с Win32, так и с .NET Framework.
Ответ 6
Учитывая ваше требование, прямой ответ на ваш вопрос будет таким, что это невозможно. Причина в том, что в отличие от слова /excel, спецификация PDF не имеет объекта под названием Table. Таблица, которую вы видите в этих PDF-документах, представляет собой только ряд прямоугольников, нарисованных таким образом, что это выглядит как таблица, и это зависит от PDF Writer, который создавал эти файлы PDF, потому что некоторые могут рисовать структуру таблицы типа с помощью Series of Line.
Но, возможно, вы могли бы написать свой собственный парсер, основанный на PDF File Specification, но это все еще сложная задача, если вы решите реализовать свои собственные парсер, и потребуется несколько месяцев, чтобы получить тот, который работает с несколькими документами PDF.
Incase, вы решили написать свой собственный парсер. В приведенной ниже статье вы можете начать прыгать.
Код проекта статьи
Ответ 7
Я попытался извлечь простой текст из PDF файлов с помощью таких инструментов, как pdf2text, но слишком большая часть таблицы и информации о форматировании и макете теряется для точной реконструкции исходной версии.
Возможно, было бы более полезно использовать API PDF для извлечения позиций x, y текстовых полей и строк и использовать эту информацию для восстановления таблицы.
Кажется, есть несколько сторонних инструментов и API, которые используют этот подход:
Платная версия Solid Framework, похоже, позволяет извлекать таблицы из PDF в Excel и CSV автоматически и достаточно хорошо из файлов PDF. бросили на него.
Свободное PDF Mechanic кажется небольшой графический интерфейс программы, обернутые вокруг Solid Framework, которую вы можете использовать, чтобы опробовать технику извлечения PDF.
Там также есть бесплатный инструмент pdf2table, который вы могли бы вызвать из своей программы, но я еще не пробовал его.
Ответ 8
Недавно я столкнулся с этой проблемой.
Альтернативное решение, которое я нашел, заключалось в том, чтобы открыть PDF-документ в Adobe и экспортировать его в xml. По крайней мере, с моим PDF файлом он сохранил информацию о таблице, а затем я смог программно работать с XML для создания табличных файлов, таких как excel и т.д.
Другая проблема, с которой я столкнулся, заключалась в том, что Adobe позволяет экспортировать только один файл за раз, и у меня было много файлов. К счастью, Adobe также имеет функцию слияния. Я закончил слияние всех файлов вместе, а затем экспортировал их как один большой XML файл и работал с этим файлом, чтобы создать то, что мне нужно.