我们正在使用客户端应用程序从在线应用程序打印成绩单。
在系统升级到IE 8之前,这一直在完美运行。我现在收到此错误(拒绝访问):http://img707.imageshack.us/img707/5259/62270489.png
显然,这是一个已知问题,无法解决。
如何在不使用IE WebBrowser控件的情况下从WinForms应用程序打印HTML?
谢谢,
Martin Wiboe
答案 0 :(得分:2)
旧问题的可能解决方案:
从WebBrowser.WebBrowser控件打印多个文档时,只有一个实例,这可能导致访问被拒绝错误。
为每个文档使用新变量进行打印,不要全局使用。在诸如WebBrowserDocumentCompletedEventHandler之类的事件处理程序中,将sender参数强制转换为webbrowser对象。
WebBrowser browser = (WebBrowser)sender;
当处理了仍然具有一些打开资源的webbrowser实例时,可能会发生访问被拒绝错误。
此致 微米。
答案 1 :(得分:0)
这“可能”有效:如果您使用的是Office Automation并且html足够基础,您可以通过Word发出html请求并打印吗?
另一个值得探索的想法:
将Html内容转换为PDF并保存/打印。
答案 2 :(得分:0)
嗯有趣的错误,我以前见过这个,我建议你使用Gecko。
一些参考文献:
Embedding Gecko(Mozilla rendering engine) in a .Net application
GeckoFX 是一个Windows窗体控件 写在干净,评论C# 嵌入Mozilla Gecko浏览器 在任何Windows窗体中控制 应用。它还包含一个简单的 提供访问权限的类模型 HTML和CSS DOM。
答案 3 :(得分:0)
我无法从Skybound的GeckoFx打印 - 而不是WebBrowser - 但是由于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
答案 4 :(得分:0)
我即将探索使用富文本编辑器进行转换,然后打印RTE内容的可能性。如果我成功,我会告诉你的。