Como Dar Formato Reporte de Calificaciones

Hace muchos meses estoy tratado hacer un reporte de calificaciones por estudiantes con fpdf desde PHP . Tengo una bd en MYSQL con todas las tablas que corresponden a la siguiente CONSULTA

$query="SELECT n.Id_Asig1,AVG(Nota) AS Nota, e.Nombres, e.ApellidoP, e.ApellidoM, e.Tipo_Doc, e.Num_Doc, e.Fecha_Nac, e.Genero,e.Foto, g.Grado, c.Curso, p.Periodo,f.Nombres_Prof, f.ApellidoP_Prof, a.Area, l.Logro FROM nota AS n
INNER JOIN estudiante AS e ON n.Id_Est1 =e.Id_Est
INNER JOIN Grado AS g ON e.Id_Grado1= g.Id_Grado
INNER JOIN Curso AS c ON e.Id_Curso1 = c.Id_Curso
INNER JOIN periodo AS p ON n.Id_Per1 = p.Id_Per
INNER JOIN profesor AS f ON n.Id_Prof1 = f.Id_Prof
INNER JOIN area AS a ON n.Id_Area1 = a.Id_Area
INNER JOIN logro AS l ON n.Id_Logro1 =l.Id_Logro
GROUP BY n.Id_Asig1";

Lo que no logro es dar formato al reporte para que me imprima cada uno de los estudiantes en el orden que corresponda y además poder sacar las notas y desempeños de los mismos según el área

Ya en algún momento me pasaron este ejemplo que agradezco muchísimo.

Pero lo hacen con datos aleatorios y/o supuestos y no logro amoldarlo a lo que en realidad necesito. Que es algo más o menos como lo presento en la imagen.

!--?php require('fpdf.php'); //Cargamos el archivo con la clase FPDF class PDF extends FPDF { // Cabecera de página function Header() { // Logo $this->Image('img/logo.png',10,8,33); //Imagen corporativa
    // Arial bold 15
    $this->SetFont('Arial','B',15); //La "B" indica Negrita (Bold), otras opciones disponibles, por ejemplo subrayado sería U
    // Movernos a la derecha
    $this->Cell(80);
    // Título
    $This->Cell(30,10,'Reporte de calificaciones', 0,0,'C'); //La "C" indica centrado, la "R" indicaría alineado a la derecha
    // Salto de línea
    $this->Ln(20); //El número indica la distancia con la siguiente línea
}
// Pie de página
function Footer()
{
    // Posición: a 1,5 cm del final
    $this->SetY(-15);
    // Arial italic 8
    $this->SetFont('Arial','I',8);
    // Observaciones
    $this->Cell(0,10,'Observaciones: ',0,0);
    // Número de página
    $this->Cell(0,10,'Pag.: '.$this->PageNo().'/{nb}',0,0,'R'); 
}
}
/*Datos aleatorios para el ejemplo*/
$nombres=array('Manuel','Nuria','Angela','Andrea','Ramiro','Victor','Miguel','Vanessa');
$apellidos=array('Molina','Aguirre','Cobos','Santos','Gurruchaga','Pino','Navarro','Medina');
$grados=array('1','2','3');
$cursos=array('A','B','C','D','E','F');
$habilidades=array('Hace esto muy bien','Hace aquello ni fu ni fa','Evoluciona en la materia','Sabe mucho de esto','Tiene una buena actitud','Tiene buenas aptitudes');
$asignaturas=array('Matemáticas','Lengua española','Geometría','Religión');
// Creación del objeto de la clase heredada
$pdf = new PDF();
$pdf->AliasNbPages();
for($i=1;$i<=10;$i++){ //Este bucle para reproducir 10 alumnos aleatorios no es útil con los datos reales que provienen de la consulta SQL $alumno=$nombres[rand(0, 7)].' '.$apellidos[rand(0, 7)].' '.$apellidos[rand(0, 7)]; //Genero aleatoriamente nombre y apellidos $grado=$grados[rand(0, 2)]; // Genero aleatoriamente el grado del alumno $curso=$cursos[rand(0, 5)]; // Genero aleatoriamente el curso del alumno $pdf->AddPage(); // En cada interacción del bucle genero una nueva página en el pdf
	$pdf->SetFont('Times','',12); // Indico la fuente para la siguiente línea
        $pdf->Cell(4,2,'Alumno: '.$alumno); // Se imprimen los datos de cada alumno
	$pdf->SetX(100); //Distancia horizontal hasta siguiente bloque de texto
	$pdf->Cell(4,2,'Grado: '.$grado.utf8_decode('º')); // Imprimo grado
	$pdf->SetX(140); 
	$pdf->Cell(4,2,'Curso: '.$curso,0,1); // Imprimo curso
	$pdf->Ln(7); // Salto de línea, puedo cambiar la distancia con la siguiente con el número pasado como parámetro entre paréntesis
	$pdf->Cell(0,2,utf8_decode('Num. Identificación').': '.$i,0,0); //Imprimo otro dato
	$pdf->Ln(12);
	$pdf->Line(12,47,200,47); // Dibujo línea horizontal. Puntos absolutos, los dos primeros definen punto de inicio, los dos siguientes punto final.
	$pdf->SetFont('Times','B',12);
	$pdf->Cell(0,2,'Materias-Asignaturas:',0,0);
	for($a=0;$a<4;$a++){ // Bucle para incluir las asignaturas $pdf->SetFont('Times','B',16);
		$pdf->Ln(12);
		$nota=rand(10,100)/10; // Obtengo nota aleatoria
		$pdf->Cell(0,2,utf8_decode($asignaturas[$a]).' ('.rand(0,100).'%) - Nota: '.$nota,0,0); // Imprimo asignatura, porcentaje y nota.
		$pdf->Ln(12);
		$pdf->SetFont('Times','B',12);
		$pdf->Cell(0,2,'Logros evaluados:',0,0);
		$pdf->Ln(7);
		$pdf->SetFont('Times','',12);
		shuffle($habilidades); // desordeno los logros del array de ejemplo
		$pdf->Cell(0,2,'  - '.$habilidades[0],0,0); // Imprimo los logros obtenidas
		$pdf->Ln(7);
		$pdf->Cell(0,2,'  - '.$habilidades[1],0,0);
		$pdf->Ln(7);
		$pdf->Cell(0,2,'  - '.$habilidades[2],0,0);
		$pdf->Ln(7);
		$pdf->Cell(0,2,'_________________________________________________________________________',0,0,'C');
	}
}
$pdf->Output();
?-->

Añade tu respuesta

Haz clic para o