gpt4 book ai didi

python - 为什么我必须从 BytesIO 转换字节,然后再转换回 BytesIO,以便可以将其读取为 PDF 文件响应?

转载 作者:行者123 更新时间:2023-11-30 22:05:40 25 4
gpt4 key购买 nike

我使用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 但它输出 0Kb 文件。

因此,我将 _byteIO 实例转换为 bytes,然后在 APIView 中创建另一个 BytesIO 实例以使其正常工作。

如何简化代码?

最佳答案

在您的 mergePDF 函数中,而不是返回

return _byteIo.getvalue()

做一些事情

_byteIo.seek(0)
return _byteIo

Initially I return the _byteIO instance then directly pass the instance to FileWrapper but it output 0Kb file.

问题是当您写入类文件对象时,光标设置为最后一个字节。只需将其移回开头即可,否则就像从空文件中读取一样。

关于python - 为什么我必须从 BytesIO 转换字节,然后再转换回 BytesIO,以便可以将其读取为 PDF 文件响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52921663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com