Printing Text File in C#

In this article, you will learn how to print a text file in C#. The attached project lets you browse and open a text file and print it to a printer.

In this article, you will learn how to print a text file in C#.

Step 1

Create a Windows Forms application using Visual Studio and add two Button and one TextBox controls to the Form. Change names for the Buttons to Browse and Print respectively.

Step 2

Write the following code on the Browse button click event handler.

  1. OpenFileDialog fdlg = new OpenFileDialog();  
  2. fdlg.Title = "C# Corner Open File Dialog";  
  3. fdlg.InitialDirectory = @"C:\ ";  
  4. fdlg.Filter =  
  5. "Text files (*.txt | .txt | All files (*.*) | *.*";  
  6. fdlg.FilterIndex = 2;  
  7. fdlg.RestoreDirectory = true;  
  8. if (fdlg.ShowDialog() == DialogResult.OK)  
  9. {  
  10.     textBox1.Text = fdlg.FileName;  
  11. } 

Step 3

Before we write code on the Print button click event handler, define two private variables on class level.

  1. private Font verdana10Font;  
  2. private StreamReader reader;  

Now import these two namespaces.

  1. using System.IO;  
  2. using System.Drawing.Printing; 

Write the following code on Print button click event handler. 

  1. string filename=textBox1.Text.ToString();  
  2. //Create a StreamReader object  
  3. reader = new StreamReader (filename);  
  4. //Create a Verdana font with size 10  
  5. verdana10Font = new Font ("Verdana", 10);  
  6. //Create a PrintDocument object  
  7. PrintDocument pd = new PrintDocument();  
  8. //Add PrintPage event handler  
  9. pd.PrintPage += new PrintPageEventHandler(this.PrintTextFileHandler);  
  10. //Call Print Method  
  11. pd.Print();  
  12. //Close the reader  
  13. if (reader != null)  
  14.     reader.Close();

And add the following method to the class.

  1. private void PrintTextFileHandler (object sender, PrintPageEventArgs ppeArgs)  
  2. {  
  3.     //Get the Graphics object  
  4.     Graphics g = ppeArgs.Graphics;  
  5.     float linesPerPage = 0;  
  6.     float yPos = 0;  
  7.     int count = 0;  
  8.     //Read margins from PrintPageEventArgs  
  9.     float leftMargin = ppeArgs.MarginBounds.Left;  
  10.     float topMargin = ppeArgs.MarginBounds.Top;  
  11.     string line = null;  
  12.     //Calculate the lines per page on the basis of the height of the page and the height of the font  
  13.     linesPerPage = ppeArgs.MarginBounds.Height/verdana10Font.GetHeight (g);  
  14.     //Now read lines one by one, using StreamReader  
  15.     while (count<linesPerPage && (( line = reader.ReadLine ()) != null))  
  16.     {  
  17.         //Calculate the starting position  
  18.         yPos = topMargin + (count * verdana10Font.GetHeight (g));  
  19.         //Draw text  
  20.         g.DrawString (line, verdana10Font, Brushes.Black,leftMargin, yPos, new StringFormat());  
  21.         //Move to next line  
  22.         count++;  
  23.     }  
  24.     //If PrintPageEventArgs has more pages to print  
  25.     if (line != null)  
  26.     {  
  27.         ppeArgs.HasMorePages = true;  
  28.     }  
  29.     else  
  30.     {  
  31.         ppeArgs.HasMorePages = false;  
  32.     }  
  33. } 

Step 4

Now build and run the application. Click Browse button and open a text file and click Print button to print the file contents.
 
Print Text File in C#