Drawing tree control contents on a printer's TCanvas

I need to develop a function that prints the data contained in a tree
control such as TTreeView or TTreeList (from TMS).

Iterating though the nodes to get the data is trivially easy.  However, what
is not so obvious is how to draw the images and lines used by the tree
control, how to space the lines of text, and where to put the page breaks
when there is more data than can fit on one page.  And then, with TMS's
TTreeList, there is the issue of columns, and nicely handling the column
lines and titles, especially when the text within a column for a given node
may have to wrap to the next line.

Has anyone done this?

NB: Nether the Print function of the TForm the tree control lives on, nor
the controls PaintTo function are adequate since a simple bitmap image of
what is visible on the screen at any one time will, in this application,
leave a lot of data contained by the control unprinted simply because there
will generally be much more data than can be displayed at any one time on
the screen.

Any suggestions would be greatly appreciated.