2010-04-08 45 views
9

我想通過GhostScript在Windows的網絡打印機上打印PDF文件。
(我不想用Adobe Reader)如何使用GhostScript(gswin32c.exe)shell命令在默認網絡打印機上打印PDF

我讀過gswin32c.exe可以做的工作。
我嘗試了很多命令,並沒有找到如何強制gs在我的(windows默認)網絡驅動器上打印PDF的方式。

我不需要準確的網絡打印機 - 默認可以使用。但是,如果沒有這樣的選項,我很高興通過打印機名稱。 (我試過用PARAM -sDEVICE = 「\ SERVER_IP \打印機名稱」,但這種沒有工作,以及...)

命令在Windows CMD工作:

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

方法創建的基礎上,上面 - 犯規工作和thorws例外。 (錯誤代碼= 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#下工作?

+1

對不起,只是因爲你打算從你的C#應用​​程序調用這個不會讓它成爲一個編程問題,我會建議超級用戶爲這個Ghostscript問題,並已投票支持將此問題提交給你。 – Lazarus 2010-04-08 12:55:37

+0

我編輯的帖子現在更具體的C# – Maciej 2010-04-08 13:17:56

回答

12

我終於使其工作和調試容易。
對於那些有興趣我的最終方法代碼:

/// <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; 
    } 
+1

你應該調用process.Close()以及獲取退出代碼後。 – 2010-04-08 14:21:38

+0

你是對的 - 謝謝 – Maciej 2010-04-09 10:16:13

+0

只有問題我有以上的方法是頁邊距。我coudnt找到解決方案如何設置它們。所以我的首頁內容經常被削減。我想知道是否有人知道如何解決這個問題? – Maciej 2010-04-19 12:02:34

3

您應該測試命令行的首選項,然後將成功轉換成你的代碼。

PDF文件通常已包含頁邊距。您「經常剪切」的頁面內容可能來自PDF格式,該格式意味着以Letter格式打印的A4頁面尺寸。

PDF也使用其組織的頁面(或對象)的內容部分內框:MediaBoxTrimBoxCropBoxBleedbox

有多種方案,以控制其「紙張大小」 Ghostscript的呈現給定的輸入:

-dPDFFitPage 
-dUseTrimBox 
-dUseCropBox 

隨着PDFFitPage的Ghostscript將呈現當前頁面設備尺寸(通常是默認頁面大小)。

使用UseTrimBox它將使用TrimBox(並且它將同時將PageSize設置爲該值)。

使用UseCropBox它將使用CropBox(並且它將同時將PageSize設置爲該值)。

默認情況下(不提供參數),Ghostscript將使用MediaBox進行渲染。

注意,您還可以通過使用-sPAPERSIZE控制輸出的總體規模(選擇在所有預先定義的值Ghostscript的都知道)或(更靈活)使用-dDEVICEWIDTHPOINTS=NNN -dDEVICEHEIGHTPOINTS=NNN設置自定義頁面大小。

3

不知道是否可以幫助任何人,但對打印文檔添加到隊列中,而不是立即打印修改上面的部分與

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文件。

+0

它在命令行中的外觀如何?我無法讓網絡打印機部分工作。我正在執行批處理作業 – user3015739 2016-03-02 04:48:39

相關問題