Jue Jul 24, 2008 2:24 pm
|
 |
hugo11ab
Perlero Nuevo

|
Registrado: 22 Jul 2006
Mensajes: 31
|
|
| Problemas con PDF::Table |
|
|
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. |
|
|
|

Jue Jul 24, 2008 2:54 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4142
Ubicación: Valladolid, España
|
|
|
|
|
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; |
|
|

Powered by phpBB © 2001, 2005 phpBB Group
|