How to do print document from C# without any UI

4k views Asked by At

I want to print a document from C# but don't want any UI for it. The document should be printed silently using C#.

I have tried ProcessStartInfo with Verb = "Print" but is shows UI to print the document.

Any kind of help is appreciated.

1

There are 1 answers

0
Pierre Fouilloux On

Perhaps the PrintDocument.Print Method might help :)

Note that I don't think this will work with .net Core as the System.Drawing namespace has not been fully ported over. (Source - GitHub corefx Issue #20325

Nor will this work in a UWP app, because they use a different API for printing things.

I don't have a printer with me to test this, but here's the code example from msdn

using System;
using System.IO;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;

public class PrintingExample 
{
   private Font printFont;
   private StreamReader streamToPrint;
   static string filePath;


   public PrintingExample() 
   {
       Printing();
   }

   // The PrintPage event is raised for each page to be printed.
   private void pd_PrintPage(object sender, PrintPageEventArgs ev) 
   {
       float linesPerPage = 0;
       float yPos =  0;
       int count = 0;
       float leftMargin = ev.MarginBounds.Left;
       float topMargin = ev.MarginBounds.Top;
       String line=null;

       // Calculate the number of lines per page.
       linesPerPage = ev.MarginBounds.Height  / 
          printFont.GetHeight(ev.Graphics) ;

       // Iterate over the file, printing each line.
       while (count < linesPerPage && 
          ((line=streamToPrint.ReadLine()) != null)) 
       {
          yPos = topMargin + (count * printFont.GetHeight(ev.Graphics));
          ev.Graphics.DrawString (line, printFont, Brushes.Black, 
             leftMargin, yPos, new StringFormat());
          count++;
       }

       // If more lines exist, print another page.
       if (line != null) 
          ev.HasMorePages = true;
       else 
          ev.HasMorePages = false;
   }

   // Print the file.
   public void Printing()
   {
       try 
       {
          streamToPrint = new StreamReader (filePath);
          try 
          {
             printFont = new Font("Arial", 10);
             PrintDocument pd = new PrintDocument(); 
             pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
             // Print the document.
             pd.Print();
          } 
          finally 
          {
             streamToPrint.Close() ;
          }
      } 
      catch(Exception ex) 
      { 
          MessageBox.Show(ex.Message);
      }
   }

   // This is the main entry point for the application.
   public static void Main(string[] args) 
   {
      string sampleName = Environment.GetCommandLineArgs()[0];
      if(args.Length != 1)
      {
         Console.WriteLine("Usage: " + sampleName +" <file path>");
         return;
      }
      filePath = args[0];
      new PrintingExample();
   }
}