2017-07-07 9 views
0

私はpdfを作成するためにreportlabを使用しています。私はReportlabの段落を使用しています。問題は私がそれをダウンロードするたびに、それは空のtxtを生成します。 私はdjangoなしでそれをテストし、問題なく動作します。私がキャンバスを使用している場合、それは動作しますが、私は必要なものに合っていません。Django Reportlabは空のpdfを生成します

views.py

from django.http import HttpResponse 
from django.shortcuts import render 
from reportlab.lib.enums import TA_JUSTIFY 
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer 
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle 
from reportlab.lib.pagesizes import letter 


def genereaza_pdf(request): 
    if request.method == 'POST': 
     response = HttpResponse(content_type='application/pdf') 
     response['Content-Disposition'] = 'attachment; filename="example.pdf"' 
     doc = SimpleDocTemplate("example.pdf", pagesize=letter, rightMargin=70, leftMargin=70, topMargin=70, 
           bottomMargin=60) 
     report = [] 

     styles = getSampleStyleSheet() 
     styles.add(ParagraphStyle(name="Times", fontName='Times-Roman', fontSize=15, alignment=TA_JUSTIFY)) 

     p_text = "<u>ANEXA 1</u>" 
     report.append(Paragraph(p_text, styles["Times"])) 
     report.append(Spacer(1, 5)) 
     doc.build(report) 
     return response 
    return render(request, 'pdf_test.html') 

pdf_test.html

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Download pdf</title> 
</head> 
<body> 
    <form method="POST"> 
     {% csrf_token %} 
     <button type="submit">Download</button> 
    </form> 
</body> 
</html> 

問題のようですか?

答えて

0

機能はデフォルトで2つのファイルのダウンロードで1を生成していましたが、それは、空のtxtとプロジェクトのディレクトリ内の1つでした。私は変更を加えました。

def genereaza_pdf(request): 
    if request.method == 'POST': 
     response = HttpResponse(content_type='application/pdf') 
     response['Content-Disposition'] = 'attachment; filename="example.pdf"' 
     doc = SimpleDocTemplate(response, pagesize=letter, rightMargin=70, leftMargin=70, topMargin=70, 
           bottomMargin=60) 
     report = [] 

     styles = getSampleStyleSheet() 
     styles.add(ParagraphStyle(name="Times", fontName='Times-Roman', fontSize=15, alignment=TA_JUSTIFY)) 

     p_text = "<u>ANEXA 1</u>" 
     report.append(Paragraph(p_text, styles["Times"])) 
     report.append(Spacer(1, 5)) 
     doc.build(report) 
     return response 
    return render(request, 'pdf_test.html') 
1

ストリームするファイルを書き込む必要があります。これを試してみてください:

from io import BytesIO 
def genereaza_pdf(request): 
    if request.method == 'POST': 
     response = HttpResponse(content_type='application/pdf') 
     response['Content-Disposition'] = 'attachment; filename="example.pdf"' 
     buff = BytesIO() 
     doc = SimpleDocTemplate(buff, pagesize=letter, rightMargin=70, leftMargin=70, topMargin=70, 
           bottomMargin=60) 
     report = [] 

     styles = getSampleStyleSheet() 
     styles.add(ParagraphStyle(name="Times", fontName='Times-Roman', fontSize=15, alignment=TA_JUSTIFY)) 

     p_text = "<u>ANEXA 1</u>" 
     report.append(Paragraph(p_text, styles["Times"])) 
     report.append(Spacer(1, 5)) 
     doc.build(report) 
     response.write(buff.getvalue()) 
     buff.close() 
     return response 
    return render(request, 'pdf_test.html') 
関連する問題