我在互联网上环顾四周,但似乎无法找到如何在rails中显示PDF(我只能找到有关如何创建PDF的信息)。
有谁知道我需要显示哪个代码/ gem?
答案 0 :(得分:52)
在您的控制器中:
def pdf
pdf_filename = File.join(Rails.root, "tmp/my_document.pdf")
send_file(pdf_filename, :filename => "your_document.pdf", :type => "application/pdf")
end
在config/environment/production.rb
:
config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
或
config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
配置修改是必需的,因为它使Web服务器能够直接从磁盘发送文件,从而提高了性能。
<强>更新强>
如果您想要显示而不是下载它,请使用:disposition
的{{1}}选项:
send_file
如果你想以内联方式显示它,this question将会更加完整。
答案 1 :(得分:6)
基本上你只需要在视图中的html中编写它。所以这个简单的解决方案对我有用:
在'show.hmtl.erb'
中<iframe src=<%= @certificate.certificate_pdf %> width="600" height="780" style="border: none;"> </iframe>
将文件位置放在嵌入式ruby中作为iframe标记的来源,经过数小时和数小时的搜索后,对我有用。 'certificate'是我的模型,'certificate_pdf'是我的附件文件。
答案 2 :(得分:3)
根据PDF的来源,以下内容可能对您有所帮助。我有一个应用程序,我存储了很多东西,其中一些有(附加)PDF连接到项目。我将这些项目存储在目录/public/res/<item_id>/
中。 res
表示结果,item_id
是Rails中该项的数字ID。
在视图中,我通过以下(伪)代码作为辅助方法提供了PDF链接,可以在视图中使用:
def file_link(key, name = nil)
res= Ressource.find(:first, :conditions => ["key = ?", key])
list = Dir["public/res/#{res.id}/*"]
file= list.empty? ? "" : list[0]
return file if file.empty?
fn = name ? name : File.basename(file)
link_to fn, "/res/#{res.id}/#{File.basename(file)}", :popup => true
end
这里的相关部分是link_to name, "/res/#{res.id}/#{File.basename(file)}"
。
答案 3 :(得分:2)
这可能太简单了,但我找不到问题的简单答案,所以我在这里发帖。我真的不想为了下载静态文件而向控制器添加另一个动作。
我刚将文件上传到S3&amp;使用link_to引用路径,S3在您上传文件并设置权限后提供(请记住,每个人都必须能够上传和下载它)。我在S3上为应用程序存储了大量数据,因此它似乎是一个不错的选择。
<%= link_to "speaker registration form", "https://s3.amazonaws.com/gws_documents/speaker_registration.pdf" %>
答案 4 :(得分:1)
def pdf
pdf_content = ...# create the pdf
send_data(pdf_content, :filename => "test.pdf", :type => "application/pdf")
end