beatzler
Goto Top

Lokale HTML Site mit Iframe vollständig automatisch ausdrucken lassen

Hey,

habt ihr ggf. noch nen guten Tipp für mich ?

Ich bin derzeit auf der Suche nach einer Lösung voll automatisch mittels skript etc. eine lokale, ganze einfache html Seite auszudrucken. Soweit so gut hab ich auch schon z.B. sowas hier gefunden: www.printhtml.com/index.php

klappt wunderbar, Knackpunkt: In dem File ist ein iframe ( Karte ) eingebaut was nicht mit gedruckt wird ....

Habt ihr nen Tipp / Trick?

Per Batch wird dies denke ich sehr schwierig oder ?


Danke im Voraus!

MFG Beatzler

Content-ID: 183264

Url: https://administrator.de/contentid/183264

Ausgedruckt am: 13.11.2024 um 22:11 Uhr

mak-xxl
mak-xxl 08.04.2012 um 21:01:40 Uhr
Goto Top
Moin Beatzler,

Hiermit geht das auch auf der Kommandozeile prima. Das lohnt das anschauen, ebenso wie das.

Frohe Ostern und freundliche Grüße von der Insel - Mario
Beatzler
Beatzler 08.04.2012 um 21:39:05 Uhr
Goto Top
Hey Mario,

super vielen Dank für deine Antwort und Hilfe!

Leider möchte ich für diese Lösung nich "verhältnissmäßig" soviel Geld ausgeben ...

Daher würden die ersten beiden Lösungen leider wegfallen ... C# kann ich leider nicht proggen :/

Dachte eher an ein einfaches, kleines Basic Skript oder Trick mit der Windows eigenen Druckmöglichkeit etc..

Mhhhhh
mak-xxl
mak-xxl 08.04.2012 um 21:46:30 Uhr
Goto Top
Moin Beatzler,

Nun, wenn 29,99 USD viel Geld sind, dann vielleicht noch:

... Trick mit der Windows eigenen Druckmöglichkeit ...

eventuell kannst Du mit einem dieser Vorschläge die browserinterne Druckfunktion aufrufen?

Frohe Ostern und freundliche Grüße von der Insel - Mario
rubberman
rubberman 09.04.2012 um 00:02:04 Uhr
Goto Top
Hallo Beatzler.

Du könntest auch versuchen den InternetExplorer zu scripten:

*.vbs
Const strURL = "http://www.google.com"  

' http://msdn.microsoft.com/en-us/library/ms691264%28v=vs.85%29.aspx  
Const OLECMDID_PRINT = 6

' http://msdn.microsoft.com/en-us/library/ms683930%28v=vs.85%29.aspx  
Const OLECMDEXECOPT_DONTPROMPTUSER = 2

Dim objIE
Set objIE = CreateObject("InternetExplorer.Application")  
objIE.Visible = True 'Setze auf False, wenn alles funktioniert  
objIE.Navigate strURL

Do While objIE.Busy Or (objIE.ReadyState <> 4)
    Wscript.Sleep 100
Loop

' http://msdn.microsoft.com/en-us/library/aa752087%28v=vs.85%29.aspx  
objIE.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER

WScript.Sleep 3000
objIE.Quit
Set objIE = Nothing

Grüße
rubberman
Beatzler
Beatzler 09.04.2012 um 13:36:15 Uhr
Goto Top
Hey,

das scheint super gut zu funktionieren !!!

Vielen lieben Dank!

Wie bist du auf diese Lösung gekommen?!

Jetzt muss ich den IE nur noch dazu bringen das Iframe richtig anzuzeigen / zu laden aber das sollte man hinbekommen face-smile)

BIG THX !

MFG Beatzler
rubberman
rubberman 09.04.2012 um 15:14:32 Uhr
Goto Top
Hallo Beatzler.

Zitat von @Beatzler:
Wie bist du auf diese Lösung gekommen?!

Ich wusste, dass man den IE scripten kann und hatte auch eine Vorstellung davon wie es funktionieren müsste. Den Rest habe ich bei Google und auf den auskommentierten Seiten im MSDN nachgelesen. Ist also nicht sooo kompliziert gewesen face-smile

Das Problem bei HTML Dateien ist nun mal, dass der Quelltext geparst und interpretiert werden muss, um einen Ausdruck der Seite zu erzeugen. Nichts eignet sich besser als ein Webbrowser ...

Grüße
rubberman
Beatzler
Beatzler 09.04.2012 um 17:47:24 Uhr
Goto Top
Super, einfach genial face-smile

Vielen Dank nochmals !

MFG
Beatzler
Beatzler 21.12.2012 um 14:08:08 Uhr
Goto Top
Hey hey,

hättet ihr ggf. nochmals einen Tipp für mich ? Das mit dem oben genannten Script funktioniert generell super. Nur leider lädt er manchmal das iframe ( google Maps Karte ) auf der auszudruckenden Seite unvollständig oder falsch .... Habe schon mit den Warte / Pausen Werten rumgespielt aber das bringt leider nichts. Wenn ich das ganze manuell per Hand mache funktioniert der Ausdruck ... :/

Jemand ne Idee / nen Tipp wodran das liegen könnte oder wie man das beheben kann ?

VIelen Dank !

MFG Beatzler
rubberman
rubberman 21.12.2012 um 19:02:15 Uhr
Goto Top
Hallo Beatzler.

Ich könnte mir vorstellen, das Browser heutzutage soweit optimiert sind, dass sie nur noch die Teile einer Seite laden, die sichtbar sind.
Vielleicht sollte man dann tatsächlich den Browser im Fullscreen Modus laufen lassen und zusätzlich prüfen, ob das IFrame geladen wurde (sofern eines existiert).

Const strURL = "http://maps.google.de/maps?hl=de&tab=wl"  

Const OLECMDID_PRINT = 6
Const OLECMDEXECOPT_DONTPROMPTUSER = 2

Dim objIE
Set objIE = CreateObject("InternetExplorer.Application")  
objIE.Visible = True
objIE.FullScreen = True
objIE.Navigate strURL

Do While objIE.Busy Or (objIE.ReadyState <> 4)
    WScript.Sleep 100
Loop

Dim n
n = objIE.Document.getElementsByTagName("iframe").length  
If n > 0 Then
  Dim objIFrame
  Set objIFrame = objIE.Document.getElementsByTagName("iframe")(0)  
  Do While objIFrame.ReadyState <> "complete"  
      WScript.Sleep 100
  Loop
End If

objIE.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER

WScript.Sleep 3000

Set objIFrame = Nothing
objIE.Quit
Set objIE = Nothing

Hoffe das funktioniert.

Grüße
rubberman
Beatzler
Beatzler 21.12.2012 um 19:42:46 Uhr
Goto Top
Hey rubberman,

klasse erstmal vielen Dank für deinen tollen und schnellen Support !!! Mal wieder Genial!

Kann es auswirkungen haben ob ich das ganze sichtbar oder "unsichtbar" ausführen lasse ?
objIE.Visible = True ( hatte es bisher immer im Hintergrund )

Ich kann das ganze mit nem PDF Printer testen, nur leider verhält sich dort immer alles korrekt und auf Papier stimmt es dann komischerweise nicht ganz .... ( kann ich mir auch noch nicht ganz erklären, passiert aber auf zwei unterschiedlchen Systemen / Druckern identisch ... )

Die aufzurufende Website hat zwei kleine iframe´s, oben nur einen kleinen text und unten die google maps Karte ...
Bin leider kein Experte :/ Muss ich meine frame´s irgendwie speziell bennen oder hat das hiermit nix zu tun getElementsByTagName("iframe") ? Wäre das der name=Tag in der HTML Site ??

Müsste morgen mal einen Versuch mit deinem neuem Code real starten ...

Danke und Gruß

Beatzler
rubberman
rubberman 21.12.2012, aktualisiert am 22.12.2012 um 15:39:02 Uhr
Goto Top
Hallo Beatzler,

ob die Visible Eigenschaft einen Einfluss hat, solltest du mal real testen.

getElementsByTagName("iframe") gibt eine Collection (Array) aller im Dokument enthaltenen IFrames zurück. Die Eigenschaft .length dann die gefundene Anzahl. Über den Index lässt sich auf die einzelenen Elemente zugreifen, ein spezieller Name/ID ist nicht notwendig.

In meinem obigen Code bin ich nur von maximal einem IFrame ausgegangen. Um sicher zu stellen, dass wirklich alle IFrames geladen sind, muss noch eine zusätzlich Schleife rein.
Const strURL = "http://maps.google.de/maps?hl=de&tab=wl"  

Const OLECMDID_PRINT = 6
Const OLECMDEXECOPT_DONTPROMPTUSER = 2

Dim objIE
Set objIE = CreateObject("InternetExplorer.Application")  
objIE.Visible = True
objIE.FullScreen = True
objIE.Navigate strURL

Do While objIE.Busy Or (objIE.ReadyState <> 4)
    WScript.Sleep 100
Loop

Dim n
n = objIE.Document.getElementsByTagName("iframe").length  
If n > 0 Then
  Dim objIFrame, i
  For i = 1 To n
    Set objIFrame = objIE.Document.getElementsByTagName("iframe")(i - 1)  
    Do While objIFrame.ReadyState <> "complete"  
        WScript.Sleep 100
    Loop
    Set objIFrame = Nothing
  Next
End If

objIE.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER

WScript.Sleep 3000

objIE.Quit
Set objIE = Nothing

Grüße
rubberman

EDIT: (i - n) war natürlich falsch. (i - 1) !
Beatzler
Beatzler 23.12.2012 um 19:52:47 Uhr
Goto Top
Hey rubberman,

vielen dank!!! ICh konnte das ganze heute real mal testen und habe ein bisschen gespielt mit visibile an / aus, den Wartezeiten, FUllscreen sowie ein paar IE Druckeinstellungen usw.
Es ist eine Verbesserung ersichtlich aber leider entstehen immer noch komische Anzeigevarianten der Google Karte....
Das komische ist nur wenn ich im Visible bin sieht alles gut aus, auch wenn ich manuell auf die Druckvorschau klick sieht noch alles schicki aus ... Nur der PDF oder Real Ausdruck ist dann immer teilweise verschoben oder verzehrt ...


Ich glaube es liegt nicht wirklich an deinem Skript....

Sehr komisch alles. Ich danke dir trotzdem auf jedenfall nochmals für deine bisherige klasse Hilfe !!!