Some of the features I think it must include are:
Couple feature additions:
Note: There are many reasons to need to print code... One very good one is escrow.
I use PrettyCode.Print for .NET. It does everything on your list, and more. (I use it for printing code excerpts for copyright registration paperwork, which is similar to your escrow case.)
It is a little slow to open a really big solution, but not unbearably so, and the output quality is excellent.