无法使用Prawn PDF for Ruby on Rails将PDF呈现给浏览器

Bet*_*min 12 prawn ruby-on-rails-3.1

我正在Rails(3.1.1)中的最新版本的Prawn库(v1.0.1rc)中创建一个pdf文件,当我运行我的代码时,它会将PDF生成到应用程序的根目录中.

我不想要这个.我希望它将输出呈现到用户的浏览器窗口中,而不将其本地保存到服务器.

请告诉我如何实现这一目标.这是我的文件:

views/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")

%>
Run Code Online (Sandbox Code Playgroud)

controllers/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
Run Code Online (Sandbox Code Playgroud)

Vic*_*ash 20

的Gemfile

gem 'prawn'
Run Code Online (Sandbox Code Playgroud)

/config/initializers/mime_types.rb

Mime::Type.register "application/pdf", :pdf
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我曾经prawnto在Rails 3.1之前使用过gem,但是如果没有一点黑客攻击它就行不通.通过直接访问Prawn,这是一种更简洁的方法来实例化和显示3.1中的PDF对象.

我直接从Ryan Bates的Railscasts中获得了这项技术.从那以后一直在使用它.您可以在此处查看该特定剧集.他详细介绍了如何对Prawn进行子类化并将PDF生成代码移出控制器.还展示了许多有用的Prawn方法来帮助您入门.强烈推荐.

很多剧集都是免费的,但修改过的Prawn剧集只是付费订阅的一部分.虽然每月9美元,订阅很快就能收回成本.