Django Reportlab生成空pdf

时间:2017-07-07 11:52:51

标签: python django pdf reportlab

我正在使用reportlab创建一个pdf。我正在使用Reportlab Paragraphs。问题是每次我下载它,它会生成一个空的txt。 我没有django测试它,它没有问题。如果我使用画布它可以工作,但它不适合我需要的。

views.py

CreateMap<Source, Destination>()
    .ForMember(dest => dest.Values, mo => mo.ResolveUsing<ConditionalSourceValueResolver>());

pdf_test.html

 public class ConditionalSourceValueResolver : IValueResolver<Source, Destination, Value[]>
    {
        public Value[] Resolve(Source source, Destination destination, Value[] destMember, ResolutionContext context)
        {
            if (source.Fields == null)
                return context.Mapper.Map<Value[]>(source.Results);
            else
                return context.Mapper.Map<Value[]>(source.Fields);
        }
    }

什么似乎是问题?

2 个答案:

答案 0 :(得分:3)

您必须将文件写入流。试试这个:

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

答案 1 :(得分:0)

该函数生成了两个文件,默认情况下为一个下载,但它是一个空的txt,一个在项目的目录中。我做了改变。

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