0
장고에서 두 개의 pdf 파일을 PyPDF2와 ReportLab로 병합하려고합니다. 다음과 같이장고로 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
프로젝트 나무는 다음과 같습니다 :
을 따라서 나는 새 파일을 만든 다음 나는 기존 파일 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
을 직접 클릭하면 열어야합니다.
내가 뭘 잘못했는지 조언 해주세요.