Witam,
Mam problem ze zwróceniem pliku PDF z API. Jeżeli wykonuję żądanie metodą GET wszystko działa poprawnie - otrzymuję gotowego, wypełnionego PDF'a natomiast jeżeli wykonuję żądanie metodą POST (do testowania API używam Postman'a) jako kod odpowiedzi leci 200 rozmiar odpowiedzi zgadza się z rozmiarem pliku PDF natomiast nie mogę go pobrać na dysk.
Django 1.8.11
Reportlab 3.4.0
PyPDF2 1.25
Poniżej przedstawiony skrypt łączy istniejący już szablon PDF z danymi narysowanymi na canvas'ie następnie powinien zwrócić plik PDF.
packet = BytesIO()
can = canvas.Canvas(packet, pagesize=letter)
can.drawString(text=datetime.now().strftime("%Y-%m-%d"), x=330, y=80)
can.drawString(text=datetime.now().strftime("%Y-%m-%d"), x=330, y=35)
barcode_fp = BytesIO()
barcode.generate('code128', document_barcode, writer=ImageWriter(), output=barcode_fp)
can.drawImage(ImageReader(barcode_fp), x=450, y=25, width=70, height=70)
can.showPage()
can.save()
new_pdf = PdfFileReader(packet)
existing_pdf = PdfFileReader(os.path.join(STATIC_ROOT, "plik.pdf"))
page = existing_pdf.getPage(0)
page.mergePage(new_pdf.getPage(0))
output = PdfFileWriter()
output.addPage(page)
output_buffer = BytesIO()
output.write(output_buffer)
pdf = output_buffer.getvalue()
response = HttpResponse(pdf, content_type='application/pdf')
response['Content-Disposition'] = 'inline; filename="recepta.pdf"'
return response
Może ktoś z was wie co robię niepoprawnie, o czym zapomniałem. Z góry dziękuje za pomoc i wszystkie odpowiedzi.