So I've been looking around for a solution to this for a little over a week to no avail. I have a program that needs to be able to print htm(l) files and I'm having a terrible time getting it to comply.
This is the code I'm using at the moment:
Private Sub HtmlPrinterLaunch(i As Integer)
    'Dim htmlWBPrinter As New WebBrowser()
    'AddHandler htmlWBPrinter.DocumentCompleted, New WebBrowserDocumentCompletedEventHandler(AddressOf HtmlPrinter)
    'htmlWBPrinter.Visible = True
    'htmlWBPrinter.ScriptErrorsSuppressed = False
    'htmlWBPrinter.Show()
    ''frmHTMLPrint.wbPrintHtml.AllowNavigation = True
    ''AddHandler frmHTMLPrint.wbPrintHtml.DocumentCompleted, AddressOf HtmlPrinter
    ''frmHTMLPrint.wbPrintHtml.Visible = False
    ''frmHTMLPrint.wbPrintHtml.Navigate("file:///" & IO.Path.GetFullPath(_prints(i).SourcePathFileName))
    ''Application.Run(frmHTMLPrint)
    ''Dim appPath As String = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase)
    ''Dim reportPath As String = Path.Combine(appPath, Path.GetFileName(_prints(i).SourcePathFileName))
    ''htmlWBPrinter.Url = New Uri(reportPath) 'New Uri(Path.Combine("file:///", reportPath)) 'New Uri("file://" & IO.Path.GetFullPath(_prints(i).SourcePathFileName))
    'htmlWBPrinter.Url = (New Uri(Path.Combine("file:///" & IO.Path.GetFullPath(_prints(i).SourcePathFileName))))
    'While ((htmlWBPrinter.DocumentText = ""))
    '    Thread.Sleep(10000)
    'End While
    'htmlWBPrinter.ShowPrintDialog()
    '' htmlWBPrinter.Dispose()
    Dim wb As New WebBrowser
    AddHandler wb.DocumentCompleted, Sub() If wb.ReadyState = WebBrowserReadyState.Complete Then wb.Print()
    wb.ScriptErrorsSuppressed = True
    Dim url As New Uri(Path.Combine("file:///" & IO.Path.GetFullPath(_prints(i).SourcePathFileName)))
    wb.Navigate(url)
End Sub
Private Sub HtmlPrinter(sender As Object, e As WebBrowserDocumentCompletedEventArgs)
    state = 4
    Dim wbPrinter As WebBrowser = CType(sender, WebBrowser)
    wbPrinter.Print()
    wbPrinter.Dispose()
    'frmHTMLPrint.BeginInvoke(New Action(Sub() frmHTMLPrint.Close()))
End Sub
As you can see I have a couple attempts in there (kept some older code that sort of worked but I'd rather not us it as I kept getting pop ups)
Some likely related issues:
-the WebBrowser state stays in loading (1)
-the Url never updates with the file:///path even if I pass it directly
So to put it in brief, my in code WebBrowser control won't hit the DocumentCompleted event, nor will it print out files. I need this code to print documents with no input from the user. What am I missing here?
Edit:
So I've messed around with this some more. I have the webbrowser control on its own form and I can get it to load/print when called from the main thread, but I'm having no luck invoking it. My current code for invocation:
If wbPrintHtml.InvokeRequired Then
            If url.SourcePathFileName = "about:blank" Then
                wbPrintHtml.Invoke(CType(Sub()
                                             wbPrintHtml.Navigate(url.SourcePathFileName)
                                         End Sub, MethodInvoker))
            Else
                wbPrintHtml.Invoke(CType(Sub()
                                             wbPrintHtml.Navigate("file:///" & url.SourcePathFileName)
                                         End Sub, MethodInvoker))
            End If
        Else
            If url.SourcePathFileName = "about:blank" Then
                wbPrintHtml.Navigate(url.SourcePathFileName)
            Else
                wbPrintHtml.Navigate("file:///" & url.SourcePathFileName)
            End If
        End If