Autor Tema: Ayuda con fpdf  (Leído 12884 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado negro1985

  • Novato
  • *
  • Mensajes: 46
  • Puntuación: 0
    • Ver Perfil
Ayuda con fpdf
« : 09 de junio de 2010, 02:21:48 pm »
tengo el siguiente codigo

Código: [Seleccionar]
<?php
define
(&#39;FPDF_FONTPATH&#39;,&#39;font/&#39;);
include("fpdf.php");
include(
"comunes.php");
include(
"../clases/Cargar_clases.php");

$libros=new Libro();
$rs=$libros->consultar("WHERE libros.id_autor=autores.id_autor AND libros.id_libros_seccion=libros_seccion.id_libros_seccion AND libros.id_editorial=editoriales.id_editorial ORDER BY libros.id_libro");

$rse2=$libros->suma_libros("ORDER BY id_libro");
$row2=$rse2->fetch_assoc();
$total_libros=$row2["total"];

$pdf=new PDF(&#39;L&#39;,&#39;mm&#39;,array(210,370));
$pdf->Open();
$pdf->AddPage();
$pdf->SetMargins(2.5,100);
$pdf->SetFont(&#39;Arial&#39;,&#39;B&#39;,16);
$pdf->SetFillColor(220220220);
$pdf->Text(140,20,"LISTA GENERAL DE LIBROS");
$pdf->SetFont(&#39;Arial&#39;,&#39;&#39;,8);
$pdf->MultiCell(0,5,"",0,&#39;&#39;,L);
$pdf->Ln(20);
$header=array(&#39;CLAVE&#39;,&#39;TITULO&#39;,&#39;AUTOR&#39;,&#39;EDITORIAL&#39;,&#39;SECCION&#39;,&#39;AÑO EDICION&#39;,&#39;FECHA ALTA&#39;,&#39;ORIGINAL&#39;,&#39;COPIA&#39;,&#39;TOTAL&#39;);
$pdf->SetLineWidth(.2);
$pdf->SetFont(&#39;Arial&#39;,&#39;B&#39;,8);
$w=array(23,95,60,45,45,20,20,15,15,12);
for(
$i=0;$i<count($header);$i++){
$pdf->Cell($w[$i],5,$header[$i],1,0,&#39;C&#39;,1);
}
$pdf->Ln();
while(
$row=$rs->fetch_assoc()){
    
$clave=$row["id_libro"];
    
$nombre=$row["nombre"];
    
$autor=$row["nombre_autor"]." ".$row["apellidos"];
    
$editorial=$row["editorial"];
    
$seccion=$row["seccion"];
    
$ano_edicion=$row["ano_edicion"];
    
$fecha_alta=$row["fecha_alta"];
    
$original=$row["original"];
    
$copia=$row["copia"];
    
$rst=$libros->suma_libros("WHERE id_libro=&#39;$clave&#39;");
    
$row1=$rst->fetch_assoc();
    
$suma=$row1["total"];
$pdf->Cell($w[0],5,$clave,1,&#39;LR&#39;,&#39;C&#39;);
$pdf->Cell($w[1],5,$nombre,1,&#39;LR&#39;,&#39;C&#39;);//Aqui esta el problema
$pdf->Cell($w[2],5,$autor,1,&#39;LR&#39;,&#39;C&#39;);
$pdf->Cell($w[3],5,$editorial,1,&#39;LR&#39;,&#39;C&#39;);
$pdf->Cell($w[4],5,$seccion,1,&#39;LR&#39;,&#39;C&#39;);
$pdf->Cell($w[5],5,$ano_edicion,1,&#39;LR&#39;,&#39;C&#39;);
$pdf->Cell($w[6],5,$fecha_alta,1,&#39;LR&#39;,&#39;C&#39;);
$pdf->Cell($w[7],5,$original,1,&#39;LR&#39;,&#39;C&#39;);
$pdf->Cell($w[8],5,$copia,1,&#39;LR&#39;,&#39;C&#39;);
$pdf->Cell($w[9],5,$suma,1,&#39;LR&#39;,&#39;C&#39;);
$pdf->Ln();
}
$pdf->Cell(338,5,"TOTAL DE LIBROS",1,0,"R");
$pdf->Cell(12,5,$total_libros,1,0,"C",0);
$pdf->Output("Lista_General_De_Libros_Biblioteca.pdf","D");
?>


Me trae los datos de la base de datos correctamente, pero el problema esta esta linea que es donde se imprime el nombre del libro
$pdf->Cell($w[1],5,$nombre,1,'LR','C');

me imprime todos los nombre de libros, pero el datalle es que si el nombre del libro es muy largo me encima todo y se pasa a la otra celda que es la del autor, ya probe haciendo esto

$pdf->MultiCell($w[1],5,$nombre,1,'LR','C');

Pero me descompone el documento, alguien sabe como hacer para que el resultado de la consulta se ajuste al ancho de la celda o si sobrepasa el ancho de la celda de un salto o haga mas grande la celda, ayuda por favor

Desconectado dels

  • Usuario Dedicado
  • ***
  • Mensajes: 123
  • Puntuación: 2
  • Sexo: Masculino
  • Desarrollador de software
    • Ver Perfil
    • Dels
Re: Ayuda con fpdf
« Respuesta #1 : 09 de junio de 2010, 08:12:53 pm »
Cell(float w [, float h [, string txt [, mixed  border [, int ln [, string align [, boolean fill [, mixed link]]]]]]])

Descripción
Imprime una celda (de área rectangular) bordes opcionales, color de fondo y secuencia de carácteres La esquina superior izquierda de la celda corresponde a la posición actual. El texto puede ser alineado o centrado. Despues de invocar, la posición actual se desplaza a la derecha o la siguietne línea. Es posible poner una referencia en el texto.
Si esta el salto de página automático habilitado y la celda esta por fuera del límite, es realizado un salto de página antes de producir la salida.
Parámetros

w
    Ancho de Celda. Si es 0, la celda se extiende hasta la márgen derecha.
h
    Alto de celda. Valor por defecto: 0.
txt
    cadena a ser impresa. Valor por defecto: cadena vacia.
border
    Indica si los bordes deben se dibujados alrededor de la celda. El valor puede ser un número:

        * 0: sin borde
        * 1: marco

    o una cadena conteniedo alguno o todos de los sigueitne s carácteres (en cualquier orden):

        * L: izquierda
        * T: superior
        * R: derecha
        * B: inferior

    Valor por defecto: 0.
ln
    Indica donde la posición actula debería ir antes de invocar. Los valores posibles son:

        * 0: a la derecha
        * 1: al comienzo de la siguiente línea
        * 2: debajo

    Poner 1 es equivalente a poner 0 y llamar justo despues Ln(). Valor por defecto: 0.
align
    Permite centrar o alinear el texto. Los posibles valores son:

        * L o una cadena vacia: alineación izquierda (valor por defecto)
        * C: centro
        * R: alineación derecha

fill
    Indica si elfondo de la celda debe ser dibujada (true) o transparente (false). Valor por defecto: false.
link
    URL o identificador retornado por AddLink().


Extraido: http://www.fpdf.org/
Desarrollador de Software

Móvil: 00584123967062
E-Mail: kevin@dels.co.ve
Gnu/Linux User: #529556
Ubuntu User number: #33551
User identica.ca: k3v1nd315
Wikipedia ID: 1821960
Wikimedia-ve ID: KDels
flickr: http://www.flickr.com/photos/k3v1nd315/
Twitter: http://twitter.com/#!/k3v1ndels
IRC freenode

Desconectado negro1985

  • Novato
  • *
  • Mensajes: 46
  • Puntuación: 0
    • Ver Perfil
Re: Ayuda con fpdf
« Respuesta #2 : 09 de junio de 2010, 10:44:21 pm »
Cell(float w [, float h [, string txt [, mixed  border [, int ln [, string align [, boolean fill [, mixed link]]]]]]])

Descripción
Imprime una celda (de área rectangular) bordes opcionales, color de fondo y secuencia de carácteres La esquina superior izquierda de la celda corresponde a la posición actual. El texto puede ser alineado o centrado. Despues de invocar, la posición actual se desplaza a la derecha o la siguietne línea. Es posible poner una referencia en el texto.
Si esta el salto de página automático habilitado y la celda esta por fuera del límite, es realizado un salto de página antes de producir la salida.
Parámetros

w
    Ancho de Celda. Si es 0, la celda se extiende hasta la márgen derecha.
h
    Alto de celda. Valor por defecto: 0.
txt
    cadena a ser impresa. Valor por defecto: cadena vacia.
border
    Indica si los bordes deben se dibujados alrededor de la celda. El valor puede ser un número:

        * 0: sin borde
        * 1: marco

    o una cadena conteniedo alguno o todos de los sigueitne s carácteres (en cualquier orden):

        * L: izquierda
        * T: superior
        * R: derecha
        * B: inferior

    Valor por defecto: 0.
ln
    Indica donde la posición actula debería ir antes de invocar. Los valores posibles son:

        * 0: a la derecha
        * 1: al comienzo de la siguiente línea
        * 2: debajo

    Poner 1 es equivalente a poner 0 y llamar justo despues Ln(). Valor por defecto: 0.
align
    Permite centrar o alinear el texto. Los posibles valores son:

        * L o una cadena vacia: alineación izquierda (valor por defecto)
        * C: centro
        * R: alineación derecha

fill
    Indica si elfondo de la celda debe ser dibujada (true) o transparente (false). Valor por defecto: false.
link
    URL o identificador retornado por AddLink().


Extraido: http://www.fpdf.org/

Si, esto ya lo se, lo que no se es como hacer para no se me encime el texto

Desconectado negro1985

  • Novato
  • *
  • Mensajes: 46
  • Puntuación: 0
    • Ver Perfil
Re: Ayuda con fpdf
« Respuesta #3 : 11 de junio de 2010, 08:34:01 am »
Ya resolvi el problema con el siguiente script, espero que a alguien le sirva de ayuda

comunes.php
Código: [Seleccionar]
<?
class PDF extends FPDF
{
//Cabecera de pgina
function Header()
{

    //Logo
    $this->Image('../imagenes/logo.png',320,5,30);
}

//Pie de pgina
function Footer()
{
  $fecha=date("d-m-Y");
    $this->SetFont('Arial','',6);
$this->SetY(-17);
$this->Cell(0,10,'Escuela Miguel Hidalgo',0,0,'C');
$this->SetY(-14);
$this->Cell(0,10,html_entity_decode('Cerrada de Juárez N° 327. Colonia Centro, Macuspana, Tabasco, México.'.$fecha),0,0,'C');
$this->SetY(-11);
$this->Cell(0,10,html_entity_decode('(936) 362-04-65'),0,0,'C');
$this->SetY(-8);
    $this->Cell(0,10,'Pagina '.$this->PageNo().'',0,0,'C');
}
/** Aqui **/
var $widths;
var $aligns;

function SetWidths($w)
{
    //Set the array of column widths
    $this->widths=$w;
}

function SetAligns($a)
{
    //Set the array of column alignments
    $this->aligns=$a;
}

function Row($data)
{
    //Calculate the height of the row
    $nb=0;
    for($i=0;$i<count($data);$i++)
        $nb=max($nb,$this->NbLines($this->widths[$i],$data[$i]));
    $h=5*$nb;
    //Issue a page break first if needed
    $this->CheckPageBreak($h);
    //Draw the cells of the row
    for($i=0;$i<count($data);$i++)
    {
        $w=$this->widths[$i];
        $a=isset($this->aligns[$i]) ? $this->aligns[$i] : 'J';
        //Save the current position
        $x=$this->GetX();
        $y=$this->GetY();
        //Draw the border
        $this->Rect($x,$y,$w,$h);
        //Print the text
        $this->MultiCell($w,5,$data[$i],0,$a);
        //Put the position to the right of the cell
        $this->SetXY($x+$w,$y);
    }
    //Go to the next line
    $this->Ln($h);
}

function CheckPageBreak($h)
{
    //If the height h would cause an overflow, add a new page immediately
    if($this->GetY()+$h>$this->PageBreakTrigger)
        $this->AddPage($this->CurOrientation);
}

function NbLines($w,$txt)
{
    //Computes the number of lines a MultiCell of width w will take
    $cw=&$this->CurrentFont['cw'];
    if($w==0)
        $w=$this->w-$this->rMargin-$this->x;
    $wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
    $s=str_replace("\r",'',$txt);
    $nb=strlen($s);
    if($nb>0 and $s[$nb-1]=="\n")
        $nb--;
    $sep=-1;
    $i=0;
    $j=0;
    $l=0;
    $nl=1;
    while($i<$nb)
    {
        $c=$s[$i];
        if($c=="\n")
        {
            $i++;
            $sep=-1;
            $j=$i;
            $l=0;
            $nl++;
            continue;
        }
        if($c==' ')
            $sep=$i;
        $l+=$cw[$c];
        if($l>$wmax)
        {
            if($sep==-1)
            {
                if($i==$j)
                    $i++;
            }
            else
                $i=$sep+1;
            $sep=-1;
            $j=$i;
            $l=0;
            $nl++;
        }
        else
            $i++;
    }
    return $nl;
}
}
?>

ejemplo.php
Código: [Seleccionar]
<?php
define
(&#39;FPDF_FONTPATH&#39;,&#39;font/&#39;);
include("fpdf.php");
include(
"comunes.php");
include(
"../clases/Cargar_clases.php");

$libros=new Libro();
$rs=$libros->consultar("WHERE libros.id_autor=autores.id_autor AND libros.id_libros_seccion=libros_seccion.id_libros_seccion AND libros.id_editorial=editoriales.id_editorial ORDER BY libros.id_libro");

$rse2=$libros->suma_libros("ORDER BY id_libro");
$row2=$rse2->fetch_assoc();
$total_libros=$row2["total"];


$pdf=new PDF(&#39;L&#39;,&#39;mm&#39;,&#39;Legal&#39;);
$pdf->AddPage();
$pdf->SetMargins(2.5,40);
$pdf->SetFont(&#39;Arial&#39;,&#39;B&#39;,16);
$pdf->SetFillColor(220220220);
$pdf->Text(140,20,"LISTA GENERAL DE LIBROS");
$pdf->SetFont(&#39;Arial&#39;,&#39;&#39;,8);
$pdf->Ln(30);
$pdf->SetLineWidth(.2);
$pdf->SetFont(&#39;Arial&#39;,&#39;B&#39;,8);
$pdf->cell(23,5,&#39;CLAVE&#39;,1,0,C);
$pdf->cell(95,5,&#39;TITULO&#39;,1,0,C);
$pdf->cell(60,5,&#39;AUTOR&#39;,1,0,C);
$pdf->cell(45,5,&#39;EDITORIAL&#39;,1,0,C);
$pdf->cell(45,5,&#39;SECCIÓN&#39;,1,0,C);
$pdf->cell(20,5,&#39;EDICIÓN&#39;,1,0,C);
$pdf->cell(20,5,&#39;ALTA&#39;,1,0,C);
$pdf->cell(15,5,&#39;ORIGINAL&#39;,1,0,C);
$pdf->cell(15,5,&#39;COPIA&#39;,1,0,C);
$pdf->cell(12,5,&#39;TOTAL&#39;,1,0,C);
$pdf->Ln();
$pdf->SetWidths(array(23,95,60,45,45,20,20,15,15,12));
while(
$row1=$rs->fetch_assoc()){
    
$clave=$row1["id_libro"];
    
$nombre=$row1["nombre"];
    
$autor=$row1["nombre_autor"]." ".$row1["apellidos"];
    
$editorial=$row1["editorial"];
    
$seccion=$row1["seccion"];
    
$ano_edicion=$row1["ano_edicion"];
    
$fecha_alta=$row1["fecha_alta"];
    
$original=$row1["original"];
    
$copia=$row1["copia"];
    
$rst=$libros->suma_libros("WHERE id_libro=&#39;$clave&#39;");
    
$row2=$rst->fetch_assoc();
    
$suma=$row2["total"];
    
$pdf->Row(array($clave,$nombre,$autor,$editorial,$seccion,$ano_edicion,$fecha_alta,$original,$copia,$suma));
}
$pdf->Cell(338,5,"TOTAL DE LIBROS",1,0,"R");
$pdf->Cell(12,5,$total_libros,1,0,"C",0);
$pdf->Output("Lista_General_De_Libros_Biblioteca.pdf","D");
?>


Desconectado lugo_chile

  • Novato
  • *
  • Mensajes: 1
  • Puntuación: 0
    • Ver Perfil
Re:Ayuda con fpdf
« Respuesta #4 : 31 de octubre de 2013, 06:01:27 am »
Gracias...

He efectuado algunas modificaciones para imprimir un encabezado de tabla en cada pagina.... dejo el codigo

en pdf.php (librería)
Agergue dos variables y dos nuevas funciones
Código: [Seleccionar]
var $titulos;
var $filas;

function SetTitulos($t)
{
    //Set titulos de columnas
     $this->titulos=$t;
   $this->filas = 0;
}

function Caption_colums()
{
        // encabezado columna
        $this->SetFont('Arial', 'B', 9);
        for($i=0; $i< count($this->titulos); $i++)
 
         $this->Cell($this->widths[$i],7,utf8_decode($this->titulos[$i]),'TBLR',0,'C','1');
          $this->Ln();


}
En la función row() agregue al incio:
...
Código: [Seleccionar]
// para poner encabezados
    if ($this->filas==0)
        $this->Caption_colums();
    $this->filas++;

...

eb la función CheckPageBreak() agregue una linea (y las llaves)
Código: [Seleccionar]
function ($h)
{
    //If the height h would cause an overflow, add a new page immediately
    if($this->GetY()+$h>$this->PageBreakTrigger) {
        $this->AddPage($this->CurOrientation);
    $this->Caption_colums();


     }
}

Espero a alguen le sirva...