C'è un modo per generare pdf contenente simboli non ascii con pisa dal modello django?

StackOverflow https://stackoverflow.com/questions/1637229

  •  06-07-2019
  •  | 
  •  

Domanda

Sto provando a generare un pdf dal modello usando questo snippet:

def write_pdf(template_src, context_dict):
    template = get_template(template_src)
    context = Context(context_dict)
    html  = template.render(context)
    result = StringIO.StringIO()
    pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result)
    if not pdf.err:
        return http.HttpResponse(result.getvalue(), mimetype='application/pdf')
    except Exception('PDF error')

Tutti i simboli non latini non vengono visualizzati correttamente, il modello e la vista vengono salvati utilizzando la codifica utf-8.

Ho provato a salvare la vista come ANSI e quindi all'utente unicode (html, " UTF-8 "), ma genera TypeError.

Inoltre ho pensato che forse è perché i caratteri predefiniti in qualche modo non supportano utf-8 quindi, secondo la documentazione di Pisa, ho cercato di impostare fontface nel corpo del modello nella sezione stile.

Che non ha ancora dato risultati.

Qualcuno ha qualche idea su come risolvere questo problema?

È stato utile?

Soluzione

Questo funziona per me:

pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result, encoding='UTF-8')

Altri suggerimenti

Prova a sostituire

pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result)

con

pdf = pisa.pisaDocument(StringIO.StringIO(html), result, encoding='UTF-8')

O controlla questa risposta a html in pdf per un Django sito?

Devi modificare il tuo modello django. Aggiungi una nuova faccia di carattere nel foglio di stile che si collegherà a un file di caratteri con i caratteri utilizzati nel documento. E quel file di font deve essere accessibile dal tuo server (sotto Ubuntu puoi trovare i file con i font nella directory / usr / share / fonts / truetype /). Ad esempio:

@font-face {
  font-family: DejaMono; 
  src: url(font/DejaVuSansMono.ttf);
}

Quindi se hai il prossimo codice HTML:

<div>Some non-latin characters</div>

puoi visualizzare quel testo nel font DejaMono con questa regola CSS:

div { font-family: DejaMono; }

Questo funziona per me quando generi documenti PDF con caratteri cirillici.

Ho affrontato lo stesso problema con i caratteri cirillici.

La soluzione prevedeva due passaggi: 1. Indica il file del carattere nel tuo file HTML

<style type="text/css">
@font-face {
  font-family: Arial; src: url("files/arial.ttf");
}
body {
  font-family: Arial;
}
</style>

2. Dai " pisa " percorso radice (in modo che trovi il file del carattere in base al percorso relativo) nel mio caso era qualcosa del genere

pdf = pisa.pisaDocument(html, result, path=PATH_TO_DJANGO_PROJECT)

perché i caratteri sono stati posizionati in PATH_TO_DJANGO_PROJECT / files / arial.ttf

Se si chiama createPDF anziché il metodo pisaDocument, è possibile utilizzare

pisa.CreatePDF(html.encode('UTF-8'), response, link_callback=fetch_resources, encoding='UTF-8')
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top