Class: VivlioStarter::Pdf::OutlineWriter
- Inherits:
-
Object
- Object
- VivlioStarter::Pdf::OutlineWriter
- Defined in:
- lib/vivlio_starter/cli/pdf/outline_writer.rb
Overview
Internal helper responsible for translating outline entries into HexaPDF structures.
Instance Method Summary collapse
-
#initialize(doc, max_level:, on_skip: nil) ⇒ OutlineWriter
constructor
A new instance of OutlineWriter.
-
#write(items) ⇒ Integer
Writes the given
itemsinto the document outline.
Constructor Details
#initialize(doc, max_level:, on_skip: nil) ⇒ OutlineWriter
Returns a new instance of OutlineWriter.
12 13 14 15 16 17 |
# File 'lib/vivlio_starter/cli/pdf/outline_writer.rb', line 12 def initialize(doc, max_level:, on_skip: nil) @doc = doc @max_level = max_level.to_i.clamp(1, 6) @page_count = @doc.pages.count @on_skip = on_skip end |
Instance Method Details
#write(items) ⇒ Integer
Writes the given items into the document outline.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/vivlio_starter/cli/pdf/outline_writer.rb', line 22 def write(items) return 0 if @page_count.zero? normalized = Array(items).filter_map { normalize_entry(it) } return 0 if normalized.empty? outline_root = rebuild_outline_root stack = [{ level: 0, node: outline_root }] inserted = 0 normalized.each do |entry| parent = parent_for(entry[:level], stack) destination = resolve_destination(entry[:page]) unless destination warn_skip("page #{entry[:page]} is outside 1-#{@page_count}") next end item = parent.add_item(entry[:text], destination:, open: entry[:level] < @max_level) stack << { level: entry[:level], node: item } inserted += 1 end if inserted.zero? @doc.catalog.delete(:Outlines) return 0 end inserted end |