Class: Arrolio::Renderer::OutlineBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/arrolio/renderer/outline_builder.rb

Overview

Builds the PDF /Outlines tree from FlowContext#heading_entries. Each entry becomes an /Outlines item with /Title and /Dest pointing at its source page's top. Called by Renderer::Pdf AFTER all pages have been emitted (so page refs exist).

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(document:, entries:, pdfrb_pages:) ⇒ OutlineBuilder

Returns a new instance of OutlineBuilder.



12
13
14
15
16
# File 'lib/arrolio/renderer/outline_builder.rb', line 12

def initialize(document:, entries:, pdfrb_pages:)
  @document = document
  @entries = entries
  @pdfrb_pages = pdfrb_pages
end

Instance Attribute Details

#documentObject (readonly)

Returns the value of attribute document.



10
11
12
# File 'lib/arrolio/renderer/outline_builder.rb', line 10

def document
  @document
end

#entriesObject (readonly)

Returns the value of attribute entries.



10
11
12
# File 'lib/arrolio/renderer/outline_builder.rb', line 10

def entries
  @entries
end

#pdfrb_pagesObject (readonly)

Returns the value of attribute pdfrb_pages.



10
11
12
# File 'lib/arrolio/renderer/outline_builder.rb', line 10

def pdfrb_pages
  @pdfrb_pages
end

Instance Method Details

#buildObject



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/arrolio/renderer/outline_builder.rb', line 18

def build
  return nil if entries.empty?

  items = build_items
  return nil if items.empty?

  root = document.add(
    {
      Type: :Outlines,
      First: ref(items.first),
      Last: ref(items.last),
      Count: items.length
    },
    type: Pdfrb::Model::Cos::Dictionary
  )
  catalog = document.catalog
  catalog.value[:Outlines] = ref(root)
  root
end