2012-10-29 2 views
5

Utilisation de reportlab, Comment générer une série de codes qr et les mettre dans un fichier pdf, puis l'ouvrir dans le navigateur de l'utilisateur. Voici ma tentative. Merci d'avance. Pour ce code ci-dessous, rien ne se passe. Je m'attendais à être invité à enregistrer le fichier pdf.Générer plusieurs codes qr dans un fichier pdf à l'aide du framework reportlab et django

from reportlab.pdfgen import canvas 
from django.http import HttpResponse 
from reportlab.graphics.shapes import Drawing 
from reportlab.graphics.barcode.qr import QrCodeWidget 
from reportlab.graphics import renderPDF 
# Create the HttpResponse object with the appropriate PDF headers. 
response = HttpResponse(mimetype='application/pdf') 
response['Content-Disposition'] = 'attachment; filename="somefilename.pdf"' 

p = canvas.Canvas(response) 

qrw = QrCodeWidget('Helo World!') 
b = qrw.getBounds() 

w=b[2]-b[0] 
h=b[3]-b[1] 

d = Drawing(45,45,transform=[45./w,0,0,45./h,0,0]) 
d.add(qrw) 

renderPDF.draw(d, p, 1, 1) 

p.showPage() 
p.save() 
return response 
+0

Pouvez-vous décrire vos difficultés d'une manière plus spécifique? Qu'est-ce que votre code fait bien/mal, où avez-vous des difficultés, etc. – Rytmis

Répondre

4

Votre code a fonctionné pour moi, même si je suppose que c'est parce que vous ne l'avez pas encapsulé dans une vue?

Par exemple, myapp/views.py

from reportlab.pdfgen import canvas 
from django.http import HttpResponse 
from reportlab.graphics.shapes import Drawing 
from reportlab.graphics.barcode.qr import QrCodeWidget 
from reportlab.graphics import renderPDF 


# Create your views here. 
def test_qr(request): 
    # Create the HttpResponse object with the appropriate PDF headers. 
    response = HttpResponse(mimetype='application/pdf') 
    response['Content-Disposition'] = 'attachment; filename="somefilename.pdf"' 

    p = canvas.Canvas(response) 

    qrw = QrCodeWidget('Helo World!') 
    b = qrw.getBounds() 

    w=b[2]-b[0] 
    h=b[3]-b[1] 

    d = Drawing(45,45,transform=[45./w,0,0,45./h,0,0]) 
    d.add(qrw) 

    renderPDF.draw(d, p, 1, 1) 

    p.showPage() 
    p.save() 
    return response 

myproject/urls.py

from django.conf.urls.defaults import patterns, include, url 

urlpatterns = patterns('', 
    url(r'^$', 'myapp.views.test_qr'), 
) 

Ouverture mon navigateur pour dire http: 127.0.0.1: 8000 me invites pour télécharger le pdf rendu avec un code QR dans le coin inférieur gauche. Si vous n'êtes pas sûr de savoir comment utiliser Django, je vous suggère de lire Django Book Online

+0

Je pense que c'est un problème de compatibilité de navigateur. Fonctionne dans firefox mais ne fonctionne pas en chrome (15) – user1783848

+1

J'ai dû changer 'HttpResponse (mimetype = 'application/pdf')' en 'HttpResponse (type_type = 'application/pdf')' pour que l'exemple fonctionne – bjesus