PureBoard
http://forums.purebasic.com/german/

HTMLPrintDialog mit PB unter Windows
http://forums.purebasic.com/german/viewtopic.php?f=8&t=31140
Seite 1 von 2

Autor:  TroaX [ 23.10.2018 20:40 ]
Betreff des Beitrags:  HTMLPrintDialog mit PB unter Windows

Wem das zeichnen von Dokumente zu müßig ist, um sie mit den PureBasic eigenen Mitteln zu drucken, habe ich hier einen kleinen Trick, wie man den Druckdialog des WebGadgets dafür nutzen kann, ein erzeugtes HTML zu drucken (nur Windows - Linux und Mac über Umwege):
Code:
EnableExplicit

Define.s HTMLContent

HTMLContent = "<h1>HTML-Inhalt</h1>"
HTMLContent + "<p>Dies ist der HTML-Inhalt, der gedruckt werden soll.</p>"
HTMLContent + "<p>Ziel ist es, mit dem Webgadget eine Druckvorschau mit direktem <strong>Druckbefehl</strong> zu erzeugen."

Procedure HTMLPrintDialog(Content.s, Stylesheet.s = "")
   Define.s FullHTML
   Define.i PrintDialog, Event, Window
   
   FullHTML = "<HTML><HEAD><TITLE>PRINTOUTPUT</TITLE>"
   FullHTML + "<meta http-equiv="+Chr(34)+"X-UA-Compatible"+Chr(34)+" content="+Chr(34)+"IE=edge"+Chr(34)+" />"
   If Stylesheet <> ""
      FullHTML + "<style>" + Stylesheet + "</style>"
   EndIf
   FullHTML + "</HEAD><BODY ONLOAD="+Chr(34)+"window.focus(); window.print(); window.onfocus = function(){ document.title = 'CLOSE'; };"+Chr(34)+">"
   FullHTML + Content
   FullHTML + "</BODY></HTML>"
   
   Window = OpenWindow(#PB_Any,800,0,600,900,"Druckvorschau ...")
   PrintDialog = WebGadget(#PB_Any,0,0,600,900,"")
   
   SetGadgetItemText(PrintDialog, #PB_Web_HtmlCode, FullHTML)
   
   Repeat
     Event = WaitWindowEvent()
     If Event = #PB_Event_Gadget
        If EventGadget() = PrintDialog And EventType() = #PB_EventType_TitleChange
           If GetGadgetItemText(PrintDialog,#PB_Web_PageTitle) = "CLOSE"
               break
           EndIf
        EndIf
     EndIf
   Until Event = #PB_Event_CloseWindow
   CloseWindow(Window)
EndProcedure

HTMLPrintDialog(HTMLContent, "h1 { color: red; }")


So sieht das aus:
Bild

Autor:  Qnode [ 24.10.2018 11:43 ]
Betreff des Beitrags:  Re: HTMLPrintDialog mit PB unter Windows

Cool :D .

Welche Umwege muss man für Linux gehen?

Autor:  RSBasic [ 24.10.2018 11:45 ]
Betreff des Beitrags:  Re: HTMLPrintDialog mit PB unter Windows

Da das HTML und Javascript ist, sollte das keine Rolle spielen. Das sollte unter Linux genauso funktionieren. Und WebGadget wird unter Linux auch unterstützt.

Autor:  #NULL [ 24.10.2018 11:55 ]
Betreff des Beitrags:  Re: HTMLPrintDialog mit PB unter Windows

Hier mit Ubuntu 18 bricht das Break sofort aus der Schleife, und ohne Break öffntet sich kein Druckdialog. Ich kann das HTML aber in eine Datei speichern
Code:
   CreateFile(0, "/tmp/file.html")
   WriteString(0, FullHTML)
   CloseFile(0)
und diese mit Firefox öffnen, dann erscheint der Druckdialog. Kenne mich leider mit dem Webgadget nicht weiter aus.

Autor:  TroaX [ 24.10.2018 12:04 ]
Betreff des Beitrags:  Re: HTMLPrintDialog mit PB unter Windows

RSBasic hat geschrieben:
Da das HTML und Javascript ist, sollte das keine Rolle spielen. Das sollte unter Linux genauso funktionieren. Und WebGadget wird unter Linux auch unterstützt.

Interessant! Laut Handbuch kann man nur mit Windows den HTML-Code direkt ins Gadget schieben. Mit Linux und Mac geht es nur über Datei oder Server. Zumindest war das bisher so. Wenn es jetzt dort auch mit SetGadgetItemText geht, dann habe ich nichts gesagt und es ist Cross-Plattform. Ansonsten geht es nur über Umwege.

Kleiner Tipp: Der Atomic Webserver aus dem Examples-Ordner dürfte für einen Umweg reichen ;)

Autor:  RSBasic [ 24.10.2018 12:32 ]
Betreff des Beitrags:  Re: HTMLPrintDialog mit PB unter Windows

@TroaX
Danke für die Information. Ist das generell eine Einschränkung unter Linux und MacOS oder liegt es an PB?
Diesen Umweg finde ich doof, dass man den Inhalt nicht direkt reinschreiben kann und dass man jedes Mal eine Datei erstellen muss.

Wenn es an PB liegt, vielleicht kann man mit Liinux-API den Inhalt direkt einfügen.

Autor:  RSBasic [ 24.10.2018 12:36 ]
Betreff des Beitrags:  Re: HTMLPrintDialog mit PB unter Windows

Ich hab da was gefunden: https://www.purebasic.fr/english/viewto ... 12&t=71089

Autor:  TroaX [ 24.10.2018 12:42 ]
Betreff des Beitrags:  Re: HTMLPrintDialog mit PB unter Windows

RSBasic hat geschrieben:
@TroaX
Danke für die Information. Ist das generell eine Einschränkung unter Linux und MacOS oder liegt es an PB?

Das kann ich dir so nicht genau sagen. Ich denke es ließ sich nicht direkt so einfach implementieren wie unter Windows.

RSBasic hat geschrieben:
Diesen Umweg finde ich doof, dass man den Inhalt nicht direkt reinschreiben kann und dass man jedes Mal eine Datei erstellen muss.

Ich würde es dann sowieso eher über einen Webserver auf Basis des Atomics machen. Er muss das HTML ja nur stumpf ausliefern. Mehr nicht.

Autor:  TroaX [ 24.10.2018 15:06 ]
Betreff des Beitrags:  Re: HTMLPrintDialog mit PB unter Windows

So endlich zu Hause! :lol:

#NULL hat geschrieben:
Hier mit Ubuntu 18 bricht das Break sofort aus der Schleife, und ohne Break öffntet sich kein Druckdialog.

Es kann durchaus sein, das unter Linux und Mac dem Webkit-Gadget der Druckdialog fehlt. Unter Windows funktioniert das ganze so auch nur, weil der Druckdialog die weitere Ausführung des Javascripts verhindert. Damit das ganze wie eine Vorschau mit direktem Druckdialog funktioniert, ist auf Grund der eingeschränkten Möglichkeiten des Gadgets ein kleiner Javascript-Hack nötig. Wenn aber der Druckdialog fehlt, läuft das Javascript weiter und löst das Event aus, welches das Schließen der Vorschau forcieren soll. Deswegen läuft es bei dir auch direkt in den Break. Und das der Dialog ohne Break nicht erscheint, zeigt leider das Fehlen des Dialogs im Gadget unter Linux. Denn das Fenster der Druckvorschau bekommste denke ich mal.

Autor:  #NULL [ 24.10.2018 15:16 ]
Betreff des Beitrags:  Re: HTMLPrintDialog mit PB unter Windows

Zitat:
Denn das Fenster der Druckvorschau bekommste denke ich mal.

Ich sehe das Fenster mit dem gerenderten HTML, den Druckdialog nur über eine Datei mit Firefox.
Mir kam das jetzt aber irgendwie bekannt vor, und hatten wir auch tatsächlich schonmal:
https://www.purebasic.fr/german/viewtopic.php?p=344041#p344041

Seite 1 von 2 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/