2012-10-29 6 views
5

reportlabを使用して、一連のqrコードを生成して1つのpdfに入れ、それをユーザブラウザで開く方法ここに私の試みです。前もって感謝します。このコードでは、何も起こりません。私はpdfファイルを保存するように求められていました。複数のqrコードをreportlabとdjangoフレームワークを使用して1つのpdfファイルに生成

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

より具体的に記述できますか?あなたのコードは正しい/間違っていますか、どこに問題があるのでしょうか。 – Rytmis

答えて

4

あなたのコードは私のために働いていましたが、それはビューにカプセル化しなかったためです。言って私のブラウザを開くたとえば

、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'), 
) 

は、http:127.0.0.1:8000 PDFファイルをダウンロードするために私を促し左下隅にQRコードで表示されます。 Djangoの使い方がわからない場合は、Django Book Online

+0

私はそれらがブラウザの互換性の問題だと思います。 firefoxで動作しますが、chromeにはありません(15) – user1783848

+1

例が動作するように 'HttpResponse(mimetype = 'application/pdf')'を 'HttpResponse(content_type = 'application/pdf')に変更しなければなりません – bjesus

関連する問題