Estoy usando wicked_pdf para generar pdf para mi aplicación de rieles. Estoy tratando de representar un contenido HTML dinámico al pie de página de mi PDF generado.

He implementado el siguiente código en el controlador:

 #app/controllers/receipts_controller.rb
  def generate_receipt
    html = render_to_string(:action => 'print_receipt', 
            :layout => false)       

    pdf = WickedPdf.new.pdf_from_string(html,
      :encoding => 'UTF-8',
      :page_size => 'A4',
      :orientation => 'Portrait',
      #:footer =>  { :content => "This is my footer content."},
      :footer => { :html => { :template => 'footer.html.erb' } } )
      send_data(pdf, :filename  => get_file_name, :disposition => 'attachment')
  end

Si utilizo solo el contenido estático (consulte la sección comentada anteriormente), entonces funciona según lo previsto. Pero no puede cargar el contenido del pie de página desde la ubicación de la plantilla proporcionada.

Mi pie de página reside en:

#app/views/receipts/footer.html.erb
 <div class='rec-foot'> This is my footer content (this is dynamic) </div>

Así es como tengo mi plantilla de impresión:

#app/views/receipts/print_receipt.html.erb
  <htmL>
    <head>
      <%= wicked_pdf_stylesheet_link_tag "wicked_pdf" %>
    </head>
    <body>
      <!--- my pdf page content goes here -->
     </body>
   </html> 



# app/assets/stylesheets/wicked_pdf.css
   .rec-foot{
      font-weight: bold;
      text-align: center;
    }

Problema: la sección de pie de página no se representa para el contenido HTML dinámico.

2
Ajay 5 feb. 2015 a las 22:04

2 respuestas

La mejor respuesta

Creo que :template no funcionará para usted porque está usando pdf_from_string (fuente: las líneas comentadas cerca de notas al pie de página.)

Fuimos con :content haciendo algo como esto en nuestra aplicación / modelos / pdf_builder.rb:

:footer: {
  content: { footer_html }
}

Luego definido:

def footer_html
  ERB.new(pdf_template).result(binding)
end

def pdf_template
  File.read("full/path/of/your/file.html.erb")
end

Inicializamos en app / models / pdf_builder.rb con cualquier información que necesitemos rellenar dinámicamente en /app/views/pdf_footer.en.html.erb

1
Opi Hana 18 mar. 2015 a las 18:51

Puede agregar directamente su archivo al método render_to_string proporcionado por rails. por ej. :footer: { content: render_to_string('pdf_footer.html.erb', layout: 'pdf_layout.html.erb') }

wicked_pdf anula el método render_to_string por lo que también admite todas sus opciones predeterminadas.

0
Swaps 8 jul. 2016 a las 11:57