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 ¶
- type ObjectReader
- type ObjectResolver
- func (r *ObjectResolver) GetObject(objNum int) (core.Object, error)
- func (r *ObjectResolver) GetObjectResolved(objNum int) (core.Object, error)
- func (r *ObjectResolver) GetObjectResolvedDeep(objNum int) (core.Object, error)
- func (r *ObjectResolver) Reset()
- func (r *ObjectResolver) Resolve(obj core.Object) (core.Object, error)
- func (r *ObjectResolver) ResolveArray(arr core.Array) (core.Array, error)
- func (r *ObjectResolver) ResolveDeep(obj core.Object) (core.Object, error)
- func (r *ObjectResolver) ResolveDict(dict core.Dict) (core.Dict, error)
- func (r *ObjectResolver) ResolveReference(ref core.IndirectRef) (core.Object, error)
- func (r *ObjectResolver) ResolveReferenceDeep(ref core.IndirectRef) (core.Object, error)
- type Option
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 ¶
Resolve resolves an object, following indirect references If the object contains nested references (in dicts/arrays), they are also resolved
func (*ObjectResolver) ResolveArray ¶
ResolveArray is a convenience method for resolving arrays It resolves all elements in the array (deep resolution)
func (*ObjectResolver) ResolveDeep ¶
ResolveDeep recursively resolves all indirect references in dictionaries and arrays This will fully expand the object tree
func (*ObjectResolver) ResolveDict ¶
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 ¶
WithMaxDepth sets the maximum recursion depth (default: 100)