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.
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?
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.
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')