Wicked PDF仅在页面刷新时生成pdf

时间:2016-09-23 06:12:04

标签: ruby-on-rails ruby-on-rails-4 wkhtmltopdf wicked-pdf

我正在开发一个网络应用程序,我有这个"注册"页。我想在访问节目页面时呈现一个pdf页面。但是,当我点击show按钮时,会加载一个普通的html页面,内容就像一个转储,所有的乱码(这里是内容的要点:https://gist.github.com/anonymous/0806200b7ca31bba35d3a514a7ff90e6)。但是,当我刷新页面时,它会完美地呈现pdf。

我检查了url和params是否有任何差异但是一切都是一样的。我还检查了实例变量,它们是相同的。我搜索了这个问题,并没有发现任何内容。

这是show动作中的渲染代码:

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

非常感谢任何帮助或指示。

2 个答案:

答案 0 :(得分: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)) %>

答案 1 :(得分:1)

要渲染pdf,请执行以下操作:

config / initializers / mime_types.rb 文件中注册PDF mime类型:

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)