• Publicidad

Leer de un PDF

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Leer de un PDF

Notapor macgregor » 2010-07-05 10:47 @491

Hola,

Necesito parsear un montón de PDF (que contienen sólo texto) y me gustaría que me dijerais si algún módulo es mejor o más fácil de utilizar.

Los que he mirado hasta ahora parecen estar pensados para crear, no para leer PDF.

¿¿ Me recomendáis que mire en profundidad PDF::Reuse ??

Si conocéis algún tutorial o ejemplos de uso os estaré muy agradecido.

Un saludo y gracias por vuestra ayuda :D
MACGREGOR [TM]
Avatar de Usuario
macgregor
Perlero nuevo
Perlero nuevo
 
Mensajes: 80
Registrado: 2004-12-09 07:32 @355
Ubicación: españa

Publicidad

Re: Solicita tutorial de un módulo

Notapor Lor » 2010-07-05 13:03 @585

Si bien es explorer el más capacitado a responderte te comento mi experiencia. Hace un tiempo que estoy dando vueltas con la creación de reportes, facturas en PDF. He intentado usar varios, pero creo que el más completo a mis necesidades que pueden diferir de las tuyas es PDF::API2 o 3. Tendrás que buscar un modulo que te permita actualizar un PDF ya creado, ya que no todos lo permiten.

En relación a ejemplos y tutoriales he encontrado bastante poco. He tenido que trabajar con la ayuda del CPAN, ejemplos que presenta y una y otra pregunta a este foro.

Saludos.
Lor
Perlero nuevo
Perlero nuevo
 
Mensajes: 187
Registrado: 2005-04-28 05:47 @282

Re: Leer de un PDF

Notapor explorer » 2010-07-05 15:31 @688

Para extraer el texto de un PDF, hay pocos módulos, porque hay algunas herramientas desde la línea de comandos que hacen su trabajo perfectamente, como pdftotext.

He encontrado estas dos distribuciones, que traen herramientas para extraer el texto:

  • CAM::PDF, con un programa llamado getpdftext.pl

  • PDF::OCR, con un programa llamado pdfgetext. Hace uso del pdftotext, pero también es capaz de pasar las imágenes del PDF por un OCR para extraer todo el texto posible.


Hace poco he tenido que extraer el texto de un centenar de páginas, y con una simple llamada de pdftotext lo saqué todo. Luego, un programa en Perl para sacar la información interesante y llevarlo a la hoja de cálculo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Leer de un PDF

Notapor macgregor » 2010-07-06 05:31 @271

Hola,

Mi intención era tratar los PDF directamente porque son de pocas Kb, pero muchos... (+ de 2000).

Haré lo que me dice explorer, ya que en mi caso no supone un problema hacer un paso intermedio, y pasar los PDF a TXT para parsearlos luego y meterlos en una DDBB.


Muchas gracias a los dos por la info.
MACGREGOR [TM]
Avatar de Usuario
macgregor
Perlero nuevo
Perlero nuevo
 
Mensajes: 80
Registrado: 2004-12-09 07:32 @355
Ubicación: españa

Re: Leer de un PDF

Notapor AngelHernandez » 2013-04-17 12:10 @548

¡¡ Gracias, explorer !!
AngelHernandez
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2012-12-11 13:51 @619

Re: Leer de un PDF

Notapor coltx » 2017-02-14 15:20 @681

Hola, explorer. Te quería pedir ayuda en algo.

Mira: yo estoy leyendo desde un txt que pasé con pdftotext. En una parte del archivo txt que se genera tengo lo siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
inicio

parte no.

dirección uno,
dirección dos
telefono

CLAVE001

final
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Entonces de esa sección me interesa obtener el valor CLAVE001. Lo realizo con el siguiente script:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.                                                 ### OBTENGO LA CLAVE
  2.                                                 open (DATA, @ARGV[0]) || die "No pude abrir el archivo @ARGV[0]\n";
  3.  
  4.                                                 my $i=0;
  5.                                                 my $VALOR;
  6.                                        
  7.                                                 while(<DATA>){
  8.  
  9.  
  10.                                                         if (/inicio/ .. /final/)
  11.                                                         {
  12.  
  13.  
  14.                                                                 chomp($_);
  15.  
  16.                                                                 foreach($_)
  17.                                                                 {
  18.  
  19.                                                                         $i++;
  20.  
  21.                                                                         if($i==9)
  22.                                                                         {
  23.  
  24.                                                                                 $VALOR =  $_;
  25.  
  26.                                                                         }
  27.  
  28.                                                                 }
  29.  
  30.                                                         }
  31.  
  32.  
  33.  
  34.                                                 }
  35.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

El tema es que a veces la misma sección, en otro PDF, puede contener menos líneas, entonces el valor para CLAVE no se encontraría en la línea 9 sino por ejemplo en la línea 7. Entonces, ¿cómo podría decirle a mi script que cuando encuentre un valor vacío en la línea 9 tome el valor de '$_' ubicado en la línea 7?

Desde ya, muchas gracias.
coltx
Perlero nuevo
Perlero nuevo
 
Mensajes: 79
Registrado: 2011-09-16 08:01 @376

Re: Leer de un PDF

Notapor explorer » 2017-02-14 18:34 @815

Pones un if() más para que cuando $i sea 7, guardes en una variable aparte el valor de esa línea. Si al llegar a 9, está vacía ($_ tendrá una longitud cero, por ejemplo), entonces con otro if() le asignamos a $VALOR el que habíamos guardado en 7.

Otra forma más fácil sería saber el aspecto de las claves. Quiero decir que si tienen un aspecto muy distinto del resto de textos que hay entre inicio y final, se podría sacar fácilmente con una expresión regular.

Otra opción: como la clave es el último dato, podemos guardar en un array todas las líneas entre inicio y final. En caso de llegar a final, analizamos el array, yendo de atrás para adelante, hasta encontrar la clave.

Otra cosa... el foreach($_) sigue siendo muy gracioso ;)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Leer de un PDF

Notapor coltx » 2017-02-16 07:43 @363

Gracias, explorer.

Es gracioso, pero funciona ¡jajajaja!
coltx
Perlero nuevo
Perlero nuevo
 
Mensajes: 79
Registrado: 2011-09-16 08:01 @376

Re: Leer de un PDF

Notapor explorer » 2017-02-16 08:01 @376

Gracioso... pero no sirve para nada. De hecho, no hace nada más que complicar el código.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 8 invitados

cron