This is non-trivial. If you're using a script to send the PDF file, you could set a flag somewhere to indicate the script has completed sending the data. But this just means the script is done. It doesn't mean the bytes have been sent anywyhere. They could be stuck in the webserver's outbound queue waiting for a free slot to actually get sent out on the wire.
Best solution I've seen for this is to pop up a new window to start the download, and put the usual "please wait, I'm thinking..." animation/text in it. To keep the user from clicking the original donwload button multiple times (and popping up multiple download windows), you could put in a bit of javascript to disable the button for a short period.