If I didn't make a mistake this should work for all items (assuming they don't have a special display setting:
you run a function in a loop from
execute as @e[type=item,nbt={OnGround:1b,Thrower:{}}] at @s run function ...
and in the function you do this:
summon armor_stand ~ ~-1.6 ~-0.5 {ArmorItems:[{id:stone},{},{},{}],NoGravity:1,Pose:{Head:[90.0f,0.0f,0.0f]}}
data modify entity @e[type=armor_stand,distance=..2,sort=nearest,limit=1] ArmorItems[3] set from entity @s Item
kill @s
(summons armorstand, copies item data to head slot, kills item)
you should be able to do a similar thing to get the item back (summon dummy item, copy ArmorItems[3] data to Item data of the dummy item, kill armorstand)
Edit: changed distance=..1 to distance=..2