resolver

package
v1.6.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 4, 2026 License: MIT Imports: 2 Imported by: 0

Documentation

Overview

Package resolver provides PDF indirect reference resolution.

PDF documents use indirect references (e.g., "5 0 R") to refer to objects stored elsewhere in the file. This package resolves these references, following chains of references and detecting circular dependencies.

Basic Usage

Create a resolver with an object reader and resolve references:

resolver := resolver.NewResolver(reader)
obj, err := resolver.Resolve(ref)

Deep Resolution

For complete expansion of nested references in dictionaries and arrays:

resolved, err := resolver.ResolveDeep(obj)

This recursively resolves all indirect references within the object tree.

Cycle Detection

The resolver automatically detects circular references and returns an error rather than entering an infinite loop. The maximum recursion depth is configurable:

resolver := resolver.NewResolver(reader, resolver.WithMaxDepth(50))

Convenience Methods

Several convenience methods simplify common operations:

  • ResolveDict: Resolve a dictionary and all its values
  • ResolveArray: Resolve an array and all its elements
  • GetObjectResolved: Load and resolve an object by number

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ObjectReader

type ObjectReader interface {
	GetObject(objNum int) (core.Object, error)
	ResolveReference(ref core.IndirectRef) (core.Object, error)
}

ObjectReader interface allows the resolver to work with any reader

type ObjectResolver

type ObjectResolver struct {
	// contains filtered or unexported fields
}

ObjectResolver resolves indirect references in PDF objects It can recursively resolve references in dictionaries and arrays

func NewResolver

func NewResolver(reader ObjectReader, opts ...Option) *ObjectResolver

NewResolver creates a new object resolver

func (*ObjectResolver) GetObject

func (r *ObjectResolver) GetObject(objNum int) (core.Object, error)

GetObject loads an object by number (convenience method)

func (*ObjectResolver) GetObjectResolved

func (r *ObjectResolver) GetObjectResolved(objNum int) (core.Object, error)

GetObjectResolved loads and resolves an object by number (shallow)

func (*ObjectResolver) GetObjectResolvedDeep

func (r *ObjectResolver) GetObjectResolvedDeep(objNum int) (core.Object, error)

GetObjectResolvedDeep loads and fully resolves an object by number (deep)

func (*ObjectResolver) Reset

func (r *ObjectResolver) Reset()

Reset clears the visited map and depth counter Call this between independent resolution operations

func (*ObjectResolver) Resolve

func (r *ObjectResolver) Resolve(obj core.Object) (core.Object, error)

Resolve resolves an object, following indirect references If the object contains nested references (in dicts/arrays), they are also resolved

func (*ObjectResolver) ResolveArray

func (r *ObjectResolver) ResolveArray(arr core.Array) (core.Array, error)

ResolveArray is a convenience method for resolving arrays It resolves all elements in the array (deep resolution)

func (*ObjectResolver) ResolveDeep

func (r *ObjectResolver) ResolveDeep(obj core.Object) (core.Object, error)

ResolveDeep recursively resolves all indirect references in dictionaries and arrays This will fully expand the object tree

func (*ObjectResolver) ResolveDict

func (r *ObjectResolver) ResolveDict(dict core.Dict) (core.Dict, error)

ResolveDict is a convenience method for resolving dictionaries It resolves the dictionary and all its values (deep resolution)

func (*ObjectResolver) ResolveReference

func (r *ObjectResolver) ResolveReference(ref core.IndirectRef) (core.Object, error)

ResolveReference resolves a single indirect reference This is a shallow resolution - it returns the referenced object but doesn't recurse

func (*ObjectResolver) ResolveReferenceDeep

func (r *ObjectResolver) ResolveReferenceDeep(ref core.IndirectRef) (core.Object, error)

ResolveReferenceDeep resolves a reference and all nested references

type Option

type Option func(*ObjectResolver)

Option configures the resolver

func WithMaxDepth

func WithMaxDepth(depth int) Option

WithMaxDepth sets the maximum recursion depth (default: 100)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL