Formularfelder in PDF erstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Nobuddy
User
Beiträge: 762
Registriert: Montag 30. Januar 2012, 16:38

Freitag 21. Juli 2017, 15:13

Hallo zusammen,

dieses Thema wurde schon zuletzt 2013 angesprochen.
Dort fand ich den Hinweis, dass das nur mit Reportlab Plus möglich wäre.

Dokumente, wie Rechnung, Lieferschein usw. erstelle ich mit Reportlab.
Nun möchte ich auch PDF-Dokumente mit Formularfelder erstellen.

Hat sich seither etwas in diesem Bereich getan, bzw. gibt es neue Möglichkeiten, Formularfelder in PDF zu erstellen?

Grüße Nobuddy
Benutzeravatar
noisefloor
User
Beiträge: 2456
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Freitag 21. Juli 2017, 15:47

Hallo,

ReportLab kennt seit Version 3.4 (oder genau genommen 3.3.22?) einfacher Formular - siehe Sektion 4.7 in der akutellen Doku.

Selber genutzt habe ich das aber noch nicht.

Gruß, noisefloor
Nobuddy
User
Beiträge: 762
Registriert: Montag 30. Januar 2012, 16:38

Freitag 21. Juli 2017, 16:33

Hallo noisefloor,

das wusste ich nicht, dachte das wäre Reportlab Plus vorbehalten.

Danke und Grüße
Nobuddy
Nobuddy
User
Beiträge: 762
Registriert: Montag 30. Januar 2012, 16:38

Freitag 21. Juli 2017, 16:45

Das dürfte das auf Seite 61 (https://www.reportlab.com/docs/reportlab-userguide.pdf) sein.
The canvas.acroform.textfield method creates a textfield entry widget on the current page. The textfield may
be edited to change tha value of the widget
Mal schauen, ob ich da ein paar Code-Beispiele finde.
Nobuddy
User
Beiträge: 762
Registriert: Montag 30. Januar 2012, 16:38

Samstag 22. Juli 2017, 10:02

Hallo zusammen,

habe kräftig nach canvas.acroform.textfiel gegoogelt.
Leider gibt es da wenig aussagekräftiges bzw. Beispiel-Code der auch funktioniert.

Vielleicht hat sich ja der Eine oder Andere von Euch, auch schon mit diesem Thema befasst und kann mir da vielleicht schon etwas mehr Info zu Verfügung stellen?

Grüße Nobuddy
Nobuddy
User
Beiträge: 762
Registriert: Montag 30. Januar 2012, 16:38

Sonntag 23. Juli 2017, 09:37

Anhand der Zugriffe auf den Thread ist doch Interesse da, wie ich sehen kann.
Wo liegt das Problem bei Euch?
Bitte meldet Euch!

Grüße Nobuddy
Benutzeravatar
noisefloor
User
Beiträge: 2456
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Sonntag 23. Juli 2017, 13:26

Hallo,

also das Beispiel aus der Doku funktioniert bei mir. Der folgende Code generiert ein PDF mit Formularfeld:

Code: Alles auswählen

from reportlab.pdfgen import canvas

c = canvas.Canvas('canvas_form.pdf')
c.drawString(10, 100, 'Some Text...')
c.acroForm.textfield(x=10, y= 200, value='Enter your name here...')
c.drawString(10, 300, 'Some more text')
c.showPage()
c.save()
WICHTIG: es heißt `canvas.acroForm.xxx`, also `acroForm` mit großem F. In der Doku steht es mit kleinem, das ist wohl falsch. Der Acrobat Reader (unter Windows) zeigt das PDF auch korrekt an und wann kann das Formularfeld ausfüllen.

Doof ist halt, dass das nur auf dem Canvas funktioniert und es kein Flowable dafür gibt. Werde wohl mal probieren, ein eigenes Flowable dafür zu erstellen.

Gruß, noisefloor
Nobuddy
User
Beiträge: 762
Registriert: Montag 30. Januar 2012, 16:38

Sonntag 23. Juli 2017, 13:59

Hallo noisefloor,

Danke für Deine Unterstützung! :wink:
Werde wohl erst nach meinem Urlaub zum Testen kommen.

Grüße Nobuddy
Nobuddy
User
Beiträge: 762
Registriert: Montag 30. Januar 2012, 16:38

Sonntag 23. Juli 2017, 14:43

Habe doch noch kurz Deinen Code ausprobiert.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# For Python3.x

from reportlab.pdfgen import canvas
     
c = canvas.Canvas('canvas_form.pdf')
c.drawString(10, 100, 'Some Text...')
c.acroForm.textfield(x=10, y= 200, value='Enter your name here...')
c.drawString(10, 300, 'Some more text')
c.showPage()
c.save()
Leider kommt bei mir die Fehlermeldung:
Traceback (most recent call last):
File "neu.py", line 9, in <module>
c.acroForm.textfield(x=10, y= 200, value='Enter your name here...')
AttributeError: 'Canvas' object has no attribute 'acroForm'
Ich benutze Linux Kubuntu 16.04 und Python 3.4.
Du benutzt ja Windows, wie ich lese.
Kann das damit zusammenhängen?

Grüße Nobuddy
Benutzeravatar
noisefloor
User
Beiträge: 2456
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Sonntag 23. Juli 2017, 15:08

Hallo,

nein - der Code wird unter Ubuntu 16.04 mit Python 3.5 ausgeführt und läuft. Nur das PDF zeigt Evince nicht richtig an, weil das Programm AFAIK keine Formularfelder in PDFs darstellen kann. Deshalb habe ich das PDF unter Windows mit dem Acrobat Reader angeschaut.

Welche Reportlab-Version benutzt du? Ich habe den Test mit 3.4.0 gemacht, dass ist die aktuellste. Wie gesagt, dass Reportlab Formularfelder kann ist AFAIK ziemlich neu.

Gruß, noisefloor
Nobuddy
User
Beiträge: 762
Registriert: Montag 30. Januar 2012, 16:38

Sonntag 23. Juli 2017, 15:22

Meine Python-Version ist 3.4 und python-reportlab ist 3.0.
Hmm, Python 3.5 habe ich in 16.04 nicht.

Dann liegt das Problem wohl am Versionsunterschied.
Mal schauen, was ich da machen kann.

Danke und Grüße
Nobuddy
Benutzeravatar
noisefloor
User
Beiträge: 2456
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Sonntag 23. Juli 2017, 15:55

Hallo,

an der Python-Version liegt das nicht, es ist wohl dein Reportlab Version. Installier' dir doch mal Reportlab 3.4 in ein virtual environment, dann kannst du da testen. Wenn du Reportlab im virtual environment via pip installierst, werden die beiden Abhängigkeiten direkt mit installiert, dass ist ziemlich einfach.

Gruß, noisefloor
Nobuddy
User
Beiträge: 762
Registriert: Montag 30. Januar 2012, 16:38

Sonntag 23. Juli 2017, 16:15

Hallo noisefloor,

war mein Fehler habe die Kubuntu-Version von meinem Laptop mit meinem PC verwechselt.
Auf meinem Laptop habe ich 16.04 und somit auch bestimmt die Python-Version 3.5 und die Reportlab-Version 3.4.

Werde das auf meinem Laptop testen, da sollte es funktionieren.

Grüße Nobuddy
Antworten