Может ли кто-нибудь порекомендовать библиотеку/API с открытым исходным кодом для извлечения текстов и изображений из PDF? Ниже приведены требования. Я использовал PDF Clown, версию С# .NET, но у меня возникли проблемы с созданием таблицы Excel с ее использованием.
Ваше требование по извлечению таблиц из PDF-файлов выполнить непросто.
Стандартные PDF-файлы не дают никаких намеков на семантику того, что они рисуют на странице: единственное различие, которое обеспечивает синтаксис, — это различия между векторными элементами (линиями, заливками,...), изображениями и текстом.
Независимо от того, является ли какой-либо символ частью таблицы или частью строки, или просто одиноким, одиночным символом в пустой области, его нелегко распознать программно путем анализа исходного кода PDF.
Справочную информацию о том, почему формат файла PDF никогда не следует рассматривать как подходящий для размещения извлекаемых структурированных данных , см. в этой статье:
Почему обновление долларов для документов было таким сложным (ProPublica-Website)
Сказав вышесказанное, теперь позвольте мне добавить следующее:
За удивительное семейство инструментов с открытым исходным кодом, которое с каждой неделей становится все лучше и лучше для извлечения табличных данных из PDF-файлов (если только они не являются отсканированными страницами) — что противоречит тому, что я сказал во вступительных абзацах ! -- ознакомьтесь с TabulaPDF . См. эти ссылки:
Табула написана на Ruby. Его исходный код открыт на GitHub . Его лицензия свободна и не является GPL .
Здесь я бы рекомендовал изучить Poppler . Poppler — это библиотека для рендеринга PDF, созданная на основе кодовой базы xpdf-3.0 .
Он поставляется с утилитой командной строки, pdfimages
которая может отображать и извлекать изображения, встроенные в файлы PDF. Вот пример выполнения, в котором перечислены все изображения, содержащиеся в диапазоне страниц 3-5:
$ pdfimages -list -f 3 -l 5 some.pdf
page num type width height color comp bpc enc interp objectID x-ppi y-ppi size ratio
----------------------------------------------------------------------------------------
3 0 image 577 645 rgb 3 8 image yes 593 0 152 152 106K 9.7%
3 1 smask 577 645 gray 1 8 image no 593 0 152 152 383B 0.1%
3 2 image 382 419 rgb 3 8 image yes 594 0 110 110 56.7K 12%
3 3 smask 382 419 gray 1 8 image no 594 0 110 110 178B 0.1%
4 4 image 1569 344 rgb 3 8 image yes 534 0 162 162 36.4K 2.3%
5 5 image 719 930 index 1 8 image yes 535 0 146 146 42.6K 6.5%
Как видите, результатом является таблица, содержащая всевозможную полезную информацию о встроенных изображениях:
Чтобы извлечь все изображения со страницы 9 в виде файлов PNG и назвать их префиксом images-from-page9---
, используйте эту команду:
$ pdfimages -png -f 9 -l 9 some.pdf images-from-page9---
Чтобы просмотреть дополнительные параметры, запустите pdfimages -h
.
Конечно, если вам не нужен инструмент командной строки, а вместо этого вы используете API/библиотеку Poppler со своим собственным кодом, вы можете получить те же функции...
Та же библиотека Poppler также поставляется с программой командной строки для извлечения текста: pdftotext
.
Вот его краткий вывод справки :
$ pdftotext -h
pdftotext version 0.32.0
Copyright 2005-2015 The Poppler Developers - http://poppler.freedesktop.org
Copyright 1996-2011 Glyph & Cog, LLC
Usage: pdftotext [options] <PDF-file> [<text-file>]
-f <int> : first page to convert
-l <int> : last page to convert
-r <fp> : resolution, in DPI (default is 72)
-x <int> : x-coordinate of the crop area top left corner
-y <int> : y-coordinate of the crop area top left corner
-W <int> : width of crop area in pixels (default is 0)
-H <int> : height of crop area in pixels (default is 0)
-layout : maintain original physical layout
-fixed <fp> : assume fixed-pitch (or tabular) text
-raw : keep strings in content stream order
-htmlmeta : generate a simple HTML file, including the meta information
-enc <string> : output text encoding name
-listenc : list available encodings
-eol <string> : output end-of-line convention (unix, dos, or mac)
-nopgbrk : don't insert page breaks between pages
-bbox : output bounding box for each word and page size to html. Sets -htmlmeta
-opw <string> : owner password (for encrypted files)
-upw <string> : user password (for encrypted files)
[....]
Как видите, существуют различные переключатели командной строки для адресации или получения координат текстовых местоположений.
Не всегда возможно извлечь текст через pdftotext
PDF-файлы. Файлы PDF могут выглядеть прекрасно, но их внутренняя структура может быть ошибочной, когда дело доходит до извлечения текста.
См., например, эти последние ответы StackOverflow:
Однако лицензия Poppler - GPL....
tabula
когда дело доходит до извлечения таблиц.)
Бруно Лоуаги