Recently I needed a printable map. There are ways to exploit the Google Maps service (share -> embed -> modify width/height -> use browser screenshot addon). But with OpenStreetMap, such exploits are not needed.
OpenStreetMap constructs its (Slippy) Maps from tiles — small 256×256 pixel images. It is possible to calculate the tile coordinates and to download the correct tiles for a given region (cf. https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames). After collecting all needed tiles, a large map image can be constructed by stitching them together. And again, this is nothing new (cf. https://github.com/sjev/mapCreator).
I took it a bit further. Using mapCreator as an inspiration I wrote my own map creation Python3 tool set which also assists in drawing meridians and parallels onto map images.
Enter OSMImageMap: https://github.com/FrankAbelbeck/OSMImageMap