Как распечатать PDF на сетевом принтере по умолчанию с помощью команды оболочки GhostScript (gswin32c.exe)

Я хотел бы распечатать PDF-файл (ы) на сетевом принтере Windows через GhostScript.
(Я не хочу использовать Adobe Reader)

Я прочитал gswin32c.exe, который может выполнить эту работу.
Я экспериментировал со многими командами и не мог найти способ заставить gs печатать PDF на моем (по умолчанию) сетевом диске.

Мне не нужен точечный сетевой принтер – по умолчанию можно использовать по умолчанию. Но если такого варианта нет, я с удовольствием передаю имя принтера. (Я попытался с параметром -SDevice = “\ server_IP \ printer_name”, но это тоже не сработало …)

Команда, работающая под Windows cmd:

gswin32c -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dNumCopies=1 -sDEVICE=ljet4 -sOutputFile="\\spool\\\Server_Name\Printer_name" "C:\test.pdf" 

Метод, созданный базой выше – не работает и исключает. (Код ошибки = 1)

  ///  /// Prints the PDF. ///  /// The ghost script path. Eg "C:\Program Files\gs\gs8.71\bin\gswin32c.exe" /// The number of copies. /// Name of the printer. Eg \\server_name\printer_name /// Name of the PDF file. ///  public bool PrintPDF (string ghostScriptPath, int numberOfCopies, string printerName, string pdfFileName) { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.Arguments = " -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dNumCopies=" + Convert.ToString(numberOfCopies) + " -sDEVICE=ljet4 -sOutputFile=\"\\\\spool\\" + printerName + "\" \"" + pdfFileName + "\""; startInfo.FileName = ghostScriptPath; startInfo.UseShellExecute = false; Process process = Process.Start(startInfo); return process.ExitCode == 0; } 

Любая идея, как заставить его работать под C #?

Я, наконец, сделал его работающим и легким для отладки.
Мой окончательный код метода для заинтересованных:

  ///  /// Prints the PDF. ///  /// The ghost script path. Eg "C:\Program Files\gs\gs8.71\bin\gswin32c.exe" /// The number of copies. /// Name of the printer. Eg \\server_name\printer_name /// Name of the PDF file. ///  public bool PrintPDF (string ghostScriptPath, int numberOfCopies, string printerName, string pdfFileName) { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.Arguments = " -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dNumCopies=" + Convert.ToString(numberOfCopies) + " -sDEVICE=ljet4 -sOutputFile=\"\\\\spool\\" + printerName + "\" \"" + pdfFileName + "\" "; startInfo.FileName = ghostScriptPath; startInfo.UseShellExecute = false; startInfo.RedirectStandardError = true; startInfo.RedirectStandardOutput = true; Process process = Process.Start(startInfo); Console.WriteLine( process.StandardError.ReadToEnd() + process.StandardOutput.ReadToEnd() ); process.WaitForExit(30000); if (process.HasExited == false) process.Kill(); return process.ExitCode == 0; } 

Сначала вы должны сначала проверить свои параметры из командной строки, а затем перевести успехи в свой код.

Файл PDF обычно уже включает поля страницы. Вы часто сокращаете содержимое страницы, это может быть результатом PDF, который предназначен для формата страницы A4, напечатанного в формате Letter.

PDF также использует некоторые внутренние поля, которые упорядочивают содержимое страницы (и объекта): MediaBox , TrimBox , CropBox , Bleedbox .

Существуют различные варианты управления, для которых «размер носителя» Ghostscript отображает данный вход:

 -dPDFFitPage -dUseTrimBox -dUseCropBox 

С помощью PDFFitPage Ghostscript отобразит текущий размер устройства страницы (обычно это размер страницы по умолчанию).

С UseTrimBox он будет использовать TrimBox (и он одновременно установит значение PageSize для этого значения).

С помощью UseCropBox он будет использовать CropBox (и он одновременно установит значение PageSize для этого значения).

По умолчанию ( MediaBox параметр) Ghostscript будет отображаться с использованием MediaBox .

Обратите внимание, что вы можете дополнительно контролировать общий размер вашего вывода с помощью -sPAPERSIZE (выберите среди всех заранее определенных значений, которые Ghostscript знает) или (для большей гибкости) используйте -dDEVICEWIDTHPOINTS=NNN -dDEVICEHEIGHTPOINTS=NNN для настройки пользовательских размеров страниц.

Не уверен, что это помогает кому угодно, но для добавления печатных документов в очередь вместо немедленной печати внести изменения в вышеуказанный раздел с помощью

 startInfo.Arguments = " -dPrinted -dNoCancel=true -dBATCH -dNOPAUSE -dNOSAFER -q -dNumCopies=" + Convert.ToString(numberOfCopies) + " -sDEVICE=mswinpr2 -sOutputFile=%printer%" + printerName + " \"" + pdfFullFileName + "\""; 

Предварительные требования. Настройте тип задания вашего принтера на «Удерживать печать». В нашем случае у нас есть принтер Rico Aficio MP 4000, и наше использование заключается в том, чтобы выполнять ночную работу, чтобы распечатать кучу PDF-файлов, сгенерированных через SSRS.

  • icons загрузочных бутлетов Twitter отсутствуют в печати
  • Печать документа WPF FlowDocument
  • python 3.0, как сделать print () вывод unicode?
  • CSS для установки формата бумаги A4
  • Обнаружение события печати в браузере
  • Написание виртуального принтера в .NET
  • Хорошие правила для настройки print css?
  • Как печатать строки с разрывами строк в java
  • Печать WebBrowser без предварительного просмотра, т.е. печать с одним щелчком
  • Показывать DataFrame как таблицу в iPython Notebook
  • python3 print unicode для windows xp console encode cp437
  • Давайте будем гением компьютера.