2017-02-24 99 views
0

我试图将没有使用GhostScript.NET的打印对话框发送到打印机。我的理解是,如果我在-sOutputFile开关中提供打印机的确切名称,则不会提示用户。使用Ghostscript.NET进行无提示打印

我的打印机的确切名称是101-XER4250,在调试中,处理器的名称接收的是:“-sOutputFile =%打印机%101-XER4250-E”。有什么我错过了这个?另外如果值得一提的是,我正在使用PCL6驱动程序的Xerox机器。

这里是我的示例代码:

private static void PrintWithGSNET(byte[] pdfFormBytes, string printer, int copies) 
    { 
     try 
     { 
      var fileName = @"c:\temp\" + $"{DateTime.Now:yyyyMMddhhmmssffff} - {Security.CurrentUser}"; 
      using (var file = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite)) 
      { 
       file.Write(pdfFormBytes, 0, pdfFormBytes.Length); 
       using (GhostscriptProcessor processor = new GhostscriptProcessor(GhostscriptVersionInfo.GetLastInstalledVersion(), true)) 
       { 
        List<string> switches = new List<string>(); 
        switches.Add("-empty"); 
        switches.Add("-dPrinted"); 
        switches.Add("-dBATCH"); 
        switches.Add("-dPDFFitPage"); 
        switches.Add("-dNOPAUSE"); 
        switches.Add("-dNOSAFER"); 
        switches.Add("-dNOPROMPT"); 
        switches.Add("-dQUIET"); 
        switches.Add("-sDEVICE=mswinpr2"); 
        switches.Add("-sOutputFile=%printer%" + printer.Trim()); 
        switches.Add("-dNumCopies=1"); 


        switches.Add(fileName); 
        processor.StartProcessing(switches.ToArray(), null); 
       } 
       file.Close(); 
      } 
      File.Delete(fileName); 
     } 
     catch (Exception ex) 
     { 
      throw new InvalidOperationException($"Error printing. [Printer: {printer.Trim()}] [Copies: {copies}", ex); 
     } 
    } 
+0

您说的打印机名称是“101-XER4250”,但-sOutputFile是“打印机% %101-XER4250-E“,很明显这不是同一个名字(假设你没有在那里输入错字)。如果mswinpr2设备找不到该设备,则它将打开打印对话框,否则它不知道将输出发送到哪里.... – KenS

回答

-1

它是一个网络打印机?我必须使用服务器名称来限定我的打印机名称。

如果我将打印机设置为“printerName”,弹出对话框。当我将其更改为@“\ servername \ printerName”时,对话框消失了,并且它静默地打印。

0

如果你希望用户应该不会注意到该文件正在打印您可以添加没有取消命令 switches.Add("-dNoCancel");

相关问题