Mat*_*t K 10 ruby ruby-on-rails heroku prawn ruby-on-rails-3
我们目前正在研究Heroku上托管的Rails应用程序.我们正在尝试生成PDF并将其推送给用户下载.
我们正在使用Prawn来处理PDF生成.
我们目前生成PDF的代码:
Prawn::Document.generate @name[0]+ ".pdf" do
Run Code Online (Sandbox Code Playgroud)
接下来是我们生成文档的所有代码.不幸的是,这会将文档保存到磁盘上,这对于Heroku上托管的应用程序来说是不可能的(据我所知).
然后我们使用它将其推送给用户
send_file "#{Rails.root}/"+@name[0]+ ".pdf", :type =>
'application/pdf',:filename => @name[0]+ ".pdf"
Run Code Online (Sandbox Code Playgroud)
有没有办法使用Prawn直接将文档下载到用户而不先将文档保存到磁盘?如果没有,是否有任何其他宝石用于生成PDF,在发送文件之前不需要将文件保存到磁盘?
虽然很久以前就回答了这个问题,但我会为其他可能想要这样做的人发帖.
您也可以render在当前的Prawn v0.13.2中调用无文件名.将返回一个字符串,可以将其发送给客户端send_data.模式是:
pdf = Prawn::Document.new
# ... calls to build the pdf
send_data pdf.render,
type: 'application/pdf',
filename: 'download_filename.pdf',
disposition: :inline
Run Code Online (Sandbox Code Playgroud)
这将在浏览器中显示PDF.如果您希望让用户下载它,请省略, disposition: :inline
当然,如果文档相当短或者您的系统使用不当,您只想这样做,因为在用户下载完成之前它会消耗RAM.
在Aspen/Bamboo上,您可以将文件保存到tmp/应用程序目录(可能Rails.root.join("tmp"))或任何子目录中的目录中.
在Cedar上,您可以将文件保存到应用程序目录中的任何位置,但您仍应选择应用程序目录的子目录tmp/.
在任何一种情况下,保存的文件都是短暂的.它们不在应用程序的两个运行实例之间共享; 它们不会在重启之间保持; 不要依赖于在一个请求中保存文件,然后能够在第二个请求中访问它.
| 归档时间: |
|
| 查看次数: |
1690 次 |
| 最近记录: |