Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Problemas con PDF::Table

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Jue Jul 24, 2008 2:24 pm
hugo11ab
Perlero Nuevo
Perlero Nuevo
Registrado: 22 Jul 2006
Mensajes: 31
Problemas con PDF::Table Responder citando

Que tal, nuevamente molestándolos, estoy haciendo un documento pdf en el cual necesito incrustar una tabla, para esto estoy utilizando el modulo PDF::Table. El problema es que no sé cuántos renglones va a tener mi tabla debido a que eso lo va indicar la consulta a la base de datos que estoy haciendo para poder llenar la tabla. Lo que estoy intentando hacer es formar el arreglo concatenando la información que debe llevar:

Perl:
($rs,$fetch) = record(db=>"correspondencia",tabla=>"correspondencia",condicion=>"where fech_registro='$FORM{fecha_reporte}' and turnar_a='$FORM{personal}' and status='P' order by 1",campos=>"cve_turno,no_oficio_o_referencia,remitente,asunto",visible=>"no");
$i=1;
while($fetch->()) {
   if ($i == 1) {
      $some_data ="[". "'TURNO','No. OFICIO','REMITENTE','ASUNTO'],". "[" . "$$rs{cve_turno}" .',' . "$$rs{no_oficio_o_referencia}" . ',' . "$$rs{remitente}" . ',' . "$$rs{asun
to}"
."],"; #pinto el encabezado y el segundo renglon
       $i++;
   } else {
       $some_data= $some_data . "[" . "$$rs{cve_turno}" . "," . "$$rs{no_oficio_o_referencia}" . "," . "$$rs{remitente}" . "," . "$$rs{asunto}" . "],";
    }
 }#fin del while
 
$some_data = [ $some_data ];

 my $pdftable = new PDF::Table;
 
$pdftable->table(
          # required params
          $pdf,
          $page,
          $some_data,
          x => 30, #posicion iniacial esquina superior izquierda.
          -w => 536, #ancho de la tabla
          start_y => 500, #posicion inicial "y" en la primera pagina
          next_y  => 700, #posicion inicail "y" en cada nueva pagina
          -start_h => 400, #altura de la pagina en la primera pagina
          next_h  => 500#altaura de la tabla en cada nueva pagina
          # some optional params
          -padding => 3,
          header_props          => {
             bg_color   => "#F5F5F5",
             font_color => "#000000",
             font       => $pdf->corefont("Arial-Bold", -encoding => "latin1"),
             font_size  => 10,
          },
          column_props => [
           {},# This is an empty hash so the next one will hold the properties for the second row from left to right.
           {
            min_w => 50,       # Minimum column width.
            font => $pdf->corefont("Times", -encoding => "latin1"),
            font_size => 10,
            font_color=> 'blue',
            background_color => '#FFFF00',
          },
        ],
    );



El error que me manda es el siguiente:

Código:
Can't use string ("['TURNO','No. OFICIO','REMITENTE") as an ARRAY ref while "strict refs" in use at /usr/lib/perl5/site_perl/5.8.8/PDF/Table.pm line 337.


Con respecto al mismo módulo, ¿cómo puedo controlar el salto de hoja y el ancho de las columnas?

Espero y me puedan ayudar. Saludos.
Mensaje Jue Jul 24, 2008 2:54 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4142
Ubicación: Valladolid, España
Responder citando

Estás construyendo mal la variable $some_data. La estás tratando como un string y no como una estructura de un array de arrays. El error te lo dice claramente: el módulo está esperando una referencia a un array de arrays, y lo que encuentra dentro del array es un string.

En la página de manual del módulo muestra este ejemplo:

Perl:
my $some_data = [
    [
        "1 Lorem ipsum dolor",
        "Donec odio neque, faucibus vel",
        "consequat quis, tincidunt vel, felis."
    ],
    [
        "Nulla euismod sem eget neque.",
        "Donec odio neque",
        "Sed eu velit."
    ],
 ];
Es decir: es un array que contiene dos elementos, y cada uno de ellos es otro array, que cada uno contiene 3 elementos (un string cada uno).

La construcción de tu $some_data está mal.

Prueba con lo siguiente (no probado):
Perl:
my $cabeza;
my @some_data;

while( $fetch->() ) {

    # Pinto el encabezado, una sola vez
    push @some_data, [ 'TURNO', 'No. OFICIO', 'REMITENTE', 'ASUNTO' ]
        if ! $cabeza++;

    # Pinto el renglón
    push @some_data, [ $rs->{cve_turno}, $rs->{no_oficio_o_referencia}, $rs->{remitente}, $rs->{asunto} ];
}

my $some_data = \@some_data;
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group