Pergunta

Estou usando Django e meu código para renderizar o PDF é realmente típico:

t = loader.get_template('back/templates/content/receipt.html')
c = RequestContext(request, {
                             'pagesize': 'A4',
                             'invoice': invoice,
                             'plan': plan,
                             })

html = t.render(c)
result = StringIO.StringIO()
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result)
if not pdf.err:
    return HttpResponse(result.getvalue(), mimetype="application/pdf")

E o recibo.html não é incomum:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"   "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>Squizzal Receipt</title>
    <style type="text/css">
        @page {
            size: {{pagesize}};
            margin: 1cm;
            word-spacing 1cm;
            @frame footer {
                -pdf-frame-content: footerContent;
                bottom: 0cm;
                margin-left: 9cm;
                margin-right: 9cm;
                height: 1cm;
            }
        }
    </style>
</head>
<body>
    <h1>Your Receipt</h1>
   <<SNIP>>

mas nenhum dos espaços no pdf é renderizado.Todas as palavras estão próximas umas das outras.Tentei espaços normais e "& nbsp" e o resultado é o mesmo.Por exemplo, o texto acima aparecerá como "SeuRecibo" no pdf.

Quando tento usar a versão de linha de comando do pisa, ele gera o pdf perfeitamente com espaços entre as palavras.

Alguma ideia?

Foi útil?

Solução 2

Ok, graças ao akonsu, o problema parece ser como o HttpResponse do Django está sendo tratado (no lado do servidor ou no lado do navegador).

Em vez de

 return HttpResponse(result.getvalue(), mimetype="application/pdf")

Use:

 resp = HttpResponse(result.getvalue(), mimetype="application/pdf")
 resp['Content-Disposition'] = 'attachment; filename=receipt.pdf'
 return resp

Isso produz pelo menos um resultado sem espaços.Ainda não tenho ideia de por que a primeira maneira não estava funcionando.

Outras dicas

Eu tive o mesmo problema e não queria forçar o download do PDF do navegador.Isso acabou sendo um problema específico da plataforma: o plug-in de visualizador de PDF nativo do Google Chrome falha em renderizar espaços em certos documentos em certas distros Linux quando as fontes Microsoft TrueType não estão instaladas.Consulte http://www.google.com/support/forum / p / Chrome / thread? tid= 7169b114e8ea33c7 & hl= en para obter detalhes.

Corrigi isso simplesmente executando os seguintes comandos no bash (ajuste para sua distro; isso era no Ubuntu):

$ sudo apt-get install msttcorefonts

(Aceite o EULA durante o processo de instalação)

$ fc-cache -fv

Depois de reiniciar o Chrome (importante!), o visualizador de PDF nativo exibiu corretamente o PDF com espaços.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top