secondo me succede perchè hai definito i vari css con media="all" e quindi quello per la stampa

In genere mi sono sempre trovato bene dividendo i css in "screen" e "print" poichè i posizionamenti relativi/assoluti , i float e le tabelle non hanno una resa corretta in fase di stampa.

quindi nel css per la stampa definisci come prima cosa

* { float: none; position: static;}

e nel caso tu abbia delle table dai height: auto;