class DragonflyPdf::Analysers::PdfProperties

Public Instance Methods

call(content, options = {}) click to toggle source
# File lib/dragonfly_pdf/analysers/pdf_properties.rb, line 4
def call(content, options = {})
  return {} unless content.ext
  return {} unless SUPPORTED_FORMATS.include?(content.ext.downcase)

  data = `pdftk "#{content.path}" dump_data`

  page_count = data.scan(/NumberOfPages: (\d+)/).flatten.first.to_i
  page_numbers = data.scan(/PageMediaNumber: (\d+)/).flatten.map(&:to_i)
  page_dimensions = data.scan(/PageMediaDimensions:\s*(\d+\.?\d+)\s*(\d+\.?\d+)/).map do |width_height|
    width_height.map(&:to_f).map { |dim| pt2mm(dim) }
  end
  page_rotations = data.scan(/PageMediaRotation: (\d+)/).flatten.map(&:to_f)
  aspect_ratios = page_dimensions.inject([]) { |res, page| res << (page.first / page.last) }

  {
    'format' => content.ext.downcase,
    'aspect_ratios' => aspect_ratios,
    'page_count' => page_count,
    'page_dimensions' => page_dimensions,
    'page_numbers' => page_numbers,
    'page_rotations' => page_rotations
  }
end

Private Instance Methods

pt2mm(pt) click to toggle source
# File lib/dragonfly_pdf/analysers/pdf_properties.rb, line 30
def pt2mm(pt)
  (pt / 72.0) * 25.4
end