I think there are some ATMs that print either private keys or QR codes of private keys ... maybe I'd try those once, but as others have said would not recommend them.
You can make your own paper wallets and fund them yourself. Besides, those other options would cost you more, or the rates they use would be much higher than you would like otherwise.
If your purpose is to give to friends, make nice paper wallets.
If your purpose is for your own personal cold storage, make your own paper wallet or make your own offline wallet using any of the recommended wallets; I personally use Bitcoin Core QT and Electrum. You can write down and back up the seeds or extended private keys.
You can pre-generate a few dozen addresses.
I would also test the first one or two with a little bit of some coin. Send to it. Redeem or sweep. Take note of how wallets work and if change addresses are used. When you are comfortable with the process, then you make brand new wallets.
In the past, there are simple wallet generators, some even do vanity type addresses (you can just do the first 1 or 2 letters to get the equivalent of any other address.) and I saw some other paper wallet generators that allow you to use dice or random files (take pictures) or any number of physical objects as sources of entropy.
I'd get the most modern implementation and use native segwit too. Legacy segwit is there for compatibility reasons, it wouldn't hurt to use them, but future fees could cost slightly more when sweeping or importing them. Not that much hopefully.
There is no reason to use legacy or uncompressed addresses anymore.