Another important difference with other programs.. they don't print a picture (which is basically what you are doing) unless it is needed, they print as text if possible. This takes much less data (basically a few bytes per character), and is therefore noticably faster.

If you use the method at the start of my example (CurrentX/CurrentY/Print) you can print a piece of text at a particular location on the page (in whatever font you like too). To print the relevant data from your controls you would just need to use that code a few times (in a loop for grids/lists/..), and you can also print pictures (as shown in my example), and draw simple graphics like lines and circles (using Printer.Line / Printer.Circle).