Vous n'êtes pas identifié(e).
Bonjour,
Je souhaite pouvoir créer un fichier pdf à partir d'un template ou d'une vue.
Pour le moment j'ai code que j'utilisait en php/html adapté, mais qui m'oblige à faire ctrl+p puis pdfcreator pour imprimer la page du template qui est un tableau récapitulatif.
Je pense qu'il est possible de le faire avec Django mais rien a faire. Malgré le test de quelques modules pdf.
Merci de votre aide.
cdt
Hors ligne
Bonjour,
Il existe quelques applications Django pour générer un PDF à partir de html.
Etant donné la complexité générale du placement etc, un essai des librairies est souhaitable avant d'arrêter son choix.
Hors ligne
J'ai essayer reportlab.pdfgen et xhtml2pdf avec pisa mais impossible de crér un bouton générer pdf.
Voici une ébauche de code, pour le template liste_adresse.html:
def generate_PDF(request):
data = {}
template = get_template('liste_adresse.html')
html = template.render(Context(data))
html = open('liste_adresse.pdf', "w+b")
pisaStatus = pisa.CreatePDF(html.encode('utf-8'), dest=file, encoding='utf-8')
file.seek(0)
pdf = file.read()
file.close()
return HttpResponse(pdf, 'application/pdf')
Merci
Hors ligne
Pour le bouton, il s'agit d'un simple lien vers l'url associée à la vue generate_PDF.
Hors ligne
Bonjour,
En effet, j'ai rajouter le lien suivant
url(r'^generate_PDF', views.generate_PDF, name='generate_PDF'),
Par contre j'ai utilisé le package "django_xhtml2pdf" et refait le code. Un peu complexe avec le css mais j'y suis arrivé.
Cependant, sur mon serveur de dev j'ai écrit dans views.py:
import django_xhtml2pdf.utils from generate_pdf
et comme cela fonctionnait bien, je l'ai aussi installé sur le serveur de prod. Et la c'est le drame ...
Il m'affiche plein d'erreur:
- no module named html5lib
- no module xhtml2pdf
Je précise je suis sous python 2.7 et django 1.9
Pourquoi cela fonctionne sur l'un et pas sur l'autre ?
La différence que j'ai noté est dans les versions de django_xhtml2pdf et setuptools
J'ai eu l'erreur suivante lors d'une tentative d'installation sans passer par un package téléchargé
root@prod-virtual-machine:/usr/local/lib/python2.7/dist-packages# pip install django_xhtml2pdf
Collecting django_xhtml2pdf
Exception:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 209, in main
status = self.run(options, args)
File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 328, in run
wb.build(autobuilding=True)
File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 748, in build
self.requirement_set.prepare_files(self.finder)
File "/usr/lib/python2.7/dist-packages/pip/req/req_set.py", line 360, in prepare_files
ignore_dependencies=self.ignore_dependencies))
File "/usr/lib/python2.7/dist-packages/pip/req/req_set.py", line 512, in _prepare_file
finder, self.upgrade, require_hashes)
File "/usr/lib/python2.7/dist-packages/pip/req/req_install.py", line 273, in populate_link
self.link = finder.find_requirement(self, upgrade)
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 440, in find_requirement
all_candidates = self.find_all_candidates(req.name)
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 398, in find_all_candidates
for page in self._get_pages(url_locations, project_name):
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 543, in _get_pages
page = self._get_page(location)
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 646, in _get_page
return HTMLPage.get_page(link, session=self.session)
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 755, in get_page
"Cache-Control": "max-age=600",
File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 480, in get
return self.request('GET', url, **kwargs)
File "/usr/lib/python2.7/dist-packages/pip/download.py", line 378, in request
return super(PipSession, self).request(method, url, *args, **kwargs)
File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 468, in request
resp = self.send(prep, **send_kwargs)
File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 576, in send
r = adapter.send(request, **kwargs)
File "/usr/share/python-wheels/CacheControl-0.11.5-py2.py3-none-any.whl/cachecontrol/adapter.py", line 46, in send
resp = super(CacheControlAdapter, self).send(request, **kw)
File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/adapters.py", line 376, in send
timeout=timeout
File "/usr/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl/urllib3/connectionpool.py", line 609, in urlopen
_stacktrace=sys.exc_info()[2])
File "/usr/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl/urllib3/util/retry.py", line 228, in increment
total -= 1
TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'
root@prod-virtual-machine:/usr/local/lib/python2.7/dist-packages# nano
Merci
Hors ligne