• Publicidad

Problemas con PDF::Table

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Problemas con PDF::Table

Notapor hugo11ab » 2008-07-24 15:24 @683

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:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
($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',
          },
        ],
    );
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4



El error que me manda es el siguiente:

Código: Seleccionar todo
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.
hugo11ab
Perlero nuevo
Perlero nuevo
 
Mensajes: 77
Registrado: 2006-07-22 23:24 @016

Publicidad

Notapor explorer » 2008-07-24 15:54 @704

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:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
 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."
    ],
 ];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
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;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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 Intermedio

¿Quién está conectado?

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