我正在开发一个网络应用程序,我有这个"注册"页。我想在访问节目页面时呈现一个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
非常感谢任何帮助或指示。
答案 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)