Tornato a casa ho fatto una prova. Ti posto direttamente la pagina, quardati gli stili, quello che dovrebbe interrompere la pagina č page-break-before. Poi c'č del codice php che mette l'intestazione ogni TOT righe (in questo caso 45). Quel TOT lo devi definire tu una volta che hai stabilito la dimensione del carattere e in generale lo stile della pagina.
Posto qui e non in PHP perchč non ho idea di quanto sia compatibile page-break-before.
Provando con il preview di IE 6 e FF sembra funzionare.
codice:
<html>
<head>
<title>TEST</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" media="print">
.testata{display:block;page-break-before:always}
.primaTestata{display:block}
</style>
<style type="text/css" media="screen">
.testata{display:none;background-color:red}
.primaTestata{display:none;background-color:red}
</style>
</head>
<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr class="primaTestata">
<td>TESTATA</td>
</tr>
<?php
$testata = '';
for ($i=0; $i<100;$i++) {
if ($i%45==0) echo $testata;
echo '<tr><td style="background-color:#CCC">QUERTY QUERTY QUERTY QUERTY QUERTY QUERTY QUERTY </td></tr>';
$testata = '<tr class="testata"><td>TESTATA</td></tr>';
}?>
</table>
</body>
</html>