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

Wicked PDF generating pdf only on page refresh

我正在开发一个网络应用程序,我有这个 "Registration" 页面。我想在访问展示页面时呈现一个pdf页面。但是当我点击显示按钮时,一个正常的 html 页面被加载并且内容就像一个转储,全是乱码(这里是一个内容的要点:https://gist.github.com/anonymous/0806200b7ca31bba35d3a514a7ff90e6)。但是,当我刷新页面时,它会完美呈现 pdf。

我检查了 url 和参数是否有任何差异,但一切都是一样的。我还检查了实例变量,它们是一样的。我用谷歌搜索了这个问题,但没有找到任何相关内容。

这里是展示动作中的渲染代码:

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

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

我认为你应该使用 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)) %>

为了呈现 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)