Как распечатать веб-страницу без использования элемента управления WebBrowser - PullRequest
2 голосов
/ 02 июня 2010

Мы используем клиентское приложение для распечатки оценочных листов из онлайн-приложения.

Это работало безупречно, пока системы не были обновлены до IE 8. Теперь я получаю эту ошибку (Доступ запрещен): http://img707.imageshack.us/img707/5259/62270489.png
По-видимому, это известная проблема, и она не может быть решена.

Как я могу напечатать HTML из приложения WinForms без использования элемента управления IE WebBrowser?

Спасибо

Мартин Вибо

Ответы [ 5 ]

2 голосов
/ 22 декабря 2010

Возможное решение старого вопроса:

При печати нескольких документов из элемента управления WebBrowser.WebBrowser только с одним экземпляром это может привести к ошибкам при доступе.

Используйте новую переменную для каждого документа для печати и не используйте ее глобально. В обработчиках событий, таких как WebBrowserDocumentCompletedEventHandler, приведите параметр sender к объекту webbrowser.

WebBrowser browser = (WebBrowser)sender;

Ошибка отказа в доступе, вероятно, возникает при удалении экземпляра веб-браузера, у которого все еще есть открытые ресурсы для печати. ​​

С уважением, М.

0 голосов
/ 13 июня 2013

Я собираюсь изучить возможность использования текстового редактора для его преобразования, а затем распечатать содержимое RTE. Я дам вам знать, если у меня будет успех.

0 голосов
/ 10 января 2011

У меня были проблемы с печатью из GeckoFx Skybound - не WebBrowser - но так как Мишель ван Энгеленс ответил на этот вопрос, мне помог, я подумал, что могу добавить свое решение здесь Это вполне может относиться и к 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
0 голосов
/ 02 июня 2010

хм интересная ошибка, я видел это раньше, предлагаю вам использовать Gecko .

Некоторые ссылки:

Встраивание Gecko (рендеринг Mozilla двигатель) в приложении .Net

GeckoFX такое элемент управления Windows Forms написано в чистом, прокомментированном C #, что встраивает браузер Mozilla Gecko контроль в любых Windows Forms Заявка. Он также содержит простой модель класса, обеспечивающая доступ к HTML и CSS DOM.

0 голосов
/ 02 июня 2010

Это может работать: если вы используете Office Automation и html достаточно прост, вы можете запросить html и напечатать через слово?

Другая идея, которую стоит изучить:

Преобразуйте HTML-контент в PDF и сохраните / распечатайте его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...