2

私はこれをコントローラーに持っています。HTMLを生成するためにビューが必要です。HTMLをFlyingSaucerを使用してPDFに変換します JRubyを使用しています)。その後、これはクライアントに返されます。

  def show    
    @cs_agreement = CsAgreement.find(params[:id])

    respond_to do |format|
      format.pdf do
        # TODO there must be a better way of getting the path to the view!
        report_template = ERB.new(File.new("app/views/agreement_document/client_agreement.erb"), nil, "%<")
        created_report = report_template.result(binding)

        send_data( FlyingSaucer::create_pdf(created_report), :filename => "agreement.pdf",
                   :type => "application/pdf",
                   :disposition => 'inline')
      end
    end

これが私にできる最善の方法です...ERBを使用して手動でhtmlを生成する方法しか理解できないため、データを取得してFlyingSaucerに送信してから戻ることができます。

この方法は、ヘルパーメソッドにアクセスできないことも意味しているようです。

Railsでhtmlを生成し、それをインターセプトしてpdfに変換してから戻る方法はありませんか?レンダリング関数は、すべてを1つに生成して返すようです。

4

2 に答える 2

1

render_to_stringのように、を使用できます

report_template = render_to_string 'client_agreement'

と同じオプションrender。詳細はこちら

別のコントローラー/アクションを指定する必要がある場合は、たとえばを介してそれを行うこともできます:action => :action_name

于 2010-03-07T04:55:59.587 に答える
1

を使用しrender_to_stringます。

def show    
  @cs_agreement = CsAgreement.find(params[:id])

  respond_to do |format|
    format.pdf do
      result = render_to_string
      send_data( FlyingSaucer::create_pdf(result), :filename => "agreement.pdf",
               :type => "application/pdf",
               :disposition => 'inline')
    end
  end
end
于 2010-03-07T04:59:22.933 に答える