Software de extracción de contenido PDF

¿Alguien puede recomendar una biblioteca/API de código abierto para extraer los textos e imágenes de un PDF? A continuación se encuentran los requisitos. He usado PDF Clown, versión C# .NET, pero tengo problemas para crear una tabla de Excel usándolo.

  1. Debería poder convertir tablas PDF a tablas Excel/CSV/XML/HTML.
  2. Debe ser de código abierto y no GPL.
  3. Debería poder extraer imágenes de PDF.
  4. Si no puede convertir una tabla PDF a algún formato, al menos debería darme las coordenadas de los textos en una tabla para que pueda crear una tabla a partir de ella.
  5. Debería poder decirme la información de origen de los contenidos PDF después de la extracción (qué página, en qué parte de esa página, etc.).
Comience leyendo ISO-32000-2, luego haga una evaluación de la cantidad de tiempo que se necesitaría para escribir dicha biblioteca. Descubrirá que (1) está pidiendo algo que en muchos casos es imposible (a menos que su PDF sea un PDF correctamente etiquetado) y (2) dicha biblioteca sería tan valiosa que nadie la ofrecería bajo una licencia permisiva.

Respuestas (1)

Extraer tablas de PDF

Su requisito de extraer tablas de archivos PDF no es fácil de cumplir.

Los archivos PDF estándar no proporcionan ninguna pista sobre la semántica de lo que dibujan en una página: la única distinción que proporciona la sintaxis es la distinción entre elementos vectoriales (líneas, rellenos,...), imágenes y texto.

Si un carácter es parte de una tabla o parte de una línea o simplemente un carácter único y solitario dentro de un área vacía, no es fácil de reconocer mediante programación al analizar el código fuente del PDF.

Para obtener información sobre por qué el formato de archivo PDF nunca debe considerarse adecuado para alojar datos estructurados extraíbles , consulte este artículo:

Por qué era tan difícil actualizar Dollars for Docs (sitio web de ProPublica)

Habiendo dicho lo anterior, ahora permítanme agregar esto:

Tabula está escrito en Ruby. Su código fuente está abierto en GitHub . Su licencia es Free y no GPL .

Extraer imágenes de un PDF

Aquí recomendaría mirar Poppler . Poppler es una biblioteca de renderizado de PDF bifurcada a partir del código base xpdf-3.0 .

Viene con una utilidad de línea de comandos, pdfimagesque puede enumerar y extraer imágenes incrustadas en archivos PDF. Aquí hay una ejecución de ejemplo que enumera todas las imágenes contenidas en el rango de páginas 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%

Como puede ver, la salida es una tabla que contiene todo tipo de información útil sobre las imágenes incrustadas:

  • el número de página en el que aparecen,
  • el tipo de imagen,
  • sus dimensiones de ancho/alto,
  • su espacio de color,
  • el número de colores base,
  • profundidad del color,
  • su codificación,
  • su ID de objeto PDF,
  • sus respectivas resoluciones en las direcciones X o Y y
  • sus tamaños y su relación de compresión.

Para extraer todas las imágenes de la página 9 como archivos PNG y nombrarlas con un images-from-page9---prefijo, use este comando:

$ pdfimages -png -f 9 -l 9 some.pdf images-from-page9---

Para ver más opciones, ejecute pdfimages -h.

Por supuesto, si no desea la herramienta de línea de comandos, sino que utiliza la API/biblioteca de Poppler con su propio código, puede lograr las mismas funciones...

Extraer texto de PDF

La misma biblioteca Poppler también incluye un programa de línea de comandos para extraer texto: pdftotext.

Aquí está su breve resultado de ayuda :

$ 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)
   [....]

Como puede ver, hay varios interruptores de línea de comando para direccionar o recuperar coordenadas para ubicaciones de texto.

Advertencias

No siempre es posible extraer texto a través pdftotextde archivos PDF. Los archivos PDF pueden verse perfectamente bien, pero su estructura interna puede ser defectuosa cuando se trata de la extracción de texto.

Vea, por ejemplo, estas respuestas recientes de StackOverflow:


Sin embargo, la licencia de Poppler es GPL....

Hola, instalé JRuby e intenté instalar Tabula usando el comando jruby -S gem install tabula-extractor pero por alguna razón recibo un error de sintaxis, ¿alguna idea?
@SharkiChacko: "... ¿alguna idea?" -- Sí, dos: (1) Primera: '¿qué podría ser exactamente ese error de sintaxis, cómo diablos podría adivinarlo, cómo podría responder a esto?!?' (2) Segundo: '¿por qué no describe sus problemas en el rastreador oficial de problemas del extractor de tabulas ?'
Guau. Muy buen resumen (+1), ¡felicidades! Entonces, leyendo entre líneas: no hay una herramienta "swiss-army" que cubra los 3 componentes, y luego genera una página Markdown bien formateada para adaptarse a una publicación SE (es broma; HTML con imágenes vinculadas y texto bien formateado también estaría bien )?
@Izzy: No, ninguna herramienta "swiss-army" cumple con las condiciones del OP: código abierto pero no GPL . (Sin embargo, existen herramientas comerciales... pero no son tan buenas como tabulacuando se trata de la extracción de tablas).
¡Gracias Kurt! Me olvidé por completo de esa constelación de licencias. Poppler es lo que más uso ahora, por cierto. Y estoy bien con la GPL: todo mi propio software también es GPL. A lo que me dirigía, básicamente, era a una herramienta que combinara todo: ¿qué pasa si hay un PDF con tablas, imágenes y mucho texto? Se prefiere código abierto, por supuesto, pero GPL está bien conmigo (no creo que eso justifique una pregunta separada;)
@Izzy: Tampoco existe una herramienta de "código abierto, incluso GPL" del ejército suizo como esa, lo siento.
¡OK muchas gracias! No es tu culpa :) Hubiera sido demasiado agradable, aunque...