2015-05-07 15 views
6

Tôi muốn tạo ra một file PDF có logo bộ phận của chúng tôi trong đó. Khi tôi cố gắng sử dụng lớp WickedPdf trong điều khiển của tôi (sử dụng phương pháp mô tả tại https://github.com/mileszs/wicked_pdf):Wicked-PDF không hiển thị hình ảnh, 'wicked_pdf_image_tag' undefined

def some_action 
    image_tag_string = image_tag('logo.jpg') 
    pdf = WickedPdf.new.pdf_from_string(image_tag_string) 

    save_path = Rails.root.join('testpdfs','logotest.pdf') 
    File.open(save_path, 'wb') do |file| 
    file << pdf 
    end 
end 

... các ứng dụng tiết kiệm PDF sang thư mục đích, nhưng nó có một màu xanh và trắng ' ? ' đánh dấu vị trí của hình ảnh.

Nếu tôi làm điều này thay vì:

image_tag_string = wicked_pdf_image_tag('logo.jpg') 
    pdf = WickedPdf.new.pdf_from_string(image_tag_string) 

tôi nhận được lỗi sau:

NoMethodError: 
    undefined method `wicked_pdf_image_tag' for #<... 

Nó sẽ xuất hiện ứng dụng Rails của tôi cũng là mất tích/không liên kết đến một tập tin helper thuộc đá quý wicked-pdf.

Câu trả lời cho câu hỏi tương tự trên StackOverflow khuyên bạn nên viết một tùy chỉnh "hình ảnh-tag" helper để định vị hình ảnh hoặc cài đặt wkhtmltopdf. Đối với tôi, thẻ hình ảnh hiển thị biểu tượng tốt khi được đặt trong Chế độ xem (whatever.html.erb). "logo.jpg" đã được đặt trong cả đường dẫn nội dung và # {RailsRoot}/công khai/hình ảnh. Cuối cùng, tôi đang sử dụng wkhtmltopdf 0.9.9, wicked-pdf 0.11.0 và đường ray 4 trên Ubuntu 14.04.

Tóm lại - những gì tôi làm sai gây WickedPDF để không hiển thị hình ảnh?

+0

'wicked_pdf_image_tag' là một phương pháp trợ giúp và như vậy nó nên được sử dụng trong chế độ xem hoặc người trợ giúp khác. Đăng thêm một số thông tin về việc triển khai của bạn. –

+0

Thông tin nào sẽ hữu ích? Hiện tại, tôi kích hoạt bộ điều khiển phương thức ở trên # some_action với một nút trên trang thử nghiệm. Tôi đã viết một bài kiểm tra có chứa các mã tương tự trong Rspec3 và nó làm điều tương tự khi tôi chạy nó - xây dựng các PDF, lưu nó, đặt một dấu hỏi nơi hình ảnh nên được. – NewbieOnRails

+1

Như tôi đã nói, 'cái wicked_pdf_image_tag' là một phương pháp helper, vì vậy nó không thể được sử dụng (ít nhất nó không nên) trong hành động điều khiển. Bạn nên tạo một khung nhìn, nơi bạn đặt vào hình ảnh của mình và sử dụng chế độ xem đó để tạo pdf. Tuy nhiên, để làm cho câu chuyện dài ngắn - cho wicked_pdf các đường dẫn hình ảnh cần phải là một đầy đủ, đường dẫn tuyệt đối, với đường dẫn hệ thống tập tin đầy đủ hoặc url đầy đủ (với tên miền và giao thức). Tôi sẽ cố gắng đưa ra một số ví dụ đơn giản và đăng nó ở đây (trừ khi có ai đó đánh tôi với nó). –

Trả lời

12

Điều đầu tiên tạo ra một mẫu pdf để render và sử dụng thẻ wicked_pdf của bạn trong mẫu mà .. cho example-

app/views/layout/application.pdf.erb-

<!doctype html> 
<html> 
    <head> 
    <meta charset='utf-8' /> 
    </head> 
    <body onload='number_pages'> 
    <div id="content"> 
     <%= yield %> 
    </div> 
    </body> 
</html> 

ứng dụng /views/pdf/pdf_view.pdf.erb-

<div> 
    <%= wicked_pdf_image_tag 'logo.jpg' %> 
</div> 

sử dụng mẫu này để thay thế

def save 
    pdf = WickedPdf.new.pdf_from_string(
         render_to_string(
          template: 'example/pdf_view.pdf.erb', 
          layout: 'layouts/application.pdf.erb')) 
    send_data(pdf, 
      filename: 'file_name.pdf', 
      type: 'application/pdf', 
      disposition: 'attachment') 
end 

Điều này có thể giúp bạn ..

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