首页 文章

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

提问于
浏览
0

我在网络应用程序上工作,我有这个"Registration"页面 . 我想在访问节目页面时呈现一个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 回答

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

  • 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)) %>
    

相关问题