Django-fr

Forum

#1 29-01-2017 17:52:19

cobra85
Membre
Inscription : 11-05-2015
Messages : 58

Creer un fichier pdf

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

#2 30-01-2017 22:05:02

Xavier Ordoquy
Administrateur
Lieu : Puteaux, France
Inscription : 12-10-2011
Messages : 312
Site Web

Re : Creer un fichier pdf

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

#3 31-01-2017 11:58:48

cobra85
Membre
Inscription : 11-05-2015
Messages : 58

Re : Creer un fichier pdf

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

#4 01-02-2017 10:45:11

Xavier Ordoquy
Administrateur
Lieu : Puteaux, France
Inscription : 12-10-2011
Messages : 312
Site Web

Re : Creer un fichier pdf

Pour le bouton, il s'agit d'un simple lien vers l'url associée à la vue generate_PDF.

Hors ligne

#5 03-02-2017 19:29:09

cobra85
Membre
Inscription : 11-05-2015
Messages : 58

Re : Creer un fichier pdf

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

Pied de page des forums