Seite 1 von 1

PDF über WebSeite erstellen

Verfasst: Dienstag 2. Januar 2018, 11:49
von Peter1977
Hallo,

Suche eine Möglichkeit eine PDF zu erstellen.

Über einen Link soll zu dieser PDF Seite geführt werden. Diese PDF Seite ist allerdings nicht Statisch
sondern soll wenn dieser Link aufgerufen wird automatisch erstellt werden und angezeigt werden.

Die Webseiten werden in Python3.5 geschrieben.
Ebenso steht Reportlab zur Verfügung.

gesucht habe ich zwar schon bekomme aber immer angezeigt
die Direkte Seite zu PDF umwandeln.

Gut wären jetzt einige Tips die zu Richtigen Ergebnissen führen.
Danke
mfg Peter

Re: PDF über WebSeite erstellen

Verfasst: Dienstag 2. Januar 2018, 11:54
von Sirius3
@Peter1977: wenn Du schon Reportlab benutzt, wo ist jetzt konkret das Problem, ein PDF zu erstellen?

Re: PDF über WebSeite erstellen

Verfasst: Dienstag 2. Januar 2018, 17:33
von noisefloor
Hallo,

geht, keine Problem, auch "on the fly".

Grundsätzlich musst du "nur" das generierte PDF als Attchment beim Response anhängen. Das "wie" hängt dann konkret davon ab, welches Webframework du verwendest. Um das PDF nicht speichern zu müssen, kannst du es in ein StringIO-Objekt (statt eine Datei) schreiben.

In der Reportlab-Doku gibt's ein Beispiel dazu: http://www.reportlab.com/snippets/17/ - funktioniert vom Prinzip heute noch genau so.

Gruß, noisefloor

Re: PDF über WebSeite erstellen

Verfasst: Dienstag 2. Januar 2018, 23:49
von Peter1977
Hallo,
wenn Du schon Reportlab benutzt, wo ist jetzt konkret das Problem, ein PDF zu erstellen?
Das Dokument ohne zwischenspeicherung Direkt Anzeigen.
geht, keine Problem, auch "on the fly".
Das es geht ist schön die Frage wie.
generierte PDF als Attchment beim Response anhängen. Das "wie" hängt dann konkret davon ab, welches Webframework du verwendest
Webframework wird zurzeit keines verwendet
Reportlab-Doku gibt's ein Beispiel dazu: http://www.reportlab.com/snippets/17/ - funktioniert vom Prinzip heute noch genau so.
Werde ich mir Ansehen.

habe jetzt wieder neue Suchbegriffe.

Danke erstmal

mfg Peter

Re: PDF über WebSeite erstellen

Verfasst: Mittwoch 3. Januar 2018, 00:06
von kbr
@Peter1977: Du brauchst kein Webframework, obwohl dies hilfreich sein kann. Du brauchst lediglich beim Response im Header 'application/pdf' als content-type zu setzen und den (on the fly) erzeugten pdf-Code im Body hinterher zu senden.

Re: PDF über WebSeite erstellen

Verfasst: Mittwoch 3. Januar 2018, 09:26
von noisefloor
Hallo,
Webframework wird zurzeit keines verwendet
Wie liefert ihr die Webseiten denn aus? CGI?

Gruß, noisefloor

Re: PDF über WebSeite erstellen

Verfasst: Mittwoch 3. Januar 2018, 11:41
von Peter1977
Hallo,
Wie liefert ihr die Webseiten denn aus? CGI?
Ja

mfg Peter

Re: PDF über WebSeite erstellen

Verfasst: Mittwoch 3. Januar 2018, 11:59
von __deets__
Und bekommen wir das auch zu sehen? Es ist deutlich einfacher zu helfen, wenn man sieht, was versucht wird, statt prophylaktisch 10-seitige Abhandlungen ueber das HTTP-Protokoll zu schreiben.

Re: PDF über WebSeite erstellen

Verfasst: Donnerstag 4. Januar 2018, 00:01
von Peter1977
Hallo,
Und bekommen wir das auch zu sehen?
Ja natürlich aber eine "Leere Seite" bringt ja auch nicht viel
Bringt ja dann nur was wenn was drinnen steht.

Code: Alles auswählen

print ("Content-type:application/pdf")
print ("")
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4,landscape
from reportlab.lib.units import mm
# Standard Importe
import sys
import time
import cgi
import cgitb; cgitb.enable()
# Eigene Datei Importe
sys.path.append(r'../mod')
import db
import funktionen

form=cgi.FieldStorage()
Spalten=form.getvalue("Spalten")

Datum=(str(time.strftime("%Y-%m-%d")))

response = None

PDF = canvas.Canvas(response,pagesize=landscape(A4))
PDF.drawString(150,100, Datum)
PDF.drawString(100,100, "Spalten: %s"%(Spalten))
PDF.showPage()
PDF.save()
ist das was sich zur Zeit habe was aber zur Zeit noch nicht funktioniert.

mfg Peter

Re: PDF über WebSeite erstellen

Verfasst: Donnerstag 4. Januar 2018, 00:22
von Sirius3
@Peter1977: canvas kennt »getpdfdata«, das genau das ist, was Du suchst. Pfade werden relativ zum Ort, an dem die Datei ausgeführt wird gesucht, Du solltest einen absoluten Pfad, oder relativ zu __file__ benutzen. »mod« ist kein guter Name für ein Verzeichnis für Module, db und funktionen keine guten Namen für Module, weil sie zu generisch sind. Du hältst Dich bei der Benennung Deiner Variablennamen nicht an die Konventionen, alles klein zu schreiben. Zeile 19 hat einige Klammern und ein str zu viel.

Re: PDF über WebSeite erstellen

Verfasst: Donnerstag 4. Januar 2018, 00:25
von __deets__
Du kannst an Canvas als erstes Argument eine StringIO Instanz übergeben. Die wird dann mit den Bytes der Datei befüllt, und den string kannst du dann zurück geben. Keine Datei angelegt.

http://nullege.com/codes/show/src@d@j@d ... encrypt.py


Dein Skript so hinzufummeln, das es dann auch noch wirklich korrektes HTTP wird - da mag sich wer anders versuchen. Mich schauderst bei dem Rückflug in die 90er zu sehr.

Re: PDF über WebSeite erstellen

Verfasst: Donnerstag 4. Januar 2018, 07:45
von noisefloor
Hallo,

@Peter1977: baut ihr das PDF wirklich low-level über den Canvas und nicht via Platypus? Kann man zwar machen, ist aber bei größeren Dokumenten extrem aufwendig und fummelig.

Ansonsten würde ich auch dringend zur Verwendung eine Webframeworks wie Bottle oder Flask raten und auf WSGI statt CGI setzen. Nicht nur, weil dann vieles einfacher - und flexibler - ist, sondern auch, mal man den Code viel bessere und sauberer strukturieren kann. Bei Verwendung von CGI besteht immer das latente Risiko, unübersichtlichen Spaghetti-Code zu schreiben.

Gruß, noisefloor

Re: PDF über WebSeite erstellen

Verfasst: Freitag 5. Januar 2018, 00:33
von Peter1977
Hallo,
Du hältst Dich bei der Benennung Deiner Variablennamen nicht an die Konventionen, alles klein zu schreiben. Zeile 19 hat einige Klammern und ein str zu viel.
Bei den Konventionen bin ich nicht am laufenden. Zeile 19 geändert.
canvas kennt »getpdfdata«
Du kannst an Canvas als erstes Argument eine StringIO Instanz übergeben. Die wird dann mit den Bytes der Datei befüllt, und den string kannst du dann zurück geben. Keine Datei angelegt.

http://nullege.com/codes/show/src@d@j@d ... encrypt.py
sehe ich mir an.
Dein Skript so hinzufummeln, das es dann auch noch wirklich korrektes HTTP wird - da mag sich wer anders versuchen. Mich schauderst bei dem Rückflug in die 90er zu sehr.
Im Moment reicht es wenn gültiges PDF heraus kommt HTML wird dann nachher noch kontrolliert
baut ihr das PDF wirklich low-level über den Canvas und nicht via Platypus? Kann man zwar machen, ist aber bei größeren Dokumenten extrem aufwendig und fummelig.
Das ihr bin nur ich das ganze ist nur Abteilungs Intern das ist auch nicht mein Hauptbetätigungsfeld.
Aber sollte trotzdem den Konventionen entsprechen.

mfg Peter

Re: PDF über WebSeite erstellen

Verfasst: Freitag 5. Januar 2018, 07:28
von noisefloor
Hallo,
Aber sollte trotzdem den Konventionen entsprechen.
Das hat nichts mit Konvetionen zu tun. Reportlab erzeught PDFs gem. PDF Version 1.4, die können alle PDF-Reader problemlos darstellen.

Der Punkt ist, dass du es dir gerade unnötig schwer machst, in dem du a) CGI statt eine WSGI-Framework benutzt und b) bei Reportlab mit dem Canvas hantierst statt Platypus zu nehmen.

Gruß, noisefloor