2010-09-06 9 views
114

Может ли кто-нибудь рекомендовать библиотеку/API для извлечения текста и изображений из PDF? Нам нужно иметь возможность получить текст, который содержится в заранее известных областях документа, поэтому API должен будет предоставить нам позиционную информацию каждого элемента на странице.Как извлечь текст из PDF?

Мы хотели бы, чтобы эти данные выводились в формате xml или json. Мы в настоящее время смотрим на PdfTextStream, который кажется довольно хорошим, но хотелось бы услышать другие впечатления и предложения других людей.

Существуют ли альтернативы (коммерческие или бесплатные) для извлечения текста из pdf программно?

+0

Связанный вопрос: [Извлечь изображения и слова с координатами и размерами из PDF] (http://stackoverflow.com/questions/8241724/extract-images-and-words-with-coordinates-and-sizes-from-pdf) – yms

+0

Для тех, кому нужно что-то действительно простое (нет информации о местоположении), этого регулярного выражения perl может быть достаточно: '/^\s*\[?\((.*?)\)\]?\s*T[Jj]/mg '. Он просто ищет оператор Tj/TJ, который обозначает весь обычный текст в PDF. –

+0

использование [TomRoush PdfBox] (https://github.com/TomRoush/PdfBox-Android) библиотека это работает хорошо на android – FaisalAhmed

ответ

0

Самое лучшее, что я могу в настоящее время думать (в списке «простых» инструментов) является Ghostscript (текущая версия v.8.71) и утилита PostScript ps2ascii.ps. Ghostscript отправляет его в свой подкаталог lib. Попробуйте это (на Windows):

gswin32c.exe^
    -q^
    -sFONTPATH=c:/windows/fonts^
    -dNODISPLAY^
    -dSAFER^
    -dDELAYBIND^
    -dWRITESYSTEMDICT^
    -dCOMPLEX^
    -f ps2ascii.ps^
    -dFirstPage=3^
    -dLastPage=7^
    input.pdf^
    -dQUIET^
    -c quit 

Эта команда обрабатывает страницы 3-7 из input.pdf. Прочитайте комментарии в файле ps2ascii.ps, чтобы узнать, что означают «странные» цифры и дополнительная информация (). Они указывают строки, позиции, ширину, цвета, изображения, прямоугольники, шрифты и разрывы страниц ...). Чтобы получить «простой» текст, замените -dCOMPLEX на -dSIMPLE.

+2

Как вы и предполагали, это выводит только ASCII-тест. Хотя бесплатный, не отличный вариант для программного обеспечения, которое вы планируете использовать на других языках, кроме английского. – userx

+1

@userx: Как вы могли догадаться, это бесплатное программное обеспечение: поэтому доступен исходный код. Возможно продлить поддержку не-ASCII ... –

+0

@userx: сегодня я открыл «TET», Инструмент извлечения текста из pdflib.com. См. Мой другой ответ. –

0

QuickPDF представляется разумной библиотекой, которая должна делать то, что вы хотите по разумной цене.

http://www.quickpdflibrary.com/ - У них 30-дневная пробная версия.

+3

Quick PDF - это только окна – boatcoder

26

С сегодняшнего дня я это знаю: Лучшая вещь для извлечения текста из PDF-файлов is TET, the text extraction toolkit. TET является частью семейства продуктов PDFlib.com.

PDFlib.com является компанией Thomas Merz. Если вы не узнаете его имя: Томас Мерц является автором «Библии PostScript и PDF».

Первое воплощение TET - a library. Вероятно, это может сделать все, что хотел Budda006, включая позиционную информацию обо всех элементах на странице. О, и он также может извлекать изображения. Он рекомбинирует изображения, фрагментированные на куски.

pdflib.com также предлагает другое воплощение этой технологии, TET plugin for Acrobat. И третье воплощение - PDFlib TET iFilter. Это автономный инструмент для пользовательских настольных компьютеров. Оба они бесплатны (как в пиве) для использования в частных некоммерческих целях.

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

Я только что протестировал автономный инструмент для настольных компьютеров, и то, что они говорят на своей веб-странице, верно. У него очень хорошая командная строка. Некоторые из моих «проблемных» файлов PDF-файлов обрабатывают инструмент в полном объеме.

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

TET просто потрясающе.Он обнаруживает таблицы. Внутри таблиц он идентифицирует ячейки, охватывающие несколько столбцов. Он определяет таблицы и содержимое каждой ячейки таблицы отдельно. Он отлично справляется с переносами: он удаляет дефисы и восстанавливает полные слова. Он поддерживает языки, отличные от ASCII (включая CJK, арабский и иврит). При столкновении с лигатурами восстанавливаются исходные символы ...

Попробуйте.

+19

Нет пробной версии, а $ 440 немного «Попробуйте». –

+16

@Darthenius: Вы, должно быть, пропустили это предложение: «[PDFlib TET может быть оценен без лицензии, но будет обрабатывать документы PDF с размером до 10 страниц и размером 1 МБ, если не применяется действительный лицензионный ключ] (http: // www.pdflib.com/download/tet/)». –

+2

Спасибо! До сих пор отлично работает для моего небольшого проекта. И если это так же глубоко и твердо, как предлагают документация и начальные испытания, то это будет стоить 440 долларов США за часы, которые я потратил бы на поиск ошибок в других инструментах. (Кроме того, как разработчик программного обеспечения, конечно, хорошо поддерживать других разработчиков программного обеспечения!) – mm2001

5

Docotic.Pdf library может использоваться для extract text from PDF файлов в виде обычного текста или в виде набора текстовых фрагментов с координатами для каждого фрагмента.

Docotic.Pdf может использоваться для extract images from PDFs, тоже.

Отказ от ответственности: Я работаю в бит Чудо.

6

PdfTextStream (о котором вы говорили, что искали) сейчас для однопоточных приложений. По моему мнению, его качество намного лучше, чем другие библиотеки (особенно для фанковых встроенных шрифтов и т. Д.).

В качестве альтернативы, вы должны взглянуть на Apache PDFBox, с открытым исходным кодом.

+0

PdfTextStream не поддерживается в android. Есть ли хорошие библиотеки, подобные этому для Android? – FaisalAhmed

+0

@FaisalAhmed как насчет PDFBox? – Renaud

+0

Да PdfBox также не поддерживается в android .... оба PdfTextStream и PdfBox используют некоторую часть awt, которая не поддерживается в android – FaisalAhmed

0

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

https://gist.github.com/smalot/6183152

В некоторых случаях, командная строка запрещена по соображениям безопасности. Таким образом, собственный PHP-класс может удовлетворить многие потребности.

Надеюсь, что это поможет.

7

Вот мое предложение. Если вы хотите извлечь текст из PDF, вы можете импортировать файл pdf в Google Docs, а затем экспортировать его в более дружественный формат, такой как .html, .odf, .rtf, .txt и т. Д. Все это с помощью Drive API. Он бесплатный * и надежный. Посмотрите на:

https://developers.google.com/drive/v2/reference/files/inserthttps://developers.google.com/drive/v2/reference/files/get

Потому что это остальные API, он совместим со всеми программирует языками. В ссылках, которые я написал выше, есть рабочие примеры для многих языков, включая: Java, .NET, Python, PHP, Ruby и другие.

Надеюсь, это поможет.

+1

Я использовал этот вариант, и я бы не рекомендовал его. Извлечение текста в формате PDF не так хорошо, как многие альтернативы (особенно для неанглийских), и это также очень очень сложно. –

5

Один из комментариев здесь используется gs для Windows. Я имел некоторый успех, что на Linux/OSX тоже со следующим синтаксисом:

gs \ 
-q \ 
-dNODISPLAY \ 
-dSAFER \ 
-dDELAYBIND \ 
-dWRITESYSTEMDICT \ 
-dSIMPLE \ 
-f ps2ascii.ps \ 
"${input}" \ 
-dQUIET \ 
-c quit 

Я использовал dSIMPLE вместо dCOMPLEX, поскольку последний выводит 1 символ в каждой строке.

19

Эффективный инструмент командной строки, с открытым исходным кодом, без какой-либо платы, доступный как на linux & windows: просто имя d pdftotext. Этот инструмент является частью библиотеки xpdf.

http://en.wikipedia.org/wiki/Pdftotext

+4

На стороне: используйте переключатель '-layout' для сохранения таблиц, работает очень хорошо. – sebastian

68

Я получил 400 страницы PDF файл с таблицей данных, которые мне пришлось импортировать - к счастью, нет изображения. Ghostscript работал для меня:

gswin64c -sDEVICE=txtwrite -o output.txt input.pdf

Выходной файл был разбит на страницы с заголовками и т.д., но это было тогда легко написать приложение, чтобы вырезать пустые строки, и т.д., и сосать во всех 30000 записей , -dSIMPLE и -dCOMPLEX не имеет значения в этом случае.

+20

В linux и cygwin команда 'gs' вместо' gswin64c'. Работает отлично. Нет запатентованного платного дерьма. Это просто работает. – Jannes

+3

Yup, отлично работает! Теперь я могу использовать «grep» с безнаказанностью в своих pdf-файлах. Поскольку я могу grep лучше, чем я могу читать, это победа! (:-) Upvote. –

+1

В течение нескольких часов я играл со многими библиотеками .NET, и это дает лучший (самый дружественный) txt-файл из pdf. Благодаря! –

-2

На моих компьютерах Macintosh я обнаружил, что «Adobe Reader» выполняет достаточно хорошую работу. Я создал псевдоним на своем Рабочем столе, который указывает на «Adobe Reader.app», и все, что я делаю, - это удалить pdf-файл в псевдониме, что делает его активным документом в Adobe Reader, а затем из меню «Файл», Я выбираю «Сохранить как текст ...», дайте ему имя и где его сохранить, нажмите «Сохранить», и я закончен.

+2

OP искал решение для * извлечения текста из pdf программно *. Вместо этого ваш ответ предлагает ручную процедуру. – mkl

2

Отказ от ответственности: Я работаю ByteScout

Поскольку вопрос именно об альтернативных инструментах, чтобы получить данные из PDF в XML так что вы можете быть заинтересованы, чтобы взглянуть на коммерческий инструмент "ByteScout PDF Extractor SDK", который способен делать именно это: извлечь текст из PDF в XML вместе с данными определения местоположения (х, у) и информации о шрифте:

текст в исходном формате PDF:

Products | Units | Price 

Вывод XML:

<row> 
<column> 
    <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="212" y="126" width="47" height="11">Products</text> 
    </column> 
<column> 
    <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="428" y="126" width="27" height="11">Units</text> 
    </column> 
<column> 
    <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="503" y="126" width="26" height="11">Price</text> 
    </column> 
</row> 

P.S .: дополнительный также разбивает текст в структуру на основе таблицы.