0

さて、私はあらゆる種類のものを試しましたが、これがうまくいくかどうかは完全にはわかりません。マージする必要のあるPDFはサーバー上にあり、それらへのリンクはハードコーディングされています。pdftkは私のターミナルでローカルに動作しますが、これらのリモートリンクでは動作しません。ですから、本番環境に移行した後、これが機能するかどうかはわかりません。

基本的に、私は、選択したpdfのグループを取得し、ユーザーがダウンロードできるようにそれらを1つのpdfにマージするメソッドを作成しようとしています。

しかし、私は一時ファイルを利用する方法を解読し、railsアプリを介してターミナルコマンドを実行するのに苦労しています。

方法は次のとおりです。

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

いくつか質問があります:

  1. 私の一時ファイルには、正しいコマンドラインが書き込まれています。

    pdftk 1.pdf 2.pdf cat output new.pdf

new.pdfが作成されるように、この行を実行するにはどうすればよいですか?

  1. 一時ファイルを新しいpdfに置き換えるのか、それとも新しいpdfを書き込むのか、それとも独自の場所に新しいpdfを作成するのか。後者の場合、どうすれば一時的なものにすることができますか?

  2. ユーザーがダウンロードできるように、新しいPDFへのリンクを取得するにはどうすればよいですか?

これのいくつかは基本的なものかもしれませんが、私はこのように動的にpdfを作成するtempfilesをいじる必要はありませんでした。

そうそう、このアプリはRails2.3にもあります

助けてくれてありがとう。

4

1 に答える 1

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
于 2011-07-28T13:53:10.207 に答える