2011-07-26 4 views
0

좋아, 나는 모든 종류의 물건을 시도하고 이것이 잘 작동하는지 전적으로 확신하지 못합니다. 병합해야하는 pdfs는 서버에 있으며 링크는 하드 코딩되어 있습니다. pdftk는 터미널에서 로컬로 작동하지만 이러한 원격 링크에서는 작동하지 않습니다. 그래서 일단 생산에 이르게되면 이것이 효과가 있을지 확신 할 수 없습니다.pdftk, 임시 파일 및 레일

기본적으로 나는 선택한 pdf 그룹을 검색하고 사용자가 다운로드 할 수 있도록 하나의 pdf로 병합하는 메소드를 작성하려고합니다.

하지만 레일 파일 앱을 통해 임시 파일을 활용하고 터미널 명령을 실행하는 방법을 알아보기 힘들어합니다.

def create 
@routes = TransitRoute.find(params[:selected_routes]) 
@selected_routes = @routes.collect {|x| x.new_pdf_link + " "} 
Tempfile.open('prefix', "#{Rails.root}/tmp") do |f| 
    f.print("pdftk #{@selected_routes} cat output temporary.pdf") 
    f.flush 
    f.read 
    end 

respond_to do |format| 
    format.html 
end 
end 

나는 몇 가지 질문이 있습니다 :

pdftk의 1.pdf 2 :

  1. 내 임시 파일이 기록 올바른 명령 라인을 가지고 여기에

    는 방법이다. pdf cat output new.pdf

new.pdf가 생성되도록이 행을 어떻게 실행합니까?

  1. 오전 나는 새 PDF로 임시 파일을 교체하거나 새 PDF를 작성하거나 그냥 자신의 위치에 새 PDF를 만들 생각? 후자의 경우 임시로 처리하려면 어떻게해야합니까?

  2. 사용자가 새 PDF를 다운로드 할 수 있도록하려면 어떻게해야합니까?

이 중 일부는 기본 사항 일 수 있지만 필자는 동적으로 pdfs를 만드는 임시 파일을 사용하지 않았습니다.

오, 그래,이 응용 프로그램은 레일도 도움 2.3

감사합니다.

답변

2

좋아, 잘 했어. 다음은 개선을위한 조언이 있거나 동일한 질문이있는 새로운 코드입니다.

def create 
file = Tempfile.new('temp_route_pdf', "#{Rails.root}/tmp/") 
@routes = TransitRoute.find(params[:selected_routes]) 
selected_routes = @routes.collect {|x| x.new_pdf_link + " "} 
route_names = @routes.collect {|x| x.short_name + "_"} 
@generated_pdf_file = "#{route_names}routes.pdf" 
`pdftk #{selected_routes}cat output #{file.path}` 
raise Exception unless $?.success? 
send_file("#{file.path}", 
     :type => "application/pdf", 
     :filename => "#{@generated_pdf_file}", 
     :disposition => 'inline') 
end