В целом, существует два основных способа печати в .NET. Исходный API печати, который включает повторный вызов метода и вы устанавливаете аргументы правильно (HasMorePages), чтобы указать, есть ли еще страницы для печати. Это почти все или ничего не использовать этот API.
Второй включает использование WPF и в отличие от предыдущего API. Они имеют различный уровень сложности - от использования метода printvisual на элементах форм WPF до уровня контроля в обычном API печати.
Третья альтернатива, особенно для WinForms, заключается в использовании библиотеки совместимости принтеров из пакета VB Power Pack 3.0 от здесь Восстанавливает простоту старых методов Visual Basic. Несмотря на то, что он ориентирован на Visual BASIC.NET, на него можно ссылаться с любого языка .NET.
Другая альтернатива - использовать что-то вроде Crystal Reports для печати.