2015-01-27 52 views
9

Python + Flask kullanarak html dosyasından pdf dosyası oluşturmak istiyorum. Bunu yapmak için xhtml2pdf kullanıyorum. İşte benim kodum:Python/Flask kullanarak html dosyasını pdf'ye dönüştürün

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 

Bu kod dosyasında, anında üretiliyor. FAKAT! xhtml2pdf, sayfayı doğru şekilde işaretlemek için bu büyük sorun nedeniyle CSS'deki birçok stili desteklemez. Başka bir enstrüman buldum (wkhtmltopdf). Ama böyle bir şey yazdığında:

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

dirilmişti hata:

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

Ve benim sorum Flask (anında dosya oluşturulurken birlikte) wkhtmltopdf kullanarak pdf html dönüştürmek nasıl?

Yanıtlarınız için şimdiden teşekkür ederiz.

cevap

10

sayfa Sen pdfkit kullanabilirsiniz hale gerekir: belgede

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

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

Örnek.

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

Tamam.Bu kod gayet iyi çalışıyor (install wkhtmltopdf ile sorunlar hariç): rendered_template = render_template ('template.html', kullanıcı = kullanıcı) rendered_template = rendered_template.encode ('utf-8') pdf = pdfkit.from_string (rendered_template, False, css = './static/styles.css') dönüş make_response (pdf) Teşekkürler! –

3

hangi WeasyPrint kullanır Flask-WeasyPrint ile denediniz mi? Web sitelerinde iyi örnekler var, bu yüzden onları burada çoğaltmıyorum.

+0

Yükleme yönergeleri paket bağımlılıkları nedeniyle korkutucu görünüyordu, ancak '' 'weasyprint'''''' '' '' '' '' '' '' '' '' '' '' '' '' 'her şeyle ilgileniyordu. – JohnMudd

+1

WeasyPrint, JavaScript'i işleyemiyor. – Craicerjack

0

Conversion in 3 Steps from Webpage/HTML to PDF

Adım1: İndir kütüphane pdfkit

$ pip install pdfkit 

Adım 2: Ubuntu/Debian için İndir wkhtmltopdf

:

sudo apt-get install wkhtmltopdf 
Windows için

:

(a) Yükleme linki: WKHTMLTOPDF

(b) ayarlayın: Ortam değişkenleri YOL değişkeni set ikili klasörü.

Adım 3: Python Kod İndirmek için:

(i) Zaten Kaydedilen HTML sayfası

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

(ii) web sitesi URL tarafından dönüştürme

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

(iii) Mağaza metin içinde metin

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