如何在ROR(Ruby)中显示PDF?

时间:2011-09-21 13:20:57

标签: ruby-on-rails ruby pdf

我在互联网上环顾四周,但似乎无法找到如何在rails中显示PDF(我只能找到有关如何创建PDF的信息)。

有谁知道我需要显示哪个代码/ gem?

5 个答案:

答案 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