praticamente, quando carichi la pagina, nel buffer del browser ci vengono messi gli header per la pagina html...
quindi se non svuoti il buffer prima di mandare i nuovi headers, il file che scarichi avrà prima gli header html, e poi il contenuto del file.
Per vedere cosa succede scarica il file senza ob_end_clean, ed aprilo con notepad o con un altro semplice editor di testo, e vedrai che il file, invece di iniziare con pdfqualcosa inizierà con una parte di html...