8

I can convert HTML pages into PDF documents well. The problem is, I don't know how to convert the HTML file into a landscape orientation PDF. Is there a way to set that in the controller?

From the controller...

def pdf_customer_shipments
  @customer = Customer.find(params[:id])
  @shipments = Shipment.where("customer_id = ? AND status = 'Open'", @customer.id)
  render :layout => 'pdf'
end
leonel
  • 10,106
  • 21
  • 85
  • 129

3 Answers3

9

In case this helps, I am using PDFKit and can render the pdf in landscape using:

respond_to do |format|
  format.html
  format.pdf {
    html = render_to_string(:layout => false , :action => "my_page.html.haml")
    kit = PDFKit.new(html, :orientation => 'Landscape')
    kit.stylesheets << "#{Rails.root}/public/stylesheets/views/pdf.css"
    send_data(kit.to_pdf, :filename => "some_name.pdf", :type => 'application/pdf')
    return # to avoid double render call
  }
end

I got the orientation part from here: https://github.com/pdfkit/pdfkit/issues/12

John Goodman
  • 1,058
  • 12
  • 14
6

You need a meta tag in you html file:

...
<head>
  <meta name="pdfkit-orientation" content="Landscape"/>
</head>
...

Then the PDF is in landscape orientation.

Piioo
  • 759
  • 10
  • 24
  • This was perfect! In my middleware initializer I need to leave the default as Portrait, but this allows me to override it to Landscape on a page by page basis. – FireDragon May 06 '14 at 21:00
0

PDFKit should accept options for wkhtmltopdf, so you should be able to render in landscape mode by using this:

def pdf_customer_shipments   
  @customer = Customer.find(params[:id])   
  @shipments = Shipment.where("customer_id = ? AND status = 'Open'", @customer.id
  render :layout => 'pdf', :orientation => 'Landscape' 
end 
Paul Simpson
  • 2,504
  • 16
  • 28