2017-09-21 100 views
1

我試圖運行LPR命令來打印PDF。我正在使用的代碼是在Windows窗體應用程序中單擊按鈕執行的。C# - 用於打印PDF文件的LPR命令

代碼:

var command = @"lpr –S 192.168.1.245 –P DAILY C:\Test.pdf"; 
ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/c " + command); 
procStartInfo.RedirectStandardOutput = true; 
procStartInfo.UseShellExecute = false; 
procStartInfo.RedirectStandardError = true; 
procStartInfo.CreateNoWindow = true; 

// start process 
Process proc = new Process(); 
proc.StartInfo = procStartInfo; 
proc.Start(); 

proc.WaitForExit(); 

// read process output 
string cmdError = proc.StandardError.ReadToEnd(); 
string cmdOutput = proc.StandardOutput.ReadToEnd(); 

程序運行時爲64位程序,所以它可以找到在C LPR程序:\ windows \ system32目錄。

當代碼執行錯誤字符串是空的,而輸出字符串包含以下(相同的輸出,如果該命令運行一直lpr /?

輸出:

發送一個打印作業到網絡打印機

用法:LPR -S服務器-P打印機[-C類] [-J作業] [-o選項] [-x] [-d]的文件名

個選項: -S服務器名稱或主機的ip地址提供LPD服務 打印隊列 -C級職位分類對突發頁 -J工作職位名稱使用-P打印機名稱打印 突發頁-o選項指示文件的類型(默認假定一個文本文件) 用的SunOS 4.1.x的和現有 -x兼容性-d發送數據文件的第

如果我複製並粘貼準確命令,因爲它出現在代碼中並粘貼到命令窗口中,即使它是應用程序打開的SAME命令窗口,它也能正常工作。

有沒有人有任何洞察,爲什麼會發生這種情況?提前致謝!

+0

替換由LPR cmd並把參數的其餘部分進入proc.Parameters屬性 – Bestter

+0

我試圖調用LPR直接而不是通過CMD,如@Bestter建議,但得到完全相同的輸出。 –

回答

2

我能弄明白。如果它可以幫助其他人,這是工作的代碼是

var command = @"lpr -S 192.168.1.245 -P ""DAILY"" ""C:\Test.pdf"""; 
ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/C " + command); 
procStartInfo.RedirectStandardOutput = true; 
procStartInfo.UseShellExecute = false; 
procStartInfo.RedirectStandardError = true; 
procStartInfo.CreateNoWindow = true; 

// start process 
Process proc = new Process(); 
proc.StartInfo = procStartInfo; 
proc.Start(); 

proc.WaitForExit(); 

// read process output 
string cmdError = proc.StandardError.ReadToEnd(); 
string cmdOutput = proc.StandardOutput.ReadToEnd(); 

注意,隊列名稱和文件名用引號括起來。我的另一個問題是,我最初從電子郵件中複製命令,所以短劃線是錯誤的,我必須刪除並在命令中手動鍵入破折號才能識別它。如果您在原始問題中看起來非常接近,則可以看到短劃線稍長。

有關確保lpr命令可用的信息,特別是在64位機器上運行32位應用程序時,請參閱以下參考資料。

文獻1:lpr command not working from my C# program in Win 7

文獻2:http://www.tomshardware.com/forum/240019-44-error-windows