使用Ghostscript在没有Adobe的情况下在Ricoh MP 4000打印机上批量打印PDF文件

时间:2014-01-24 17:05:58

标签: printing ghostscript

我需要每天将一堆现有的PDF文件打印到网络Ricoh MP 4000打印机上。我需要使用“HoldPrint”作业类型选项打印这些。我可以直接打印它,但我希望它能做一个不与其他用户的打印混淆的保持打印。我正在使用GhostScript 9.10 直接打印的(通过“Maciej”帖子的函数调用):

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

看起来我正在覆盖jobtype开关但不知道如何获得它。

我尝试了不同的组合,但它根本不起作用。非常感谢任何帮助。

-dPrinted -dBATCH -dNOPAUSE -dNumCopies = 1 -sDEVICE = ljet4 -sOutputFile =%printer%printerName“C:\ Printing \ mypdffile.pdf”

更新:这是适用于我的版本。

        /*
         * 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;
        }
    }

1 个答案:

答案 0 :(得分:0)

Ghostscript没有'jobtype'开关,也没有suserid开关,所以毫不奇怪它们没有效果。可能你引用的帖子有更多的信息,但我找不到任何这样的帖子,也许你可以指向它(URL)

[后]

Setup.ps需要是一个PostScript文件(因为这就是Ghostscript所理解的,它是一个PostScript解释器)。从您要设置DocumentName的文档中,它是User Settings词典的成员,因此:

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

白色空间只是为了清晰起见。这个例子几乎逐字逐句解除。

因此,您需要修改为每个作业发送的'setup.ps'。您可以为每个编写自定义setup.ps,也可以使用GS的“PostScript输入”功能,并使用-c和-f开关在命令行上提供setup.ps的全部内容。在运行自己的PostScript程序之前,所有setup.ps都会在那里运行PostScript(假设您在命令行上将setup.ps放在PostScript程序之前)。

实际上这非常讨厌,它不是通常配置设备的方式,但mswinpr2设备最初是由Ghostscript团队以外的人编写的,可能是批发采用。