2011-01-13 16 views
5

pisa kullanarak bir pdf dosyasına bir html şablonu oluşturmak istiyorum. İhtiyacım olan tüm paketlere sahip olduğuma inanıyorum ama bunu yaparken sorun yaşıyorum. İşte benim görüşüme göre, ne yaptığım için .Pisa ile Django pdf sorusu

DÜZENLEME: Benim en son URL'm, görünüm & şablon.

şablon olarak url.py

(r'^index/render_pdf/(?P<id>\d+)/$', render_pdf), 

views.py

def fetch_resources(uri, rel): 
    path = os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, "")) 
    return path 

def render_pdf (html, id): 
    invoice_items_list = Invoice_Items.objects.filter(pk=id) 
    result = StringIO.StringIO() 
    pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("ISO-8859-1")), dest=result, link_callback=fetch_resources) 
    return result 

, ben bu etiketi var.

<a href="{% url c2duo.views.render_pdf invoices.pk %}"> 
+0

, size yaşıyorsanız tam hata Traceback veya davranışı almak ve eklemek Soru, böylece herkes bu şekilde denediğinizde neler olduğunu görebilir. – nosklo

+0

"render_to_pdf (template_src, context_dict)' içinde "dönüş" yoktur. Gerçekte kullandığınız gerçek koddan daha fazlasını içerir misiniz? –

+0

Kod güncellendi – Shehzad009

cevap

1

Yardımcı olur ne kadar bilmiyorum, ama bu ı pdf oluşturmak için kullanılacak işlevdir: Önümüzdeki

def fetch_resources(uri, rel): 
""" 
Callback to allow pisa/reportlab to retrieve Images,Stylesheets, etc. 
`uri` is the href attribute from the html link element. 
`rel` gives a relative path, but it's not used here. 

""" 
path = os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, "")) 
return path 

def render_pdf (html): 
result = StringIO.StringIO() 
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("ISO-8859-1")), dest=result, link_callback=fetch_resources) 
return result 
+0

Bir hata alıyorum: WSGIRequest 'nesnesinin' encode 'özniteliği yok' – Shehzad009

+0

istek nesnesini işleve aktarmıyorsunuz, işlenen şablonu geçiriyorsunuz. – zsquare

+0

Lütfen koduma bir bakıma herhangi bir değişiklik yapılması gerekip gerekmediğine bakın. – Shehzad009

0

Sadece eğlence için, şunu yapmayı deneyin:

def render_to_pdf(template_src, context_dict): 
    html = "<html><head><title>Title</title></head><body><h1>Hello</h1></body></html>" 
    result = StringIO.StringIO() 
    pdf = pisa.pisaDocument(StringIO.StringIO(html), result) 
    if not pdf.err: 
     return http.HttpResponse("" % (repr(result.getvalue()))) 
    else: 
     raise Exception("The error was %s" % pdf.err) 

Yine hatayla karşılaşırsanız, hata pisa kalmış olabilir tahmin ediyorum. Güncel olduğundan emin misin?

+0

reiter, son satırda geçersiz bir sözdizimi hatası alıyorum "istisna ('PDF hatası')" - neden olmasın. Ayrıca, satırda başka bir sözdizimi hatası vardı, sözdiziminde pdf =… ne yazdığını söyleyen bir sözdizimi hatası var. Orada olmaması gereken ekstra bir yakın ayraç var. – Shehzad009

+0

Özür dilerim, bir yabancının kodundan kesmek ve yapıştırmak için aldığım şey budur. Şimdi düzeltilmelidir. –