Here is what I do. The important stuff is highlighted.
You need to work out how much space you have on the page:
Dim lpp As Integer = CInt(Math.Floor((e.MarginBounds.Bottom - y) / 18))
and ensure that you track where you are in the collection:
_curRow and pageLine
Dim pageLine As Integer = 1
Dim lpp As Integer = CInt(Math.Floor((e.MarginBounds.Bottom - y) / 18))
For i As Integer = _curRow To _linesReq
Do While (pageLine <= lpp) And (_curRow <= _linesReq)
y += h
_curRow += 1
pageLine += 1
Loop
If (pageLine >= lpp) And (_curRow <= _linesReq) Then
page += 1
pageLine = 1
e.HasMorePages = True
Exit For
Else
e.HasMorePages = False
Exit For
End If
Next