2014-01-24 1 views
0

У меня есть требование печатать кучу существующих файлов PDF каждый день в сети Ricoh MP 4000 Printer. Мне нужно распечатать их, используя параметр типа «HoldPrint». Я могу распечатать его напрямую, но я хочу, чтобы он выполнял печать с удержанием, которая не смешивается с печатью другого пользователя. Я использую GhostScript 9.10 тот, который непосредственно печатает (через вызов функции из "Maciej" 'ы пост):Пакетная печать PDF-файлов на принтере Ricoh MP 4000 с использованием Ghostscript без Adobe

"-dPrinted -dBATCH -dNOPAUSE -dNOSAFER -qQUIET -sjobtype = holdprint -suserid = а -dNumCopies = 1 -sDEVICE = ljet4 -sOutputFile = \ "\\ spool \ PrinterName \" \ "C: \ Printing \ mypdffile.pdf \" "

Похоже, я перезаписываю переключатель типа работы, но не уверен, как его получить.

Я пробовал разные комбинации, но он просто не работает. Любая помощь приветствуется.

-dPrinted -dBATCH -dNOPAUSE -dNumCopies = 1 -sDEVICE = ljet4 -sOutputFile =% принтер% PRINTERNAME "C: \ Печать \ mypdffile.pdf"

Update: Вот версия, которая работает для меня.

 /* 
     * Printer used: Ricoh Aficio MP 4000 
     * Purpose: To print PDF files as a scheduled job to a network printer. 
     * The files will be queued under a specific user id. 
     * The user prints the files under his account. 
     * Pre-requisite: Install the network printer on the job server 
     * Manually configure Printer Job settings with user id 
     * and Job type set to "Hold Print" 
     */ 
     string _sourceFolder = “PDFFilesFolderPath”; 
     DirectoryInfo di = new DirectoryInfo(_sourceFolder); 
     var files = di.GetFiles().OrderBy(f => f.Name); 
     string _printer = "BMIS"; // Printer name as seen in the Devices and Printers section 
     foreach (var f in files) 
     { 
      PrintPDF(@"C:\Program Files\gs\gs9.10\bin\gswin32c.exe", 1, _printer, f.FullName); 
     } 


    /// <summary> 
    /// Print PDF. 
    /// </summary> 
    /// <param name="ghostScriptPath">The ghost script path. Eg "C:\Program Files\gs\gs9.10\bin\gswin32c.exee"</param> 
    /// <param name="numberOfCopies">The number of copies.</param> 
    /// <param name="printerName">Exact name of the printer as seen under Devices and Printers.</param> 
    /// <param name="pdfFileName">Name of the PDF file.</param> 
    /// <returns></returns> 

    public bool PrintPDF(string ghostScriptPath, int numberOfCopies, string printerName, string pdfFullFileName) 
    { 

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

      startInfo.FileName = ghostScriptPath; 
      startInfo.UseShellExecute = false; 
      startInfo.WindowStyle = ProcessWindowStyle.Hidden; 
      Process process = Process.Start(startInfo); 
      process.WaitForExit(30000); 
      if (process.HasExited == false) process.Kill(); 
      return process.ExitCode == 0; 
     } 
     catch (Exception ex) 
     { 
      System.Diagnostics.EventLog.WriteEntry("Application", ex.Message, EventLogEntryType.Error); 
      throw; 
     } 
    } 

ответ

0

Ghostscript не имеет «jobtype» переключатель, ни suserid переключатель, так что его не удивительно, что они не имеют никакого эффекта. Возможно, после вы ссылаетесь имеет больше информации, но я не могу найти такой пост, может быть, вы можете указать на него (URL)

[позже]

Setup.ps должен быть файл PostScript (потому что это то, что понимает Ghostscript, его интерпретатор PostScript). Из документации вы хотите установить DocumentName, который является членом словаря Настройки пользователя, так:

mark 
    /UserSettings << 
     /DocumentName (My name goes in here) 
    >> 
    (mswinpr2) finddevice 
    putdeviceprops 
setdevice 

Пустое пространство только для ясности. Это поднято почти дословно на примере.

Итак, вам нужно изменить «setup.ps», который вы отправляете для каждой работы. Вы можете либо написать пользовательскую setup.ps для каждого, либо использовать функцию «PostScript input» GS и предоставить весь контент setup.ps в командной строке с помощью -c и -f. Все setup.ps делает, запускает PostScript там, прежде чем запускать собственную программу PostScript (предполагая, что вы поставили setup.ps перед вашей программой PostScript в командной строке).

Это довольно неприятно на самом деле, это не так, как обычно настроены устройства, но устройство mswinpr2 было изначально написано кем-то вне команды Ghostscript и предположительно принято оптовой.

+0

Спасибо, Кен. Я нашел решение частично. "-dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dNumCopies =" + Convert.ToString (numberOfCopies) + "-sDEVICE = mswinpr2 -sOutputFile =% printer%" + printerName + "\" "+ pdfFullFileName +" \ ""; Единственное, что я контролирую свойство Job type непосредственно на принтере через его вкладку config. Теперь проблема заключается в том, что все задания в очереди печати называются документами Ghost script. Поиск, чтобы найти, чтобы динамически отправлять имена документов. до сих пор нет успеха. с сайта gs, его выполнили с помощью файла setup.ps, но не уверены, как мы отправляем каждое имя docname! –

+0

Вот сообщение, на которое я изначально ссылался: http: //stackoverflow.com/questions/2599925/how-to-print-pdf-on-default-network-printer-using-ghostscript-gswin32c-exe-she? Rq = 1 –

+0

Я не совсем уверен, что понимаю вашу проблему, и что бы это ни было, это не похоже на что-то вроде Ghostscript. Если вы сами контролируете принтер, то, конечно, имя задания зависит от вас?Также это может помочь, если вы ссылаетесь на документацию Ghostscript, которую вы читаете (документы предоставляются в виде файлов HTML, вам не нужно использовать веб-сайт) – KenS