Я использую PyPDF4
для объединения PDF-файлов, затем я использую объединенный PDF как HttpResponse
.Я использую BytesIO
, чтобы получить результат от PdfFileMerger
.
Я получил его, используя этот код
def mergePDF(listOfPDFFile):
merger = PdfFileMerger()
for file in listOfPDFFile:
merger.append(PdfFileReader(file))
_byteIo = BytesIO()
merger.write(_byteIo)
return _byteIo.getvalue()
Затем, когда я использую метод в APIView
, чтобы вернуть объединенный PDF как HttpResponse
class DocumentBundlePDFView(APIView):
def get(self, request, format=None):
'''
here goes a process to assign list of document to documentList
'''
pdfBytes = mergePDF(documentList)
pdfFile = io.BytesIO(pdfBytes)
response = HttpResponse(FileWrapper(pdfFile), content_type='application/pdf')
return response
Но зачем мне дважды создавать BytesIO
объект, чтобы он работал?Сначала я возвращаю экземпляр _byteIO
, затем напрямую передаю экземпляр в FileWrapper
, но он выводит файл размером 0 КБ.
Поэтому я преобразую экземпляр _byteIO
в bytes
, а затем создаю еще один экземпляр BytesIO
в APIView.чтобы заставить его работать.
Как я могу упростить код?