The substantial differences are in terms of restrictions to postscript to reduce it to a declarative language rather than a full fledged programming language.

A PDF is a collection of isolated, restricted postscript programs (content streams) and the data required for rendering stuffed into one file. The overarching format is a subset of COS. But for all intents and purposes you can imagine this as a tarball containing postscript and other data.

The transformations required to go from PDF to postscript amount to:

1. Include some boilerplate

2. Pull out the content streams (postscript bits) ignoring the pdf-specific extensions

3. Search and replace the names of two procedures

4. Pull out the data required for rendering, optionally decompressing it if your postscript output doesn't support the particular compression in use

5. Concatenate all the data in the right order (on the basis of some metadata in the format)

6. It's now just normal postscript

Fun fact, to top it off: The COS format which is the structure behind a PDF, itself looks a lot like postscript, that's because apparently it's originally based on postscript [0] (although it has deviated).

[0]: https://archive.is/xBd9y (search for postscript)