I printed out some publc / private keys as a paper wallet. Is there a way to send EOS to these keys to be given as a gift to someone?
On first glance, you can
transfer a token only to a recipient account.
A key can control multiple accounts, and an account can have multiple keys.
However, the "transfer" can actually be tied to account creation.
There are smart contracts which, given some EOS, a public key and a new account name, create an account with that name, buy RAM for it, and stake CPU and NET.
(One such contract currently is
signupeoseos, but it is not guaranteed to stay as such.)
Perhaps you can have an intermediary contract.
Put some EOS into it.
Make an action which will, given a new account name, create the account and transfer EOS into it.
linkauth the action to the public key.
This way, the user will be able to choose a name for their account, and will be able to sign the action using their private key.
You can do this by creating a new account, staking the resources to it whilst using the transfer option.
Assuming you want to send 10 EOS, and give them 3KB of RAM to play with, the command on cleos is as follows:
cleos system newaccount MY_ACCOUNT_NAME THE_NEW_ACCOUNT_NAME PUBLIC_OWNER_KEY PUBLIC_ACTIVE_KEY --stake-net "5 EOS" --stake-cpu "5 EOS" --buy-ram-kbytes 3 --transfer -p MY_ACCOUNT_NAME
It would cost you a little more than 10 EOS to do this, because you would have to buy the RAM too.
Below is an example of how to do it using the bloks.io online wallet: