web-dev-qa-db-ja.com

PDF in ROR(Ruby))を表示するにはどうすればよいですか?

インターネットを見回してみたが、PDF in Railsの表示方法がわからない1)。

誰かがどのコード/宝石を表示する必要があるか知っていますか?

36
Doomsknight

コントローラで:

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サーバーがディスクから直接ファイルを送信できるようにするため、構成の変更が必要です。これにより、パフォーマンスが向上します。

更新

ダウンロードせずに表示する場合は、:dispositionsend_fileオプションを使用します。

send_file(pdf_filename, :filename => "your_document.pdf", :disposition => 'inline', :type => "application/pdf")

インラインで表示したい場合、 この質問 は、私がこれまでよりもはるかに完全になります。

52
Benoit Garret

基本的には、ビューのhtmlに書き込むだけです。したがって、この簡単な解決策は私にとってうまくいきました:

「show.hmtl.erb」内

<iframe src=<%= @certificate.certificate_pdf %> width="600" height="780" style="border: none;"> </iframe>

埋め込まれたRubyにファイルの場所を置くだけで、iframeタグのソースは何時間も何時間も検索した後で私のために機能しました。'certificate 'は私のモデルであり、' certificate_pdf 'は私の添付ファイルです。

7
andrewcockerham

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
mliebelt

これは単純すぎるかもしれませんが、私の問題に対する簡単な答えを見つけるのに苦労したので、ここに投稿します。静的ファイルをダウンロードするためだけに、コントローラーに別のアクションを追加したくありませんでした。

私はファイルをS3にアップロードし、パスを参照するlink_toを使用しました。ファイルをアップロードして権限を設定した後、S3が提供するパスを使用します(全員がファイルをアップロードおよびダウンロードできる必要があります)。私はS3にアプリのデータをたくさん保存しているので、それは良い選択のように思えました。

<%= link_to "speaker registration form", "https://s3.amazonaws.com/gws_documents/speaker_registration.pdf" %>
2
Makean
def pdf
  pdf_content = ...# create the pdf
  send_data(pdf_content, :filename => "test.pdf", :type => "application/pdf")
end
1
Matt