module Prawn::Templates

@private

Public Instance Methods

initialize_first_page(options) click to toggle source
Calls superclass method
# File lib/prawn/templates.rb, line 16
def initialize_first_page(options)
  return super unless options[:template]

  fresh_content_streams(options)
  go_to_page(1)
end
merge_template_options(page_options, options) click to toggle source
# File lib/prawn/templates.rb, line 79
def merge_template_options(page_options, options)
  object_id = state.store.import_page(options[:template], options[:template_page] || 1)
  page_options.merge!(:object_id => object_id, :page_template => true)
end
start_new_page(options = {}) click to toggle source
FIXME: This is going to be terribly brittle because

it copy-pastes the #start_new_page method. But at least it should only run when templates are used.

Calls superclass method
# File lib/prawn/templates.rb, line 26
def start_new_page(options = {})
  return super unless options[:template]

  if last_page = state.page
    last_page_size    = last_page.size
    last_page_layout  = last_page.layout
    last_page_margins = last_page.margins.dup
  end

  page_options = {
    :size    => options[:size] || last_page_size,
    :layout  => options[:layout] || last_page_layout,
    :margins => last_page_margins
  }
  if last_page
    new_graphic_state = last_page.graphic_state.dup  if last_page.graphic_state

    # erase the color space so that it gets reset on new page for fussy pdf-readers
    new_graphic_state.color_space = {} if new_graphic_state

    page_options.merge!(:graphic_state => new_graphic_state)
  end

  merge_template_options(page_options, options)

  state.page = PDF::Core::Page.new(self, page_options)

  apply_margin_options(options)
  generate_margin_box

  # Reset the bounding box if the new page has different size or layout
  if last_page && (last_page.size != state.page.size ||
                   last_page.layout != state.page.layout)
    @bounding_box = @margin_box
  end

  state.page.new_content_stream
  use_graphic_settings(true)
  forget_text_rendering_mode!

  unless options[:orphan]
    state.insert_page(state.page, @page_number)
    @page_number += 1

    canvas { image(@background, :scale => @background_scale, :at => bounds.top_left) } if @background
    @y = @bounding_box.absolute_top

    float do
      state.on_page_create_action(self)
    end
  end
end