class HexaPDF::CLI::Optimize

Optimizes the size of a PDF file.

Private Instance Methods

optimize_page_tree(doc) click to toggle source

Optimizes the page tree by flattening it and deleting unsed objects.

# File lib/hexapdf/cli/optimize.rb, line 82
def optimize_page_tree(doc)
  page_tree = doc.add({Type: :Pages})
  retained = {page_tree.data => true}
  doc.pages.each do |page|
    page.value.update(page.copy_inherited_values)
    page_tree.add_page(page)
    retained[page.data] = true
  end
  doc.catalog[:Pages] = page_tree

  doc.each(only_current: false) do |obj, revision|
    next unless obj.kind_of?(HexaPDF::Dictionary)
    if (obj.type == :Pages || obj.type == :Page) && !retained.key?(obj.data)
      revision.delete(obj)
    end
  end
end