2011-09-02 9 views
5

zacząć, widziałem inne wątki na ten temat, a ja próbowałem prawie wszystko, aby spróbować rozwiązać ten problem, ale ...Piza (XHTML -> PDF) w Django nie będzie wyświetlać obrazy w formacie PDF

Podczas korzystania z Pisa do renderowania strony HTML do pliku PDF, obrazy we wspomnianym kodzie HTML wyraźnie pomijają. To znaczy, kiedy strona jest renderowana do HTML, wszystko jest po prostu eleganckie, ale kiedy przełączam wyjście na PDF za pomocą Pizy, obrazy znikają.

Najczęstszą rzeczą znalazłem zrobić to utworzyć funkcję Link oddzwonienia tak:

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

def my_view(request, variable1): 
    html = render_to_string('template_goes_here.html', dict, context_instance=RequestContext(request)) 
    result = StringIO() 
    pdf = pisa.pisaDocument(StringIO(html.encode("UTF-8")), dest=result, link_callback=fetch_resources) 
    if not pdf.err: 
     return HttpResponse(result.getvalue(), mimetype='application/pdf') 
    return HttpResponse('Pisa hates you! %s' % cgi.escape(html)) 

Jednak to nie działa. PDF pojawia się świetnie, ale obrazy są nieobecne.

Przeczytałem również sugestię dotyczącą innego wątku dotyczącego pisania kodu HTML do pliku mkstemp, konwertowania go do pliku PDF za pośrednictwem wiersza polecenia, a następnie wyprowadzania kodu HTML, również bez powodzenia.

Próbowałem nawet zainstalować PIL 1.1.16 zamiast 1.1.17 z powodu kogoś z podobnym problemem - bez kostki.

Czy ktoś ma pomysł na temat, gdzie się tu mylę?

+3

Nie używaj Pizy, użyj xhtml2pdf, który jest kontynuacją projektu. –

+2

Miałem też ten sam problem. Mststemp też nie był pomocny. Pisa nie renderuje obrazów po ustawieniu wymiarów obrazów w html. Więc spróbuj wygenerować pdf z html tylko z obrazem. Następnie dodawaj inne treści HTML. Użyłem HTMLTODOC do wygenerowania pdf na końcu -> http://www.htmldoc.org/ – Abhaya

Odpowiedz

2

Minęło trochę czasu odkąd na to patrzyłem, ale myślę, że musisz użyć lambda lub functools.

np.

links = lambda uri, rel: os.path.join(settings.MEDIA_ROOT, 
    uri.replace(settings.MEDIA_URL, '')) 


pdf = pisa.pisaDocument(StringIO(html.encode("UTF-8")), 
    dest=result, link_callback=links) 
+0

Po drugie spojrzenie, nie ma powodu, aby to było inne. Nie wiem, dlaczego podany przykład nie działa. –

Powiązane problemy