9

Wicked 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

上記のアクションを実行しようとすると、このエラー メッセージが表示されます

RuntimeError (Failed to execute:

Error: "\xFE" from ASCII-8BIT to UTF-8):

レンダリング中のテンプレートとレイアウトのコンテンツを空にしようとしましたが、それでもエラーが発生しました。

4

4 に答える 4

13

これは、バイナリ モードではないファイルに書き込もうとした場合に発生する可能性があります。

'b' フラグを付けてファイルを開くか、File.open(file_path, 'wb')既にファイル ハンドルがある場合は、書き込む前にバイナリ モードに切り替えることができます。

f = Tempfile.open(%w(my .pdf))
f.binmode
f << pdf
f.close
于 2015-04-08T00:14:53.170 に答える
6

私はちょうどこの問題に遭遇しました。奇妙なことに、Rails 4.rc2 (Rails 3.2.13 では正常に動作) で実行したときにのみ発生していました。結果のpdf文字列エンコーディングをUTF-8に強制することで回避しました。

したがって、あなたの例では、次のようにしてみてください。

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

上記の行で問題は解決しましたが、根本的な問題は実際には、Rails 4.rc2 へのアップグレードの過程でダウングレードされたいくつかの gem であることがわかりました。いくつかの依存関係に新しいバージョンの gem を強制的に取得させた後、以前 Rails 3 で行ったように #force_encoding なしで実行できるようになりました。

于 2013-06-17T21:22:39.893 に答える
0

WickedPdf.new.pdf_from_string を使用してまったく同じエラーが発生しました。

削除してみてください:

WickedPdf.new.pdf_from_string

したがって、次のように表示されます。

pdf = render_from_string( pdf: ....

于 2013-06-14T16:09:35.330 に答える
0

これは、テンプレート コードのどこかに出現する特殊文字によるものです (たとえば、MS-Word からの貼り付けによる中括弧)。このコードを使用して、発生している場所を正確に見つけます。

body = File.read('raw.txt')
puts body.encode('ASCII-8BIT', :invalid => :replace, :undef => :replace)
于 2013-06-24T20:41:03.530 に答える