2016-09-23 109 views
0

我正在一個web應用程序,我有這個「註冊」頁面。我想在訪問顯示頁面時呈現一個pdf頁面。但是當我點擊顯示按鈕時,一個普通的html頁面被加載並且內容就像是一個轉儲,所有的亂碼(這裏是內容的要點:https://gist.github.com/anonymous/0806200b7ca31bba35d3a514a7ff90e6)。但是,當我刷新頁面時,它完美地呈現PDF。Wicked PDF生成pdf只刷新頁面

我檢查了網址和參數是否有差異,但都是一樣的。我也檢查了實例變量,它們是一樣的。我搜索了這個問題,但沒有發現任何問題。

這裏是在表演動作渲染代碼:

respond_to do |format| 
    format.html do 
    render pdf: 'customer_print_out.pdf', 
    file: "#{Rails.root}/app/views/pdf/customer_print_out.pdf.erb", 
    page_size: 'A4', 
    encoding: 'UTF-8' 
    end 
end 

我想指出,我產生在PDF文件中的條形碼。當我刷新頁面時,它也被正確加載,當我刪除條形碼生成代碼時,我仍然得到同樣的問題。

現在用: Rails v4.2.6, wicked_pdf v1.1.0, puma v3.6.0

任何幫助或指針真的很感激。

+1

爲什麼你呈現PDF中HTML格式?您應該使用'format.pdf'而不是 – dpaluy

+1

您必須爲pdf添加格式http://stackoverflow.com/questions/357212/rails-convert-html-to-pdf/32992165#answer-32992165 –

回答

1

爲了使PDF格式,請執行以下操作:

註冊PDF MIME類型config/initializers/mime_types.rb文件:

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

在你的控制器執行以下操作:

class YourController < ApplicationController 
    def show 
    @product = Product.first 

    respond_to do |format| 
     format.html 
     format.pdf do 
     render pdf: 'customer_print_out.pdf', 
       file: "#{Rails.root}/app/views/pdf/customer_print_out.pdf.erb", 
       page_size: 'A4', encoding: 'UTF-8' 
     end 
    end 

    end 
end 

請求應該在pdf格式,例如:your_controller_path(format: :pdf)

+0

我不需要添加pdf Mime類型。它已經在那裏。我得到了一個「警告:已經初始化常量Mime :: PDF」。寶石必須包括它。 – Homoud

1

我認爲你應該使用format.pdf代替format.html

format.pdf do 
    render pdf: 'customer_print_out.pdf', 
    file: "#{Rails.root}/app/views/pdf/customer_print_out.pdf.erb", 
    page_size: 'A4', 
    encoding: 'UTF-8' 
    end 

也不要忘記指定格式在按鈕的代碼pdf,像

<%= link_to('Show', your_show_action_path(format: :pdf)) %>