2011-09-21 10 views
28

私はインターネット上を見回しましたが、PDFを表示する方法を見つけることができないようです(私は作成方法に関する情報しか見つけることができません)。ROR(Ruby)にPDFを表示するにはどうすればよいですか?

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

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で:あなたのコントローラで

+0

[prawn](https://github.com/sandal/prawn)は、事実上の標準の一種です。 – lucapette

答えて

47

それが送信するために、Webサーバが可能になるため

config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache 

または

config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx 

設定変更が必要ですファイルdirecディスクからの恩恵を受け、パフォーマンスが向上します。

更新

あなたがそれをダウンロードするのではなく、それを表示したい場合は、send_file:dispositionオプションを使用します。あなたはインラインで表示したい場合は

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

を、this questionははるかに完了します私はこれまでにできることができた。

+0

ねえ、これは素晴らしいものです。ユーザーにpdfを送るという点で。しかし、それを送信する前にウェブサイトに表示するのはどうですか? :) – Doomsknight

+5

私の答えを更新しました。 –

+0

私の答えがあなたを満足させないように見える、なぜあなたに教えてくれますか? –

1
def pdf 
    pdf_content = ...# create the pdf 
    send_data(pdf_content, :filename => "test.pdf", :type => "application/pdf") 
end 
+0

こんにちは、これは有望そうですが、ファイルからロードして表示したいだけの場合はどうしますか?私。 pdf_content変数はありません。 – Doomsknight

+0

その場合、Benoitのソリューションを見てください。 – Matt

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)}"ありますもの。

+0

あなたの解決策について2つの注意点があります。1/'public'フォルダにあるファイルのみを表示できます。 2 /ブラウザの保存ダイアログでファイルの名前を変更することはできません。 –

+0

それは本当ですが、時には十分です。その簡単な解決策、私は知っています:-) – mliebelt

+1

あなたは完全に正しいです、私はちょうど(またはそうではない;-))取引をすることができます制限を指摘したい。 –

2

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

ファイルをアップロードしてアクセス権を設定した後に、S3が提供するパスを参照して、S3を&にアップロードしました。誰もがアップロードしてダウンロードできる必要があります。私はS3のアプリのためにたくさんのデータを保存するので、良い選択のように思えました。

<%= link_to "speaker registration form", "https://s3.amazonaws.com/gws_documents/speaker_registration.pdf" %> 
4

基本的には、ビューのhtmlで記述する必要があります。だから、この単純な解決策は私のために働いていた:iframeタグのソースは何時間後に私のために働いたとして、「show.hmtl.erb」は、

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

はちょうど埋め込まれたRubyでファイルの場所を置きます検索の'certificate'は私のモデル、 'certificate_pdf'は私の添付ファイルです。

関連する問題