2012-06-07 23 views
5

Tengo un controlador de la siguiente manera:WickedPDF diseño faltante

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

y una vista simple como esto:

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

que también tienen un diseño '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> 

Cuando hago el siguiente comando:

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

me siento un pdf con todos los estilos y diseño correctamente.

Sin embargo, cuando voy a http://local.myapp.com:3000/professors/2.pdf me sale un error que dice:

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

Así, luego cambié de controlador # show acción que sea así:

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 

Eso me ayuda a renderizar la vista, pero desafortunadamente no representa los estilos y el diseño. Mis preguntas son:

  1. ¿Por qué debo especificar la plantilla?
  2. ¿Por qué el diseño no se representa en el PDF?

Respuesta

10

Debe cambiar el nombre de su vista para mostrar.pdf.html.erb o crear una nueva show.pdf.erb.

El .pdf en el nombre de archivo le permite al manejador saber que puede usarlo.

Además, probablemente necesite utilizar el ayudante wicked_pdf_stylesheet_link_tag para mostrar sus estilos. Si usted quiere tener una vista de doble propósito, entonces algo como esto puede ser necesario:

<% 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 -w-wkhtmltopdfupdated por favor ayuda con esta consulta –

Cuestiones relacionadas