Liebe Freunde,
in meiner Software generiere ich pdf-Dateien. Das funktioniert soweit ganz gut. Ich verwende dazu fpdf, welches ich mit " pip install fpdf" installiert habe. Meine Python-Version ist 2.7.
Nun wollte ich mehr machen mit den pdf-Dateien, Striche zeichnen, Zellen positionieren etc. und komme drauf, dass viele der in diversen Tutorials beschriebenen Funktionen gar nicht funktionieren und einen Fehler schmeissen.
Daher denke ich, dass mein fpdf zu alt ist und habe daher pypdf2 installiert. Nun suche ich eine Befehlsreferenz und lese da die wildesten Sachen übr pypdf und pypdf2 und fpdf und und und
Ich kenn mich nicht mehr aus.
Was soll ich jetzt nehmen, wo finde ich eine Dokumentation dazu, etc. Ich erzeuge ein pdf, platziere ein Icon und mach ein paar Zellen mit Text oder ein Bild, mehr ist es nicht.
Danke.
PDF generieren - bin leicht verwirrt
- __blackjack__
- User
- Beiträge: 13087
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@WalterT: Ich habe nicht den Eindruck das PyPDF etwas ist was Deine Anforderungen erfüllt.
Der Klassiker in Python um PDFs zu erstellen ist eigentlich Reportlab.
Was ziemlich sicher alt ist, ist Python 2.7. Wenn es da nicht gute Gründe für gibt, solltest Du auf Python 3 umsteigen.
Der Klassiker in Python um PDFs zu erstellen ist eigentlich Reportlab.
Was ziemlich sicher alt ist, ist Python 2.7. Wenn es da nicht gute Gründe für gibt, solltest Du auf Python 3 umsteigen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
- __blackjack__
- User
- Beiträge: 13087
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Ich finde Python 2.7 auch besser, aber das ist halt tot und wird definitiv nicht mehr weiterentwickelt. Ab Ende des Jahres wird es nicht einmal mehr Sicherheitsupdates mehr geben.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
hab jetzt alles auf python 3.7 umgestellt und "mein" Programm im pycharm durchgeackert auf Änderungen. Passt soweit.
Nun will ich statt fpdf reportlab verwenden. In allen Tutorials steht "from reportlab.pdfgen import canvas". Wenn ich das mache, bekomme ich eine Fehlermeldung "ModuleNotFoundError: No module named 'reportlab'"
ja was jetzt? ich habs doch installiert (pip install reportlab, ist durchgelaufen)
Was mache ich falsch?
Nun will ich statt fpdf reportlab verwenden. In allen Tutorials steht "from reportlab.pdfgen import canvas". Wenn ich das mache, bekomme ich eine Fehlermeldung "ModuleNotFoundError: No module named 'reportlab'"
ja was jetzt? ich habs doch installiert (pip install reportlab, ist durchgelaufen)
Was mache ich falsch?
Danke.
Hab alles deinstalliert und von vorne angefangen, meine Umgebung aufzubauen.
Im Python 3.7 scheint reportlab enthalten zu sein, hab es nicht mit pip3 extra installiert.
Die Fehlermeldung ist jetzt auch weg.
Da war wohl noch was durcheinander mit Python 2.7 und 3.7.
Hab alles deinstalliert und von vorne angefangen, meine Umgebung aufzubauen.
Im Python 3.7 scheint reportlab enthalten zu sein, hab es nicht mit pip3 extra installiert.
Die Fehlermeldung ist jetzt auch weg.
Da war wohl noch was durcheinander mit Python 2.7 und 3.7.
aha, interessant. Hab nichts davon installiert, ist aber da....
wie auch immer, klären wir später.
Momentan stehe ich mit reportlab auf dem Schlauch, die Dokumentation ist grottenschlecht, unvollständig....
Ich hab das Beispiel probiert:
def hello(c):
from reportlab.lib.units import cm
# move the origin up and to the left
c.translate(cm,cm)
wobei ich c.translate (cm,cm) nicht kapiere. Das sollte den Bezugspunkt nach links oben schieben? tut es abernicht. Ich verwende als unit cm und da steht irgendein float-Wert drinnen.
Ich kann schon pdf generieren, aber komme einfach mit den kartesischen Koordinaten nicht zurecht. (0,0 ist links unten).
Bitte erklärt mir das. Aus der Doku kann ich nichts herauslesen.
wie auch immer, klären wir später.
Momentan stehe ich mit reportlab auf dem Schlauch, die Dokumentation ist grottenschlecht, unvollständig....
Ich hab das Beispiel probiert:
def hello(c):
from reportlab.lib.units import cm
# move the origin up and to the left
c.translate(cm,cm)
wobei ich c.translate (cm,cm) nicht kapiere. Das sollte den Bezugspunkt nach links oben schieben? tut es abernicht. Ich verwende als unit cm und da steht irgendein float-Wert drinnen.
Ich kann schon pdf generieren, aber komme einfach mit den kartesischen Koordinaten nicht zurecht. (0,0 ist links unten).
Bitte erklärt mir das. Aus der Doku kann ich nichts herauslesen.
Also hier kann man das prima aus der Dokumentation herauslesen:
Mit c.translate(cm, cm) verschiebst du die Zeichnungen auf dem Canvas einen Zentimeter nach oben und einen Zentimeter nach rechts.
Wenn ich mich richtig erinnre.
Du verschiebst mit canvas.translate also den 0,0 Punkt des Canvas, auf den sich zukünftige "Zeichnungen" darauf beziehen.def translate(self, dx, dy):
move the origin from the current (0,0) point to the (dx,dy) point
(with respect to the current graphics state).
Mit c.translate(cm, cm) verschiebst du die Zeichnungen auf dem Canvas einen Zentimeter nach oben und einen Zentimeter nach rechts.
Wenn ich mich richtig erinnre.
Zuletzt geändert von sparrow am Mittwoch 13. März 2019, 14:23, insgesamt 1-mal geändert.
- __blackjack__
- User
- Beiträge: 13087
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@WalterT: Doch das verschiebt den Ursprung einen Zentimeter nach links und einen Zentimeter nach oben. `cm` ist eine Konstante die 1 cm in Points (1/72 inch) angibt. Das steht aber auch in der Dokumentation.
Importe gehören an den Anfang des Moduls, nicht in Funktionen.
Importe gehören an den Anfang des Moduls, nicht in Funktionen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
aha, ok,
die hier erwähnte API-Referenz kannte ich nicht, ich hab nur den User-Guide von der reportlab-Site, da steht das Beispiel so drinnen (mit dem import innerhalb der Funktion), wobei ich den Kommentar "# move the origin up and to the left " so interpretiert habe, dass mein 0,0 dann oben links ist.
Also nicht. ok.
Wenn also alles vom 0,0 ausgeht, dann würde ein Bild, das an einer bestimmten Position eingefügt wird, sich nach oben und rechts darstellen, anstatt - wie es venünftig wäre - nach unten und rechts. Ich muss also vorher die Höhe des Bildes feststellen und meinen 0,0 berechnen. Was für ein Unsinn! aber vielleicht versteh ich da noch was nicht, irgendwer hat sich sicher was dabei gedacht.
Gibs eine Alternative zu reportlab?
die hier erwähnte API-Referenz kannte ich nicht, ich hab nur den User-Guide von der reportlab-Site, da steht das Beispiel so drinnen (mit dem import innerhalb der Funktion), wobei ich den Kommentar "# move the origin up and to the left " so interpretiert habe, dass mein 0,0 dann oben links ist.
Also nicht. ok.
Wenn also alles vom 0,0 ausgeht, dann würde ein Bild, das an einer bestimmten Position eingefügt wird, sich nach oben und rechts darstellen, anstatt - wie es venünftig wäre - nach unten und rechts. Ich muss also vorher die Höhe des Bildes feststellen und meinen 0,0 berechnen. Was für ein Unsinn! aber vielleicht versteh ich da noch was nicht, irgendwer hat sich sicher was dabei gedacht.
Gibs eine Alternative zu reportlab?
Wow, da bekommt man richtig Lust dir zu helfen.
Du hast doch den Userguide und jetzt sogar den Link zu der Dokumentation, die du selbst übersehen hast.
Vielleicht gibt es ja in einem der beiden Dokumente (oder sogar in beiden ) die Erwähnung einer Funktion, die das Koordinatensystem ändert.
Übrigens ist es sowohl bei PDF als auch bei PostScript so, dass 0,0 in der unten linken Ecke sitzt. Was sie tun entspricht also dem Standard.
Papier, Bleistift und Scanner.
- __blackjack__
- User
- Beiträge: 13087
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@WalterT: Musst Du Adobe fragen was die sich dabei gedacht haben. Wahrscheinlich das es für die meisten normalen Menschen bei einem Koordinatensystem üblich ist, dass es den Ursprung unten links hat. Das ist kein Unsinn sondern eigentlich völlig normal wenn man mit Papier arbeitet. Das der Ursprung oben links liegt ist ja eher so ein technisch bedingtes Computerding. Aber wenn Dir das nicht gefällt, dann weisst Du doch bereits, das man den Ursprung mit `translate()` wo anders hin verschieben kann. Und der Ankerpunkt für Bilder ist die Mitte des Bildes. Kann man aber auch an eine der Ecken setzen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Danke.
@sparrow: du musst ja nichts schreiben, "vielleicht" hilft mir eher nicht.
"translate()" nutzt mir in diesem Falll nichts, ich verwende jetzt drawImage mit dem "anchor"- Parameter, das funktioniert gut und positioniert das Bild dort wo ich es will und in der richtigen Größe, proportional. - Problem gelöst.
Ich danke allen Postern und schließe diesen Thread ab.
lg
Walter
@sparrow: du musst ja nichts schreiben, "vielleicht" hilft mir eher nicht.
"translate()" nutzt mir in diesem Falll nichts, ich verwende jetzt drawImage mit dem "anchor"- Parameter, das funktioniert gut und positioniert das Bild dort wo ich es will und in der richtigen Größe, proportional. - Problem gelöst.
Ich danke allen Postern und schließe diesen Thread ab.
lg
Walter
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Reportlab ist DAS Standardmodul zur PDF-Generierung uner Python. Punkt. Es gibt auch andere Wege, aber Reportlab ist in der Regel einfacher.
Die Doku ist eigentlich ziemlich gut, aber halt ein bisschen anders geschrieben. Hat mich anfangs auch ein wenig gestört, aber letztendlich steht fast alles drin.
Noch ein Tip: bevor man sich mit low-level Operationen auf dem Canvas rum schlägt, sollte man sehen, ob es nicht einen Weg über die high-level API Namens Platypus von Reportlab gibt. Also am besten die Doku 1x _komplett_ lesen. Schadet nicht.
Gruß, noisefloor
Reportlab ist DAS Standardmodul zur PDF-Generierung uner Python. Punkt. Es gibt auch andere Wege, aber Reportlab ist in der Regel einfacher.
Die Doku ist eigentlich ziemlich gut, aber halt ein bisschen anders geschrieben. Hat mich anfangs auch ein wenig gestört, aber letztendlich steht fast alles drin.
Noch ein Tip: bevor man sich mit low-level Operationen auf dem Canvas rum schlägt, sollte man sehen, ob es nicht einen Weg über die high-level API Namens Platypus von Reportlab gibt. Also am besten die Doku 1x _komplett_ lesen. Schadet nicht.
Gruß, noisefloor