2011-12-28 32 views
11

Tôi đang tạo tệp pdf trong phiên bản mới nhất của thư viện Prawn (v1.0.1rc) trong Rails (3.1.1) và khi tôi chạy mã của mình tạo PDF vào thư mục gốc của ứng dụng.Không thể kết xuất PDF sang trình duyệt bằng Prawn PDF cho Ruby on Rails

Tôi không muốn điều này. Tôi muốn nó hiển thị đầu ra vào cửa sổ trình duyệt của người dùng mà không lưu nó vào máy chủ.

Hãy cho tôi biết cách tôi có thể đạt được điều này. Dưới đây là tác phẩm của tôi:

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

%> 

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 

Trả lời

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 

tôi sử dụng để sử dụng prawnto đá quý trước khi Rails 3.1, nhưng nó không hoạt động mà không có một chút hack nữa không. Đây là một cách gọn gàng hơn để nhanh chóng và hiển thị đối tượng PDF trong 3.1 bằng cách truy cập trực tiếp vào Prawn.

Tôi nhận kỹ thuật này ngay từ một trong số Ryan Bates 'Railscasts. Được sử dụng nó từ bao giờ. Bạn có thể xem tập cụ thể đó here. Ông đi vào chi tiết hơn về phân lớp Prawn và di chuyển mã tạo PDF ra khỏi bộ điều khiển. Cũng cho thấy rất nhiều phương pháp Prawn hữu ích để giúp bạn bắt đầu. Rat khuyen khich.

Rất nhiều tập miễn phí, nhưng tập Prawn được sửa đổi là một trong những tập chỉ có sẵn với đăng ký trả phí. Tuy nhiên, với mức phí $ 9/tháng, đăng ký sẽ nhanh chóng tự thanh toán.

+0

Cảm ơn Vickash. Điều đó chắc chắn làm việc và tôi đồng ý về điểm đăng ký - cũng đáng giá! – Betjamin

+0

Có cách nào để làm điều này ngầm không? – 0112

1

Tôi tìm cách tốt nhất để gửi bản pdf đến trình duyệt của khách hàng là tải bản tải xuống vào liên kết. Thông thường, bạn cần tạo một pdf sau khi gửi biểu mẫu, nhưng cũng cần phải chuyển hướng đến một trang khác.

Bạn không thể chuyển hướng và gửi pdf đồng thời, nhưng bạn có thể chuyển hướng và sau đó cung cấp một liên kết tải về, như vậy:

Đầu tiên thêm gem 'prawn' để gemfile của bạn. Bundle. Sau đó làm như sau:

Liên kết để hành động in ấn đặc biệt của bạn theo quan điểm của bạn

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

đường đến hành động in ấn đặc biệt trong tuyến đường.RB

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

hành động mà gửi file xuất ra (thay đổi theo nhu cầu của bạn):

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 
Các vấn đề liên quan