2010-07-06 7 views
10

Estoy usando Rails para generar un PDF con el archivo ejecutable wkhtmltopdf y luego uso de send_data para enviar el resultado al usuario como un archivo PDF.Rails send_data lanza "secuencia de bytes no válida en UTF-8" ... pero ¿por qué?

view = ActionView::Base.new(ActionController::Base.view_paths, {}) 
html = "<h1>A heading</h1>" 
pdfdata = `echo '#{html}' | #{RAILS_ROOT}/lib/pdf/wkhtmltopdf-i386 - -` 
send_data pdfdata, :filename => 'readthis.pdf', :disposition => 'attachment', :type => "application/pdf" 

El PDF se genera correctamente, pero se queja de rieles ArgumentError (invalid byte sequence in UTF-8) del método send_data. Cambiarlo para enviar "foobar" como :type => text/html lo hace funcionar, por lo que definitivamente tiene un problema con pdfdata.

No entiendo. ¿No se supone que send_data envía datos binarios? Por supuesto, no es válido UTF-8. ¿O me estoy perdiendo algo?

Gracias

+0

¿Qué versión de ruby ​​estás usando? ¿Send_file funciona? ¿Trató también disposición => en línea? –

+0

Estoy usando Ruby 1.9.1 – doctororange

Respuesta

11

Rails asume UTF-8. Decirle explícitamente que se trata de datos binarios resuelve el problema. Gracias por tu ayuda.

pdfdata.force_encoding('BINARY') 
0

¿Inspeccionó la variable pdfdata y comprobar si es correcta o no?

+0

Bueno, ciertamente contiene caracteres que no pueden ser representados adecuadamente por la salida del terminal o vim, pero eso es de esperar, ¿no? Es un archivo PDF. – doctororange

Cuestiones relacionadas