2011-01-13 13 views
5

Chcę wygenerować szablon HTML do pliku pdf za pomocą pisa. Wierzę, że mam wszystkie pakiety, których potrzebuję, ale wydaje mi się, że mam z tym problemy. Oto mój widok poniżej, więc to, co zrobiłem.Django pytanie pdf z pisa

EDYCJA: Oto mój najnowszy URL, widok & szablonu.

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 

W szablonie, mam ten tag.

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

obok, można uzyskać pełną traceback błędzie lub zachowanie jesteś posiadanie i dodać go do pytanie, aby każdy mógł zobaczyć, co się dzieje, gdy spróbujesz go w ten sposób. – nosklo

+0

Nie ma 'return' w' render_to_pdf (template_src, context_dict) '. Czy możesz podać więcej rzeczywistego kodu, którego używasz? –

+0

Kod został zaktualizowany – Shehzad009

Odpowiedz

1

nie wiem ile to pomoże, ale jest to funkcja używam do renderowania PDF:

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

Wystąpił błąd: obiekt WSGIRequest nie ma atrybutu "kodowanie" – Shehzad009

+0

nie przekazujesz obiektu żądania do funkcji, przekazujesz renderowany szablon. – zsquare

+0

Proszę spojrzeć na mój kod do tej pory sprawdzić, czy istnieje potrzeba jakiejkolwiek zmiany przez edycję. – Shehzad009

0

Tak dla zabawy, spróbuj zamiast tego:

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) 

Jeśli nadal wystąpienia błędu, zgaduję błąd może być w Pizie. Jesteś pewien, że jest aktualny?

+0

reiter, otrzymuję nieprawidłowy błąd składni w ostatnim wierszu "z wyjątkiem wyjątku (" błąd PDF ")" - więc nie jestem pewien dlaczego. Ponadto wystąpił kolejny błąd składni na linii, który zawiera błąd składniowy, w którym mówi, co pdf = ... Jest dodatkowy nawias zamykający, którego nie powinno tam być. – Shehzad009

+0

Przepraszam, to jest to, co dostaję za wycięcie i wklejenie z kodu nieznajomego. Powinien być teraz naprawiony. –