Drucken eines PDF aus Webrowser
Hallo miteinander,
ich versuche gerade, ein PDF, das ich in einen Webbrowser lade, ohne User-Dialog zu drucken. Der Webbrowser ist in einer Form. Ich verwende folgenden recherchierten Code (der, vermutlich für Kenner wenig überraschend, leider nicht macht, was ich mir so vorstelle...):
Die Zeile nach 'FEHLERAUSLÖSER erzeugt den Fehler:
"Es wurde versucht, ein Drop-Ziel zu widerrufen, das nicht registriert wurde. (Ausnahme von HRESULT: 0x80040100 (DRAGDROP_E_NOTREGISTERED))"
Gespielt habe ich auch hiermit:
bringt den gleichen Fehler...
Kann mir jemand weiterhelfen?
Neugierige Grüße,
Andreas
ich versuche gerade, ein PDF, das ich in einen Webbrowser lade, ohne User-Dialog zu drucken. Der Webbrowser ist in einer Form. Ich verwende folgenden recherchierten Code (der, vermutlich für Kenner wenig überraschend, leider nicht macht, was ich mir so vorstelle...):
Imports System.Drawing.Printing
Private Enum ExecOpt
OLECMDEXECOPT_DODEFAULT = 0
OLECMDEXECOPT_PROMPTUSER = 1
OLECMDEXECOPT_DONTPROMPTUSER = 2
OLECMDEXECOPT_SHOWHELP = 3
End Enum
Private Enum Exec
...
OLECMDID_PRINT = 6
...
End Enum
Public Sub Drucken()
Me.WebBrowser1.Navigate(strPDFFileFullPath)
Try
Dim strStandardDrucker As String = pd.PrinterSettings.PrinterName
Shell(String.Format("rundll32 printui.dll,PrintUIEntry /y /n ""{0}""", strDrucker2use))
Dim n As Object = Nothing
Dim MyWeb As Object = Me.WebBrowser1.ActiveXInstance
' FEHLERAUSLÖSER:
MyWeb.ExecWB(OLECMDID.OLECMDID_PRINT, OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, n, n)
Catch ex As Exception
MsgBox(ex.Message)
End Try
Shell(String.Format("rundll32 printui.dll,PrintUIEntry /y /n ""{0}""", strStandardDrucker))
End Sub
Die Zeile nach 'FEHLERAUSLÖSER erzeugt den Fehler:
"Es wurde versucht, ein Drop-Ziel zu widerrufen, das nicht registriert wurde. (Ausnahme von HRESULT: 0x80040100 (DRAGDROP_E_NOTREGISTERED))"
Gespielt habe ich auch hiermit:
'Imports SHDocVw
Dim n As Object = Nothing
Dim wb As SHDocVw.WebBrowser = DirectCast(WebBrowser1.ActiveXInstance, SHDocVw.WebBrowser)
wb.ExecWB(OLECMDID.OLECMDID_PRINT, OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, n, n)
bringt den gleichen Fehler...
Kann mir jemand weiterhelfen?
Neugierige Grüße,
Andreas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 247049
Url: https://administrator.de/forum/drucken-eines-pdf-aus-webrowser-247049.html
Ausgedruckt am: 04.04.2025 um 17:04 Uhr
4 Kommentare
Neuester Kommentar
Moin Andreas,
warum nutzt du nicht die zur Verfügung stehende Print-Methode zum Drucken für das System.Windows.Forms.WebBrowser Control
Das druckt bei mir eine Webseite ohne irgendeinen Dialog anzuzeigen ...
Grüße Uwe
warum nutzt du nicht die zur Verfügung stehende Print-Methode zum Drucken für das System.Windows.Forms.WebBrowser Control
Me.WebBrowser1.Print()
Grüße Uwe
Also für ein Drucken mit Adobe Acrobat könntest du das hier machen:
Die Doku für die Commandline-Parameter vom Acrobat kannst du hier nachlesen
Wenn du den Standarddrucker schon vorher anderweitig festlegst kannst du deine Funktion nach dem gleichen Schema so umbauen:
Bei WaitForInputIdle() kannst als Parameter noch eine maximale Wartezeit in Millisekunden definieren, damit sie im Fall der Fälle nicht ewig hängt.
Grüße Uwe
Dim ps As New Process
With ps.StartInfo
.FileName = "C:\Program Files (x86)\Adobe\Acrobat 10.0\Acrobat\Acrobat.exe"
.Arguments = "/h /t ""D:\demo.pdf"" ""HP Laserjet 1320"""
.CreateNoWindow = True
End With
ps.Start()
ps.WaitForInputIdle()
ps.CloseMainWindow()
MsgBox("Finished Printing")
Wenn du den Standarddrucker schon vorher anderweitig festlegst kannst du deine Funktion nach dem gleichen Schema so umbauen:
Function print(ByVal fname As String)
Dim psi As New ProcessStartInfo
With psi
.Verb = "print"
.CreateNoWindow = True
.FileName = fname
End With
Dim myProcess As Process = Process.Start(psi)
myProcess.WaitForInputIdle()
myProcess.CloseMainWindow()
Return (True)
End Function
Grüße Uwe