HTMLPrintDialog mit PB unter Windows

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
TroaX
Beiträge: 659
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

HTMLPrintDialog mit PB unter Windows

Beitrag 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
Zuletzt geändert von TroaX am 25.10.2018 09:42, insgesamt 2-mal geändert.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
Qnode
Beiträge: 67
Registriert: 19.07.2018 20:41
Computerausstattung: i5, 16GB RAM, Win10, PureBasic 6.00 (Windows - x64)

Re: HTMLPrintDialog mit PB unter Windows

Beitrag von Qnode »

Cool :D .

Welche Umwege muss man für Linux gehen?
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: HTMLPrintDialog mit PB unter Windows

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Re: HTMLPrintDialog mit PB unter Windows

Beitrag 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.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
TroaX
Beiträge: 659
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: HTMLPrintDialog mit PB unter Windows

Beitrag 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 ;)
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: HTMLPrintDialog mit PB unter Windows

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: HTMLPrintDialog mit PB unter Windows

Beitrag von RSBasic »

Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
TroaX
Beiträge: 659
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: HTMLPrintDialog mit PB unter Windows

Beitrag 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.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
TroaX
Beiträge: 659
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: HTMLPrintDialog mit PB unter Windows

Beitrag 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.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Re: HTMLPrintDialog mit PB unter Windows

Beitrag 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
my pb stuff..
Bild..jedenfalls war das mal so.
Antworten