2011-09-21 3 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

[새우] (https://github.com/sandal/prawn) 사용은 일종의 사실상 표준입니다. – lucapette

답변

47

가를 보낼 수있는 웹 서버 수 있기 때문에

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

또는

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

는 config 수정이 필요합니다 파일 디렉토리 좋은 성능 향상을 제공하는 디스크에서.

업데이트

당신이 그것을 다운로드하는 대신 그것을 표시 할 경우, 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은 레일스에서 ​​해당 항목의 숫자 ID입니다.

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)}"이다

는 관점에서, I는 뷰에서 사용될 수있는 헬퍼 방법으로서 이하의 (의사 -) 부호로 PDF 파일에 대한 링크를 제공 할 맡은 일.

+0

해결책에 대해 알아야 할 두 가지 사항은 다음과 같습니다. 1 /'public' 폴더에있는 파일 만 표시 할 수 있습니다. 2/브라우저 저장 대화 상자에서 파일 이름을 변경할 수 없습니다. –

+0

사실이지만 때로는 충분합니다. 그것의 간단한 해결책, 나도 알아 :-) – mliebelt

+1

당신은 완벽하게 맞습니다, 나는 방금 (또는 아닙니다 ;-)) 거래 - 차단기 수있는 제한을 지적하고 싶었어요. –

2

이것은 너무 간단 할 수 있지만 문제에 대한 간단한 대답을 찾는 데 어려움이 있으므로 여기에 게시하고 있습니다. 정적 인 파일을 다운로드하기 위해 컨트롤러에 다른 작업을 추가하고 싶지 않았습니다.

방금 ​​파일을 업로드하고 사용 권한을 설정 한 후 S3에서 제공하는 경로를 참조하여 S3 &에 link_to를 사용하여 파일을 업로드했습니다. 모든 사용자가 업로드하고 다운로드 할 수 있어야합니다. S3에 앱의 데이터를 많이 저장하므로 좋은 선택처럼 보였습니다.

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

기본적으로보기의 html로 작성하면됩니다. 그래서이 간단한 해결책은 나를 위해 일한 :

을 'show.hmtl.erb'에서

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

단지 태그는 시간과 시간 후에 나를 위해 일한은 iframe의 소스로 내장 된 루비에서 파일 위치를 넣어 검색 중. '인증서'는 제 모델이고 'certificate_pdf'는 첨부 파일입니다.

관련 문제