2015-01-27 8 views
9

Ich möchte PDF-Datei aus HTML mit Python + Flask generieren. Um dies zu tun, verwende ich xhtml2pdf. Hier ist mein Code:Konvertieren von HTML in PDF mit Python/Flask

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 

In dieser Codedatei wird im laufenden Betrieb erzeugt. ABER! xhtml2pdf unterstützt nicht viele Stile in CSS, wegen dieses großen Problems, die Seite richtig zu markieren. Ich habe ein anderes Instrument gefunden (wkhtmltopdf). Aber als ich schrieb so etwas wie:

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

wurde angehoben Fehler:

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

Und meine Frage ist, wie HTML in PDF konvertieren wkhtmltopdf Verwendung (mit on the fly-Datei zu erzeugen) in Flask?

Vielen Dank im Voraus für Ihre Antworten.

Antwort

10

Die Seite müssen machen, Sie PDFKit verwenden können:

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

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

Beispiel in dem Dokument.

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? 
+1

Ok.Dieser Code funktioniert einwandfrei (ausgenommen Probleme mit install wkhtmltopdf): gerenderte_template = render_template ('template.html', user = benutzer) gerenderte_template = gerenderte_template.encode ('utf-8') pdf = pdfkit.from_string (gerenderte_vorlage, Falsch, css = './static/styles.css') zurückgeben make_response (pdf) Danke! –

3

Haben Sie versucht, mit Flask-WeasyPrint, die verwendet WeasyPrint? Es gibt gute Beispiele in ihren Webseiten, also repliziere ich sie hier nicht.

+0

Die Installationsanleitung sah wegen Paketabhängigkeiten einschüchternd aus, aber '' '' pip install weasyprint'''' kümmerte sich um alles. – JohnMudd

+1

WeasyPrint kann JavaScript nicht verarbeiten. – Craicerjack

0

Conversion in 3 Steps from Webpage/HTML to PDF

Schritt 1: herunterladen Bibliothek PDFKit

$ pip install pdfkit 

Schritt 2: Herunterladen wkhtmltopdf

Für Ubuntu/Debian:

sudo apt-get install wkhtmltopdf 

Für Windows:

(a) Download-Link: WKHTMLTOPDF

(b) Set: PATH-Variable gesetzt binäre Ordner in Umgebungsvariablen.

Schritt 3:-Code in Python zum Download:

(i) bereits gespeicherte HTML-Seite

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

(ii) Konvertieren von Website-URL

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

(iii) Store Text in PDF

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