首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Heroku上使用Prawn

在Heroku上使用Prawn
EN

Stack Overflow用户
提问于 2012-03-13 05:00:43
回答 2查看 1.8K关注 0票数 10

我们目前正在开发一个托管在Heroku上的Rails应用程序。我们正在尝试生成PDF并将其推送给用户下载。

我们正在使用Prawn来处理PDF的生成。

我们生成PDF的代码目前是:

代码语言:javascript
复制
Prawn::Document.generate @name[0]+ ".pdf" do

然后是我们生成文档的所有代码。不幸的是,这会将文档保存到磁盘上,这对于托管在Heroku上的应用程序是不可能的(据我所知)。

然后,我们使用以下命令将其推送给用户

代码语言:javascript
复制
send_file "#{Rails.root}/"+@name[0]+ ".pdf", :type =>
'application/pdf',:filename => @name[0]+ ".pdf"

有没有办法使用Prawn直接将文档的下载推送给用户,而无需先将文档保存到磁盘?如果没有,有没有其他可以生成PDF文件的gem,不需要在发送文件之前将文件保存到磁盘?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-13 05:14:00

在Aspen/Bamboo上,您可以将文件保存到磁盘上的应用程序目录(可能是Rails.root.join("tmp"))或任何子目录下的tmp/目录中。

在Cedar上,您可以将文件保存到磁盘上应用程序目录中的任何位置,但无论如何仍应选择应用程序的tmp/目录的一个子目录。

在这两种情况下,保存的文件都是短暂的。它们不会在应用程序的两个运行实例之间共享;它们不会在重新启动之间保留;等等。不要依赖于在一个请求中保存文件,然后在第二个请求中访问它。

票数 7
EN

Stack Overflow用户

发布于 2014-01-13 06:33:05

虽然这个问题很久以前就得到了回答,但我会为其他可能想要这样做的人发帖。

您还可以在当前的Prawn v0.13.2中调用不带文件名的render。返回一个字符串,可以通过send_data发送给客户端。模式是:

代码语言:javascript
复制
pdf = Prawn::Document.new
# ... calls to build the pdf
send_data pdf.render, 
          type: 'application/pdf', 
          filename: 'download_filename.pdf',  
          disposition: :inline

这将在浏览器中显示PDF。如果您想让用户下载它,可以省略, disposition: :inline

当然,只有在文档相当短或者系统使用率不高的情况下,才需要这样做,因为在用户完成下载之前,它将消耗RAM。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9674734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档