2017-03-29 53 views
0

Djangoの2つのpdfファイルをPyPDF2とReportLabでマージしようとしています。次のように私の見解は以下のとおりです。Djangoでpdfファイルを開く

@login_required 
def export_to_pdf(request, user_id): 
    member = Member.objects.filter(user_id=user_id).values('user_id', 
                  'user__first_name', 
                  'user__last_name', 
                  'company_name', 
                  'vat_number', 
                  'address', 
                  'postcode', 
                  'city', 
                  'user__email', 
                  'telephone', 
                  'subscription__type__name', 
                  'subscription__type__limit', 
                  ).annotate(num_calculations=Count('user__calculations'))[0] 

    company_address = "{}, {} {}".format(member['address'], member['postcode'], member['city']) 
    buffer = BytesIO() 

    # Create the PDF object, using the BytesIO object as its "file." 
    p = canvas.Canvas(buffer, pagesize=A4) 
    p.setFont('Helvetica-Bold', 8) 
    p.drawString(70, 765, "{}".format(member['company_name'])) 

    p.drawString(70, 731, "{}".format(company_address)) 
    p.drawString(70, 714, "{}".format(member['telephone'])) 
    p.drawString(335, 697, "{}".format(member['vat_number'])) 

    p.drawString(335, 697, "{}".format(member['vat_number'])) 
    p.save() 

    buffer.seek(0) 
    new_pdf = PdfFileReader(buffer) 
    existing_pdf = PdfFileReader(open('master/files/file.pdf', "rb")) 

    page = existing_pdf.getPage(0) 
    page.mergePage(new_pdf.getPage(0)) 

    output = PdfFileWriter() 
    output.addPage(page) 
    output_stream = open("master/files/new_file.pdf", "wb") 
    output.write(output_stream) 
    output_stream.close() 

    with open('master/files/new_file.pdf', 'r', encoding="Latin-1") as pdf: 
     response = HttpResponse(pdf.read(), content_type='application/pdf') 
     response['Content-Disposition'] = 'attachment; filename=some_file.pdf' 
     return response 

次のようにプロジェクトツリーがある:

enter image description here

したがって、私は新しいファイルを作成し、その後、私は、既存のファイルfile.pdfを開き、私はこれら二つを統合しますファイル。最後に出力new_file.pdfのファイルを作成します。

これはうまくいきますが、問題は返されたファイルにあります。 export_to_pdf関数を実行すると、new_file.pdfが得られます。私は、そのファイルを得るが、そのファイルの内容は、私がマージされたファイルfile.pdfのないコンテンツはありません

p = canvas.Canvas(buffer, pagesize=A4) 
p.setFont('Helvetica-Bold', 8) 
p.drawString(70, 765, "{}".format(member['company_name'])) 

p.drawString(70, 731, "{}".format(company_address)) 
p.drawString(70, 714, "{}".format(member['telephone'])) 
p.drawString(335, 697, "{}".format(member['vat_number'])) 

p.drawString(335, 697, "{}".format(member['vat_number'])) 
p.save() 

で作成したものだけです。

しかし、私がnew_file.pdfを直接クリックすると、そのようになるはずです。

私が間違っていることは何ですか?

答えて

0

私はそれを解決しました。他の誰かが同じ問題を抱えている場合。

私はちょうど私がrbを添加一行

with open('master/files/new_file.pdf', 'rb') as pdf: 

したがって代わりにrを変え。そして、エンコーディングも必要なくなった。

関連する問題