Class: Pdfrb::Model::Type::PageTreeNode

Inherits:
Cos::Dictionary show all
Defined in:
lib/pdfrb/model/type/page_tree_node.rb

Overview

Intermediate page-tree node (s7.7.3.2). Holds /Kids (array of PageTreeNode or Page) + /Count + inheritable /MediaBox, /CropBox, /Resources, /Rotate. The root uses the same dict shape and is conventionally distinguished via PageTreeNodeRoot for type-dispatch purposes.

Direct Known Subclasses

PageTreeNodeRoot

Instance Attribute Summary

Attributes inherited from Object

#document, #gen, #oid, #value

Instance Method Summary collapse

Methods inherited from Cos::Dictionary

#[], #[]=, arlington_available?, arlington_default, arlington_key_to_symbol, arlington_loaded_for?, arlington_mark_loaded, arlington_object, arlington_one_type_to_ruby, arlington_required?, arlington_types_to_ruby, arlington_version, define_field, define_field_from_arlington, #delete, #each, each_field, #each_raw, #empty?, field, #initialize, #key?, #keys, lookup_type, own_fields, #pdf_type, register_type, type_map, #validate

Methods inherited from Object

#==, define_type, #deref, #indirect?, #initialize, #must_be_indirect?, #pdf_type, pdf_type

Constructor Details

This class inherits a constructor from Pdfrb::Model::Cos::Dictionary

Instance Method Details

#countObject



16
# File 'lib/pdfrb/model/type/page_tree_node.rb', line 16

def count; self[:Count] || 0; end

#crop_boxObject



19
# File 'lib/pdfrb/model/type/page_tree_node.rb', line 19

def crop_box; self[:CropBox]; end

#each_childObject



31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/pdfrb/model/type/page_tree_node.rb', line 31

def each_child
  return enum_for(:each_child) unless block_given?
  return unless kids && document

  arr = kids.is_a?(Pdfrb::Model::Reference) ? document.object(kids) : kids
  return unless arr.is_a?(Array)

  arr.each do |kid_ref|
    obj = kid_ref.is_a?(Pdfrb::Model::Reference) ? document.object(kid_ref) : kid_ref
    yield obj if obj
  end
end

#each_page(&block) ⇒ Object



44
45
46
47
48
49
50
51
52
53
# File 'lib/pdfrb/model/type/page_tree_node.rb', line 44

def each_page(&block)
  return enum_for(:each_page) unless block

  each_child do |kid|
    case kid[:Type]
    when :Pages then kid.each_page(&block)
    when :Page then yield kid
    end
  end
end

#first_pageObject



63
64
65
# File 'lib/pdfrb/model/type/page_tree_node.rb', line 63

def first_page
  each_page.first
end

#kidsObject



15
# File 'lib/pdfrb/model/type/page_tree_node.rb', line 15

def kids; self[:Kids]; end

#last_pageObject



67
68
69
# File 'lib/pdfrb/model/type/page_tree_node.rb', line 67

def last_page
  each_page.to_a.last
end

#leaf?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/pdfrb/model/type/page_tree_node.rb', line 27

def leaf?
  false
end

#media_boxObject



18
# File 'lib/pdfrb/model/type/page_tree_node.rb', line 18

def media_box; self[:MediaBox]; end

#page_at(index) ⇒ Object



71
72
73
74
75
76
77
# File 'lib/pdfrb/model/type/page_tree_node.rb', line 71

def page_at(index)
  return nil if index.negative? || index >= page_count

  each_page.with_index do |page, i|
    return page if i == index
  end
end

#page_countObject



59
60
61
# File 'lib/pdfrb/model/type/page_tree_node.rb', line 59

def page_count
  count
end

#pagesObject



55
56
57
# File 'lib/pdfrb/model/type/page_tree_node.rb', line 55

def pages
  each_page.to_a
end

#parentObject



17
# File 'lib/pdfrb/model/type/page_tree_node.rb', line 17

def parent; self[:Parent]; end

#resourcesObject



20
# File 'lib/pdfrb/model/type/page_tree_node.rb', line 20

def resources; self[:Resources]; end

#root?Boolean

Returns:

  • (Boolean)


23
24
25
# File 'lib/pdfrb/model/type/page_tree_node.rb', line 23

def root?
  parent.nil?
end

#rotateObject



21
# File 'lib/pdfrb/model/type/page_tree_node.rb', line 21

def rotate; self[:Rotate]; end