Regarding multiple column printing of "pretty" text:
I modified the C# .DLL that Martin Müller wrote that extends the RichTextBox control and adds a print renderer that allows it to print "rich text", and added parameters to the function call so that it accepts a Left and Right edge for the render area, so you could have as many columns as you like and have them render and linewrap properly. In some ways it's actually simpler to use than the default print renderer (MeasureString + DrawString) although there's a bit of cleanup necessary when the print job finishes. Attached is the DLL project itself and follows is an example.