- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用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/
我有本地更改和远程更改。 有人告诉我必须先推,再 pull 。这背后有什么原因吗? 最佳答案 那个人错了:正确的模型是pull-before-you-push,而不是相反。 当您pull时,git 将
我正在使用最新版本的 Flat UI Pro 1.3.2 ( http://designmodo.com/flat/ ),jQuery 插件 flatui-radiocheck v0.1.0 和 iO
我是一名优秀的程序员,十分优秀!