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

2024-06-01 02:17:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用PyPDF4合并pdf文件,然后将合并后的pdf用作HttpResponse。 我使用BytesIOPdfFileMerger得到结果。在

我用这个代码让它正常工作

def mergePDF(listOfPDFFile):
    merger = PdfFileMerger()
    for file in listOfPDFFile:
        merger.append(PdfFileReader(file))
    _byteIo = BytesIO()
    merger.write(_byteIo)
    return _byteIo.getvalue()

然后当我使用APIView中的方法将合并后的pdf作为HttpResponse返回

^{pr2}$

但是,为什么我必须创建BytesIO对象两次才能使其工作? 最初,我返回_byteIO实例,然后直接将该实例传递给FileWrapper,但它输出0Kb文件。在

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

如何简化代码?在


Tags: 文件实例代码pdfdefmergerfilehttpresponse
1条回答
网友
1楼 · 发布于 2024-06-01 02:17:58

mergePDF函数中,而不是返回

return _byteIo.getvalue()

做某事达到

^{pr2}$

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

问题是当你写类似文件的对象时,光标被设置到最后一个字节。只需将其移回开头,否则就如同从空文件中读取一样。在

相关问题 更多 >