I am also looking for a good way to "print" a leaflet map - either by making a PDF or png. I have found two almost-solutions, neither one of which gets me 100% where I need to be - but depending on your requirements, they might work for you. I'll share what I'm working on - and I would be grateful for any advice on what else to try because I am still a novice.
I am on a shared server and had to alter some of the settings in my php.ini to get it to work for me - I think because the variables being passed are so long? But once I did that, it worked like a charm - really nice! It relies, though, on html2canvas and I am having trouble with both Internet Explorer as well as with including my geojson layer. If I render the geojson layer using the Leaflet setting "L_PREFER_CANVAS = true;" then it gets saved to the PNG, but that screws up some other click events I am using.
I have been able to install PhantomJS and it does a great job taking screenshots of my leaflet map. However, the way it works is that you tell it the url of the webpage you want to get a screenshot of and then it "loads" the webpage itself. So it doesn't know what the map actually looks like client-side after the user has clicked and panned and zoomed. Leaflet-hash creates "permalinks" to the correct map center and map zoom level giving urls that have some of the client-side changes "built in", and PhantomJS understands those permalink urls and takes the correct screenshot. However, I don't know how to take into account other click events - for example, my geojson layer allows people to select and highlight individual features as well as change the underlying variable used to symbolize the features. I don't know how to pass those to PhantomJS.
Please, please, please - if anyone has suggestions for either solution, I need all the help I can get!
Thanks so much,
Eleanor