PHP, FPDF y MSSQL, reporte con encabezados y pies de pagina. Muy buenas amigos, me he roto la cabeza pensando en como hacer el siguiente proceso y la verdad me he cansado despues de 2 dias infructuosos.
El caso es el siguiente:
Tengo una base de datos con x cedulas, con sus respectivos nombre y apellido, y una informacion adicional por cada cedula; lo que hago es sacar unos listados por funcionario con sus debidos registros. Si los registros de el empleado pasan la hoja el proximo funcionario empieza en una nueva hoja, hasta aca todo va bien, lo que necesito es que si el funcionario se gaste dos hojas aparezcan en el pie de pagina 1/2.. 2/2; obviamente si solo gasta una aparezca 1/1. La vaina es que se imprime un lote de funcionarios y como utilizo la funcion Page(); de FPDF me imprime sobre el total de las paginas impresas (si son 3 funcionarios y cada uno gasta una hoja en vez de aparecerme 1/1 en en las tres paginas me aparece 1/3, 2/3 y 3/3). Aparte a esto si el funcionario ocupa mas de 2 hojas en cada hoja de aparecer el encabezado de la informacion del usuario, y como lo tengo en el momento solo me imprime la informacion en la primera hoja del usuario; adjunto el codigo, cualquier ayuda que me puedan brindar seria eternamente agradecida. Código PHP: <?php
require_once('../../scripts/sesiones/s_con.php');
require_once('../../reporteador/fpdf/fpdf.php');
require_once('../../conexiones/conexion.php');
$cajaini = $_POST['cajaini'];
$cajafin = $_POST['cajafin'];
$sqlconsulta = "SELECT cedula, nombre, apellido, hojavida, caja, carpeta FROM expedientes INNER JOIN ubicacion ON cedula = expediente WHERE caja BETWEEN '$cajaini' AND '$cajafin' AND tomo = '1' ORDER BY caja, carpeta";
$querysql = mssql_query($sqlconsulta);
$cedulabus = mssql_fetch_assoc($querysql);
class PDF extends FPDF{
function Header(){
// Logo
$this->Image('../../imagenes/faclogo.gif',20,10,20,23);
// Arial bold 15
$this->SetFont('Arial','B',11);
// Movernos a la derecha
$this->Cell(100);
// Título
$this->Cell(30,7,'FAC Fuerza Aerea Colombiana',0,1,'C');
$this->Cell(100);
$this->Cell(30,7,'Historia Laboral - Hoja de Control',0,1,'C');
$this->Cell(100);
// Salto de línea
$this->Ln(10);
}
// Pie de página
function Footer(){
$week_days = array("Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado");
$monts = array("","Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
$week_days_now = date("w");
$day_now = date("d");
$mont_now = date("n");
$year_now = date("Y");
$hora = date("H:i:s");
$date = $week_days[$week_days_now].", ".$day_now . " " ." de ".$monts[$mont_now]." de ".$year_now." - ".$hora;
// Posición: a 1,5 cm del final
$this->SetY(-12);
// Arial italic 8
$this->SetFont('Arial','I',6);
// Número de página
$this->Cell(0,10,'Pagina '.$this->PageNo().'/{nb}'.' '.$date,0,0,'C');
}
}
$pdf = new PDF('P','mm',array(216,279));
$pdf->SetMargins(6,10,2);
$pdf->SetAutoPageBreak('auto',10);
$pdf->AliasNbPages();
do{
$pdf->AddPage();
$cedula = $cedulabus['cedula'];
$strConsulta = "SELECT * FROM expedientes WHERE cedula = '$cedula'";
$funcionario = mssql_query($strConsulta);
$fila = mssql_fetch_assoc($funcionario);
$pdf->Cell(100);
$pdf->SetFont('Arial','',10);
$pdf->Cell(30,7,'Funcionario: '.$fila['nombre'].' '.$fila['apellido'].' - Identificacion: '.$cedula,0,1,'C');
$pdf->Cell(230,7,'Hoja: '.$fila['hojavida'],0,0,'C');
// Salto de línea
$pdf->Ln(10);
//Encabezado Tabla
$pdf->SetFont('Arial','B',8);
$pdf->Cell(20,6,'Fecha Doc.',1,0,'C');
$pdf->Cell(150,6,'Tipologia',1,0,'C');
$pdf->Cell(10,6,'F. Ini.',1,0,'C');
$pdf->Cell(10,6,'F. Fin.',1,0,'C');
$pdf->Cell(10,6,'Total',1,0,'C');
$pdf->Ln();
//Cuerpo tabla
$pdf->SetFont('Arial','',7);
$strConsulta = "SELECT registros.fecha_doc, tipologias.nombre AS tipologia, registros.nota, registros.folioinicial, registros.foliofinal, registros.numfolios FROM registros INNER JOIN tipologias ON registros.tipologia = tipologias.idtipologia WHERE registros.empleado = '$cedula' AND folioinicial != '0' ORDER BY idregistro";
$query = mssql_query($strConsulta);
$row = mssql_fetch_assoc($query);
do{
$fecha_doc = $row['fecha_doc'];
if($fecha_doc == NULL){
$fecha_doc = "SF";
}
$tipologia = substr(($row['tipologia']." ".$row['nota']),0,100);
$pdf->Cell(20,4,$fecha_doc,1,0,'C');
$pdf->Cell(150,4,$tipologia,1,0);
$pdf->Cell(10,4,$row['folioinicial'],1,0,'C');
$pdf->Cell(10,4,$row['foliofinal'],1,0,'C');
$pdf->Cell(10,4,$row['numfolios'],1,0,'C');
$pdf->Ln();
}while($row = mssql_fetch_assoc($query));
$pdf->Ln(5);
//Encabezado Doc obligatorios
$pdf->SetFont('Arial','B',8);
$pdf->Cell(200,6,'Documentos obligatorios no encontrados',0,1,'C');
$pdf->Cell(90,6,'Tipologia.',1,0,'C');
$pdf->Cell(105,6,'Observaciones',1,0,'C');
$pdf->Cell(5,6,' ',1,0,'C');
$pdf->Ln();
$pdf->SetFont('Arial','',7);
$strConsulta = "SELECT * FROM expedientes WHERE cedula = '$cedula'";
$funcionario = mssql_query($strConsulta);
$fila = mssql_fetch_assoc($funcionario);
$rango = $fila['rango'];
//Consulta documentos obligatorios
$sqldoc = "SELECT * FROM (SELECT idtipologia, nombre FROM tipologias WHERE $rango = 'SI') AS obligatorios LEFT OUTER JOIN (SELECT tipologia FROM registros WHERE empleado = '$cedula' AND nota != 'SIN FOTOGRAFIA') AS tipoexis ON tipoexis.tipologia = obligatorios.idtipologia WHERE tipoexis.tipologia IS NULL";
$querydoc = mssql_query($sqldoc);
$rowdoc = mssql_fetch_assoc($querydoc);
do{
$pdf->Cell(90,4,$rowdoc['nombre'],1,0,'L');
$pdf->Cell(105,4,' ',1,0,'L');
$pdf->Cell(5,4,' ',1,0,'L');
$pdf->Ln();
}while($rowdoc = mssql_fetch_assoc($querydoc));
}while($cedulabus = mssql_fetch_assoc($querysql));
$pdf->Output();
?> |