如何在没有任何UI的情况下从C#打印文档

时间:2017-08-28 15:23:22

标签: c# printing processstartinfo

我想从C#打印文档,但不想要任何UI。应使用C#静默打印文档。

我已使用ProcessStartInfo尝试了Verb = "Print",但显示了用于打印文档的UI。

感谢任何形式的帮助。

1 个答案:

答案 0 :(得分:1)

也许PrintDocument.Print Method可能会有所帮助:)

请注意,我认为这不适用于.net Core,因为System.Drawing命名空间尚未完全移植。 (Source - GitHub corefx Issue #20325

这也不适用于UWP应用程序,因为它们使用不同的API来打印内容。

我没有打印机和我一起测试,但这里是代码示例 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();
   }
}