Как распечатать PDF на использовании принтера стандартной сети, GhostScript (gswin32c.exe) окружают команду

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

Я прочитал gswin32c.exe, который может сделать задание.
Я экспериментировал со многими командами, и coudn't находят путь, как вынудить 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)

    /// <summary>
    /// Prints the PDF.
    /// </summary>
    /// <param name="ghostScriptPath">The ghost script path. Eg "C:\Program Files\gs\gs8.71\bin\gswin32c.exe"</param>
    /// <param name="numberOfCopies">The number of copies.</param>
    /// <param name="printerName">Name of the printer. Eg \\server_name\printer_name</param>
    /// <param name="pdfFileName">Name of the PDF file.</param>
    /// <returns></returns>
    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#?

10
задан Maciej 8 April 2010 в 13:17
поделиться

2 ответа

Наконец-то я заставил его работать и упростить отладку.
Мой последний код метода для заинтересованных:

    /// <summary>
    /// Prints the PDF.
    /// </summary>
    /// <param name="ghostScriptPath">The ghost script path. Eg "C:\Program Files\gs\gs8.71\bin\gswin32c.exe"</param>
    /// <param name="numberOfCopies">The number of copies.</param>
    /// <param name="printerName">Name of the printer. Eg \\server_name\printer_name</param>
    /// <param name="pdfFileName">Name of the PDF file.</param>
    /// <returns></returns>
    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;
    }
13
ответ дан 3 December 2019 в 20:03
поделиться

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

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

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

Существуют различные опции, позволяющие контролировать, для какого "размера носителя" Ghostscript отображает заданные данные:

-dPDFFitPage  
-dUseTrimBox  
-dUseCropBox 

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

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

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

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

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

3
ответ дан 3 December 2019 в 20:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: