web-dev-qa-db-fra.com

Convertir du HTML en PDF en utilisant Python / Flask

Je veux générer un fichier pdf à partir de html en utilisant Python + Flask. Pour ce faire, j'utilise xhtml2pdf. Voici mon code:

def main():
    pdf = StringIO()
    pdf = create_pdf(render_template('cvTemplate.html', user=user))
    pdf_out = pdf.getvalue()
    response = make_response(pdf_out)
    return response

def create_pdf(pdf_data):
    pdf = StringIO()
    pisa.CreatePDF(StringIO(pdf_data.encode('utf-8')), pdf)
    return pdf

Dans ce fichier de code est généré à la volée. MAIS! xhtml2pdf ne prend pas en charge de nombreux styles en CSS, en raison de ce gros problème pour marquer correctement la page. J'ai trouvé un autre instrument (wkhtmltopdf). Mais quand j'ai écrit quelque chose comme:

pdf = StringIO()
data = render_template('cvTemplate1.html', user=user)
WKhtmlToPdf(data.encode('utf-8'), pdf)
return pdf

Une erreur a été déclenchée:

AttributeError: 'cStringIO.StringO' object has no attribute 'rfind'

Et ma question est de savoir comment convertir html en pdf en utilisant wkhtmltopdf (avec génération de fichier à la volée) dans Flask?

Merci d'avance pour vos réponses.

13
Dmitry_Mahrachev

La page doit être rendue, vous pouvez utiliser pdfkit:

https://pypi.python.org/pypi/pdfkit

https://github.com/JazzCore/python-pdfkit

Exemple dans le document.

import pdfkit

pdfkit.from_url('http://google.com', 'out.pdf')
pdfkit.from_file('test.html', 'out.pdf')
pdfkit.from_string('Hello!', 'out.pdf')  # Is your requirement?
14
Quan Brew

Avez-vous essayé avec Flask-WeasyPrint , qui utilise WeasyPrint ? Il y a de bons exemples sur leurs sites Web, donc je ne les reproduis pas ici.

5
chfw

Conversion en 3 étapes de la page Web/HTML en PDF

Étape 1: Télécharger la bibliothèque pdfkit

$ pip install pdfkit

Étape 2: Télécharger wkhtmltopdf

Pour Ubuntu/Debian:

Sudo apt-get install wkhtmltopdf

Pour les fenêtres:

(a) Lien de téléchargement: WKHTMLTOPDF

(b) Set: PATH variable set binary folder in Environment variables.

Étape 3: Code en Python à télécharger:

(i) Page HTML déjà enregistrée

import pdfkit
pdfkit.from_file('test.html', 'out.pdf')

(ii) Convertir par URL de site Web

import pdfkit
pdfkit.from_url('https://www.google.co.in/','shaurya.pdf')

(iii) Stocker le texte en PDF

import pdfkit
pdfkit.from_string('Shaurya Stackoverflow','SOF.pdf')
5
shaurya uppal