提供stringIO(pdf)作为下载python

时间:2015-06-04 16:54:35

标签: python pdf download cgi

我有一个cgi python脚本,它将matplotlib生成的图片保存为pdf到stringIO和png到stringIO。 png图片将显示在一个效果很好的新页面上。

sio = cStringIO.StringIO()
pylab.savefig(sio, format='pdf')
sio.close()

sio =cStringIO.StringIO()
print "Content-type:text/html\r\n\r\n"
pylab.savefig(sio, format='png', bbox_inches='tight')
print "<html>"
...
print "<img id='Plot' src='data:image/png;base64,%s'/>" % sio.getvalue().encode('base64').strip()
...

有没有办法在StringIO中提供pdf作为下载。我知道当文件位于服务器上时,有http下载标头的示例。

print "Content-Type:application/download; name=\"filename\"";
print "Content-Disposition: attachment; filename=\"filename\"";
print

f=open("filename", "rb")
str = f.read();
print str
f.close()

所以我想我需要第二个cgi脚本才能下载。 但是我不知道如何传递stringIO以使其可以作为pdf下载而不将其保存在服务器上。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

同样精确的方式你服务你的png应该工作(如果你的例子是完整的)。以下是您发送的第二个代码段,以符合您的示例:

fn = 'mydownload.pdf'
print 'Content-Type:application/pdf';
print 'Content-Disposition: attachment; filename="%s"' %(fn);
print
print sio.getvalue()

如果你使用的是wsgi而不是cgi,你可以直接写入流。