2013-07-22 5 views
3

Я использую python-qrcode и reportlab, я хочу сгенерировать qrcode и отобразить его, не сохраняя его как изображение.PDF, Django, qr-ode, reportlab

def member_card(request): 
    response = HttpResponse(content_type='application/pdf') 
    response['Content-Disposition'] = 'attachment; filename="carte-membre.pdf"' 

    p = canvas.Canvas(response) 

    customer = request.user.customer 
    p.drawImage('./static/skin/img/carte-membre/carte-membre.jpg', 0, 530) 
    p.drawString(15, 720, customer.first_name + " " + customer.last_name) 
    p.drawString(15, 700, "Identifiant: " + customer.zipcode[:2] + " " + unicode(customer.id)) 
    qr = qrcode.make(customer.first_name + "+" + customer.last_name + "+" + customer.zipcode[:2] + "+" + unicode(customer.id)) 
    p.drawImage(qr , 170, 690, 70, 60) 

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

У меня есть эта ошибка:

Traceback (most recent call last): 

File "c:\Python27\lib\site-packages\django\core\handlers\base.py", line 115, i 
n get_response 
    response = callback(request, *callback_args, **callback_kwargs) 

File "c:\Users\Jeremy\Desktop\Izicap\django\izicap\customer\views.py", line 45 
, in member_card 
    p.drawImage(qr , 170, 690, 70, 60) 

File "c:\Python27\lib\site-packages\reportlab\pdfgen\canvas.py", line 926, in 
drawImage 
    imgObj = pdfdoc.PDFImageXObject(name, image, mask=mask) 

File "c:\Python27\lib\site-packages\reportlab\pdfbase\pdfdoc.py", line 2123, i 
n __init__ 
    ext = string.lower(os.path.splitext(source)[1]) 

File "c:\Python27\lib\ntpath.py", line 190, in splitext 
    return genericpath._splitext(p, sep, altsep, extsep) 


File "c:\Python27\lib\genericpath.py", line 91, in _splitext 
    sepIndex = p.rfind(sep) 


AttributeError: 'bool' object has no attribute 'rfind' 

Спасибо вам

+0

Можете ли вы дать полную трассировку стека ошибки? – user2357112

ответ

1

Я нашел решение:

qr_code = qr.QrCodeWidget(customer.first_name + "+" + customer.last_name + "+" + customer.zipcode[:2] + "+" + unicode(customer.id)) 

bounds = qr_code.getBounds() 
width = bounds[2] - bounds[0] 
height = bounds[3] - bounds[1] 
c = Drawing(45, 45, transform=[60./width, 0, 0, 60./height, 0, 0]) 
c.add(qr_code) 
renderPDF.draw(c, p, 170, 690) 
+0

Откуда появляется renderPDF? –

1

я использую QRCode код Python работает в одиночку, но в функции не работа Только в этом форуме

import qrcode 
from PIL import Image 
img = qrcode.make("ada") 
print img 
img.save('asda.bmp') 

не работает таким образом

def ann(self): 
     import qrcode 
     from PIL import Image 
     img = qrcode.make("ada") 
     print img 
     img.save('asda.bmp') 
+0

хм ... так что первый блок - это решение? – kleopatra

1

Вот небольшой пример работающего от того, что я использую. Это похоже на решение Джереми. Но я называю qr_code() в моем потоке истории:

from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate 
from reportlab.graphics.shapes import Drawing 
from reportlab.graphics.barcode import qr 
from reportlab.lib.pagesizes import cm,A4 

def qr_code(table): 
    # generate and rescale QR 
    qr_code = qr.QrCodeWidget(table) 
    bounds = qr_code.getBounds() 
    width = bounds[2] - bounds[0] 
    height = bounds[3] - bounds[1] 
    drawing = Drawing(
     3.5 * cm, 3.5 * cm, transform=[3.5 * cm/width, 0, 0, 3.5 * cm/height, 0, 0]) 
    drawing.add(qr_code) 

    return drawing 


doc = BaseDocTemplate('temp_qr.pdf', pagesize=A4) 
full_frame = Frame(doc.leftMargin, doc.bottomMargin, doc.width, doc.height - 0.5 * doc.bottomMargin, id='full_frame') 
full_page = PageTemplate(id='full_page', frames=[full_frame]) 
doc.addPageTemplates([full_page]) 
datatable = [['a', 'b', 'c', 'd', 'e', 'f', 'g'],['g', 'f', 'e', 'd', 'c', 'b', 'a']] 
story = [] 
story.append(qr_code(datatable)) 
doc.build(story) 
Смежные вопросы