2015-05-07 12 views
6

Ich möchte ein PDF mit unserem Abteilungslogo erstellen. Wenn ich versuche, die WickedPdf Klasse in meinem Controller zu verwenden (die Methode bei https://github.com/mileszs/wicked_pdf beschrieben ist):Wicked-PDF zeigt keine Bilder, '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 

... speichert die Anwendung die PDF in das Zielverzeichnis, aber es hat eine blau-weiß ' ? ' Markieren Sie, wo das Bild sein soll.

Wenn ich dies tun, statt:

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

bekomme ich folgende Fehlermeldung:

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

Es scheint, dass meine Rails-Anwendung auch fehlt/Verknüpfung nicht auf eine Hilfsdatei zu der Zugehörigkeit böse-pdf-Juwel.

Antworten auf ähnliche Fragen zu StackOverflow empfehlen das Schreiben eines benutzerdefinierten "Bild-Tag" Helfers, um das Bild zu finden oder wkhtmltopdf zu installieren. Image-tag zeigt das Logo für mich in einem View (whatever.html.erb). "logo.jpg" befindet sich bereits in der Asset-Pipeline und in # {RailsRoot}/public/images. Schließlich verwende ich wkhtmltopdf 0.9.9, wicked-pdf 0.11.0 und rails 4 auf Ubuntu 14.04.

Kurz gesagt - Was mache ich falsch, dass WickedPDF das Bild nicht rendern kann?

+0

'wicked_pdf_image_tag' eine Hilfsmethode ist, und als solche sollte sie in Ansichten oder andere Helfer verwendet werden. Veröffentlichen Sie weitere Informationen zu Ihrer Implementierung. –

+0

Welche Informationen wären nützlich? Momentan trigge ich den obigen Methodencontroller # some_action mit einer Schaltfläche auf einer Testseite aus. Ich habe einen Test geschrieben, der denselben Code in Rspec3 enthält, und es macht dasselbe, wenn ich es ausführe - erstellt das PDF, speichert es und setzt ein Fragezeichen, wo das Bild sein soll. – NewbieOnRails

+1

Wie gesagt, das 'bold_pdf_image_tag' ist eine Hilfsmethode, daher kann es in der Controller-Aktion nicht verwendet werden (zumindest sollte es nicht sein). Sie sollten eine Ansicht erstellen, in die Sie Ihr Bild einfügen, und diese Ansicht zum Generieren von PDF verwenden. Aber um es kurz zu machen - für bucky_pdf müssen die Bildpfade vollständige, absolute Pfade sein, mit vollem Dateisystempfad oder voller URL (mit Domain und Protokoll). Ich werde versuchen, ein einfaches Beispiel zu finden und es hier zu veröffentlichen (es sei denn jemand schlägt mich dazu). –

Antwort

12

Das erste, was eine PDF-Vorlage erstellen zu machen und nutzen Sie Ihre wicked_pdf-Tags in dieser Vorlage .. für Beispiel-

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> 

App /views/pdf/pdf_view.pdf.erb-

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

Verwendung dieser Vorlage statt

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 

Dies könnte Ihnen helfen ..