Method: PDF::Reader::PageLayout#initialize

Defined in:
lib/pdf/reader/page_layout.rb

#initialize(runs, mediabox) ⇒ PageLayout

Returns a new instance of PageLayout.

Raises:

  • (ArgumentError)


17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/pdf/reader/page_layout.rb', line 17

def initialize(runs, mediabox)
  raise ArgumentError, "a mediabox must be provided" if mediabox.nil?

  @runs    = merge_runs(OverlappingRunsFilter.exclude_redundant_runs(runs))
  @mean_font_size   = mean(@runs.map(&:font_size)) || DEFAULT_FONT_SIZE
  @mean_font_size = DEFAULT_FONT_SIZE if @mean_font_size == 0
  @mean_glyph_width = mean(@runs.map(&:mean_character_width)) || 0
  @page_width  = (mediabox[2] - mediabox[0]).abs
  @page_height = (mediabox[3] - mediabox[1]).abs
  @x_offset = @runs.map(&:x).sort.first || 0
  lowest_y = @runs.map(&:y).sort.first || 0
  @y_offset = lowest_y > 0 ? 0 : lowest_y
end