【问题标题】:How to do print document from C# without any UI如何在没有任何 UI 的情况下从 C# 打印文档
【发布时间】:2017-08-28 15:23:21
【问题描述】:

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

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

感谢任何形式的帮助。

【问题讨论】:

  • 澄清一下 - 您真的想在物理打印机上打印文档吗?
  • 您的目标是什么:Winforms、WPF、ASP..? 总是正确标记您的问题! - 另外:我们在谈论什么样的文件? Word、pdf、文本???
  • @TobiasTheel 我想使用打印机打印文档。根据您提供的链接,如果我使用 ProcessStartInfo 打印文档,它将显示我不想显示的 UI。
  • @Taw 我想要通用解决方案。适用于 word、pdf、文本、图像、xml、ppt、xls 等文档。

标签: c# printing processstartinfo


【解决方案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();
   }
}

【讨论】:

    猜你喜欢
    • 2010-11-18
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    相关资源
    最近更新 更多