Das liegt daran, dass du (wie in deinem vorherigen Quelltext) immer eine neue Seite aufmachst, egal ob noch Daten folgen.
Die Höhe kann man eigentlich recht gut berechnen, ich habe mir seinerzeit eine Routine geschrieben, die das übernommen hat. So habe ich eine recht komplexe Druckfunktion realisiert.