Django обслуживает PDF-документ, загруженный из Mongodb
Я храню PDF документы в MongoDB; в кодировке base64. Я хочу обслуживать эти PDF-файлы из функции представления. Я надеюсь в конечном итоге встроить их в элемент HTML embed или Iframe. Пока что я просто пытаюсь заставить это работать.
Похожие вопросы:
- django PDF FileResponse "Failed to load PDF document." (OP забыл вызвать .seek на буфере)
- Django FileResponse PDF - изменение шрифта pdf во фронтенде - (Django DRF и React.js) (пока нет ответа)
- как отобразить pdf в кодировке base64? (ответы не касаются Django)
Вот мое мнение:
def pdf(request, pdf_id):
document = mongo_db_client.get_document(pdf_id) # uses a find_one query, returns a cursor on the document
pdf = base64.b64decode(document.read())
print(f"pdf type: {type(pdf)}")
print(f"pdf length: {len(pdf)}")
# We save the PDF to the filesystem to check
# That at least that works:
with open("loaded_pdf.pdf", "wb") as f:
f.write(pdf)
# See: https://docs.djangoproject.com/en/4.0/howto/outputting-pdf/
_buffer = io.BytesIO(pdf)
p = canvas.Canvas(_buffer)
p.showPage()
p.save()
_buffer.seek(0)
return FileResponse(_buffer, content_type='application/pdf')
В результате я могу просмотреть PDF, сохраненный в файловой системе, а вывод на печать выглядит следующим образом:
pdf type: <class 'bytes'>
pdf length: 669764
Теперь для одного из PDF, который у меня есть, я могу открыть URL и просмотреть его в браузере. Для другого PDF, который у меня есть, он не загружается в браузере, показывая только заголовок PDF. В обоих случаях PDF сохраняется в файловой системе, и я могу просмотреть его там без ошибок.
Есть идеи?