2013-11-22 49 views
2

打印PDF在C#應用程序中使用'process'打印PDF文件,但是我無法獲得打印狀態。我發現可以使用System.management與打印機/隊列進行交互,並且System.printing.I使用這兩個命名空間進行了大量試驗,但無法打印文件。有關如何使用這些命令將PDF文檔打印到打印機的例子可用嗎?如何在C#中使用

回答

1

System.Printing不能用於打印PDF。 PDF必須首先呈現給可打印的文件。

請參閱this question及其答案的不同方法的好概述。

如果你在linux上,你可以輕鬆地調用lp命令。

0

此問題已在這裏回答How can I send a file document to the printer and have it print?

您不能使用標準方法打印PDF,因爲它需要首先渲染,您可以使用Ghostscript,Adobe Acrobat或其他方法。

編輯:約翰是快

+1

但是這些例子並沒有顯示如何獲得打印狀態..他們使用進程來打印文件。從這些進程是否有可能獲得打印狀態?我覺得不是!! – flute

+0

@mmu不直接,沒有。但看看PrintServer.GetPrintQueues。這可以給你一個打印機狀態。喲可以在第二個線程或其他東西中檢查它。我不確定您是否查找打印機狀態或打印作業狀態。如果您想要打印作業狀態,請查看Win32_PrintJob。 – BudBrot

1

如果你有一個WPF應用程序,然後使用System.Printing

這裏是代碼:

var file = File.ReadAllBytes(pdfFilePath); 
var printQueue = LocalPrintServer.GetDefaultPrintQueue(); 

using (var job = printQueue.AddJob()) 
using (var stream = job.JobStream) 
{ 
    stream.Write(file, 0, file.Length); 
} 

現在,這個命名空間必須用WPF應用程序中使用。它與ASP.NETWindows Service不一致。它不應該與Windows Forms一起使用,因爲它有System.Drawing.Printing。我沒有使用上述代碼打印PDF格式的問題,但我全神貫注於爲什麼它不適用於其他人。

我應該提到,您必須有一臺支持直接打印的打印機,因爲您將信息直接發送到打印機。根據我的經驗,這與兄弟HL系列和夏普企業打印機一起工作。我希望這可以用於其他的東西,比如Excel文檔,但是它不會。幸運的是,這些很容易以其他方式打印。

+0

如果誰給了這一點,那麼這將是一件好事,它會提供反饋,讓他們做出決定。這對我來說非常合適,但我非常喜歡。可能有一個特定的案例,如果你與其他人分享會很好。 –