C# 使用Ghostscript.NET进行静默打印

C# 使用Ghostscript.NET进行静默打印,c#,printing,ghostscript.net,C#,Printing,Ghostscript.net,我正在尝试使用GhostScript.NET将pdf发送到打印机,而不出现打印对话框。我的理解是,如果我在-sOutputFile开关中提供打印机的确切名称,则不会提示用户 我的打印机的确切名称是101-XER4250,在调试过程中,处理器收到的名称是:-sOutputFile=%printer%101-XER4250-E。在这方面我缺少什么吗?另外,如果值得一提的话,我使用的是带有PCL6驱动程序的施乐机 下面是我的示例代码: private static void PrintWithGSNE

我正在尝试使用GhostScript.NET将pdf发送到打印机,而不出现打印对话框。我的理解是,如果我在-sOutputFile开关中提供打印机的确切名称,则不会提示用户

我的打印机的确切名称是101-XER4250,在调试过程中,处理器收到的名称是:-sOutputFile=%printer%101-XER4250-E。在这方面我缺少什么吗?另外,如果值得一提的话,我使用的是带有PCL6驱动程序的施乐机

下面是我的示例代码:

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);
        }
    }

是网络打印机吗?我必须用服务器名限定我的打印机名


如果我将打印机设置为printerName,则会弹出对话框。当我将其更改为@\servername\printerName时,对话框消失,并以静默方式打印。

如果希望用户不会注意到正在打印文件,可以添加“否取消”命令
switches.Add-dNoCancel

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