【问题标题】:serve a stringIO (pdf) as download python提供 stringIO (pdf) 作为下载 python
【发布时间】:2015-06-04 16:54:35
【问题描述】:

我有一个 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 而不将其保存在服务器上。

感谢您的帮助

【问题讨论】:

  • 为什么不能直接回复,而是尝试生成HTML?
  • 提交表单时,我希望用户在新的 html 页面上看到图片,并让他能够将此图片保存为 pdf 在他的硬盘上
  • cgi png 的示例实际上是不完整的,因为您实际上并没有打印 png。
  • 我没有打印其余的代码,因为在新的 html 中显示 png 不是我问题的核心。这部分有效。

标签: python pdf download cgi


【解决方案1】:

您提供 png 的完全相同的方式应该可以工作(如果您的示例是完整的)。这是您发送的第二个 sn-p 修改以适合您的示例:

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

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

【讨论】:

  • 我在文件名的标题中写了什么?
  • 附言。 @Dukaaza 我建议你看看瓶子或 django,从长远来看会让你的生活更轻松。见stackoverflow.com/a/22875961/742390
  • 很好,您的示例运行良好,谢谢。我听说过 Django,但我不能使用我没有权限在服务器上安装它。
  • 感谢@Dukaaza 随时将此问题标记为已回答。
猜你喜欢
  • 2017-10-07
  • 2012-10-09
  • 1970-01-01
  • 2015-12-29
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
  • 2013-05-18
  • 2021-06-30
相关资源
最近更新 更多