¿Alguien puede recomendar una biblioteca / API para extraer el texto y las imágenes de un PDF? Necesitamos poder llegar al texto que se encuentra en regiones previamente conocidas del documento, por lo que la API deberá proporcionarnos información posicional de cada elemento en la página.
Nos gustaría que esos datos se envíen en formato xml
o en json
formato. Actualmente estamos viendo PdfTextStream que parece bastante bueno, pero me gustaría escuchar las experiencias y sugerencias de otras personas.
¿Existen alternativas (comerciales o gratuitas) para extraer el texto de un pdf mediante programación?
pdf
text
ghostscript
extraction
text-extraction
Budda007
fuente
fuente
/^\s*\[?\((.*?)\)\]?\s*T[Jj]/mg
. Simplemente busca el operador Tj / TJ, que denota todo el texto normal en un PDF.Respuestas:
Me dieron un archivo pdf de 400 páginas con una tabla de datos que tuve que importar, por suerte no hay imágenes. Ghostscript funcionó para mí:
gswin64c -sDEVICE=txtwrite -o output.txt input.pdf
El archivo de salida se dividió en páginas con encabezados, etc., pero luego fue fácil escribir una aplicación para eliminar líneas en blanco, etc., y absorber los 30,000 registros.
-dSIMPLE
y-dCOMPLEX
no hizo ninguna diferencia en este caso.fuente
gs
lugar degswin64c
. Funciona perfectamente. No patentado basura pagada. Simplemente funciona-sDEVICE=txtwrite
hacer? No entiendo mucho después de leer Cómo usar Ghostscript | Selección de un dispositivo de salidagswin64c -sDEVICE=txtwrite -o- input.pdf
. Fuente (ligeramente modificada por mí): gist.github.com/drmohundro/560d72ed06baaf16f191ee8be34526acDesde hoy lo sé: lo mejor para la extracción de texto de archivos PDF es TET, el kit de herramientas de extracción de texto . TET es parte de la familia de productos PDFlib.com.
PDFlib.com es la compañía de Thomas Merz. En caso de que no reconozca su nombre: Thomas Merz es el autor de la "Biblia PostScript y PDF".
La primera encarnación de TET es una biblioteca . Ese probablemente puede hacer todo lo que Budda006 quería, incluida la información posicional sobre cada elemento de la página. Ah, y también puede extraer imágenes. Recombina imágenes que se fragmentan en pedazos.
pdflib.com también ofrece otra encarnación de esta tecnología, el complemento TET para Acrobat . Y la tercera encarnación es el PDFlib TET iFilter . Esta es una herramienta independiente para escritorios de usuario. Ambos son de uso gratuito (como en la cerveza) para fines privados y no comerciales.
Y es realmente poderoso. Mucho mejor que la extracción de texto de Adobe. Extrajo texto para mí donde otras herramientas (incluidas las de Adobe) solo escupen basura.
Acabo de probar la herramienta independiente de escritorio, y lo que dicen en su página web es cierto. Tiene una muy buena línea de comando. Algunos de mis archivos de prueba PDF "problemáticos" que la herramienta manejó a mi entera satisfacción.
A partir de ahora, esto será mi recomendación para todos los requisitos de extracción de texto PDF sofisticados y desafiantes.
TET es simplemente increíble. Detecta tablas. Dentro de las tablas, identifica celdas que abarcan varias columnas. Identifica las filas de la tabla y el contenido de cada celda de la tabla por separado. Se ocupa muy bien de las guiones: elimina los guiones y restaura palabras completas. Admite idiomas no ASCII (incluidos CJK, árabe y hebreo). Al encontrar ligaduras, restaura los caracteres originales ...
Darle una oportunidad.
fuente
Una herramienta de línea de comandos eficiente, de código abierto, gratuita, disponible en Linux y Windows: simplemente llamada pdftotext. Esta herramienta es parte de la biblioteca xpdf.
http://en.wikipedia.org/wiki/Pdftotext
fuente
-layout
interruptor para preservar las tablas, funciona bastante bien.Para python, hay PDFMiner y pyPDF2 . Para obtener más información sobre estos, consulte el módulo de Python para convertir PDF a texto .
fuente
Aquí está mi sugerencia. Si desea extraer texto de PDF, puede importar el archivo pdf a Google Docs y luego exportarlo a un formato más amigable como .html, .odf, .rtf, .txt, etc. Todo esto utilizando la API de Drive . Es gratis * y robusto. Echa un vistazo a:
https://developers.google.com/drive/v2/reference/files/insert https://developers.google.com/drive/v2/reference/files/get
Debido a que es una API de descanso, es compatible con TODOS los lenguajes de programación. Los enlaces que publiqué anteriormente tienen ejemplos de trabajo para muchos idiomas, incluidos: Java, .NET, Python, PHP, Ruby y otros.
Espero que ayude.
fuente
PdfTextStream (que dijiste que estabas viendo) ahora es gratuito para aplicaciones de un solo subproceso. En mi opinión, su calidad es mucho mejor que otras bibliotecas (especialmente para fuentes como fuentes incrustadas funky, etc.).
Alternativamente, debería echar un vistazo a Apache PDFBox , de código abierto.
fuente
La biblioteca Docotic.Pdf se puede utilizar para extraer texto de archivos PDF como texto sin formato o como una colección de fragmentos de texto con coordenadas para cada fragmento.
Docotic.Pdf también se puede utilizar para extraer imágenes de archivos PDF .
Descargo de responsabilidad: trabajo para Bit Miracle.
fuente
Uno de los comentarios aquí usaba gs en Windows. También tuve cierto éxito con eso en Linux / OSX, con la siguiente sintaxis:
Utilicé en
dSIMPLE
lugar dedCOMPLEX
porque este último genera 1 carácter por línea.fuente
Como la pregunta es específicamente sobre herramientas alternativas para obtener datos de PDF como XML , puede interesarle echar un vistazo a la herramienta comercial "ByteScout PDF Extractor SDK" que es capaz de hacer exactamente esto: extraer texto de PDF como XML junto con los datos de posicionamiento (x, y) y la información de la fuente:
Texto en el PDF de origen:
XML de salida:
PD: además, divide el texto en una estructura basada en tablas.
Divulgación: trabajo para ByteScout
fuente
Lo mejor que puedo pensar actualmente (dentro de la lista de herramientas "simples") es Ghostscript (la versión actual es v.8.71) y el programa de utilidad PostScript
ps2ascii.ps
. Ghostscript lo envía a sulib
subdirectorio. Prueba esto (en Windows):Este comando procesa las páginas 3-7 de
input.pdf
. Lea los comentarios en elps2ascii.ps
archivo para ver qué significan los números "extraños" y la información adicional ( indican cadenas, posiciones, anchos, colores, imágenes, rectángulos, fuentes y saltos de página ... ). Para obtener una salida de texto "simple", reemplace la-dCOMPLEX
parte por-dSIMPLE
.fuente
ps2ascii book.pdf notes.txt
. Si su documento es predominantemente ASCII, tiene suerte.Sé que este tema es bastante antiguo, pero esta necesidad aún está viva. Leí muchos documentos, foros y guiones y construí uno nuevo y avanzado que admite pdf comprimido y sin comprimir:
https://gist.github.com/smalot/6183152
En algunos casos, la línea de comando está prohibida por razones de seguridad. Por lo tanto, una clase nativa de PHP puede satisfacer muchas necesidades.
Espero que ayude a todos
fuente
Para la extracción de imágenes, pdfimages es una herramienta de línea de comandos gratuita para Linux o Windows (win32):
pdfimages: extraiga y guarde imágenes de un archivo de formato de documento portátil (PDF)
fuente
Apache pdfbox tiene esta característica: la parte del texto se describe en:
http://pdfbox.apache.org/apidocs/org/apache/pdfbox/util/PDFTextStripper.html
para ver un ejemplo de implementación, consulte https://github.com/WolfgangFahl/pdfindexer
el testcase TestPdfIndexer.testExtracting muestra cómo funciona
fuente
QuickPDF parece ser una biblioteca razonable que debe hacer lo que desea por un precio razonable.
http://www.quickpdflibrary.com/ - Tienen una prueba de 30 días.
fuente
En mis sistemas Macintosh, encuentro que "Adobe Reader" hace un trabajo razonablemente bueno. Creé un alias en mi escritorio que apunta a "Adobe Reader.app", y todo lo que hago es soltar un archivo pdf en el alias, que lo convierte en el documento activo en Adobe Reader, y luego desde el menú Archivo, Elijo "Guardar como texto ...", le doy un nombre y dónde guardarlo, hago clic en "Guardar" y listo.
fuente