File: orientation_detector.rb

package info (click to toggle)
ruby-pdf-reader 2.4.1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 15,648 kB
  • sloc: ruby: 9,192; sh: 19; makefile: 11
file content (34 lines) | stat: -rw-r--r-- 879 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# coding: utf-8
# frozen_string_literal: true

class PDF::Reader
  # Small util class for detecting the orientation of a single PDF page. Accounts
  # for any page rotation that is in place.
  #
  #     OrientationDetector.new(:MediaBox => [0,0,612,792]).orientation
  #     => "portrait"
  #
  class OrientationDetector
    def initialize(attributes)
      @attributes = attributes
    end

    def orientation
      @orientation ||= detect_orientation
    end

    private

    def detect_orientation
      llx,lly,urx,ury = @attributes[:MediaBox]
      rotation        = @attributes[:Rotate].to_i
      width           = (urx.to_i - llx.to_i).abs
      height          = (ury.to_i - lly.to_i).abs
      if width > height
        (rotation % 180).zero? ? 'landscape' : 'portrait'
      else
        (rotation % 180).zero? ? 'portrait' : 'landscape'
      end
    end
  end
end