Página 1 de 1

Generar imagen a partir de tabla html en script.pl

NotaPublicado: 2015-01-15 10:23 @474
por sarriaga
!Hola, compañeros Perleros!, espero que puedan ayudarme. Verán, soy nueva en este lenguaje y no sé muy bien cómo crear una imagen de una tabla html o dibujarla.

Les explico más detalladamente: tengo un script donde realizo una consulta a la base de datos y muestro el resultado en una tabla. Ahora, lo que quiero es guardar como imagen la pura tabla o lo que es el resultado. ¿Hay manera de hacer esto? Ya he buscado cómo hacerlo y no he tenido éxito. :(

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $fetch = $dbh->selectall_arrayref("SELECT * FROM ALUMNOS");
  2.  
  3. if(defined $fetch && scalar(@$fetch) == 1){
  4.  foreach(@$fetch){
  5.   push(@$tabla, $_)
  6.  }
  7. }
  8.  
  9. unshift(@$tabla, $q->td({-bgcolor=>'#A9E2F3'},
  10. ['<b>No. ALUMNO</b>','<b>NOMBRE<b>','<b>CALIFICACION</b>'])) if defined $tabla;
  11.  
  12. print $q->start_html("Lista de Alumnos");
  13.   print $q->start_form();
  14.   print $q->h3({-align=>'CENTER'},'Lista de Alumnos'.'<br>');
  15.   print 'Inicio DD-MM-AAAA: '.$q->textfield(-name=>'init').'&nbsp;&nbsp;&nbsp;&nbsp;';
  16.   print 'Fin DD-MM-AAAA: '.$q->textfield(-name=>'end').'&nbsp;&nbsp;&nbsp;&nbsp;';
  17.   print 'Filtro: '.$q->popup_menu(-name=>'filtro', -values=>['','Alumnos', 'Profesores'], -default=>$filtro, -override=>1).'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
  18. print $q->table({-border=>1, -cellpadding=>2, -cellspacing=>0}, $q->Tr($tabla)) if defined $tabla && @$tabla;
  19.   print $q->end_form();
  20.   print $q->end_html();
  21.  
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


La tabla que se generó es la que quiero guardar como imagen o dibujarla, el resto no.

Espero que puedan orientarme.

¡Saludos!

Re: Generar imagen a partir de tabla html en script.pl

NotaPublicado: 2015-01-15 11:43 @530
por explorer
Hola.

Dibujarla, ¿en qué formato?

Re: Generar imagen a partir de tabla html en script.pl

NotaPublicado: 2015-01-15 12:41 @570
por sarriaga
Puede ser .jpg o .png

Re: Generar imagen a partir de tabla html en script.pl

NotaPublicado: 2015-01-16 07:25 @351
por explorer
Necesitarás la ayuda de alguna biblioteca externa o la participación de un navegador web (casi siempre, el Firefox).

En Windows existe Win32::CaptureIE, pero he visto por ahí decir que ya no funciona (es de hace 11 años). Más moderno es Win32::Capture, pero captura pantalla o una ventana o un rectángulo de la pantalla.

Luego está el módulo Wight, que sirve para comunicarse con la biblioteca phantomjs, y a partir de ahí poder sacar un pantallazo de la página:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use strict;
  2. use Wight;
  3.  
  4. my $wight = Wight->new;
  5.  
  6. $wight->visit('http://www.google.com/');
  7. $wight->render('google.png');
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Otra posibilidad es usar la API de Selenium para manejar la misma biblioteca PhantomJS. Hay módulos para ello, naturalmente: En este artículo se puede ver un ejemplo de consulta a una web y cómo guardar en gráfico una captura del resultado.

Otra opción es, que si la tabla y los contenidos de las celdas son sencillos, puedes modificar el código para que en vez de generar HTML, cree el gráfico de forma directa, en PNG. Eso se puede hacer con módulos como GD, y otros (este es el método que yo siempre he usado).

Otra opción es la de manejar el Firefox directamente para que sea él el que haga la transformación de HTML a PNG. Con módulos como WWW::Mechanize::Firefox se puede hacer. En WWW::Mechanize::Firefox::Cookbook tienes algunos ejemplos, como este:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.   my $png = $mech->content_as_png();
  2.   open my $fh, '>', 'page.png'
  3.       or die "Couldn't save to 'page.png': $!";
  4.   binmode $fh;
  5.   print {$fh} $png;
  6.   close $fh;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Este módulo sí que permite renderizar un solo elemento de la página. Si, por ejemplo, la tabla tiene un campo id, con un nombre, se puede renderizar solo esa tabla indicando su nombre:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.   my $shiny = $mech->selector('#tabla', single => 1);
  2.   my $png = $mech->element_as_png($shiny);
  3.   open my $fh, '>', 'page.png'
  4.       or die "Couldn't save to 'page.png': $!";
  5.   binmode $fh;
  6.   print {$fh} $png;
  7.   close $fh;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Mechanize también permite manejar la biblioteca PhantomJS, con la ayuda de WWW::Mechanize::PhantomJS.

Por estos hilos hay más respuestas sobre este problema. Usa el sistema de búsqueda.

Re: Generar imagen a partir de tabla html en script.pl

NotaPublicado: 2015-01-16 12:26 @560
por sarriaga
explorer escribiste:Otra opción es, que si la tabla y los contenidos de las celdas son sencillos, puedes modificar el código para que en vez de generar HTML, cree el gráfico de forma directa, en PNG. Eso se puede hacer con módulos como GD, y otros (este es el método que yo siempre he usado).


Me parece que esto es justo lo que necesito :wink: