class HexaPDF::XRefSection

Parent

Manages the indirect objects of one cross-reference section or stream.

A PDF file can have more than one cross-reference section or stream which are all daisy-chained together. This allows later sections to override entries in prior ones. This is automatically and transparently done by HexaPDF.

Note that a cross-reference section may contain a single object number only once.

See: HexaPDF::Revision, PDF2.0 s7.5.4, s7.5.8

Constants

Entry

One entry of a cross-reference section or stream.

An entry has the attributes type, oid, gen, pos and objstm and can be created like this:

Entry.new(type, oid, gen, pos, objstm)   -> entry

The type attribute can be:

:free

Denotes a free entry.

:in_use

A used entry that resides in the body of the PDF file. The pos attribute defines the position in the file at which the object can be found.

:compressed

A used entry that resides in an object stream. The objstm attribute contains the reference to the object stream in which the object can be found and the pos attribute contains the index into the object stream.

Objects in an object stream always have a generation number of 0!

See: PDF2.0 s7.5.4, s7.5.8

Public Class Methods

compressed_entry(oid, objstm, pos)

Creates a compressed cross-reference entry. See Entry for details on the arguments.

free_entry(oid, gen)

Creates a free cross-reference entry. See Entry for details on the arguments.

in_use_entry(oid, gen, pos)

Creates an in-use cross-reference entry. See Entry for details on the arguments.

Public Instance Methods

add_compressed_entry(oid, objstm, pos)

Adds a compressed entry to the cross-reference section.

See: ::compressed_entry

add_free_entry(oid, gen)

Adds a free entry to the cross-reference section.

See: ::free_entry

add_in_use_entry(oid, gen, pos)

Adds an in-use entry to the cross-reference section.

See: ::in_use_entry

each_subsection {|sub| block } → xref_section
each_subsection → Enumerator

Calls the given block once for every subsection of this cross-reference section. Each yielded subsection is a sorted array of cross-reference entries.

If this section contains no objects, a single empty array is yielded (corresponding to a subsection with zero elements).

The subsections are dynamically generated based on the object numbers in this section. In case the section was marked as the initial section (see mark_as_initial_section!) only a single subsection is yielded.

mark_as_initial_section!()

Marks this XRefSection object as being the first cross-reference section in a PDF file.

This has the consequence that only a single sub-section is created.

merge!(xref_section)

Merges the entries from the given cross-reference section into this one.