lib/pdf/reader/page_layout.rb in pdf-reader-2.4.0 vs lib/pdf/reader/page_layout.rb in pdf-reader-2.4.1
- old
+ new
@@ -19,21 +19,23 @@
@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]
- @page_height = mediabox[3] - mediabox[1]
- @x_offset = @runs.map(&:x).sort.first
+ @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
def to_s
return "" if @runs.empty?
page = row_count.times.map { |i| " " * col_count }
@runs.each do |run|
x_pos = ((run.x - @x_offset) / col_multiplier).round
- y_pos = row_count - (run.y / row_multiplier).round
+ y_pos = row_count - ((run.y - @y_offset) / row_multiplier).round
if y_pos <= row_count && y_pos >= 0 && x_pos <= col_count && x_pos >= 0
local_string_insert(page[y_pos-1], run.text, x_pos)
end
end
interesting_rows(page).map(&:rstrip).join("\n")