2013-06-11 10 views
7

Cố gắng sử dụng Wicked PDF.RuntimeError (Không thực thi được: Lỗi: " xFE" từ ASCII-8BIT sang UTF-8):

Tôi có mã này trong bộ điều khiển

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 

Tôi nhận được thông báo lỗi này khi cố gắng thực hiện thao tác trên

RuntimeError (Failed to execute: 

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

Tôi đã cố gắng để trống nội dung của các mẫu và bố trí tôi đang hiển thị nhưng vẫn gặp lỗi.

Trả lời

0

Tôi đã gặp lỗi chính xác khi sử dụng WickedPdf.new.pdf_from_string.

thử tháo:

WickedPdf.new.pdf_from_string

nên nó đọc:

pdf = render_from_string (pdf: ....

+0

tôi nhận được 'phương pháp xác định 'render_from_string 'for # '- bất kỳ ý tưởng nào? – sergserg

+0

@sergserg Bạn chỉ có thể sử dụng phương thức đó trong bộ điều khiển. – Micah

6

Tôi chỉ chạy vào vấn đề này bản thân mình. Kỳ lạ thay, nó chỉ xảy ra khi tôi đang chạy dưới Rails 4.rc2 (làm việc tốt dưới Rails 3.2.13) .Tôi nhận được xung quanh nó bằng cách buộc các mã hóa chuỗi pdf kết quả để UTF-8.

.210

Vì vậy, trong ví dụ của bạn, hãy thử một cái gì đó như thế này:

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

Trong khi dòng trên thứ cho tôi cố định, tôi phát hiện ra vấn đề cơ bản là thực sự một số đá quý đã được hạ cấp trong quá trình nâng cấp lên Rails 4. rc2. Sau khi buộc một số phụ thuộc để có được phiên bản đá quý sau này, giờ đây tôi có thể chạy mà không cần #force_encoding như trước đây với đường ray 3.

+0

Điều này đã sửa nó cho tôi. Bạn có thể cho tôi biết bạn đã cập nhật đá quý nào để loại bỏ điều này không ?? – iwiznia

+0

Tôi ước mình có thể, nhưng có quá nhiều đá quý liên quan đến tôi đã không theo dõi nó xuống một duy nhất. Tôi muốn khuyên bạn nên tìm kiếm đá quý rất lỗi thời (bó cũ) và bắt đầu với những người. –

+0

ok, cảm ơn! Thật kỳ lạ vì nó là một dự án mới và sử dụng đường ray 4.0 .... Tôi sẽ xem xét và đăng chúng ở đây nếu tôi tìm ra cái nào là nó. – iwiznia

0

Đây là từ các ký tự đặc biệt xuất hiện ở đâu đó trong mã mẫu của bạn. từ dán từ MS-Word). Tôi sử dụng đoạn mã này để tìm chính xác vị trí của nó:

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

Điều này có thể xảy ra nếu bạn cố gắng ghi vào tệp không ở chế độ nhị phân.

Hoặc mở file với 'b' cờ File.open(file_path, 'wb'), hoặc nếu bạn đã có một tập tin xử lý, bạn có thể chuyển nó sang chế độ nhị phân trước khi viết:

f = Tempfile.open(%w(my .pdf)) 
f.binmode 
f << pdf 
f.close 
+0

Đánh giá cao việc bạn hiển thị cả hai phương pháp để thêm vào các đối tượng 'File' và' Tempfile'. – mralexlau

Các vấn đề liên quan