2012-06-07 7 views
5

Mam kontroler takiego:WickedPDF brakuje układ

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

i prosty widok takiego:

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

Mam też układ '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> 

Kiedy wykonać następujące polecenie:

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

dostaję PDF z wszystkich stylów i układ prawidłowo.

Jednak, gdy idę do http://local.myapp.com:3000/professors/2.pdf pojawia się błąd mówiąc:

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

Tak więc zmieniłem kontrolera # show działania, aby być tak:

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 

To pomaga mi renderuj widok, ale niestety nie renderuje stylów i układu. Moje pytania to:

  1. Dlaczego muszę określić szablon?
  2. Dlaczego układ nie jest renderowany w pliku PDF?

Odpowiedz

10

Musisz zmienić nazwę widoku, aby pokazać.pdf.html.erb lub utworzyć nowy program show.pdf.erb.

Plik .pdf w nazwie pliku pozwala handlerowi wiedzieć, że może go użyć.

Prawdopodobnie musisz użyć pomocnika wicked_pdf_stylesheet_link_tag, aby pokazać swoje style. Jeśli chcesz mieć widok podwójnego celu, wtedy coś takiego może być konieczne:

<% 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 i-wkhtmltopdfupdated plz help z tym zapytaniem –