Seite 1 von 1

HTML Drucken

Verfasst: 26.12.2005 17:38
von Zero_Cool
Hallo Zusammen

ICh habe in der Suchfunktion folgenden Code Gefunden.

Code: Alles auswählen

Global z.w 
z=100 
If PrintRequester() 

  If StartPrinting("PureBasic Test") 
  
    If StartDrawing(PrinterOutput()) 

        
      ReadFile(0,"c:\Dev\out.htm") 
      
      While Loc()<Lof() 
      zeile$ = ReadString() 
      Locate(100, z) : DrawText(zeile$) 
      z + 100 
      Wend 
      
      CloseFile(0) 
      StopDrawing() 
    EndIf 
    
    StopPrinting() 
  EndIf 
EndIf 
Nun wollte ich ein HTML File drucken. Leider druckt der Drucker den Gesammten Code aus, und nicht wie gewohnt einfach das Layout der HTML Seite. Wie kann ich den Code so abändern, das der HTML Code nicht mehr gedruckt wird?

Danke & Gruss

Verfasst: 26.12.2005 17:43
von Lukas-P
Ist ja auch logich das der den Code der HTML Seite ausdruckt, denn du ließt die HTML Datei doch so ein!

Um die Seite mit Layout auszudrucken, müsstest du einen eigenen "Browser" dafür schreiben. Doch das ist viel arbeit! an deiner Stellen würde ich in der API mal eine wenig "rumwühlen" und irgdwas mit dem IE machen.

Verfasst: 26.12.2005 18:01
von Hroudtwolf
Um die Seite mit Layout auszudrucken, müsstest du einen eigenen "Browser" dafür schreiben. Doch das ist viel arbeit!
Eben !
Einfach zum Drucken ein unsichtbares Fenster mit einem Webgadget öffnen, Code reinschicken und hier...

http://forums.purebasic.com/english/vie ... +webgadget

...mal reinschauen um zu kucken wie das Drucken funzt.

Verfasst: 23.02.2009 16:02
von Grillmeister
Hallo Zusammen !

Weil bei mir gerade aktuell, muss ich dieses alte Thema mal wieder hervorholen.
Ich möchte mit Purebasic eine Webseite ausdrucken und bin nach der Anleitung aus dem englischen Forum vorgegangen.
Hier der Code:

Code: Alles auswählen

 Enumeration
  #Adresse
  #OLECMDID_PRINT = 6
  #OLECMDEXECOPT_DONTPROMPTUSER = 2
  #OLECMDID_PRINTPREVIEW = 7 
EndEnumeration 
  
  If OpenWindow(0, 0, 0, 1024, 768, "Ausdruck", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
       WebGadget(#Adresse, 0, 0, 1024, 768, "http://www.google.de")
  
  
  WebObject.IWebBrowser2 = GetWindowLong_(GadgetID(#Adresse), #GWL_USERDATA) 
  
  Repeat
    WebObject\get_Busy(@IsBusy.l)
    Delay(1)
    While WindowEvent(): Wend
  Until IsBusy = 0
  
  ;WebObject\ExecWB(#OLECMDID_PRINT, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)
  
  WebObject\ExecWB(#OLECMDID_PRINTPREVIEW, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)  
  
   Repeat 
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
Um Papier zu sparen :wink: lasse ich mir nur die Druckvorschau anzeigen. Das Problem dabei ist, dass die Seite leer ist. Das Webgadget zeigt die Seite aber korrekt an.

Hat jemand eine Idee was ich da falsch gemacht habe ?

Danke und Gruß
Grillmeister

Verfasst: 24.02.2009 16:52
von Grillmeister
Dank diesem Thema: http://www.purebasic.fr/english/viewtop ... t=printweb

habe ich meinen Code geändert und nun funktioniert er so wie er soll (habe die Kommentare mal drin gelassen):

Code: Alles auswählen

  #Adresse                      = 0
  #OLECMDID_PRINT               = 6
  #OLECMDEXECOPT_DONTPROMPTUSER = 2
  #OLECMDID_PRINTPREVIEW        = 7

 
  If OpenWindow(0, 0, 0, 1024, 768, "Ausdruck", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
       WebGadget(#Adresse, 0, 0, 1024, 768, "www.google.de")
 
 
  WebObject.IWebBrowser2 = GetWindowLong_(GadgetID(#Adresse), #GWL_USERDATA)
  
  printit = #True ; ok to print when ready

Repeat
   
  Event = WaitWindowEvent()
 
  If printit = #True
    WebObject\get_ReadyState(@ready.l)
    ; from what I've seen in the past, a web page may not reach
    ; #READYSTATE_COMPLETE = 4 if there are missing objects, such
    ; as images. Once the web page reaches #READYSTATE_INTERACTIVE = 3
    ; it seems as though print works fine. You can change the following line to
    ; If ready = 4 And printit = #True
    ; and see which works best in your situation.
    If ready = 4 And printit = #True ; once we have interactive page we print
      
   
      If printit
        ;Preview
        WebObject\ExecWB(#OLECMDID_PRINTPREVIEW, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)
        ;Direkt drucken ohne Promt
        ;WebObject\ExecWB(#OLECMDID_PRINT, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0) 
        printit = #False
      EndIf
   
    EndIf

  EndIf

Until Event = #PB_Event_CloseWindow

EndIf

End

Verfasst: 24.02.2009 17:20
von Andesdaf
und schon ist das Problemchen weg! :)