user5870131
user5870131

Reputation:

How do I set the page size using Prawn?

I can only get the page size to be the default letter size using:

def show
  @card = Card.find(params[:id])
  respond_to do |format|
    format.html
    format.pdf do
      pdf = CardPdf.new(@card)
      send_data pdf.render, filename: "#{@card.entrant_first_name}_#{@card.entrant_surname}_#{@card.section}.#{@card.category}.pdf", 
      type: "application/pdf",
        disposition: "inline"

    end
  end
end

When I change this line:

pdf = CardPdf.new(@card)

to this:

pdf = Prawn::Document.new(:page_size => "A6", :page_layout => :landscape)

it works but I no longer see the content from my card_pdf.rb file.

This is my CardPdf:

class CardPdf < Prawn::Document

  def initialize(card)
    super()
    @card = card
    font_families.update("Roboto" => {
      :normal => "#{Prawn::BASEDIR}/fonts/Roboto.ttf"
    })
    font_families.update("SourceCodePro" => {
      :normal => "#{Prawn::BASEDIR}/fonts/SourceCodePro.ttf"
    })
    font("Roboto")
    header
    move_down 25
    page_title
    move_down 20
    card_info
  end

  def horizontal
    stroke do
      move_down 15
      stroke_color 'f3f3f3'
      line_width 2
      stroke_horizontal_rule
      move_down 15
    end
  end

  def header
    text "Dalgety Bay Horticultural Society", size: 10, :color => "b9b9b9", :character_spacing => 1
  end

  def page_title
    text "Card", size: 32,:color => "222222", :character_spacing => 1
  end

  def card_info


    horizontal

  end

end

Upvotes: 3

Views: 4776

Answers (1)

Afsanefda
Afsanefda

Reputation: 3339

That's mostly because you are no longer calling @card in

pdf = Prawn::Document.new(:page_size => "A6", :page_layout => :landscape)

It's better using something like this :

def initialize(...,...)
  super :page_size => "A4", :page_layout => :landscape
end

in this file :

class ....Pdf < Prawn::Document

Upvotes: 7

Related Questions