OriginalGriff
Если вы используете e.HasMorePages, то вы - правильно - используете PrintDocument.
e.HasMorePages сообщает системе, что после того, как вы вернетесь из обработчика событий PrintPage, она должна закончить передачу страницы на выход, а затем вызвать новое событие PrintPage, чтобы вы могли собрать следующий набор информации вместе.
Судя по звуку, вы устанавливаете HasMorePages в цикле и ожидаете, что закончите страницу out put - этого не происходит: вам нужно выйти из обработчика событий, чтобы завершить страницу.
Попробуйте этот очень простой пример:
Private pageNo As Integer = 1
Private Sub pd_PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
ev.Graphics.DrawString(pageNo.ToString(), Font, Brushes.Black, 100, 100)
pageNo = pageNo + 1
ev.HasMorePages = pageNo <= 3
End Sub