2009-05-18 92 views
4

我已經在加載轉換爲HTML/CSS的XML的WinForms應用程序上擁有WebBrowser控件。看起來很美,如果我只想在那裏或在一個普通的瀏覽器中查看它。WebBrowser控件將不會從C#打印

當窗體加載時,它應該導航到文件,然後當OnDocumentCompleted事件觸發時,它應該在註冊表中設置頁眉,頁腳和默認打印機名稱,然後調用Print()用戶已指定。

我已經通過調試器運行了它,它在OnDocumentCompleted事件中調用了webBrowser.Print()正確的次數。 Nothing不應該是null,WebBrowser控件上的Visible也是如此,AllowNavigation也是如此。是的,打印機已打開並可通過網絡訪問。完全相同的代碼在項目的其他地方工作,但不在這裏。

還有什麼可能導致這個地獄般的控制忽略我的打印命令?

理想情況下,我希望整個事情都隱藏在屏幕外,因爲這意味着使用Windows Scheduler運行,並且用戶永遠不應該看到它。我已經讀過,控制需要可見,但是,直到我解決這個第一個問題時,可以等待。

編輯:我的OnDocumentCompleted事件處理程序的最後兩行將DialogResult設置爲OK並關閉了窗體。刪除對Close()的調用讓它打印出來,所以我猜測它在表單關閉和WebBrowser控件處理之前沒有進入打印假脫機程序。

只是設置一個任意的時間限制等待關閉之前的等待,有什麼辦法來告訴它什麼時候完成打印?

回答

4

作業的狀態計時問題,在將文檔發送給打印後臺處理程序之前關閉表單。我最後在表單中添加了一個Timer,將其設置爲30秒,並使Tick()事件關閉窗體。之前關閉窗體的位置,它現在只調用closeTimer.Start()。

+1

這取決於作業到達假脫機程序的時間,假定您不需要處理大型作業並且打印系統可用性很高。如果你必須這樣做,你可以把一個線程睡30,然後關閉窗體。根據打印作業狀態進行更高級別的控制,以保證打印作業。 – Yuan 2011-05-03 21:24:38

3

試試這個:

mshtml.IHTMLDocument2 doc; 
doc = oWeb.Document;   
doc.execCommand("Print", True, Nothing); 

FROM編輯:

它可以使用shell命令來檢查原來是一個打印隊列

+0

無法轉換webBrowser.Document(HTMLDocument的)任何IHTMLDocument *接口的打印HTML的最佳方式。 HTMLDocument確實有它自己的ExecCommand,我使用你的建議來調用它。無論我將showUI設置爲true還是false,都不會有任何反應。 – 2009-05-18 17:51:38

+0

您可能不得不明確告訴它使用「(IHTMLDocument2)oWeb.Document;」將Document對象轉換爲IHTMLDocument2對象另外,請確保您的項目中有MSHTML dll作爲參考。 無論如何,這是我如何打印瀏覽器控件的內容。 – 2009-05-18 18:29:50

-1

這是我發現那位從字符串

void PrintString(string strHTMLText) 
{ 
    WebBrowser wbPrintString = new WebBrowser() { DocumentText = string.Empty }; 
    wbPrintString.Document.Write(strHTMLText); 
    wbPrintString.Document.Title = "Type The Header You Want Here"; 
    Microsoft.Win32.RegistryKey rgkySetting = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Internet Explorer\\PageSetup", true); 
    rgkySetting.SetValue("footer", "Type THe Footer You Want Here"); 
    rgkySetting.Close(); 
    wbPrintString.Parent = this; 
    wbPrintString.ShowPrintPreviewDialog(); 
    wbPrintString.Dispose(); 

}