C#  •  Inherit From PrintDocument

Listing 2. Derive a new class from PrintDocument so you can encapsulate all your printing functionality in a single place, enhancing code reuse.

public class CustomPrintDocument : PrintDocument {
   private StreamReader dataToPrint;
   public CustomPrintDocument(StreamReader data) :       
   base() 
   {
      dataToPrint = data;
   }
   protected override void       
      OnBeginPrint(PrintEventArgs 
      ev) {
      base.OnBeginPrint(ev) ;
   }
   protected override void 
      OnEndPrint(PrintEventArgs ev) 
   {
      base.OnEndPrint(ev);
   }
   protected override void 
      OnQueryPageSettings
      (QueryPageSettingsEventArgs ev) 
   {
      base.OnQueryPageSettings(ev);
   }
   protected override void 
      OnPrintPage(PrintPageEventArgs 
      ev) {
      base.OnPrintPage(ev);
      ev.Graphics.DrawString("this is a test", new 
         Font("Arial", 24), Brushes.Black, 100, 
         100);
      ev.HasMorePages = false;
   }
}