¿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.
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:
Para una increíble familia de herramientas de código abierto que mejora cada vez más semana a semana para extraer datos tabulares de archivos PDF (a menos que sean páginas escaneadas), ¡ contradiciendo lo que dije en mis párrafos introductorios ! -- echa un vistazo a TabulaPDF . Vea estos enlaces:
Tabula está escrito en Ruby. Su código fuente está abierto en GitHub . Su licencia es Free y no GPL .
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, pdfimages
que 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:
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...
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.
No siempre es posible extraer texto a través pdftotext
de 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....
tabula
cuando se trata de la extracción de tablas).
bruno lowagie