Generer PDF avec Django

Salut tout le monde , j’arrive pas à générer le pdf avec django,
a chaque fois j’ai une erreure : unexpected exception in unicode2T1 @ src\rl_addons\rl_accel_rl_accel.c:634 caused by bad argument type for built-in operation

views.py

def pdf(request,id):
    buffer = io.BytesIO()
    
    c = canvas.Canvas(buffer,pagesize=letter,bottomup=0)
    textob=c.beginText()
    textob.setTextOrigin(inch,inch)
    textob.setFont('Helvetica',14)
    fichier=Permission.objects.filter(id=id)
    lignes=[]
    for fiche in fichier:
    	lignes.append(fiche.motif)
    	lignes.append(fiche.date_debut)
    	lignes.append(fiche.date_fin)
    	lignes.append(fiche.date_reprise)
    	
    
    for line in lignes:
    	textob.textLine(line)

    c.drawText(textob)
    c.showPage()
    c.save()

    buffer.seek(0)
    return FileResponse(buffer, as_attachment=True, filename='permission.pdf') 

A noté que quand j’enléve au niveau du code :
lignes.append(fiche.date_debut)
lignes.append(fiche.date_fin)
lignes.append(fiche.date_reprise)
ça marche

Merci

Je ne connais pas le français, j’espère que Google Translate fera un travail adéquat ici.

Vous ne montrez pas ce modèle “Permission” que vous utilisez, donc je ne peux que faire une supposition ici.

Il semble que vous puissiez ajouter un DateField à votre liste lines, puis le transmettre à la méthode textLine. J’essaierais de formater cette date d’abord. Ou, comme test rapide, changez

lignes.append(fiche.date_debut)
lignes.append(fiche.date_fin)
lignes.append(fiche.date_reprise)

à:

lignes.append(str(fiche.date_debut))
lignes.append(str(fiche.date_fin))
lignes.append(str(fiche.date_reprise))

and my original English:

I don’t know French, I hope Google Translate does an adequate job here.

You don’t show this Permission model that you are using, so I can only make a guess here.

It looks like you may be appending a DateField to your lines list, and then passing that to the textLine method. I’d try formatting that date first. Or, as a quick test, change

lignes.append(fiche.date_debut)
lignes.append(fiche.date_fin)
lignes.append(fiche.date_reprise)

to:

lignes.append(str(fiche.date_debut))
lignes.append(str(fiche.date_fin))
lignes.append(str(fiche.date_reprise))
1 Like

Merci beaucoup ça marche maintenant .

I remember being in that same place with reportlab, and it was one panic attack later when I realized I was needing a string wrapper for certain fields.