Что мне нужно изучить, чтобы решить эту проблему печати - PullRequest
1 голос
/ 02 мая 2019

Проблема, с которой я сталкиваюсь, заключается в том, что мой код работает, когда я запускаю от своего имени, но не работает, когда я выполняю учетную запись домена.Я открываю файл .mht из папки и пытаюсь распечатать его.Открытие файла работает, и страница отображается нормально, но печать не работает.Вот мой код:

    Dim ie As SHDocVw.InternetExplorerMedium = New SHDocVw.InternetExplorerMedium
    AddHandler ie.PrintTemplateTeardown, AddressOf PrintedCB
    AddHandler ie.DocumentComplete, AddressOf LoadedCB
    ie.Visible = True
    WriteLog("Internet Explorer made visible")
    ie.Navigate(URL)
    Application.DoEvents()
    While Not documentLoaded
        WriteLog("Waiting for Internet Explorer to load page")
        Application.DoEvents()
        Threading.Thread.Sleep(1000)
    End While
    WriteLog("Internet Explorer navigated to URL")
    Application.DoEvents()
    ie.ExecWB(SHDocVw.OLECMDID.OLECMDID_PRINT, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, PRINT_WAITFORCOMPLETION, 0)

В этот момент выдается ошибка

Ошибка удаленного вызова процедуры.(Исключение из HRESULT: 0x800706BE)

Я уже пытался объявить, например, объекты разных типов, но безрезультатно, и даже пытался печатать из открывающегося браузера.Когда я делаю это, он не печатает, и появляется сообщение о том, что веб-страница имела проблему и была повторно загружена.Если я перехожу на интернет-сайт и пытаюсь распечатать, я получаю такое же отсутствие печати и сообщений.

Я не уверен, что мне нужно изучить, чтобы попытаться решить проблему.Это могут быть учетные данные домена?Это должно быть в определенной группе пользователей?Это проблема безопасности принтера и т. Д.?Я бьюсь головой о кирпичную стену уже около недели, и я больше не буду двигаться вперед, поэтому буду очень признателен за некоторую помощь.

Извините, за задержку с ответом, я был вне офиса с прошлогопятница.Вот полный фрагмент кода.

    Public Class Browser
        Private documentLoaded As Boolean = False
        Private documentPrinted As Boolean = False
        Public Function PrintMHTMLFile(ByVal blnShowPrompt As Boolean, URL As String) As Boolean
            PrintMHTMLFile = False
            Dim RetVal As Boolean = False
            Const PRINT_WAITFORCOMPLETION = CShort(2)   'use this setting to tell ExecWB to wait to return
            Dim ie As SHDocVw.InternetExplorerMedium = New SHDocVw.InternetExplorerMedium
            AddHandler ie.PrintTemplateTeardown, AddressOf PrintedCB
            Debug.print(WriteLog("Internet Explorer started")
            Try
                ie.Visible = True
                Debug.print("Internet Explorer made visible")
                ie.Navigate(URL)
                Application.DoEvents()
                While Not documentLoaded
                    Debug.print("Waiting for Internet Explorer to load page")
                    Application.DoEvents()
                    Threading.Thread.Sleep(10000)
                End While
                Debug.print("Internet Explorer navigated to URL")
                Application.DoEvents()
                ie.ExecWB(SHDocVw.OLECMDID.OLECMDID_PRINT, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, PRINT_WAITFORCOMPLETION, 0)
                While Not documentPrinted
                    debug.print("Waiting for Internet Explorer to print page")
                    Threading.Thread.Sleep(1000)
                End While
                Debug.Print("Internet Explorer printed URL")
                ie.ExecWB(SHDocVw.OLECMDID.OLECMDID_CLOSE, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER)
                RetVal = True
                Debug.print("Internet Explorer closed")
            Catch ex As Exception
                Debug.print("Unable to print " & URL)
                Debug.print("Internet Explorer errored with error message """ & ex.Message & """")
                ie.ExecWB(SHDocVw.OLECMDID.OLECMDID_CLOSE, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER)
            Finally
                ie = Nothing
            End Try
            return Retval
        end Function
        Private Sub LoadedCB(ByVal obj As Object, ByRef url As Object)
            documentLoaded = True
        End Sub
        Private Sub PrintedCB(ByVal obj As Object)
            documentPrinted = True
        End Sub
    End Class

Вам понадобятся (могут?) Ссылки в проекте для:

Interop.SHDocVw.dll
Interop.PrintUIObjLib.dll
System.Printing.dll

Создайте модуль и добавьте следующее

    Sub Printit()
        Dim browser As New Browser
        Dim URL as string = "www.google.com" 'Substitute with a location you want to print
        browser.PrintMHTMLFile(URL)
    end sub

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

...