Ruby on rails 3.2 运行时错误(未能执行:错误:“从ASCII-8BIT到UTF-8的\xFE”:

Ruby on rails 3.2 运行时错误(未能执行:错误:“从ASCII-8BIT到UTF-8的\xFE”:,ruby-on-rails-3.2,wicked-pdf,Ruby On Rails 3.2,Wicked Pdf,试图使用邪恶的PDF 我在控制器里有这个代码 def pdf pdf = WickedPdf.new.pdf_from_string( render_to_string( pdf: 'filename.pdf', template: '/pages/poa.html.slim', layout: '/layouts/pdf'), header: { content: render_to_string({ template: '/pdfs

试图使用邪恶的PDF

我在控制器里有这个代码

  def pdf
  pdf = WickedPdf.new.pdf_from_string(
  render_to_string(
  pdf: 'filename.pdf',
  template: '/pages/poa.html.slim',
  layout: '/layouts/pdf'),
  header: {
      content: render_to_string({
          template: '/pdfs/poa_header.html.slim',
          layout: '/layouts/pdf'
      })
  })

   save_path = [Rails.root, '/public/pdf/', 'filename.pdf'].join
   File.open(save_path, 'wb') do |file | file << pdf
   end
   end

我已经尝试清空正在渲染的模板和布局的内容,但仍然出现错误

我使用WickedPdf.new.pdf\u从\u字符串中得到了完全相同的错误

尝试删除:

WickedPdf.new.pdf_from_string

它是这样写的:


pdf=render_from_string(pdf:..

我自己也遇到了这个问题。奇怪的是,这只发生在我在Rails 4.rc2下运行时(在Rails 3.2.13下运行良好)。我通过将生成的pdf字符串编码强制为UTF-8来解决这个问题

因此,在您的示例中,请尝试以下操作:

File.open(save_path, 'wb') do |file | file << pdf.force_encoding("UTF-8")

File.open(save_path,'wb')do | File | File这是来自模板代码中出现的特殊字符(例如,从MS Word粘贴而来的卷曲引号)。我使用这段代码来精确查找其发生的位置:

body = File.read('raw.txt')
puts body.encode('ASCII-8BIT', :invalid => :replace, :undef => :replace)

如果试图写入非二进制模式的文件,则可能会发生这种情况

使用“b”标志
file.open(file_path,'wb')
打开文件,或者如果您已经有文件句柄,则可以在写入之前将其切换到二进制模式:

f = Tempfile.open(%w(my .pdf))
f.binmode
f << pdf
f.close
f=Tempfile.open(%w(my.pdf))
f、 双模式

如果我为#
获取了
未定义的方法“render_from_string”-有什么想法吗?@sergserg你只能在控制器中使用该方法。这为我解决了它。你能告诉我你更新了哪些宝石来摆脱它吗?我希望我可以,但涉及的宝石太多了,我没有找到一个。我建议你寻找非常多的宝石过时的gems(捆绑过时的)并从这些开始。好的,谢谢!这很奇怪,因为这是一个新项目,使用rails 4.0…如果我知道是哪一个,我会看一下并将它们发布在这里。感谢您展示在
文件和
Tempfile
对象上添加此项的两种方法。
f = Tempfile.open(%w(my .pdf))
f.binmode
f << pdf
f.close