2011-12-28 19 views
11

Rails(3.1.1)の最新版Prawnライブラリ(v1.0.1rc)にpdfファイルを作成しています。 PDFをアプリケーションのルートに生成します。Ruby on Rails用Prawn PDFを使用してPDFをブラウザにレンダリングできない

私はこれが嫌いです。私はそれをサーバーにローカルに保存せずに、ユーザーのブラウザウィンドウに出力するようにします。

どうすればいいか教えてください。ここに私のファイルは、以下のとおりです。

ビュー/ fooの/ show.pdf.erb

<%= 

require 'prawn' 

pdf = Prawn::Document.new(:page_size => 'LETTER', :page_layout => :landscape, :margin => 50, :top_margin => 20, :bottom_margin => 50) 

..... 

render_file("foo.pdf") 

%> 

コントローラ/ foo_controller

class AuditsController < ApplicationController 
    before_filter :authenticate_user! 
    layout 'application' 
    can_edit_on_the_spot 
    respond_to :html, :xml, :js, :pdf 

    def index 
    @audits = Audit.all 
    respond_with @audits 
    end 

    def show 
    @audit = Audit.find(params[:id]) 
    respond_with @audit do |format| 
     format.pdf { render :layour => false } 
    end 
    end 

答えて

19

Gemfile

gem 'prawn' 

/config/initializers/mime_types.rb

Mime::Type.register "application/pdf", :pdf 

AuditsController

def show 
    @audit = Audit.find(params[:id]) 
    respond_to do |format| 
    format.html 
    format.pdf do 
     pdf = Prawn::Document.new 
     pdf.text "This is an audit." 
     # Use whatever prawn methods you need on the pdf object to generate the PDF file right here. 

     send_data pdf.render, type: "application/pdf", disposition: "inline" 
     # send_data renders the pdf on the client side rather than saving it on the server filesystem. 
     # Inline disposition renders it in the browser rather than making it a file download. 
    end 
    end 
end 

私はRailsの3.1の前prawnto宝石を使用するために使用されるが、それはハッキングのビットなしでは動作しません。もうこれはPrawnに直接アクセスすることにより、3.1でPDFオブジェクトをインスタンス化して表示するためのきれいな方法です。

私はこの技術をRyan BatesのRailscastsから直接取得しました。それ以来ずっとそれを使っています。その特定のエピソードhereを見ることができます。彼は、Prawnのサブクラス化とPDF生成コードのコントローラからの移動について、さらに詳しく説明します。また、あなたに役立つ多くの有用なPrawnメソッドを示しています。強くお勧めします。

多くのエピソードは無料ですが、改訂されたプルーンエピソードは、有料のサブスクリプションでのみ利用できるエピソードの1つです。しかし、月額9ドルで、サブスクリプションはすぐに支払われます。

+0

おかげVickash。それは確かにうまくいって、購読ポイントに同意します。 – Betjamin

+0

これを暗黙的に行う方法はありますか? – 0112

1

私はクライアントのブラウザにpdfを送る最良の方法は、ダウンロードをリンクに入れることです。フォーム提出の後にpdfを生成する必要があるだけでなく、別のページにリダイレクトする必要があることがよくあります。

まず、あなたのgemfileにgem 'prawn'を追加しますので、同じよう

あなたは、リダイレクトして送信PDFを同時にをしていますが、リダイレクトして、ダウンロードリンクを提供することができますすることはできません。バンドル。そして、次の操作を行います路線における特殊印刷アクションに

リンクビューでのあなたの特別な印刷アクションに

<%= link_to 'print ticket', print_ticket_path %> 

ルート。RB

match 'print_ticket', to: 'tickets#print_ticket' 

出力ファイル(ニーズ当たりの変化)を送信アクション:

def print_ticket 
    if session[:token] 
     @pdf = generate_pdf(session[:token]) 
     send_data(@pdf, :filename => "output.pdf", :type => "application/pdf") 
    end 
    end 

    private 
    def generate_pdf(token) 
    Prawn::Document.new do 
     formatted_text [ { :text=>"xxx.org", :styles => [:bold], :size => 30 } ] 
     move_down 20 
     text "Please proceed to the following web address:" 
     move_down 20 
     text "http://xxx.org/finder" 
     move_down 20 
     text "and enter this code:" 
     move_down 20 
     formatted_text [ { :text=>token, :styles => [:bold], :size => 20 } ] 
    end.render 
    end 
関連する問題