13

GhostScriptを介してWindowsのネットワークプリンターでPDFファイルを印刷したいのですが。
(Adobe Readerは使いたくない)

私は仕事をすることができるgswin32c.exeを読みました。
私は多くのコマンドを試しましたが、gsに(Windowsのデフォルトの)ネットワークドライブにPDFを印刷させる方法が見つかりませんでした。

ポイント正確なネットワークプリンタは必要ありません。デフォルトを使用できます。しかし、そのようなオプションがない場合は、プリンター名も喜んで渡します。(param -SDevice = "\ server_IP \ printer_name"で試しましたが、これも機能しませんでした...)

Windowsコマンドで動作するコマンド:

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#で動作させる方法はありますか?

4

4 に答える 4

15

私はついにそれを動作させ、デバッグしやすくしました。
興味のある人のための私の最終的なメソッドコード:

    /// <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;
    }
于 2010-04-08T13:29:51.910 に答える
4

誰かに役立つかどうかはわかりませんが、すぐに印刷するのではなく、印刷ドキュメントをキューに追加するには、上記のセクションに次のように変更します。

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

前提条件:プリンターのジョブタイプを「保留印刷」に構成します。この場合、Rico Aficio MP 4000プリンターがあり、SSRSを介して生成された一連のPDFファイルを印刷するために毎晩ジョブを実行します。

于 2014-01-24T21:51:00.470 に答える
3

最初にコマンドラインからオプションをテストしてから、成功をコードに変換する必要があります。

PDFファイルには通常、すでにページ余白が含まれています。「多くの場合、カット」されたページコンテンツは、レター形式で印刷されたA4ページサイズ用のPDFから生じる場合があります。

PDFは、ページ(およびオブジェクト)のコンテンツを整理するいくつかの内部ボックスも使用します:MediaBox、、、。TrimBoxCropBoxBleedbox

Ghostscriptが特定の入力をレンダリングする「メディアサイズ」を制御するためのさまざまなオプションがあります。

-dPDFFitPage  
-dUseTrimBox  
-dUseCropBox 

PDFFitPageGhostscriptを使用すると、現在のページのデバイスサイズ(通常はデフォルトのページサイズ)にレンダリングされます。

それで(そしてそれは同時にその値に設定されます)をUseTrimBox使用します。TrimBoxPageSize

それで(そしてそれは同時にその値に設定されます)をUseCropBox使用します。CropBoxPageSize

デフォルト(パラメータを指定しない)では、Ghostscriptはを使用してレンダリングしますMediaBox

-sPAPERSIZE(Ghostscriptが知っているすべての事前定義された値から選択する)または(柔軟性を高めるために)を使用-dDEVICEWIDTHPOINTS=NNN -dDEVICEHEIGHTPOINTS=NNNしてカスタムページサイズを設定することにより、出力の全体的なサイズをさらに制御できることに注意してください。

于 2010-06-05T18:03:09.727 に答える
2

引数に-dPDFFitPageのみを追加すると、「トップページのコンテンツが頻繁にカットされる」という同じ問題が修正されました。

于 2021-02-16T18:13:33.113 に答える