我正在Rails(3.1.1)中的最新版本的Prawn库(v1.0.1rc)中创建一个pdf文件,当我运行我的代码时,它会将PDF生成到应用程序的根目录中。
我不想要这个。我希望它将输出呈现到用户的浏览器窗口中,而不是将其本地保存到服务器。
请告诉我如何实现这一目标。这是我的文件:
视图/富/ 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
答案 0 :(得分:20)
<强>的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
gem,但它不再有任何黑客攻击而无法工作。这是一种更简洁的方法,通过直接访问Prawn来实例化和显示3.1中的PDF对象。
我直接从Ryan Bates和#39; Railscasts。从那以后一直在使用它。您可以查看该特定剧集here。他详细介绍了如何对Prawn进行子类化并将PDF生成代码移出控制器。还展示了许多有用的Prawn方法来帮助您入门。强烈推荐。
很多剧集都是免费的,但修订后的Prawn剧集只有付费订阅才能获得。但是,每月9美元,订阅很快就能收回成本。
答案 1 :(得分:1)
我发现将pdf发送到客户端浏览器的最佳方法是将下载链接到链接。通常,您需要在表单提交后生成pdf,但还需要重定向到另一个页面。
您无法同时重定向和发送pdf ,但您可以重定向然后提供下载链接,如下所示:
首先将gem 'prawn'
添加到您的gemfile中。束。然后执行以下操作:
链接到您视图中的特殊打印操作
<%= link_to 'print ticket', print_ticket_path %>
路由到routes.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