class PDF::Extract::Document

Constants

PAGE_ANNOTATIONS_KEY

Attributes

document[R]

Public Class Methods

new(path:) click to toggle source
# File lib/pdf/extract/document.rb, line 9
def initialize(path:)
  @document = ::PDF::Reader.new(path)
end

Public Instance Methods

annotations() click to toggle source
# File lib/pdf/extract/document.rb, line 13
def annotations
  reference_resoler.lookup(annotation_references).map { |h|
    Annotation.new(h)
  }
end
fields() click to toggle source
# File lib/pdf/extract/document.rb, line 19
def fields
  reference_resoler.lookup(field_references).map { |h|
    Field.new(h, reference_resoler)
  }
end

Private Instance Methods

annotation_references() click to toggle source
# File lib/pdf/extract/document.rb, line 31
def annotation_references
  pages.map { |page| annotations_for_page(page) }.flatten.compact
end
annotations_for_page(page) click to toggle source
# File lib/pdf/extract/document.rb, line 27
def annotations_for_page(page)
  page.attributes[PAGE_ANNOTATIONS_KEY]
end
field_references() click to toggle source
# File lib/pdf/extract/document.rb, line 35
def field_references
  # PDF Reference 6th Edition, Version 1.7, November 2006 page 672
  # Interactive Form Dictionary
  ifd = objects.values.select { |x| x.respond_to?(:keys) && x.keys.include?(:Fields) }.first || {}
  refs = ifd[:Fields]
  refs || []
end
objects() click to toggle source
# File lib/pdf/extract/document.rb, line 43
def objects
  document.objects || {}
end
pages() click to toggle source
# File lib/pdf/extract/document.rb, line 47
def pages
  document.pages
end
reference_resoler() click to toggle source
# File lib/pdf/extract/document.rb, line 51
def reference_resoler
  ReferenceResolver.new(document: document)
end