Foros del Web » Programando para Internet » PHP »

Salto de pagina reporte fpdf

Estas en el tema de Salto de pagina reporte fpdf en el foro de PHP en Foros del Web. Hola que tal, tengo un problema cuando genero un reporte con fpdf cuando la consulta genera mas de 18 filas al realizar la consula la ...
  #1 (permalink)  
Antiguo 24/03/2017, 00:15
 
Fecha de Ingreso: febrero-2016
Mensajes: 16
Antigüedad: 8 años, 2 meses
Puntos: 0
Pregunta Salto de pagina reporte fpdf

Hola que tal, tengo un problema cuando genero un reporte con fpdf cuando la consulta genera mas de 18 filas al realizar la consula la tabla que contiene los datos se desordena completamente.

El codigo que itulizo es:
Código PHP:
//conexion
$mysqli = new mysqli("127.0.0.1""root""root1234""hogar_infantil");
if (
$mysqli->connect_errno) {
    echo 
"Fallo al conectar a MySQL: (" $mysqli->connect_errno ") " $mysqli->connect_error;

Código PHP:
//consulta
$mes $mysqli->query("SELECT alu_cargo.aul_id, nin_nino.nin_nombren, nin_nino.nin_apellidos, gru_grupo.gru_nombre, alu_cargo.alu_descripcion, alu_cargo.alu_fecha, alu_cargo.alu_valor, login.nombre FROM alu_cargo INNER JOIN nin_nino ON nin_nino.nui = alu_cargo.nui INNER JOIN gru_grupo ON gru_grupo.gru_id = nin_nino.gru_id INNER JOIN login ON login.id_usuario = alu_cargo.id_usuario WHERE alu_cargo.alu_tipo = '".$alutipo."' ORDER BY nin_nino.nin_nombren LIMIT 18");

if ( 
$mes->num_rows == 0){
    echo 
"<script type=\"text/javascript\">alert('No hay movimientos registrados'); window.location='/hogar/index.php';</script>"

Código PHP:
//pdf

$column_idpago '';
$column_nombre '';
$column_grupo '';
$column_descripcion '';
$column_fecha '';
$column_valor '';
$column_usuario '';

while (
$row $mes->fetch_assoc()) {
    
$encontrados $mes->num_rows;

    
$idp $row['aul_id'];
    
$nombre $row['nin_nombren'].' '.$row['nin_apellidos'];
    
$grupo $row['gru_nombre'];
    
$descripcion $row['alu_descripcion'];
    
$fecha $row['alu_fecha'];
    
$valor $row['alu_valor'];
    
$usuario substr($row['nombre'],014);

    
$column_idpago $column_idpago.$idp."\n";
    
$column_nombre $column_nombre.$nombre."\n";
    
$column_grupo $column_grupo.$grupo."\n";
    
$column_descripcion $column_descripcion.$descripcion."\n";
    
$column_fecha $column_fecha.$fecha."\n";
    
$column_valor$column_valor.$valor."\n";
    
$column_usuario $column_usuario.$usuario."\n";

}

class 
PDF extends FPDF
{
function 
Header(){
    
// Logo
    
$this->Image('../../img/footleo.png',10,4,33);
    
// Arial bold 15
    
$this->SetFont('Arial','B',15);
    
// Movernos a la derecha
    
$this->Cell(80);
    
// Título
    
$this->Cell(125,10,'REPORTE DE MOVIMIENTOS HOGAR LEONIA',0,0,'C');
    
// Salto de línea
    
$this->Ln(20);
}
function 
Footer(){
    
// Posición: a 1,5 cm del final
    
$this->SetY(-15);
    
// Arial italic 8
    
$this->SetFont('Arial','',5);
    
// Número de página
    
$this->Image('../../img/foot.png',10,197,18,9);
    
$this->Cell(020,'Page '.$this->PageNo(),0,0,'R');
}
}
// FIN Class PDF
if ($encontrados 0) {
$pdf = new PDF('L''mm''A4');
 
$pdf->AddPage();
$pdf->SetFont('Arial'''9);
$Y_Table_Position 38;

$pdf->SetDrawColor(255255255);

$pdf->SetFillColor(185201254);
$pdf->Rect(1030208'F');
$pdf->SetXY(1030);
$pdf->Cell(208'Id pago''LTR',0'C'01);

$pdf->SetFillColor(185201254);
$pdf->Rect(3030908'F');
$pdf->SetXY(3030);
$pdf->Cell(908'Nombre''LTR',0'C'01);

$pdf->SetFillColor(185201254);
$pdf->Rect(12030358'F');
$pdf->SetXY(12030);
$pdf->Cell(358'Grupo''LTR',0'C'01);

$pdf->SetFillColor(185201254);
$pdf->Rect(15530558'F');
$pdf->SetXY(15530);
$pdf->Cell(558'Descripción''LTR',0'C'01);

$pdf->SetFillColor(185201254);
$pdf->Rect(21030278'F');
$pdf->SetXY(21030);
$pdf->Cell(278'Fecha de pago''LTR',0'C'01);

$pdf->SetFillColor(185201254);
$pdf->Rect(23730258'F');
$pdf->SetXY(23730);
$pdf->Cell(258'Valor''LTR',0'C'01);

$pdf->SetFillColor(185201254);
$pdf->Rect(26230278'F');
$pdf->SetXY(26230);
$pdf->Cell(278'Usuario''LTR',0'C'01);

$pdf->SetY($Y_Table_Position);
$pdf->SetX(10);
$pdf->SetFillColor(232237255);
$pdf->MultiCell(208,$column_idpago,1'R''true');
$pdf->SetY($Y_Table_Position);
$pdf->SetX(30);
$pdf->SetFillColor(232237255);
$pdf->MultiCell(908,$column_nombre,1'L''true');
$pdf->SetY($Y_Table_Position);
$pdf->SetX(120);
$pdf->SetFillColor(232237255);
$pdf->MultiCell(358,$column_grupo,1'L''true');
$pdf->SetY($Y_Table_Position);
$pdf->SetX(155);
$pdf->SetFillColor(232237255);
$pdf->MultiCell(558,$column_descripcion,1'L''true');
$pdf->SetY($Y_Table_Position);
$pdf->SetX(210);
$pdf->SetFillColor(232237255);
$pdf->MultiCell(278,$column_fecha,1'R''true');
$pdf->SetY($Y_Table_Position);
$pdf->SetX(237);
$pdf->SetFillColor(232237255);
$pdf->MultiCell(258,$column_valor,1'R''true');
$pdf->SetY($Y_Table_Position);
$pdf->SetX(262);
$pdf->SetFillColor(232237255);
$pdf->MultiCell(278,$column_usuario,1'L''true');
$pdf->SetY($Y_Table_Position);
$i 0;
$pdf->SetY($Y_Table_Position);
while (
$i $encontrados){
    
$pdf->SetX(10);
    
$pdf->MultiCell(2798,'',1);
    
$i $i +1;
}

$pdf->Output('D''Informe'.$fino.'.pdf'); //Salida al navegador

Asi sale con 18 o menos filas


Asi sale con mas de 18 filas



y asi sucesivamente.

la verdad ya no se me ocurre nada para poder mitigar este problema, cualquier ayuda es bienvenida. Muchas gracias

PD: perdon por las capturas un poco improvisadas, el teclado me empezo a fallar justo a mitad de la noche
  #2 (permalink)  
Antiguo 24/03/2017, 06:31
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: Salto de pagina reporte fpdf

No es que se desordene a partir de la 18, resulta que cuando llega ahí ya no caben mas lineas en la página y se desconfigura a la siguiente página.

Añade al bucle while un contador, cada vez que llegue a 18, añade una pagina al pdf y resetea el contador a uno.

Para añadir la pagina correctamente mira el manual de fpdf
http://www.fpdf.org/es/doc/addpage.htm
  #3 (permalink)  
Antiguo 24/03/2017, 07:59
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: Salto de pagina reporte fpdf

Hola Triby2,

Eso solo le sirve en el caso de que todas las líneas ocupen el mismo espacio, ya que si alguna es más alta, no le cabrán las mismas y el contador a 18 no servirá, hay que tenerlo en cuenta.
  #4 (permalink)  
Antiguo 24/03/2017, 14:46
 
Fecha de Ingreso: febrero-2016
Mensajes: 16
Antigüedad: 8 años, 2 meses
Puntos: 0
Respuesta: Salto de pagina reporte fpdf

Cita:
Iniciado por Triby2 Ver Mensaje
No es que se desordene a partir de la 18, resulta que cuando llega ahí ya no caben mas lineas en la página y se desconfigura a la siguiente página.

Añade al bucle while un contador, cada vez que llegue a 18, añade una pagina al pdf y resetea el contador a uno.

Para añadir la pagina correctamente mira el manual de fpdf
[url]http://www.fpdf.org/es/doc/addpage.htm[/url]
Se me ocurre hacerlo asi:

Tengo el numero de filas totales, este numero dividirlo por 18 para que me de el numero de paginas y en caso de tener una cifra decimal +1 pagina; aunque en codigo no sabria como hacerlo.

PD:Perdon pero llevo tantos dias en esto que ya no se me ocurre nada mas ni como hacerlo.
  #5 (permalink)  
Antiguo 24/03/2017, 14:47
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: Salto de pagina reporte fpdf

Cita:
Iniciado por rbczgz Ver Mensaje
Hola Triby2,

Eso solo le sirve en el caso de que todas las líneas ocupen el mismo espacio, ya que si alguna es más alta, no le cabrán las mismas y el contador a 18 no servirá, hay que tenerlo en cuenta.
Cierto, sí!! Como vi el mismo ancho no pensé en ello. Bueno que valore si es solucion o no, solo él sabe que información tiene en la base de datos.
  #6 (permalink)  
Antiguo 24/03/2017, 15:14
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: Salto de pagina reporte fpdf

Hola thezyrax,

La solución que te propone Triby2 está perfecta siempre y cuando la altura de las filas sea siempre la misma, si ese es el caso, impleméntala y ya está, si no es el caso, proporciona más información para que se te pueda ayudar.
  #7 (permalink)  
Antiguo 25/03/2017, 09:23
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: Salto de pagina reporte fpdf

Lo ideal es que hubiera alguna forma de detectar que se rellenó toda la pagina pero no he podido encontrar nada al respecto, yo tb suelo hacer reportes por el estilo y lo que suelo hacer es dejar imprimir menos lineas aunque no se vea del todo bien pero así me evito el problema de impresión cuando hay alguna linea mas ancha de lo normal.

Cuando me encuentro una linea así y no necesito ceñirme a un orden por registro, lo que hago es que antes de imprimir la linea cuento los caracteres y envio el registro a un array a parte que se imprime al final del documento.

Eso sí, averiguar a partir de cuantos caracteres por linea se asancha la linea, lleva un trabajo, pero depende de lo que sea, merece la pena la inversion de tiempo.
  #8 (permalink)  
Antiguo 27/03/2017, 13:11
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Salto de pagina reporte fpdf

Hace años que no uso fpdf por este tipo de problemas, al final, preferí migrar a DomPDF, que solo necesita recibir un HTML correcto y automáticamente se encarga de lo demás.

Por otra parte, si en tu reporte no vas a tener problemas de que las líneas vengan con diferente altura, la sugerencia de Triby2 te vendrá bien.
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 27/03/2017, 22:05
 
Fecha de Ingreso: febrero-2016
Mensajes: 16
Antigüedad: 8 años, 2 meses
Puntos: 0
Respuesta: Salto de pagina reporte fpdf

Cita:
Iniciado por Triby2 Ver Mensaje
No es que se desordene a partir de la 18, resulta que cuando llega ahí ya no caben mas lineas en la página y se desconfigura a la siguiente página.

Añade al bucle while un contador, cada vez que llegue a 18, añade una pagina al pdf y resetea el contador a uno.

Para añadir la pagina correctamente mira el manual de fpdf
[url]http://www.fpdf.org/es/doc/addpage.htm[/url]
Hola que tal, no pude postear antes porque donde estaba no existe el internet; les comento las filas tienen el mismo ancho y alto, probe el bucle (como lo entendi) de diferentes maneras y si añade las paginas, el resultado fue que si hacia los saltos de pagina, pero dada la extructura del informe contaba cada columna como un numero de registros, o sea el indicador se reseteaba al terminar una columna iniciaba el contador desde 0 en ese punto donde termino.

Alguien me recomendo el uso de dompdf para este tipo de casos, realice pruebas con numeros mayores de 18 sin diseño y todo OK inclueyndo los saltos de paginas.

Posteare el codigo cuando lo tenga listo para cuando alguien tenga el mismo problema que yo

Etiquetas: fpdf, mysql+consulta
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 08:40.