Foros del Web » Programando para Internet » PHP »

Tamaño de columnas en fpdf conectando a mysql

Estas en el tema de Tamaño de columnas en fpdf conectando a mysql en el foro de PHP en Foros del Web. Estoy intentando reducir el tamaño de algunos campos (como dni por ejemplo) pero no lo consigo de ninguna manera, ya que se adapta todo de ...
  #1 (permalink)  
Antiguo 03/05/2010, 02:58
 
Fecha de Ingreso: mayo-2010
Mensajes: 6
Antigüedad: 13 años, 11 meses
Puntos: 1
Tamaño de columnas en fpdf conectando a mysql

Estoy intentando reducir el tamaño de algunos campos (como dni por ejemplo) pero no lo consigo de ninguna manera, ya que se adapta todo de manera automática. Aprovecho el presente ejemplo con el php en el que hago la conexion para crear el pdf.

Código:
<?php
require('/var/www/fpdf/fpdf.php');

class PDF_MySQL_Table extends FPDF
{
var $ProcessingTable=false;
var $aCols=array();
var $TableX;
var $HeaderColor;
var $RowColors;
var $ColorIndex;

function Header()
{
	//Print the table header if necessary
	if($this->ProcessingTable)
		$this->TableHeader();
}

function TableHeader()
{
	$this->SetFont('Arial','B',12);
	$this->SetX($this->TableX);
	$fill=!empty($this->HeaderColor);
	if($fill)
		$this->SetFillColor($this->HeaderColor[0],$this->HeaderColor[1],$this->HeaderColor[2]);
	foreach($this->aCols as $col)
		$this->Cell($col['w'],6,$col['c'],1,0,'C',$fill);
	$this->Ln();
}

function Row($data)
{
	$this->SetX($this->TableX);
	$ci=$this->ColorIndex;
	$fill=!empty($this->RowColors[$ci]);
	if($fill)
		$this->SetFillColor($this->RowColors[$ci][0],$this->RowColors[$ci][1],$this->RowColors[$ci][2]);
	foreach($this->aCols as $col)
		$this->Cell($col['w'],5,$data[$col['f']],1,0,$col['a'],$fill);
	$this->Ln();
	$this->ColorIndex=1-$ci;
}

function CalcWidths($width,$align)
{
	//Compute the widths of the columns
	$TableWidth=0;
	foreach($this->aCols as $i=>$col)
	{
		$w=$col['w'];
		if($w==-1)
			$w=$width/count($this->aCols);
		elseif(substr($w,-1)=='%')
			$w=$w/100*$width;
		$this->aCols[$i]['w']=$w;
		$TableWidth+=$w;
	}
	//Compute the abscissa of the table
	if($align=='C')
		$this->TableX=max(($this->w-$TableWidth)/2,0);
	elseif($align=='R')
		$this->TableX=max($this->w-$this->rMargin-$TableWidth,0);
	else
		$this->TableX=$this->lMargin;
}

function AddCol($field=-1,$width=-1,$caption='',$align='L')
{
	//Add a column to the table
	if($field==-1)
		$field=count($this->aCols);
	$this->aCols[]=array('f'=>$field,'c'=>$caption,'w'=>$width,'a'=>$align);
}

function Table($query,$prop=array())
{
	//Issue query
	$res=mysql_query($query) or die('Error: '.mysql_error()."<BR>Query: $query");
	//Add all columns if none was specified
	if(count($this->aCols)==0)
	{
		$nb=mysql_num_fields($res);
		for($i=0;$i<$nb;$i++)
			$this->AddCol();
	}
	//Retrieve column names when not specified
	foreach($this->aCols as $i=>$col)
	{
		if($col['c']=='')
		{
			if(is_string($col['f']))
				$this->aCols[$i]['c']=ucfirst($col['f']);
			else
				$this->aCols[$i]['c']=ucfirst(mysql_field_name($res,$col['f']));
		}
	}
	//Handle properties
	if(!isset($prop['width']))
		$prop['width']=0;
	if($prop['width']==0)
		$prop['width']=$this->w-$this->lMargin-$this->rMargin;
	if(!isset($prop['align']))
		$prop['align']='C';
	if(!isset($prop['padding']))
		$prop['padding']=$this->cMargin;
	$cMargin=$this->cMargin;
	$this->cMargin=$prop['padding'];
	if(!isset($prop['HeaderColor']))
		$prop['HeaderColor']=array();
	$this->HeaderColor=$prop['HeaderColor'];
	if(!isset($prop['color1']))
		$prop['color1']=array();
	if(!isset($prop['color2']))
		$prop['color2']=array();
	$this->RowColors=array($prop['color1'],$prop['color2']);
	//Compute column widths
	$this->CalcWidths($prop['width'],$prop['align']);
	//Print header
	$this->TableHeader();
	//Print rows
	$this->SetFont('Arial','',11);
	$this->ColorIndex=0;
	$this->ProcessingTable=true;
	while($row=mysql_fetch_array($res))
		$this->Row($row);
	$this->ProcessingTable=false;
	$this->cMargin=$cMargin;
	$this->aCols=array();
}
}
?>

Y en este es donde creo el pdf

Código PHP:
<?php
require('mysql_table.php');

class 
PDF extends PDF_MySQL_Table
{
function 
Header()
{
    
//Title
    
$this->SetFont('Arial','',18);
    
$this->Cell(0,6,'Lista Personal',0,1,'C');
    
$this->Ln(10);
    
//Ensure table header is output
    
parent::Header();
}
}

//Connect to database
mysql_connect('localhost','root','pass');
mysql_select_db('eulen');
//$result = "Select LEFT(nombre, 15) as Nombre, dni, email, telefono from personal order by id";

$pdf=new PDF();
$pdf->AddPage();
$pdf->Table("Select LEFT(nombre, 15) as Nombre, dni, email, telefono from personal order by id");
$pdf->Output();
?>
Es la unica forma en la que he conseguido conectar a la base de datos (puesto que añadiendo columnas una por una no he encontrado forma). Ahora el problema, es que necesito reducir el tamaño de algunos campos. Como veis he usado LEFT en la consulta para que no salga todo el nombre, aunque esto es solo un apaño temporall hasta que consiga poner un tamaño determinado a cada campo en la tabla.

Como se ve en el codigo, tengo en la carpeta la libreria FPDF para poder crear dichos documentos.

Última edición por MidouCloud; 03/05/2010 a las 03:11
  #2 (permalink)  
Antiguo 25/05/2010, 07:10
 
Fecha de Ingreso: agosto-2009
Ubicación: Caracas
Mensajes: 7
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Tamaño de columnas en fpdf conectando a mysql

MidouCloud, solucionaste lo de las columnas?.. si no es asi, contactame para darte mi idea
  #3 (permalink)  
Antiguo 06/03/2011, 19:30
 
Fecha de Ingreso: marzo-2011
Ubicación: D.F.
Mensajes: 1
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Tamaño de columnas en fpdf conectando a mysql

Hola que tal!!

Miren soy nuevo en el foro, y estoy muy agradecido ya que de aqui eh tenido muchos aportes y ahora me toca dar algo de mi.

Les dejo este pequeño ejemplo en el cual solucione el problema de hacer un reporte en fpdf, dividiendolo en 5 columnas justificando el texto en cada una de ellas.

$i=0;
$j=35;
$num = 1;

$sql_guia_instruccion="select dif_hora_programa, tema_guia, objetivo_especifico_guia, actividades_guia, apoyo_didactico_guia
from guia_instruccion
where clave_programa='$clave_programa'";
$result_guia_instruccion = mysql_query($sql_guia_instruccion)
or die("La siguiente consulta contiene algún error:<br>nSQL: <b>$sql_guia_instruccion</b>");
while ($row =mysql_fetch_array($result_guia_instruccion)) {

$aux=$i*$j;
$dif_hora_programa=$row['dif_hora_programa'];
$tema_guia=$row['tema_guia'];
$objetivo_especifico_guia=$row['objetivo_especifico_guia'];
$actividades_guia=$row['actividades_guia'];
$apoyo_didactico_guia=$row['apoyo_didactico_guia'];

$i++;
$pdf->SetFont('Arial','',12);
$pdf->SetXy(15,$aux);

$pdf->Cell(10);
$pdf->MultiCell(20,5,$dif_hora_programa,0,'L',0);

$pdf->SetXy(15,$aux);
$pdf->Cell(35);
$pdf->MultiCell(60,5,$tema_guia,0,'L',0);

$pdf->SetXy(100,$aux);
$pdf->Cell(10);
$pdf->MultiCell(60,5,$objetivo_especifico_guia,0,'L',0) ;

$pdf->SetXy(140,$aux);
$pdf->Cell(35);
$pdf->MultiCell(60,5,$actividades_guia,0,'L',0);

$pdf->SetXy(180,$aux);
$pdf->Cell(55);
$pdf->MultiCell(60,5,$apoyo_didactico_guia,0,'L',0);
$pdf->Ln();

if ($num == 3){

$pdf->AddPage();
$i=0;
$j=35;
}

$num++;

}


Cabe mencionar que en esa condicion, yo puse que se muestren 3 en cada hoja, si quieren pueden quitarlo.

Ojala les sirva a uno por ahi!

Saludos desde Mexico!

Última edición por miguel_21df; 24/03/2011 a las 19:13 Razón: corregir ortografia

Etiquetas: fpdf, mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:23.