This snippet of code from one of my applications may be helpful to you. You need to specify, in the DrawString method, the X and Y coordinates for each line to be written. Note, how in the "While" loop, I keep use the same X coordinate for the left margin and increment the Y coordinate (yPos) for each line by the height of the font that I am writing out.
intLineCount = 0
ptCursor.Offset(leftMargin, topMargin)
intTitleStart = leftMargin + (((rightMargin - leftMargin) \ 2) - _
(e.Graphics.MeasureString(strTitle, fntTitle).ToSize.Width \ 2))
e.Graphics.DrawString(strTitle, fntTitle, brushTitle, intTitleStart, ptCursor.Y)
intEndOfSection = ptCursor.Y + 5 + e.Graphics.MeasureString(strTitle, fntTitle).ToSize.Height
e.Graphics.DrawLine(New Pen(brushTitle), leftMargin, intEndOfSection, rightMargin, intEndOfSection)
ptCursor.Y = intEndOfSection + 10
e.Graphics.DrawString(strColumnHeader, fntData, brushText, ptCursor.X, ptCursor.Y)
intEndOfSection = ptCursor.Y + e.Graphics.MeasureString(strColumnHeader, fntData).ToSize.Height
e.Graphics.DrawLine(New Pen(brushText), leftMargin, intEndOfSection, rightMargin, intEndOfSection)
ptCursor.X = leftMargin
ptCursor.Y = intEndOfSection + 10
While intLineCount < linesPerPage
strLine = GetNextDatabaseRow()
If strLine Is Nothing Then
bOK = False
Exit While
End If
yPos = ptCursor.Y + (intLineCount * fntData.GetHeight(e.Graphics))
e.Graphics.DrawString(strLine, fntData, Brushes.Black, leftMargin, yPos, New StringFormat)
intLineCount += 1
End While