我們使用客戶端應用程序從在線應用程序打印出成績單。如何在不使用WebBrowser控件的情況下打印網頁
這已經完美地工作,直到系統升級到IE 8,我現在收到此錯誤(拒絕訪問):http://img707.imageshack.us/img707/5259/62270489.png
顯然,這是一個已知的問題,並不能得到解決。
如何在不使用IE WebBrowser控件的情況下從WinForms應用程序打印HTML?
感謝,
馬丁Wiboe
我們使用客戶端應用程序從在線應用程序打印出成績單。如何在不使用WebBrowser控件的情況下打印網頁
這已經完美地工作,直到系統升級到IE 8,我現在收到此錯誤(拒絕訪問):http://img707.imageshack.us/img707/5259/62270489.png
顯然,這是一個已知的問題,並不能得到解決。
如何在不使用IE WebBrowser控件的情況下從WinForms應用程序打印HTML?
感謝,
馬丁Wiboe
這「可能」的工作:如果您使用的辦公自動化和HTML是基本夠用,你可以做一個請求,HTML和通過Word中打印?
另一種思路值得探討:
轉換HTML內容爲PDF格式,保存/打印這一點。
好主意,但Office不一定安裝在機器上。 – 2010-06-02 12:39:42
是的,這個解決方案有一些已知的要求... – 2010-06-02 13:49:53
PDF轉換似乎是我唯一的選擇。我正在考慮使用wkhtmltopdf - 任何想法? – 2010-06-04 13:19:05
嗯有趣的錯誤,我以前見過這個,我建議你使用Gecko。
一些參考:
Embedding Gecko(Mozilla rendering engine) in a .Net application
GeckoFX 是一個Windows窗體控件寫在乾淨 ,評論C#是 嵌入在任何Windows Mozilla的Gecko的瀏覽器 控制窗體 應用。它還包含一個簡單的 類模型,可以訪問HTML和CSS DOM的 。
嘗試Gecko後,它似乎沒有打印方法:(我可能會試着去PDF方式代替。 – 2010-06-04 13:18:15
一個可能的解決方案,以一個老問題:
當打印從WebBrowser.WebBrowser控制多個文檔,只有1個實例,這可能會導致拒絕訪問錯誤。
爲每個文檔使用一個新變量進行打印,不要全局使用它。在事件處理程序(如WebBrowserDocumentCompletedEventHandler)中,將sender參數強制轉換爲Webbrowser對象。
WebBrowser browser = (WebBrowser)sender;
訪問被拒絕的錯誤可能發生在webbrowser實例處置時仍然有一些打開的打開資源。
問候, M.
聽起來像一個似是而非的解釋!爲了確保我正確理解你:我應該創建一個新的WebBrowser實例用於打印每個文檔,並在其中加載文檔。可以從單個事件處理程序完成打印,其中WebBrowser的引用位於'sender'變量中? – 2010-12-28 11:50:14
您完全正確(我沒有登錄本網站一段時間,對於遲到的回覆抱歉)。 – 2011-01-26 13:35:32
我遇到了麻煩,從Skybound的GeckoFx印刷 - 沒有web瀏覽器 - 但由於Michel van Engelens answer這個問題幫了我,我想我可能會在此處添加我的解決方案。它也可能適用於WebBrowser。
最重要的部分是將Print調用從DocumentCompleted事件中分離出來 - 我只是用一個定時器在這裏做了。
Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click
Try
Dim wb As New Skybound.Gecko.GeckoWebBrowser
AddHandler wb.DocumentCompleted, AddressOf PrintWebBrowser_DocumentCompleted
AddHandler wb.HandleCreated, AddressOf PrintWebBrowser_HandleCreated
wb.CreateControl()
Catch ex As Exception
MsgBox(String.Format("Error trying to create GeckoWebBrowser: {0}", ex.Message))
End Try
End Sub
Private Sub PrintWebBrowser_HandleCreated(ByVal sender As Object, ByVal e As System.EventArgs)
Dim wb = DirectCast(sender, Skybound.Gecko.GeckoWebBrowser)
wb.Navigate(GeckoWebBrowser1.Url.AbsoluteUri)
End Sub
Private Sub PrintWebBrowser_DocumentCompleted(ByVal sender As Object, ByVal e As System.EventArgs)
Dim wb = DirectCast(sender, Skybound.Gecko.GeckoWebBrowser)
If wb.Url IsNot Nothing AndAlso wb.Url.AbsoluteUri = "about:blank" Then Exit Sub
Dim tmr As New Timer
tmr.Interval = 200
AddHandler tmr.Tick, AddressOf TimerTick
tmr.Tag = wb
tmr.Start()
End Sub
Private Sub TimerTick(ByVal sender As Object, ByVal e As EventArgs)
Dim tmr As Timer = DirectCast(sender, Timer)
tmr.Stop()
Dim wb As Skybound.Gecko.GeckoWebBrowser = Nothing
Try
wb = DirectCast(tmr.Tag, Skybound.Gecko.GeckoWebBrowser)
wb.Window.Print()
Catch comEx As Runtime.InteropServices.COMException
Dim hresult As Integer = Runtime.InteropServices.Marshal.GetHRForException(comEx)
If hresult = &H80004004 Then //' EX_ABORT
MsgBox("Print cancelled")
Else
MsgBox(String.Format("Print failed: {0}", comEx.Message))
End If
Catch ex As Exception
MsgBox(String.Format("Print failed: {0}", ex.Message))
Finally
If wb IsNot Nothing Then wb.Dispose()
End Try
End Sub
我正在探索使用富文本編輯器轉換它,然後打印RTE的內容的可能性。如果我有成功,我會告訴你。
這是一個古老的問題,但不管怎樣:你打印多個文檔只有一個瀏覽器實例嗎? – 2010-12-22 08:01:18