My code fitting routine is too complicated to explain quickly (naturally it's not terribly well documented, but it will do horizontal or vertical text), but the basics of it are below. It uses the getNumLines I posted here to calculate the required number of lines, and then iterates, shrinking the font if necessary. Then to print this, you use similar code that is in the getNumLines to loop through each word and print it.

'Based on the width allowed, get the number of lines
numberOfLines = getNumLines(prn, printText, fitWidth)
'If numberOfLines*lineheight is greater than the allowed height, we need to start shrinking the font
initFontSize = prn.FontSize
delta = 0
Do While numberOfLines * prn.TextHeight("A") >= prnHeight And delta < initFontSize
delta = delta + 1
prn.FontSize = initFontSize - delta
Loop
'We also need to check the width, in case a single word is greater than the available width
'Set the initial X just in case
For i = LBound(splitText) To UBound(splitText)
Do While prn.TextWidth(Trim(splitText(i) & splitString)) >= prnWidth And delta < initFontSize
delta = delta + 1
prn.FontSize = initFontSize - delta
Loop
Next i