2012-06-07 17 views
5

Ho un controller come questo:WickedPDF manca il layout

def show 
    @professor = Professor.find(params[:id]) 
    respond_to do |format| 
     format.html 
     format.pdf do 
     render :pdf => "file_name" 
     end 
    end 
    end 

e una vista semplice come questo:

<p>Professor: <%= @professor.first_name %></p> 
<p>Email: <%= @professor.email if @professor.email %></p> 

Ho anche un layout di 'application.html.erb';

<!doctype html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <title><%= content_for?(:title) ? yield(:title) : "Myapp" %></title> 
    <meta name="description" content=""> 
    <meta name="author" content=""> 
    <%= stylesheet_link_tag "application", :media => "all" %> 
    <%= javascript_include_tag "application" %> 
    <%= csrf_meta_tags %> 
    <%= yield(:head) %> 
    </head> 
    <body> 
    <header class="navbar navbar-fixed-top"> 
     <nav class="navbar-inner"> 
     <div class="container"> 
      <%= render 'layouts/navigation' %> 
     </div> 
     </nav> 
    </header> 
    <div id="main" role="main"> 
     <div class="container"> 
     <div class="content"> 
      <div class="row"> 
      <div class="span12"> 
       <%= render 'layouts/messages' %> 
       <%= yield %> 
      </div> 
      </div> 
      <footer> 
      </footer> 
     </div> 
     </div> <!--! end of .container --> 
    </div> 

Quando faccio il seguente comando:

bundle exec wkhtmltopdf 'http://local.myapp.com:3000/professors/2' - > test.pdf 

ottengo un pdf con tutti gli stili e il layout correttamente.

Tuttavia, quando vado a http://local.myapp.com:3000/professors/2.pdf ottengo un errore che dice:

Missing template professors/show with {:locale=>[:en], :formats=>[:pdf], :handlers=>[:erb, :builder, :coffee]} 

Così, poi ho cambiato il mio controller # show di azione per essere come questo:

def show 
    @professor = Professor.find(params[:id]) 
    respond_to do |format| 
     format.html 
     format.pdf do 
     render :pdf => "file_name", 
    :template => 'professors/show.html.erb' 
     end 
    end 
    end 

che mi aiuta a rendere la vista, ma sfortunatamente non rende gli stili e il layout. Le mie domande sono:

  1. Perché devo specificare il modello?
  2. Perché il layout non viene visualizzato nel PDF?

risposta

10

È necessario rinominare la vista per mostrare.pdf.html.erb o creare un nuovo show.pdf.erb.

Il file .pdf nel nome file consente al gestore di sapere che può utilizzarlo.

Inoltre, probabilmente è necessario utilizzare l'helper wicked_pdf_stylesheet_link_tag per visualizzare gli stili. Se si vuole avere una visione a doppio scopo, allora qualcosa di simile può essere necessario:

<% if params[:format] && params[:format] == 'pdf' %> 
    <%= wicked_pdf_stylesheet_link_tag 'application' %> 
<% else %> 
    <%= stylesheet_link_tag 'application' %> 
<% end %> 
+0

http://stackoverflow.com/questions/23077118/image-header-on-pdf-using-wicked-pdf -e-wkhtmltopdfupdated plz aiuto con questa query –