Unfortunately, there's not a very reliable way of doing this. Clever use of the page-break-before and/or page-break-after CSS properties in a print-specific style sheet might be your best bet, but it won't work for people using crappy browsers (though those people would certainly be no worse off).
For example, have PHP spit out your header row after every twenty (just an example) data rows with a class="newpage" or something. Then put a rule like this in your print-specific style sheet:
.newpage {
page-break-before: always
}
and a rule like this in your screen-specific style sheet:
.newpage {
display: none;
}