2011-09-02 11 views
5

Para empezar, he visto los otros hilos sobre esto, y he probado casi todo para tratar de solucionar este problema, pero ...Pisa (XHTML -> PDF) en Django no mostrará imágenes en formato PDF

Cuando se usa Pisa para renderizar una página HTML en PDF, las imágenes en dicho HTML desaparecen de forma llamativa. Es decir, cuando la página se procesa en HTML, todo está muy bien, pero cuando cambio la salida a PDF usando Pisa, las imágenes desaparecen.

Lo más común que he encontrado que hacer es crear una función de devolución de llamada de enlace así:

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)) 

Sin embargo, esto no funciona. El PDF aparece, genial, pero las imágenes están ausentes.

También leí una sugerencia sobre otro hilo sobre cómo escribir el código HTML en mkstemp, convertirlo a PDF a través de la línea de comandos y luego generar el código HTML, sin éxito.

Incluso intenté instalar PIL 1.1.16 en lugar de 1.1.17 debido a alguien con un problema similar, sin dados.

¿Alguien tiene una idea de dónde me estoy equivocando aquí?

+3

No use Pisa, use xhtml2pdf que es la continuación del proyecto. –

+2

También me enfrenté al mismo problema. Mkstemp tampoco fue de ayuda. Pisa no muestra imágenes cuando hemos establecido las dimensiones de las imágenes en html. Intenta generar PDF desde html con solo una imagen. Luego continúa agregando otros contenidos html. Utilicé HTMLTODOC para generar PDF al final -> http://www.htmldoc.org/ – Abhaya

Respuesta

2

Ha pasado un tiempo desde que miré esto, pero creo que tienes que usar lambda o functools.

p. Ej.

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

En segundo lugar, no hay ninguna razón para que esto sea diferente. No estoy seguro de por qué el ejemplo dado no está funcionando. –

Cuestiones relacionadas