Seite 1 von 2

HTMLPrintDialog mit PB unter Windows

Verfasst: 23.10.2018 20:40
von TroaX
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: Alles auswählen

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

Re: HTMLPrintDialog mit PB unter Windows

Verfasst: 24.10.2018 11:43
von Qnode
Cool :D .

Welche Umwege muss man für Linux gehen?

Re: HTMLPrintDialog mit PB unter Windows

Verfasst: 24.10.2018 11:45
von RSBasic
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.

Re: HTMLPrintDialog mit PB unter Windows

Verfasst: 24.10.2018 11:55
von #NULL
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: Alles auswählen

   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.

Re: HTMLPrintDialog mit PB unter Windows

Verfasst: 24.10.2018 12:04
von TroaX
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 ;)

Re: HTMLPrintDialog mit PB unter Windows

Verfasst: 24.10.2018 12:32
von RSBasic
@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.

Re: HTMLPrintDialog mit PB unter Windows

Verfasst: 24.10.2018 12:36
von RSBasic

Re: HTMLPrintDialog mit PB unter Windows

Verfasst: 24.10.2018 12:42
von TroaX
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.

Re: HTMLPrintDialog mit PB unter Windows

Verfasst: 24.10.2018 15:06
von TroaX
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.

Re: HTMLPrintDialog mit PB unter Windows

Verfasst: 24.10.2018 15:16
von #NULL
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:
viewtopic.php?p=344041#p344041