Sha256: 499205f17bb55e6f8e5bae4752fe7690dc803851032af24f5b0424b62eb3f9d8

Contents?: true

Size: 1.47 KB

Versions: 2

Compression:

Stored size: 1.47 KB

Contents

require 'pdf/info/exceptions'

module PDF
  class Info
    @@command_path = "pdfinfo"

    def self.command_path=(path)
      @@command_path = path
    end

    def self.command_path
      @@command_path
    end

    def initialize(pdf_path)
      @pdf_path = pdf_path
    end

    def command
      output = `#{self.class.command_path} "#{@pdf_path}" -f 1 -l -1`
      exit_code = $? 
      case exit_code
      when 0
        return output
      else
        exit_error = PDF::Info::UnexpectedExitError.new
        exit_error.exit_code = exit_code
        raise exit_error
      end
    end

    def metadata
      begin
        process_output(command)
      rescue UnexpectedExitError => e
        case e.exit_code
        when 1
          raise FileError
        when 2
          raise OutputError
        when 3
          raise BadPermissionsError
        else
          raise UnknownError
        end
      end
    end

    def process_output(output)
      rows = output.split("\n")
      metadata = {}
      rows.each do |row|
        pair = row.split(':', 2)
        case pair.first
        when "Pages"
          metadata[:page_count] = pair.last.to_i
        when "Encrypted"
          metadata[:encrypted] = pair.last == 'yes'
        when "PDF version"
          metadata[:version] = pair.last.to_f
        when /^Page.*size$/
          metadata[:pages] ||= []
          metadata[:pages] << pair.last.scan(/[\d.]+/).map(&:to_f)
        end
      end
      return metadata
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pdf_info-0.2.0 lib/pdf/info.rb
pdf_info-0.1.0 lib/pdf/info.rb