HomeUniDoc
HomeUniDoc
...

Package core

Overview ▾

Package core defines and implements the primitive PDF object types in golang, and provides functionality for parsing those from a PDF file stream. This includes I/O handling, cross references, repairs, encryption, encoding and other core capabilities.

Index ▾

Constants
Variables
func DecodeStream(streamObj *PdfObjectStream) ([]byte, error)
func EncodeStream(streamObj *PdfObjectStream) error
func EqualObjects(obj1, obj2 PdfObject) bool
func GetBoolVal(obj PdfObject) (b bool, found bool)
func GetFloatVal(obj PdfObject) (val float64, found bool)
func GetIntVal(obj PdfObject) (val int, found bool)
func GetNameVal(obj PdfObject) (val string, found bool)
func GetNumberAsFloat(obj PdfObject) (float64, error)
func GetNumberAsInt64(obj PdfObject) (int64, error)
func GetNumbersAsFloat(objects []PdfObject) (floats []float64, err error)
func GetStringBytes(obj PdfObject) (val []byte, found bool)
func GetStringVal(obj PdfObject) (val string, found bool)
func IsDecimalDigit(c byte) bool
func IsDelimiter(c byte) bool
func IsFloatDigit(c byte) bool
func IsNullObject(obj PdfObject) bool
func IsOctalDigit(c byte) bool
func IsPrintable(c byte) bool
func IsWhiteSpace(ch byte) bool
func PdfCryptNewEncrypt(cf crypto.Filter, userPass, ownerPass []byte, perm security.Permissions) (*PdfCrypt, *EncryptInfo, error)
func RegisterCustomStreamEncoder(filterName string, customStreamEncoder StreamEncoder)
func ResolveReferencesDeep(o PdfObject, traversed map[PdfObject]struct{}) error
type ASCII85Encoder
    func NewASCII85Encoder() *ASCII85Encoder
    func (enc *ASCII85Encoder) DecodeBytes(encoded []byte) ([]byte, error)
    func (enc *ASCII85Encoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)
    func (enc *ASCII85Encoder) EncodeBytes(data []byte) ([]byte, error)
    func (enc *ASCII85Encoder) GetFilterName() string
    func (enc *ASCII85Encoder) MakeDecodeParams() PdfObject
    func (enc *ASCII85Encoder) MakeStreamDict() *PdfObjectDictionary
    func (enc *ASCII85Encoder) UpdateParams(params *PdfObjectDictionary)
type ASCIIHexEncoder
    func NewASCIIHexEncoder() *ASCIIHexEncoder
    func (enc *ASCIIHexEncoder) DecodeBytes(encoded []byte) ([]byte, error)
    func (enc *ASCIIHexEncoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)
    func (enc *ASCIIHexEncoder) EncodeBytes(data []byte) ([]byte, error)
    func (enc *ASCIIHexEncoder) GetFilterName() string
    func (enc *ASCIIHexEncoder) MakeDecodeParams() PdfObject
    func (enc *ASCIIHexEncoder) MakeStreamDict() *PdfObjectDictionary
    func (enc *ASCIIHexEncoder) UpdateParams(params *PdfObjectDictionary)
type CCITTFaxEncoder
    func NewCCITTFaxEncoder() *CCITTFaxEncoder
    func (enc *CCITTFaxEncoder) DecodeBytes(encoded []byte) ([]byte, error)
    func (enc *CCITTFaxEncoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)
    func (enc *CCITTFaxEncoder) EncodeBytes(data []byte) ([]byte, error)
    func (enc *CCITTFaxEncoder) GetFilterName() string
    func (enc *CCITTFaxEncoder) MakeDecodeParams() PdfObject
    func (enc *CCITTFaxEncoder) MakeStreamDict() *PdfObjectDictionary
    func (enc *CCITTFaxEncoder) UpdateParams(params *PdfObjectDictionary)
type DCTEncoder
    func NewDCTEncoder() *DCTEncoder
    func (enc *DCTEncoder) DecodeBytes(encoded []byte) ([]byte, error)
    func (enc *DCTEncoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)
    func (enc *DCTEncoder) EncodeBytes(data []byte) ([]byte, error)
    func (enc *DCTEncoder) GetFilterName() string
    func (enc *DCTEncoder) MakeDecodeParams() PdfObject
    func (enc *DCTEncoder) MakeStreamDict() *PdfObjectDictionary
    func (enc *DCTEncoder) UpdateParams(params *PdfObjectDictionary)
type DrawableImage
type EncryptInfo
type FlateEncoder
    func NewFlateEncoder() *FlateEncoder
    func (enc *FlateEncoder) DecodeBytes(encoded []byte) ([]byte, error)
    func (enc *FlateEncoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)
    func (enc *FlateEncoder) EncodeBytes(data []byte) ([]byte, error)
    func (enc *FlateEncoder) GetFilterName() string
    func (enc *FlateEncoder) MakeDecodeParams() PdfObject
    func (enc *FlateEncoder) MakeStreamDict() *PdfObjectDictionary
    func (enc *FlateEncoder) SetImage(img *imageutil.ImageBase)
    func (enc *FlateEncoder) SetPredictor(columns int)
    func (enc *FlateEncoder) UpdateParams(params *PdfObjectDictionary)
type JBIG2CompressionType
type JBIG2Encoder
    func NewJBIG2Encoder() *JBIG2Encoder
    func (enc *JBIG2Encoder) AddPageImage(img *JBIG2Image, settings *JBIG2EncoderSettings) (err error)
    func (enc *JBIG2Encoder) DecodeBytes(encoded []byte) ([]byte, error)
    func (enc *JBIG2Encoder) DecodeGlobals(encoded []byte) (jbig2.Globals, error)
    func (enc *JBIG2Encoder) DecodeImages(encoded []byte) ([]image.Image, error)
    func (enc *JBIG2Encoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)
    func (enc *JBIG2Encoder) Encode() (data []byte, err error)
    func (enc *JBIG2Encoder) EncodeBytes(data []byte) ([]byte, error)
    func (enc *JBIG2Encoder) EncodeImage(img image.Image) ([]byte, error)
    func (enc *JBIG2Encoder) EncodeJBIG2Image(img *JBIG2Image) ([]byte, error)
    func (enc *JBIG2Encoder) GetFilterName() string
    func (enc *JBIG2Encoder) MakeDecodeParams() PdfObject
    func (enc *JBIG2Encoder) MakeStreamDict() *PdfObjectDictionary
    func (enc *JBIG2Encoder) UpdateParams(params *PdfObjectDictionary)
type JBIG2EncoderSettings
    func (s JBIG2EncoderSettings) Validate() error
type JBIG2Image
    func GoImageToJBIG2(i image.Image, bwThreshold float64) (*JBIG2Image, error)
    func (j *JBIG2Image) ToGoImage() (image.Image, error)
type JPXEncoder
    func NewJPXEncoder() *JPXEncoder
    func (enc *JPXEncoder) DecodeBytes(encoded []byte) ([]byte, error)
    func (enc *JPXEncoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)
    func (enc *JPXEncoder) EncodeBytes(data []byte) ([]byte, error)
    func (enc *JPXEncoder) GetFilterName() string
    func (enc *JPXEncoder) MakeDecodeParams() PdfObject
    func (enc *JPXEncoder) MakeStreamDict() *PdfObjectDictionary
    func (enc *JPXEncoder) UpdateParams(params *PdfObjectDictionary)
type LZWEncoder
    func NewLZWEncoder() *LZWEncoder
    func (enc *LZWEncoder) DecodeBytes(encoded []byte) ([]byte, error)
    func (enc *LZWEncoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)
    func (enc *LZWEncoder) EncodeBytes(data []byte) ([]byte, error)
    func (enc *LZWEncoder) GetFilterName() string
    func (enc *LZWEncoder) MakeDecodeParams() PdfObject
    func (enc *LZWEncoder) MakeStreamDict() *PdfObjectDictionary
    func (enc *LZWEncoder) UpdateParams(params *PdfObjectDictionary)
type MultiEncoder
    func NewMultiEncoder() *MultiEncoder
    func (enc *MultiEncoder) AddEncoder(encoder StreamEncoder)
    func (enc *MultiEncoder) DecodeBytes(encoded []byte) ([]byte, error)
    func (enc *MultiEncoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)
    func (enc *MultiEncoder) EncodeBytes(data []byte) ([]byte, error)
    func (enc *MultiEncoder) GetFilterArray() *PdfObjectArray
    func (enc *MultiEncoder) GetFilterName() string
    func (enc *MultiEncoder) MakeDecodeParams() PdfObject
    func (enc *MultiEncoder) MakeStreamDict() *PdfObjectDictionary
    func (enc *MultiEncoder) UpdateParams(params *PdfObjectDictionary)
type ParserMetadata
    func (p ParserMetadata) HasDataAfterEOF() bool
    func (p ParserMetadata) HasEOLAfterHeader() bool
    func (p ParserMetadata) HasInvalidHexRunes() bool
    func (p ParserMetadata) HasInvalidSeparationAfterXRef() bool
    func (p ParserMetadata) HasInvalidSubsectionHeader() bool
    func (p ParserMetadata) HasNonConformantStream() bool
    func (p ParserMetadata) HasOddLengthHexStrings() bool
    func (p ParserMetadata) HeaderCommentBytes() [4]byte
    func (p ParserMetadata) HeaderPosition() int
type PdfCrypt
    func PdfCryptNewDecrypt(parser *PdfParser, ed, trailer *PdfObjectDictionary) (*PdfCrypt, error)
    func (crypt *PdfCrypt) Decrypt(obj PdfObject, parentObjNum, parentGenNum int64) error
    func (crypt *PdfCrypt) Encrypt(obj PdfObject, parentObjNum, parentGenNum int64) error
    func (crypt *PdfCrypt) GetAccessPermissions() security.Permissions
    func (crypt *PdfCrypt) String() string
type PdfIndirectObject
    func GetIndirect(obj PdfObject) (ind *PdfIndirectObject, found bool)
    func MakeIndirectObject(obj PdfObject) *PdfIndirectObject
    func (ind *PdfIndirectObject) String() string
    func (ind *PdfIndirectObject) WriteString() string
type PdfObject
    func FlattenObject(obj PdfObject) PdfObject
    func ParseNumber(buf *bufio.Reader) (PdfObject, error)
    func ResolveReference(obj PdfObject) PdfObject
    func TraceToDirectObject(obj PdfObject) PdfObject
type PdfObjectArray
    func GetArray(obj PdfObject) (arr *PdfObjectArray, found bool)
    func MakeArray(objects ...PdfObject) *PdfObjectArray
    func MakeArrayFromFloats(vals []float64) *PdfObjectArray
    func MakeArrayFromIntegers(vals []int) *PdfObjectArray
    func MakeArrayFromIntegers64(vals []int64) *PdfObjectArray
    func (array *PdfObjectArray) Append(objects ...PdfObject)
    func (array *PdfObjectArray) Clear()
    func (array *PdfObjectArray) Elements() []PdfObject
    func (array *PdfObjectArray) Get(i int) PdfObject
    func (array *PdfObjectArray) GetAsFloat64Slice() ([]float64, error)
    func (array *PdfObjectArray) Len() int
    func (array *PdfObjectArray) Set(i int, obj PdfObject) error
    func (array *PdfObjectArray) String() string
    func (array *PdfObjectArray) ToFloat64Array() ([]float64, error)
    func (array *PdfObjectArray) ToInt64Slice() ([]int64, error)
    func (array *PdfObjectArray) ToIntegerArray() ([]int, error)
    func (array *PdfObjectArray) WriteString() string
type PdfObjectBool
    func GetBool(obj PdfObject) (bo *PdfObjectBool, found bool)
    func MakeBool(val bool) *PdfObjectBool
    func (bool *PdfObjectBool) String() string
    func (bool *PdfObjectBool) WriteString() string
type PdfObjectDictionary
    func GetDict(obj PdfObject) (dict *PdfObjectDictionary, found bool)
    func MakeDict() *PdfObjectDictionary
    func MakeDictMap(objmap map[string]PdfObject) *PdfObjectDictionary
    func (d *PdfObjectDictionary) Clear()
    func (d *PdfObjectDictionary) Get(key PdfObjectName) PdfObject
    func (d *PdfObjectDictionary) GetString(key PdfObjectName) (string, bool)
    func (d *PdfObjectDictionary) Keys() []PdfObjectName
    func (d *PdfObjectDictionary) Merge(another *PdfObjectDictionary) *PdfObjectDictionary
    func (d *PdfObjectDictionary) Remove(key PdfObjectName)
    func (d *PdfObjectDictionary) Set(key PdfObjectName, val PdfObject)
    func (d *PdfObjectDictionary) SetIfNotNil(key PdfObjectName, val PdfObject)
    func (d *PdfObjectDictionary) String() string
    func (d *PdfObjectDictionary) Update(objmap map[string]PdfObject) *PdfObjectDictionary
    func (d *PdfObjectDictionary) WriteString() string
type PdfObjectFloat
    func GetFloat(obj PdfObject) (fo *PdfObjectFloat, found bool)
    func MakeFloat(val float64) *PdfObjectFloat
    func (float *PdfObjectFloat) String() string
    func (float *PdfObjectFloat) WriteString() string
type PdfObjectInteger
    func GetInt(obj PdfObject) (into *PdfObjectInteger, found bool)
    func MakeInteger(val int64) *PdfObjectInteger
    func (int *PdfObjectInteger) String() string
    func (int *PdfObjectInteger) WriteString() string
type PdfObjectName
    func GetName(obj PdfObject) (name *PdfObjectName, found bool)
    func MakeName(s string) *PdfObjectName
    func (name *PdfObjectName) String() string
    func (name *PdfObjectName) WriteString() string
type PdfObjectNull
    func MakeNull() *PdfObjectNull
    func (null *PdfObjectNull) String() string
    func (null *PdfObjectNull) WriteString() string
type PdfObjectReference
    func (ref *PdfObjectReference) GetParser() *PdfParser
    func (ref *PdfObjectReference) Resolve() PdfObject
    func (ref *PdfObjectReference) String() string
    func (ref *PdfObjectReference) WriteString() string
type PdfObjectStream
    func GetStream(obj PdfObject) (stream *PdfObjectStream, found bool)
    func MakeStream(contents []byte, encoder StreamEncoder) (*PdfObjectStream, error)
    func (s *PdfObjectStream) MakeLazy() error
    func (stream *PdfObjectStream) String() string
    func (stream *PdfObjectStream) WriteString() string
type PdfObjectStreams
    func GetObjectStreams(obj PdfObject) (objStream *PdfObjectStreams, found bool)
    func MakeObjectStreams(objects ...PdfObject) *PdfObjectStreams
    func (streams *PdfObjectStreams) Append(objects ...PdfObject)
    func (streams *PdfObjectStreams) Elements() []PdfObject
    func (streams *PdfObjectStreams) Len() int
    func (streams *PdfObjectStreams) Set(i int, obj PdfObject) error
    func (streams *PdfObjectStreams) String() string
    func (streams *PdfObjectStreams) WriteString() string
type PdfObjectString
    func GetString(obj PdfObject) (so *PdfObjectString, found bool)
    func MakeEncodedString(s string, utf16BE bool) *PdfObjectString
    func MakeHexString(s string) *PdfObjectString
    func MakeString(s string) *PdfObjectString
    func MakeStringFromBytes(data []byte) *PdfObjectString
    func (str *PdfObjectString) Bytes() []byte
    func (str *PdfObjectString) Decoded() string
    func (str *PdfObjectString) IsHexadecimal() bool
    func (str *PdfObjectString) Str() string
    func (str *PdfObjectString) String() string
    func (str *PdfObjectString) WriteString() string
type PdfParser
    func NewCompliancePdfParser(rs io.ReadSeeker) (parser *PdfParser, err error)
    func NewParser(rs io.ReadSeeker) (*PdfParser, error)
    func NewParserFromString(txt string) *PdfParser
    func (parser *PdfParser) CheckAccessRights(password []byte) (bool, security.Permissions, error)
    func (parser *PdfParser) Decrypt(password []byte) (bool, error)
    func (parser *PdfParser) GetCrypter() *PdfCrypt
    func (parser *PdfParser) GetEncryptObj() *PdfIndirectObject
    func (parser *PdfParser) GetFileOffset() int64
    func (parser *PdfParser) GetObjectNums() []int
    func (parser *PdfParser) GetPreviousRevisionParser() (*PdfParser, error)
    func (parser *PdfParser) GetPreviousRevisionReadSeeker() (io.ReadSeeker, error)
    func (parser *PdfParser) GetRevision(revisionNumber int) (*PdfParser, error)
    func (parser *PdfParser) GetRevisionNumber() int
    func (parser *PdfParser) GetTrailer() *PdfObjectDictionary
    func (parser *PdfParser) GetUpdatedObjects(prevParser *PdfParser) (map[int64]PdfObject, error)
    func (parser *PdfParser) GetXrefOffset() int64
    func (parser *PdfParser) GetXrefTable() XrefTable
    func (parser *PdfParser) GetXrefType() *xrefType
    func (parser *PdfParser) Inspect() (map[string]int, error)
    func (parser *PdfParser) IsAuthenticated() bool
    func (parser *PdfParser) IsEncrypted() (bool, error)
    func (parser *PdfParser) LookupByNumber(objNumber int) (PdfObject, error)
    func (parser *PdfParser) LookupByReference(ref PdfObjectReference) (PdfObject, error)
    func (parser *PdfParser) ParseDict() (*PdfObjectDictionary, error)
    func (parser *PdfParser) ParseIndirectObject() (PdfObject, error)
    func (parser *PdfParser) ParserMetadata() (ParserMetadata, error)
    func (parser *PdfParser) PdfVersion() Version
    func (parser *PdfParser) ReadAtLeast(p []byte, n int) (int, error)
    func (parser *PdfParser) ReadBytesAt(offset, len int64) ([]byte, error)
    func (parser *PdfParser) Resolve(obj PdfObject) (PdfObject, error)
    func (parser *PdfParser) SetFileOffset(offset int64)
type RawEncoder
    func NewRawEncoder() *RawEncoder
    func (enc *RawEncoder) DecodeBytes(encoded []byte) ([]byte, error)
    func (enc *RawEncoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)
    func (enc *RawEncoder) EncodeBytes(data []byte) ([]byte, error)
    func (enc *RawEncoder) GetFilterName() string
    func (enc *RawEncoder) MakeDecodeParams() PdfObject
    func (enc *RawEncoder) MakeStreamDict() *PdfObjectDictionary
    func (enc *RawEncoder) UpdateParams(params *PdfObjectDictionary)
type RunLengthEncoder
    func NewRunLengthEncoder() *RunLengthEncoder
    func (enc *RunLengthEncoder) DecodeBytes(encoded []byte) ([]byte, error)
    func (enc *RunLengthEncoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)
    func (enc *RunLengthEncoder) EncodeBytes(data []byte) ([]byte, error)
    func (enc *RunLengthEncoder) GetFilterName() string
    func (enc *RunLengthEncoder) MakeDecodeParams() PdfObject
    func (enc *RunLengthEncoder) MakeStreamDict() *PdfObjectDictionary
    func (enc *RunLengthEncoder) UpdateParams(params *PdfObjectDictionary)
type StreamEncoder
    func NewEncoderFromStream(streamObj *PdfObjectStream) (StreamEncoder, error)
type Version
    func (v Version) String() string
type XrefObject
type XrefTable

Package files

const.go crossrefs.go crypt.go detailed_parser.go doc.go encoding.go encoding_jbig2.go io.go paeth.go parser.go primitives.go repairs.go stream.go symbols.go utils.go

Constants

const (
    // XrefTypeTableEntry indicates a normal xref table entry.
    XrefTypeTableEntry xrefType = iota

    // XrefTypeObjectStream indicates an xref entry in an xref object stream.
    XrefTypeObjectStream xrefType = iota
)

Stream encoding filter names.

const (
    StreamEncodingFilterNameFlate     = "FlateDecode"
    StreamEncodingFilterNameLZW       = "LZWDecode"
    StreamEncodingFilterNameDCT       = "DCTDecode"
    StreamEncodingFilterNameRunLength = "RunLengthDecode"
    StreamEncodingFilterNameASCIIHex  = "ASCIIHexDecode"
    StreamEncodingFilterNameASCII85   = "ASCII85Decode"
    StreamEncodingFilterNameCCITTFax  = "CCITTFaxDecode"
    StreamEncodingFilterNameJBIG2     = "JBIG2Decode"
    StreamEncodingFilterNameJPX       = "JPXDecode"
    StreamEncodingFilterNameRaw       = "Raw"
)
const (
    // DefaultJPEGQuality is the default quality produced by JPEG encoders.
    DefaultJPEGQuality = 75
)

JB2ImageAutoThreshold is the const value used by the 'GoImageToJBIG2Image function' used to set auto threshold for the histogram.

const JB2ImageAutoThreshold = -1.0

Variables

Common errors that may occur on PDF parsing/writing.

var (
    // ErrUnsupportedEncodingParameters error indicates that encoding/decoding was attempted with unsupported
    // encoding parameters.
    // For example when trying to encode with an unsupported Predictor (flate).
    ErrUnsupportedEncodingParameters = errors.New("unsupported encoding parameters")
    ErrNoCCITTFaxDecode              = errors.New("CCITTFaxDecode encoding is not yet implemented")
    ErrNoJBIG2Decode                 = errors.New("JBIG2Decode encoding is not yet implemented")
    ErrNoJPXDecode                   = errors.New("JPXDecode encoding is not yet implemented")
    ErrNoPdfVersion                  = errors.New("version not found")
    ErrTypeError                     = errors.New("type check error")
    ErrRangeError                    = errors.New("range check error")
    ErrNotSupported                  = xerrors.New("feature not currently supported")
    ErrNotANumber                    = errors.New("not a number")
)

func DecodeStream

func DecodeStream(streamObj *PdfObjectStream) ([]byte, error)

DecodeStream decodes the stream data and returns the decoded data. An error is returned upon failure.

func EncodeStream

func EncodeStream(streamObj *PdfObjectStream) error

EncodeStream encodes the stream data using the encoded specified by the stream's dictionary.

func EqualObjects

func EqualObjects(obj1, obj2 PdfObject) bool

EqualObjects returns true if `obj1` and `obj2` have the same contents.

NOTE: It is a good idea to flatten obj1 and obj2 with FlattenObject before calling this function so that contents, rather than references, can be compared.

func GetBoolVal

func GetBoolVal(obj PdfObject) (b bool, found bool)

GetBoolVal returns the bool value within a *PdObjectBool represented by an PdfObject interface directly or indirectly. If the PdfObject does not represent a bool value, a default value of false is returned (found = false also).

func GetFloatVal

func GetFloatVal(obj PdfObject) (val float64, found bool)

GetFloatVal returns the float64 value represented by the PdfObject directly or indirectly if contained within an indirect object. On type mismatch the found bool flag returned is false and a nil pointer is returned.

func GetIntVal

func GetIntVal(obj PdfObject) (val int, found bool)

GetIntVal returns the int value represented by the PdfObject directly or indirectly if contained within an indirect object. On type mismatch the found bool flag returned is false and a nil pointer is returned.

func GetNameVal

func GetNameVal(obj PdfObject) (val string, found bool)

GetNameVal returns the string value represented by the PdfObject directly or indirectly if contained within an indirect object. On type mismatch the found bool flag returned is false and an empty string is returned.

func GetNumberAsFloat

func GetNumberAsFloat(obj PdfObject) (float64, error)

GetNumberAsFloat returns the contents of `obj` as a float if it is an integer or float, or an error if it isn't.

func GetNumberAsInt64

func GetNumberAsInt64(obj PdfObject) (int64, error)

GetNumberAsInt64 returns the contents of `obj` as an int64 if it is an integer or float, or an error if it isn't. This is for cases where expecting an integer, but some implementations actually store the number in a floating point format.

func GetNumbersAsFloat

func GetNumbersAsFloat(objects []PdfObject) (floats []float64, err error)

GetNumbersAsFloat converts a list of pdf objects representing floats or integers to a slice of float64 values.

func GetStringBytes

func GetStringBytes(obj PdfObject) (val []byte, found bool)

GetStringBytes is like GetStringVal except that it returns the string as a []byte. It is for convenience.

func GetStringVal

func GetStringVal(obj PdfObject) (val string, found bool)

GetStringVal returns the string value represented by the PdfObject directly or indirectly if contained within an indirect object. On type mismatch the found bool flag returned is false and an empty string is returned.

func IsDecimalDigit

func IsDecimalDigit(c byte) bool

IsDecimalDigit checks if the character is a part of a decimal number string.

func IsDelimiter

func IsDelimiter(c byte) bool

IsDelimiter checks if a character represents a delimiter.

func IsFloatDigit

func IsFloatDigit(c byte) bool

IsFloatDigit checks if a character can be a part of a float number string.

func IsNullObject

func IsNullObject(obj PdfObject) bool

IsNullObject returns true if `obj` is a PdfObjectNull.

func IsOctalDigit

func IsOctalDigit(c byte) bool

IsOctalDigit checks if a character can be part of an octal digit string.

func IsPrintable

func IsPrintable(c byte) bool

IsPrintable checks if a character is printable. Regular characters that are outside the range EXCLAMATION MARK(21h) (!) to TILDE (7Eh) (~) should be written using the hexadecimal notation.

func IsWhiteSpace

func IsWhiteSpace(ch byte) bool

IsWhiteSpace checks if byte represents a white space character.

func PdfCryptNewEncrypt

func PdfCryptNewEncrypt(cf crypto.Filter, userPass, ownerPass []byte, perm security.Permissions) (*PdfCrypt, *EncryptInfo, error)

PdfCryptNewEncrypt makes the document crypt handler based on a specified crypt filter.

func RegisterCustomStreamEncoder

func RegisterCustomStreamEncoder(filterName string, customStreamEncoder StreamEncoder)

RegisterCustomStreamEncoder register a custom encoder handler for certain filter.

func ResolveReferencesDeep

func ResolveReferencesDeep(o PdfObject, traversed map[PdfObject]struct{}) error

ResolveReferencesDeep recursively traverses through object `o`, looking up and replacing references with indirect objects. Optionally a map of already deep-resolved objects can be provided via `traversed`. The `traversed` map is updated while traversing the objects to avoid traversing same objects multiple times.

type ASCII85Encoder

ASCII85Encoder implements ASCII85 encoder/decoder.

type ASCII85Encoder struct {
}

func NewASCII85Encoder

func NewASCII85Encoder() *ASCII85Encoder

NewASCII85Encoder makes a new ASCII85 encoder.

func (*ASCII85Encoder) DecodeBytes

func (enc *ASCII85Encoder) DecodeBytes(encoded []byte) ([]byte, error)

DecodeBytes decodes byte array with ASCII85. 5 ASCII characters -> 4 raw binary bytes

func (*ASCII85Encoder) DecodeStream

func (enc *ASCII85Encoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)

DecodeStream implements ASCII85 stream decoding.

func (*ASCII85Encoder) EncodeBytes

func (enc *ASCII85Encoder) EncodeBytes(data []byte) ([]byte, error)

EncodeBytes encodes data into ASCII85 encoded format.

func (*ASCII85Encoder) GetFilterName

func (enc *ASCII85Encoder) GetFilterName() string

GetFilterName returns the name of the encoding filter.

func (*ASCII85Encoder) MakeDecodeParams

func (enc *ASCII85Encoder) MakeDecodeParams() PdfObject

MakeDecodeParams makes a new instance of an encoding dictionary based on the current encoder settings.

func (*ASCII85Encoder) MakeStreamDict

func (enc *ASCII85Encoder) MakeStreamDict() *PdfObjectDictionary

MakeStreamDict make a new instance of an encoding dictionary for a stream object.

func (*ASCII85Encoder) UpdateParams

func (enc *ASCII85Encoder) UpdateParams(params *PdfObjectDictionary)

UpdateParams updates the parameter values of the encoder.

type ASCIIHexEncoder

ASCIIHexEncoder implements ASCII hex encoder/decoder.

type ASCIIHexEncoder struct {
}

func NewASCIIHexEncoder

func NewASCIIHexEncoder() *ASCIIHexEncoder

NewASCIIHexEncoder makes a new ASCII hex encoder.

func (*ASCIIHexEncoder) DecodeBytes

func (enc *ASCIIHexEncoder) DecodeBytes(encoded []byte) ([]byte, error)

DecodeBytes decodes a slice of ASCII encoded bytes and returns the result.

func (*ASCIIHexEncoder) DecodeStream

func (enc *ASCIIHexEncoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)

DecodeStream implements ASCII hex decoding.

func (*ASCIIHexEncoder) EncodeBytes

func (enc *ASCIIHexEncoder) EncodeBytes(data []byte) ([]byte, error)

EncodeBytes ASCII encodes the passed in slice of bytes.

func (*ASCIIHexEncoder) GetFilterName

func (enc *ASCIIHexEncoder) GetFilterName() string

GetFilterName returns the name of the encoding filter.

func (*ASCIIHexEncoder) MakeDecodeParams

func (enc *ASCIIHexEncoder) MakeDecodeParams() PdfObject

MakeDecodeParams makes a new instance of an encoding dictionary based on the current encoder settings.

func (*ASCIIHexEncoder) MakeStreamDict

func (enc *ASCIIHexEncoder) MakeStreamDict() *PdfObjectDictionary

MakeStreamDict makes a new instance of an encoding dictionary for a stream object.

func (*ASCIIHexEncoder) UpdateParams

func (enc *ASCIIHexEncoder) UpdateParams(params *PdfObjectDictionary)

UpdateParams updates the parameter values of the encoder.

type CCITTFaxEncoder

CCITTFaxEncoder implements Group3 and Group4 facsimile (fax) encoder/decoder.

type CCITTFaxEncoder struct {
    K                      int
    EndOfLine              bool
    EncodedByteAlign       bool
    Columns                int
    Rows                   int
    EndOfBlock             bool
    BlackIs1               bool
    DamagedRowsBeforeError int
}

func NewCCITTFaxEncoder

func NewCCITTFaxEncoder() *CCITTFaxEncoder

NewCCITTFaxEncoder makes a new CCITTFax encoder.

func (*CCITTFaxEncoder) DecodeBytes

func (enc *CCITTFaxEncoder) DecodeBytes(encoded []byte) ([]byte, error)

DecodeBytes decodes the CCITTFax encoded image data.

func (*CCITTFaxEncoder) DecodeStream

func (enc *CCITTFaxEncoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)

DecodeStream decodes the stream containing CCITTFax encoded image data.

func (*CCITTFaxEncoder) EncodeBytes

func (enc *CCITTFaxEncoder) EncodeBytes(data []byte) ([]byte, error)

EncodeBytes encodes the image data using either Group3 or Group4 CCITT facsimile (fax) encoding. `data` is expected to be 1 color component, 1 bit per component. It is also valid to provide 8 BPC, 1 CC image like a standard go image Gray data.

func (*CCITTFaxEncoder) GetFilterName

func (enc *CCITTFaxEncoder) GetFilterName() string

GetFilterName returns the name of the encoding filter.

func (*CCITTFaxEncoder) MakeDecodeParams

func (enc *CCITTFaxEncoder) MakeDecodeParams() PdfObject

MakeDecodeParams makes a new instance of an encoding dictionary based on the current encoder settings.

func (*CCITTFaxEncoder) MakeStreamDict

func (enc *CCITTFaxEncoder) MakeStreamDict() *PdfObjectDictionary

MakeStreamDict makes a new instance of an encoding dictionary for a stream object.

func (*CCITTFaxEncoder) UpdateParams

func (enc *CCITTFaxEncoder) UpdateParams(params *PdfObjectDictionary)

UpdateParams updates the parameter values of the encoder.

type DCTEncoder

DCTEncoder provides a DCT (JPG) encoding/decoding functionality for images.

type DCTEncoder struct {
    ColorComponents  int // 1 (gray), 3 (rgb), 4 (cmyk)
    BitsPerComponent int // 8 or 16 bit
    Width            int
    Height           int
    Quality          int
    Decode           []float64
}

func NewDCTEncoder

func NewDCTEncoder() *DCTEncoder

NewDCTEncoder makes a new DCT encoder with default parameters.

func (*DCTEncoder) DecodeBytes

func (enc *DCTEncoder) DecodeBytes(encoded []byte) ([]byte, error)

DecodeBytes decodes a slice of DCT encoded bytes and returns the result.

func (*DCTEncoder) DecodeStream

func (enc *DCTEncoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)

DecodeStream decodes a DCT encoded stream and returns the result as a slice of bytes.

func (*DCTEncoder) EncodeBytes

func (enc *DCTEncoder) EncodeBytes(data []byte) ([]byte, error)

EncodeBytes DCT encodes the passed in slice of bytes.

func (*DCTEncoder) GetFilterName

func (enc *DCTEncoder) GetFilterName() string

GetFilterName returns the name of the encoding filter.

func (*DCTEncoder) MakeDecodeParams

func (enc *DCTEncoder) MakeDecodeParams() PdfObject

MakeDecodeParams makes a new instance of an encoding dictionary based on the current encoder settings.

func (*DCTEncoder) MakeStreamDict

func (enc *DCTEncoder) MakeStreamDict() *PdfObjectDictionary

MakeStreamDict makes a new instance of an encoding dictionary for a stream object. Has the Filter set. Some other parameters are generated elsewhere.

func (*DCTEncoder) UpdateParams

func (enc *DCTEncoder) UpdateParams(params *PdfObjectDictionary)

UpdateParams updates the parameter values of the encoder.

type DrawableImage

DrawableImage is same as golang image/draw's Image interface that allow drawing images.

type DrawableImage interface {
    ColorModel() gocolor.Model
    Bounds() goimage.Rectangle
    At(x, y int) gocolor.Color
    Set(x, y int, c gocolor.Color)
}

type EncryptInfo

EncryptInfo contains an information generated by the document encrypter.

type EncryptInfo struct {
    // Version is minimal PDF version that supports specified encryption algorithm.
    Version
    // Encrypt is an encryption dictionary that contains all necessary parameters.
    // It should be stored in all copies of the document trailer.
    Encrypt *PdfObjectDictionary
    // ID0 and ID1 are IDs used in the trailer. Older algorithms such as RC4 uses them for encryption.
    ID0, ID1 string
}

type FlateEncoder

FlateEncoder represents Flate encoding.

type FlateEncoder struct {
    Predictor        int
    BitsPerComponent int
    // For predictors
    Columns int
    Rows    int
    Colors  int
    // contains filtered or unexported fields
}

func NewFlateEncoder

func NewFlateEncoder() *FlateEncoder

NewFlateEncoder makes a new flate encoder with default parameters, predictor 1 and bits per component 8.

func (*FlateEncoder) DecodeBytes

func (enc *FlateEncoder) DecodeBytes(encoded []byte) ([]byte, error)

DecodeBytes decodes a slice of Flate encoded bytes and returns the result.

func (*FlateEncoder) DecodeStream

func (enc *FlateEncoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)

DecodeStream decodes a FlateEncoded stream object and give back decoded bytes.

func (*FlateEncoder) EncodeBytes

func (enc *FlateEncoder) EncodeBytes(data []byte) ([]byte, error)

EncodeBytes encodes a bytes array and return the encoded value based on the encoder parameters.

func (*FlateEncoder) GetFilterName

func (enc *FlateEncoder) GetFilterName() string

GetFilterName returns the name of the encoding filter.

func (*FlateEncoder) MakeDecodeParams

func (enc *FlateEncoder) MakeDecodeParams() PdfObject

MakeDecodeParams makes a new instance of an encoding dictionary based on the current encoder settings.

func (*FlateEncoder) MakeStreamDict

func (enc *FlateEncoder) MakeStreamDict() *PdfObjectDictionary

MakeStreamDict makes a new instance of an encoding dictionary for a stream object. Has the Filter set and the DecodeParms.

func (*FlateEncoder) SetImage

func (enc *FlateEncoder) SetImage(img *imageutil.ImageBase)

SetImage sets the image base for given flate encoder.

func (*FlateEncoder) SetPredictor

func (enc *FlateEncoder) SetPredictor(columns int)

SetPredictor sets the predictor function. Specify the number of columns per row. The columns indicates the number of samples per row. Used for grouping data together for compression.

func (*FlateEncoder) UpdateParams

func (enc *FlateEncoder) UpdateParams(params *PdfObjectDictionary)

UpdateParams updates the parameter values of the encoder.

type JBIG2CompressionType

JBIG2CompressionType defines the enum compression type used by the JBIG2Encoder.

type JBIG2CompressionType int
const (
    // JB2Generic is the JBIG2 compression type that uses generic region see 6.2.
    JB2Generic JBIG2CompressionType = iota
    // JB2SymbolCorrelation is the JBIG2 compression type that uses symbol dictionary and text region encoding procedure
    // with the correlation classification.
    // NOT IMPLEMENTED YET.
    JB2SymbolCorrelation
    // JB2SymbolRankHaus is the JBIG2 compression type that uses symbol dictionary and text region encoding procedure
    // with the rank hausdorff classification. RankHausMode uses the rank Hausdorff method that classifies the input images.
    // It is more robust, more susceptible to confusing components that should be in different classes.
    // NOT IMPLEMENTED YET.
    JB2SymbolRankHaus
)

type JBIG2Encoder

JBIG2Encoder implements both jbig2 encoder and the decoder. The encoder allows to encode provided images (best used document scans) in multiple way. By default it uses single page generic encoder. It allows to store lossless data as a single segment. In order to store multiple image pages use the 'FileMode' which allows to store more pages within single jbig2 document. WIP: In order to obtain better compression results the encoder would allow to encode the input in a lossy or lossless way with a component (symbol) mode. It divides the image into components. Then checks if any component is 'similar' to the others and maps them together. The symbol classes are stored in the dictionary. Then the encoder creates text regions which uses the related symbol classes to fill it's space. The similarity is defined by the 'Threshold' variable (default: 0.95). The less the value is, the more components matches to single class, thus the compression is better, but the result might become lossy.

type JBIG2Encoder struct {
    // These values are required to be set for the 'EncodeBytes' method.
    // ColorComponents defines the number of color components for provided image.
    ColorComponents int
    // BitsPerComponent is the number of bits that stores per color component
    BitsPerComponent int
    // Width is the width of the image to encode
    Width int
    // Height is the height of the image to encode.
    Height int

    // Globals are the JBIG2 global segments.
    Globals jbig2.Globals
    // IsChocolateData defines if the data is encoded such that
    // binary data '1' means black and '0' white.
    // otherwise the data is called vanilla.
    // Naming convention taken from: 'https://en.wikipedia.org/wiki/Binary_image#Interpretation'
    IsChocolateData bool
    // DefaultPageSettings are the settings parameters used by the jbig2 encoder.
    DefaultPageSettings JBIG2EncoderSettings
    // contains filtered or unexported fields
}

func NewJBIG2Encoder

func NewJBIG2Encoder() *JBIG2Encoder

NewJBIG2Encoder creates a new JBIG2Encoder.

func (*JBIG2Encoder) AddPageImage

func (enc *JBIG2Encoder) AddPageImage(img *JBIG2Image, settings *JBIG2EncoderSettings) (err error)

AddPageImage adds the page with the image 'img' to the encoder context in order to encode it jbig2 document. The 'settings' defines what encoding type should be used by the encoder.

func (*JBIG2Encoder) DecodeBytes

func (enc *JBIG2Encoder) DecodeBytes(encoded []byte) ([]byte, error)

DecodeBytes decodes a slice of JBIG2 encoded bytes and returns the results.

func (*JBIG2Encoder) DecodeGlobals

func (enc *JBIG2Encoder) DecodeGlobals(encoded []byte) (jbig2.Globals, error)

DecodeGlobals decodes 'encoded' byte stream and returns their Globally defined segments ('Globals').

func (*JBIG2Encoder) DecodeImages

func (enc *JBIG2Encoder) DecodeImages(encoded []byte) ([]image.Image, error)

DecodeImages decodes the page images from the jbig2 'encoded' data input. The jbig2 document may contain multiple pages, thus the function can return multiple images. The images order corresponds to the page number.

func (*JBIG2Encoder) DecodeStream

func (enc *JBIG2Encoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)

DecodeStream decodes a JBIG2 encoded stream and returns the result as a slice of bytes.

func (*JBIG2Encoder) Encode

func (enc *JBIG2Encoder) Encode() (data []byte, err error)

Encode encodes previously prepare jbig2 document and stores it as the byte slice.

func (*JBIG2Encoder) EncodeBytes

func (enc *JBIG2Encoder) EncodeBytes(data []byte) ([]byte, error)

EncodeBytes encodes slice of bytes into JBIG2 encoding format. The input 'data' must be an image. In order to Decode it a user is responsible to load the codec ('png', 'jpg'). Returns jbig2 single page encoded document byte slice. The encoder uses DefaultPageSettings to encode given image.

func (*JBIG2Encoder) EncodeImage

func (enc *JBIG2Encoder) EncodeImage(img image.Image) ([]byte, error)

EncodeImage encodes 'img' golang image.Image into jbig2 encoded bytes document using default encoder settings.

func (*JBIG2Encoder) EncodeJBIG2Image

func (enc *JBIG2Encoder) EncodeJBIG2Image(img *JBIG2Image) ([]byte, error)

EncodeJBIG2Image encodes 'img' into jbig2 encoded bytes stream, using default encoder settings.

func (*JBIG2Encoder) GetFilterName

func (enc *JBIG2Encoder) GetFilterName() string

GetFilterName returns the name of the encoding filter.

func (*JBIG2Encoder) MakeDecodeParams

func (enc *JBIG2Encoder) MakeDecodeParams() PdfObject

MakeDecodeParams makes a new instance of an encoding dictionary based on the current encoder settings.

func (*JBIG2Encoder) MakeStreamDict

func (enc *JBIG2Encoder) MakeStreamDict() *PdfObjectDictionary

MakeStreamDict makes a new instance of an encoding dictionary for a stream object.

func (*JBIG2Encoder) UpdateParams

func (enc *JBIG2Encoder) UpdateParams(params *PdfObjectDictionary)

UpdateParams updates the parameter values of the encoder. Implements StreamEncoder interface.

type JBIG2EncoderSettings

JBIG2EncoderSettings contains the parameters and settings used by the JBIG2Encoder. Current version works only on JB2Generic compression.

type JBIG2EncoderSettings struct {
    // FileMode defines if the jbig2 encoder should return full jbig2 file instead of
    // shortened pdf mode. This adds the file header to the jbig2 definition.
    FileMode bool
    // Compression is the setting that defines the compression type used for encoding the page.
    Compression JBIG2CompressionType
    // DuplicatedLinesRemoval code generic region in a way such that if the lines are duplicated the encoder
    // doesn't store it twice.
    DuplicatedLinesRemoval bool
    // DefaultPixelValue is the bit value initial for every pixel in the page.
    DefaultPixelValue uint8
    // ResolutionX optional setting that defines the 'x' axis input image resolution - used for single page encoding.
    ResolutionX int
    // ResolutionY optional setting that defines the 'y' axis input image resolution - used for single page encoding.
    ResolutionY int
    // Threshold defines the threshold of the image correlation for
    // non Generic compression.
    // User only for JB2SymbolCorrelation and JB2SymbolRankHaus methods.
    // Best results in range [0.7 - 0.98] - the less the better the compression would be
    // but the more lossy.
    // Default value: 0.95
    Threshold float64
}

func (JBIG2EncoderSettings) Validate

func (s JBIG2EncoderSettings) Validate() error

Validate validates the page settings for the JBIG2 encoder.

type JBIG2Image

JBIG2Image is the image structure used by the jbig2 encoder. Its Data must be in a 1 bit per component and 1 component per pixel (1bpp). In order to create binary image use GoImageToJBIG2 function. If the image data contains the row bytes padding set the HasPadding to true.

type JBIG2Image struct {
    // Width and Height defines the image boundaries.
    Width, Height int
    // Data is the byte slice data for the input image
    Data []byte
    // HasPadding is the attribute that defines if the last byte of the data in the row contains
    // 0 bits padding.
    HasPadding bool
}

func GoImageToJBIG2

func GoImageToJBIG2(i image.Image, bwThreshold float64) (*JBIG2Image, error)

GoImageToJBIG2 creates a binary image on the base of 'i' golang image.Image. If the image is not a black/white image then the function converts provided input into JBIG2Image with 1bpp. For non grayscale images the function performs the conversion to the grayscale temp image. Then it checks the value of the gray image value if it's within bounds of the black white threshold. This 'bwThreshold' value should be in range (0.0, 1.0). The threshold checks if the grayscale pixel (uint) value is greater or smaller than 'bwThreshold' * 255. Pixels inside the range will be white, and the others will be black. If the 'bwThreshold' is equal to -1.0 - JB2ImageAutoThreshold then it's value would be set on the base of it's histogram using Triangle method. For more information go to:

https://www.mathworks.com/matlabcentral/fileexchange/28047-gray-image-thresholding-using-the-triangle-method

func (*JBIG2Image) ToGoImage

func (j *JBIG2Image) ToGoImage() (image.Image, error)

ToGoImage converts the JBIG2Image to the golang image.Image.

type JPXEncoder

JPXEncoder implements JPX encoder/decoder (dummy, for now) FIXME: implement

type JPXEncoder struct{}

func NewJPXEncoder

func NewJPXEncoder() *JPXEncoder

NewJPXEncoder returns a new instance of JPXEncoder.

func (*JPXEncoder) DecodeBytes

func (enc *JPXEncoder) DecodeBytes(encoded []byte) ([]byte, error)

DecodeBytes decodes a slice of JPX encoded bytes and returns the result.

func (*JPXEncoder) DecodeStream

func (enc *JPXEncoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)

DecodeStream decodes a JPX encoded stream and returns the result as a slice of bytes.

func (*JPXEncoder) EncodeBytes

func (enc *JPXEncoder) EncodeBytes(data []byte) ([]byte, error)

EncodeBytes JPX encodes the passed in slice of bytes.

func (*JPXEncoder) GetFilterName

func (enc *JPXEncoder) GetFilterName() string

GetFilterName returns the name of the encoding filter.

func (*JPXEncoder) MakeDecodeParams

func (enc *JPXEncoder) MakeDecodeParams() PdfObject

MakeDecodeParams makes a new instance of an encoding dictionary based on the current encoder settings.

func (*JPXEncoder) MakeStreamDict

func (enc *JPXEncoder) MakeStreamDict() *PdfObjectDictionary

MakeStreamDict makes a new instance of an encoding dictionary for a stream object.

func (*JPXEncoder) UpdateParams

func (enc *JPXEncoder) UpdateParams(params *PdfObjectDictionary)

UpdateParams updates the parameter values of the encoder.

type LZWEncoder

LZWEncoder provides LZW encoding/decoding functionality.

type LZWEncoder struct {
    Predictor        int
    BitsPerComponent int
    // For predictors
    Columns int
    Colors  int
    // LZW algorithm setting.
    EarlyChange int
}

func NewLZWEncoder

func NewLZWEncoder() *LZWEncoder

NewLZWEncoder makes a new LZW encoder with default parameters.

func (*LZWEncoder) DecodeBytes

func (enc *LZWEncoder) DecodeBytes(encoded []byte) ([]byte, error)

DecodeBytes decodes a slice of LZW encoded bytes and returns the result.

func (*LZWEncoder) DecodeStream

func (enc *LZWEncoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)

DecodeStream decodes a LZW encoded stream and returns the result as a slice of bytes.

func (*LZWEncoder) EncodeBytes

func (enc *LZWEncoder) EncodeBytes(data []byte) ([]byte, error)

EncodeBytes implements support for LZW encoding. Currently not supporting predictors (raw compressed data only). Only supports the Early change = 1 algorithm (compress/lzw) as the other implementation does not have a write method. TODO: Consider refactoring compress/lzw to allow both.

func (*LZWEncoder) GetFilterName

func (enc *LZWEncoder) GetFilterName() string

GetFilterName returns the name of the encoding filter.

func (*LZWEncoder) MakeDecodeParams

func (enc *LZWEncoder) MakeDecodeParams() PdfObject

MakeDecodeParams makes a new instance of an encoding dictionary based on the current encoder settings.

func (*LZWEncoder) MakeStreamDict

func (enc *LZWEncoder) MakeStreamDict() *PdfObjectDictionary

MakeStreamDict makes a new instance of an encoding dictionary for a stream object. Has the Filter set and the DecodeParms.

func (*LZWEncoder) UpdateParams

func (enc *LZWEncoder) UpdateParams(params *PdfObjectDictionary)

UpdateParams updates the parameter values of the encoder.

type MultiEncoder

MultiEncoder supports serial encoding.

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

func NewMultiEncoder

func NewMultiEncoder() *MultiEncoder

NewMultiEncoder returns a new instance of MultiEncoder.

func (*MultiEncoder) AddEncoder

func (enc *MultiEncoder) AddEncoder(encoder StreamEncoder)

AddEncoder adds the passed in encoder to the underlying encoder slice.

func (*MultiEncoder) DecodeBytes

func (enc *MultiEncoder) DecodeBytes(encoded []byte) ([]byte, error)

DecodeBytes decodes a multi-encoded slice of bytes by passing it through the DecodeBytes method of the underlying encoders.

func (*MultiEncoder) DecodeStream

func (enc *MultiEncoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)

DecodeStream decodes a multi-encoded stream by passing it through the DecodeStream method of the underlying encoders.

func (*MultiEncoder) EncodeBytes

func (enc *MultiEncoder) EncodeBytes(data []byte) ([]byte, error)

EncodeBytes encodes the passed in slice of bytes by passing it through the EncodeBytes method of the underlying encoders.

func (*MultiEncoder) GetFilterArray

func (enc *MultiEncoder) GetFilterArray() *PdfObjectArray

GetFilterArray returns the names of the underlying encoding filters in an array that can be used as /Filter entry.

func (*MultiEncoder) GetFilterName

func (enc *MultiEncoder) GetFilterName() string

GetFilterName returns the names of the underlying encoding filters, separated by spaces. Note: This is just a string, should not be used in /Filter dictionary entry. Use GetFilterArray for that. TODO(v4): Refactor to GetFilter() which can be used for /Filter (either Name or Array), this can be renamed to String() as a pretty string to use in debugging etc.

func (*MultiEncoder) MakeDecodeParams

func (enc *MultiEncoder) MakeDecodeParams() PdfObject

MakeDecodeParams makes a new instance of an encoding dictionary based on the current encoder settings.

func (*MultiEncoder) MakeStreamDict

func (enc *MultiEncoder) MakeStreamDict() *PdfObjectDictionary

MakeStreamDict makes a new instance of an encoding dictionary for a stream object.

func (*MultiEncoder) UpdateParams

func (enc *MultiEncoder) UpdateParams(params *PdfObjectDictionary)

UpdateParams updates the parameter values of the encoder.

type ParserMetadata

ParserMetadata is the parser based metadata information about document. The data here could be used on document verification.

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

func (ParserMetadata) HasDataAfterEOF

func (p ParserMetadata) HasDataAfterEOF() bool

HasDataAfterEOF checks if there is some data after EOF marker.

func (ParserMetadata) HasEOLAfterHeader

func (p ParserMetadata) HasEOLAfterHeader() bool

HasEOLAfterHeader gets information if there is a EOL after the version header.

func (ParserMetadata) HasInvalidHexRunes

func (p ParserMetadata) HasInvalidHexRunes() bool

HasInvalidHexRunes implements core.ParserMetadata interface.

func (ParserMetadata) HasInvalidSeparationAfterXRef

func (p ParserMetadata) HasInvalidSeparationAfterXRef() bool

HasInvalidSeparationAfterXRef implements core.ParserMetadata interface.

func (ParserMetadata) HasInvalidSubsectionHeader

func (p ParserMetadata) HasInvalidSubsectionHeader() bool

HasInvalidSubsectionHeader implements core.ParserMetadata interface.

func (ParserMetadata) HasNonConformantStream

func (p ParserMetadata) HasNonConformantStream() bool

HasNonConformantStream implements core.ParserMetadata.

func (ParserMetadata) HasOddLengthHexStrings

func (p ParserMetadata) HasOddLengthHexStrings() bool

HasOddLengthHexStrings checks if the document has odd length hexadecimal strings.

func (ParserMetadata) HeaderCommentBytes

func (p ParserMetadata) HeaderCommentBytes() [4]byte

HeaderCommentBytes gets the header comment bytes.

func (ParserMetadata) HeaderPosition

func (p ParserMetadata) HeaderPosition() int

HeaderPosition gets the file header position.

type PdfCrypt

PdfCrypt provides PDF encryption/decryption support. The PDF standard supports encryption of strings and streams (Section 7.6).

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

func PdfCryptNewDecrypt

func PdfCryptNewDecrypt(parser *PdfParser, ed, trailer *PdfObjectDictionary) (*PdfCrypt, error)

PdfCryptNewDecrypt makes the document crypt handler based on the encryption dictionary and trailer dictionary. Returns an error on failure to process.

func (*PdfCrypt) Decrypt

func (crypt *PdfCrypt) Decrypt(obj PdfObject, parentObjNum, parentGenNum int64) error

Decrypt an object with specified key. For numbered objects, the key argument is not used and a new one is generated based on the object and generation number. Traverses through all the subobjects (recursive).

Does not look up references.. That should be done prior to calling.

func (*PdfCrypt) Encrypt

func (crypt *PdfCrypt) Encrypt(obj PdfObject, parentObjNum, parentGenNum int64) error

Encrypt an object with specified key. For numbered objects, the key argument is not used and a new one is generated based on the object and generation number. Traverses through all the subobjects (recursive).

Does not look up references.. That should be done prior to calling.

func (*PdfCrypt) GetAccessPermissions

func (crypt *PdfCrypt) GetAccessPermissions() security.Permissions

GetAccessPermissions returns the PDF access permissions as an AccessPermissions object.

func (*PdfCrypt) String

func (crypt *PdfCrypt) String() string

String returns a descriptive information string about the encryption method used.

type PdfIndirectObject

PdfIndirectObject represents the primitive PDF indirect object.

type PdfIndirectObject struct {
    PdfObjectReference
    PdfObject
}

func GetIndirect

func GetIndirect(obj PdfObject) (ind *PdfIndirectObject, found bool)

GetIndirect returns the *PdfIndirectObject represented by the PdfObject. On type mismatch the found bool flag is false and a nil pointer is returned.

func MakeIndirectObject

func MakeIndirectObject(obj PdfObject) *PdfIndirectObject

MakeIndirectObject creates an PdfIndirectObject with a specified direct object PdfObject.

func (*PdfIndirectObject) String

func (ind *PdfIndirectObject) String() string

String returns a string describing `ind`.

func (*PdfIndirectObject) WriteString

func (ind *PdfIndirectObject) WriteString() string

WriteString outputs the object as it is to be written to file.

type PdfObject

PdfObject is an interface which all primitive PDF objects must implement.

type PdfObject interface {
    // String outputs a string representation of the primitive (for debugging).
    String() string

    // WriteString outputs the PDF primitive as written to file as expected by the standard.
    // TODO(dennwc): it should return a byte slice, or accept a writer
    WriteString() string
}

func FlattenObject

func FlattenObject(obj PdfObject) PdfObject

FlattenObject returns the contents of `obj`. In other words, `obj` with indirect objects replaced by their values. The replacements are made recursively to a depth of traceMaxDepth. NOTE: Dicts are sorted to make objects with same contents have the same PDF object strings.

func ParseNumber

func ParseNumber(buf *bufio.Reader) (PdfObject, error)

ParseNumber parses a numeric objects from a buffered stream. Section 7.3.3. Integer or Float.

An integer shall be written as one or more decimal digits optionally preceded by a sign. The value shall be interpreted as a signed decimal integer and shall be converted to an integer object.

A real value shall be written as one or more decimal digits with an optional sign and a leading, trailing, or embedded PERIOD (2Eh) (decimal point). The value shall be interpreted as a real number and shall be converted to a real object.

Regarding exponential numbers: 7.3.3 Numeric Objects: A conforming writer shall not use the PostScript syntax for numbers with non-decimal radices (such as 16#FFFE) or in exponential format (such as 6.02E23). Nonetheless, we sometimes get numbers with exponential format, so we will support it in the reader (no confusion with other types, so no compromise).

func ResolveReference

func ResolveReference(obj PdfObject) PdfObject

ResolveReference resolves reference if `o` is a *PdfObjectReference and returns the object referenced to. Otherwise returns back `o`.

func TraceToDirectObject

func TraceToDirectObject(obj PdfObject) PdfObject

TraceToDirectObject traces a PdfObject to a direct object. For example direct objects contained in indirect objects (can be double referenced even).

type PdfObjectArray

PdfObjectArray represents the primitive PDF array object.

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

func GetArray

func GetArray(obj PdfObject) (arr *PdfObjectArray, found bool)

GetArray returns the *PdfObjectArray represented by the PdfObject directly or indirectly within an indirect object. On type mismatch the found bool flag is false and a nil pointer is returned.

func MakeArray

func MakeArray(objects ...PdfObject) *PdfObjectArray

MakeArray creates an PdfObjectArray from a list of PdfObjects.

func MakeArrayFromFloats

func MakeArrayFromFloats(vals []float64) *PdfObjectArray

MakeArrayFromFloats creates an PdfObjectArray from a slice of float64s, where each array element is an PdfObjectFloat.

func MakeArrayFromIntegers

func MakeArrayFromIntegers(vals []int) *PdfObjectArray

MakeArrayFromIntegers creates an PdfObjectArray from a slice of ints, where each array element is an PdfObjectInteger.

func MakeArrayFromIntegers64

func MakeArrayFromIntegers64(vals []int64) *PdfObjectArray

MakeArrayFromIntegers64 creates an PdfObjectArray from a slice of int64s, where each array element is an PdfObjectInteger.

func (*PdfObjectArray) Append

func (array *PdfObjectArray) Append(objects ...PdfObject)

Append appends PdfObject(s) to the array.

func (*PdfObjectArray) Clear

func (array *PdfObjectArray) Clear()

Clear resets the array to an empty state.

func (*PdfObjectArray) Elements

func (array *PdfObjectArray) Elements() []PdfObject

Elements returns a slice of the PdfObject elements in the array.

func (*PdfObjectArray) Get

func (array *PdfObjectArray) Get(i int) PdfObject

Get returns the i-th element of the array or nil if out of bounds (by index).

func (*PdfObjectArray) GetAsFloat64Slice

func (array *PdfObjectArray) GetAsFloat64Slice() ([]float64, error)

GetAsFloat64Slice returns the array as []float64 slice. Returns an error if not entirely numeric (only PdfObjectIntegers, PdfObjectFloats).

func (*PdfObjectArray) Len

func (array *PdfObjectArray) Len() int

Len returns the number of elements in the array.

func (*PdfObjectArray) Set

func (array *PdfObjectArray) Set(i int, obj PdfObject) error

Set sets the PdfObject at index i of the array. An error is returned if the index is outside bounds.

func (*PdfObjectArray) String

func (array *PdfObjectArray) String() string

String returns a string describing `array`.

func (*PdfObjectArray) ToFloat64Array

func (array *PdfObjectArray) ToFloat64Array() ([]float64, error)

ToFloat64Array returns a slice of all elements in the array as a float64 slice. An error is returned if the array contains non-numeric objects (each element can be either PdfObjectInteger or PdfObjectFloat).

func (*PdfObjectArray) ToInt64Slice

func (array *PdfObjectArray) ToInt64Slice() ([]int64, error)

ToInt64Slice returns a slice of all array elements as an int64 slice. An error is returned if the array non-integer objects. Each element can only be PdfObjectInteger.

func (*PdfObjectArray) ToIntegerArray

func (array *PdfObjectArray) ToIntegerArray() ([]int, error)

ToIntegerArray returns a slice of all array elements as an int slice. An error is returned if the array non-integer objects. Each element can only be PdfObjectInteger.

func (*PdfObjectArray) WriteString

func (array *PdfObjectArray) WriteString() string

WriteString outputs the object as it is to be written to file.

type PdfObjectBool

PdfObjectBool represents the primitive PDF boolean object.

type PdfObjectBool bool

func GetBool

func GetBool(obj PdfObject) (bo *PdfObjectBool, found bool)

GetBool returns the *PdfObjectBool object that is represented by a PdfObject directly or indirectly within an indirect object. The bool flag indicates whether a match was found.

func MakeBool

func MakeBool(val bool) *PdfObjectBool

MakeBool creates a PdfObjectBool from a bool value.

func (*PdfObjectBool) String

func (bool *PdfObjectBool) String() string

String returns the state of the bool as "true" or "false".

func (*PdfObjectBool) WriteString

func (bool *PdfObjectBool) WriteString() string

WriteString outputs the object as it is to be written to file.

type PdfObjectDictionary

PdfObjectDictionary represents the primitive PDF dictionary/map object.

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

func GetDict

func GetDict(obj PdfObject) (dict *PdfObjectDictionary, found bool)

GetDict returns the *PdfObjectDictionary represented by the PdfObject directly or indirectly within an indirect object. On type mismatch the found bool flag is false and a nil pointer is returned.

func MakeDict

func MakeDict() *PdfObjectDictionary

MakeDict creates and returns an empty PdfObjectDictionary.

func MakeDictMap

func MakeDictMap(objmap map[string]PdfObject) *PdfObjectDictionary

MakeDictMap creates a PdfObjectDictionary initialized from a map of keys to values.

func (*PdfObjectDictionary) Clear

func (d *PdfObjectDictionary) Clear()

Clear resets the dictionary to an empty state.

func (*PdfObjectDictionary) Get

func (d *PdfObjectDictionary) Get(key PdfObjectName) PdfObject

Get returns the PdfObject corresponding to the specified key. Returns a nil value if the key is not set.

func (*PdfObjectDictionary) GetString

func (d *PdfObjectDictionary) GetString(key PdfObjectName) (string, bool)

GetString is a helper for Get that returns a string value. Returns false if the key is missing or a value is not a string.

func (*PdfObjectDictionary) Keys

func (d *PdfObjectDictionary) Keys() []PdfObjectName

Keys returns the list of keys in the dictionary. If `d` is nil returns a nil slice.

func (*PdfObjectDictionary) Merge

func (d *PdfObjectDictionary) Merge(another *PdfObjectDictionary) *PdfObjectDictionary

Merge merges in key/values from another dictionary. Overwriting if has same keys. The mutated dictionary (d) is returned in order to allow method chaining.

func (*PdfObjectDictionary) Remove

func (d *PdfObjectDictionary) Remove(key PdfObjectName)

Remove removes an element specified by key.

func (*PdfObjectDictionary) Set

func (d *PdfObjectDictionary) Set(key PdfObjectName, val PdfObject)

Set sets the dictionary's key -> val mapping entry. Overwrites if key already set.

func (*PdfObjectDictionary) SetIfNotNil

func (d *PdfObjectDictionary) SetIfNotNil(key PdfObjectName, val PdfObject)

SetIfNotNil sets the dictionary's key -> val mapping entry -IF- val is not nil. Note that we take care to perform a type switch. Otherwise if we would supply a nil value of another type, e.g. (PdfObjectArray*)(nil), then it would not be a PdfObject(nil) and thus would get set.

func (*PdfObjectDictionary) String

func (d *PdfObjectDictionary) String() string

String returns a string describing `d`.

func (*PdfObjectDictionary) Update

func (d *PdfObjectDictionary) Update(objmap map[string]PdfObject) *PdfObjectDictionary

Update updates multiple keys and returns the dictionary back so can be used in a chained fashion.

func (*PdfObjectDictionary) WriteString

func (d *PdfObjectDictionary) WriteString() string

WriteString outputs the object as it is to be written to file.

type PdfObjectFloat

PdfObjectFloat represents the primitive PDF floating point numerical object.

type PdfObjectFloat float64

func GetFloat

func GetFloat(obj PdfObject) (fo *PdfObjectFloat, found bool)

GetFloat returns the *PdfObjectFloat represented by the PdfObject directly or indirectly within an indirect object. On type mismatch the found bool flag is false and a nil pointer is returned.

func MakeFloat

func MakeFloat(val float64) *PdfObjectFloat

MakeFloat creates an PdfObjectFloat from a float64.

func (*PdfObjectFloat) String

func (float *PdfObjectFloat) String() string

func (*PdfObjectFloat) WriteString

func (float *PdfObjectFloat) WriteString() string

WriteString outputs the object as it is to be written to file.

type PdfObjectInteger

PdfObjectInteger represents the primitive PDF integer numerical object.

type PdfObjectInteger int64

func GetInt

func GetInt(obj PdfObject) (into *PdfObjectInteger, found bool)

GetInt returns the *PdfObjectBool object that is represented by a PdfObject either directly or indirectly within an indirect object. The bool flag indicates whether a match was found.

func MakeInteger

func MakeInteger(val int64) *PdfObjectInteger

MakeInteger creates a PdfObjectInteger from an int64.

func (*PdfObjectInteger) String

func (int *PdfObjectInteger) String() string

func (*PdfObjectInteger) WriteString

func (int *PdfObjectInteger) WriteString() string

WriteString outputs the object as it is to be written to file.

type PdfObjectName

PdfObjectName represents the primitive PDF name object.

type PdfObjectName string

func GetName

func GetName(obj PdfObject) (name *PdfObjectName, found bool)

GetName returns the *PdfObjectName represented by the PdfObject directly or indirectly within an indirect object. On type mismatch the found bool flag is false and a nil pointer is returned.

func MakeName

func MakeName(s string) *PdfObjectName

MakeName creates a PdfObjectName from a string.

func (*PdfObjectName) String

func (name *PdfObjectName) String() string

String returns a string representation of `name`.

func (*PdfObjectName) WriteString

func (name *PdfObjectName) WriteString() string

WriteString outputs the object as it is to be written to file.

type PdfObjectNull

PdfObjectNull represents the primitive PDF null object.

type PdfObjectNull struct{}

func MakeNull

func MakeNull() *PdfObjectNull

MakeNull creates an PdfObjectNull.

func (*PdfObjectNull) String

func (null *PdfObjectNull) String() string

String returns a string describing `null`.

func (*PdfObjectNull) WriteString

func (null *PdfObjectNull) WriteString() string

WriteString outputs the object as it is to be written to file.

type PdfObjectReference

PdfObjectReference represents the primitive PDF reference object.

type PdfObjectReference struct {
    ObjectNumber     int64
    GenerationNumber int64
    // contains filtered or unexported fields
}

func (*PdfObjectReference) GetParser

func (ref *PdfObjectReference) GetParser() *PdfParser

GetParser returns the parser for lazy-loading or compare references.

func (*PdfObjectReference) Resolve

func (ref *PdfObjectReference) Resolve() PdfObject

Resolve resolves the reference and returns the indirect or stream object. If the reference cannot be resolved, a *PdfObjectNull object is returned.

func (*PdfObjectReference) String

func (ref *PdfObjectReference) String() string

String returns a string describing `ref`.

func (*PdfObjectReference) WriteString

func (ref *PdfObjectReference) WriteString() string

WriteString outputs the object as it is to be written to file.

type PdfObjectStream

PdfObjectStream represents the primitive PDF Object stream.

type PdfObjectStream struct {
    PdfObjectReference
    *PdfObjectDictionary
    Stream []byte

    Lazy     bool
    TempFile string
}

func GetStream

func GetStream(obj PdfObject) (stream *PdfObjectStream, found bool)

GetStream returns the *PdfObjectStream represented by the PdfObject. On type mismatch the found bool flag is false and a nil pointer is returned.

func MakeStream

func MakeStream(contents []byte, encoder StreamEncoder) (*PdfObjectStream, error)

MakeStream creates an PdfObjectStream with specified contents and encoding. If encoding is nil, then raw encoding will be used (i.e. no encoding applied).

func (*PdfObjectStream) MakeLazy

func (s *PdfObjectStream) MakeLazy() error

MakeLazy create temporary file for stream to reduce memory usage. It can be used for creating PDF with many images. Temporary files are removed automatically when Write/WriteToFile is called for creator object.

func (*PdfObjectStream) String

func (stream *PdfObjectStream) String() string

String returns a string describing `stream`.

func (*PdfObjectStream) WriteString

func (stream *PdfObjectStream) WriteString() string

WriteString outputs the object as it is to be written to file.

type PdfObjectStreams

PdfObjectStreams represents the primitive PDF object streams. 7.5.7 Object Streams (page 45).

type PdfObjectStreams struct {
    PdfObjectReference
    // contains filtered or unexported fields
}

func GetObjectStreams

func GetObjectStreams(obj PdfObject) (objStream *PdfObjectStreams, found bool)

GetObjectStreams returns the *PdfObjectStreams represented by the PdfObject. On type mismatch the found bool flag is false and a nil pointer is returned.

func MakeObjectStreams

func MakeObjectStreams(objects ...PdfObject) *PdfObjectStreams

MakeObjectStreams creates an PdfObjectStreams from a list of PdfObjects.

func (*PdfObjectStreams) Append

func (streams *PdfObjectStreams) Append(objects ...PdfObject)

Append appends PdfObject(s) to the streams.

func (*PdfObjectStreams) Elements

func (streams *PdfObjectStreams) Elements() []PdfObject

Elements returns a slice of the PdfObject elements in the array. Preferred over accessing the array directly as type may be changed in future major versions (v3).

func (*PdfObjectStreams) Len

func (streams *PdfObjectStreams) Len() int

Len returns the number of elements in the streams.

func (*PdfObjectStreams) Set

func (streams *PdfObjectStreams) Set(i int, obj PdfObject) error

Set sets the PdfObject at index i of the streams. An error is returned if the index is outside bounds.

func (*PdfObjectStreams) String

func (streams *PdfObjectStreams) String() string

String returns a string describing `streams`.

func (*PdfObjectStreams) WriteString

func (streams *PdfObjectStreams) WriteString() string

WriteString outputs the object as it is to be written to file.

type PdfObjectString

PdfObjectString represents the primitive PDF string object.

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

func GetString

func GetString(obj PdfObject) (so *PdfObjectString, found bool)

GetString returns the *PdfObjectString represented by the PdfObject directly or indirectly within an indirect object. On type mismatch the found bool flag is false and a nil pointer is returned.

func MakeEncodedString

func MakeEncodedString(s string, utf16BE bool) *PdfObjectString

MakeEncodedString creates a PdfObjectString with encoded content, which can be either UTF-16BE or PDFDocEncoding depending on whether `utf16BE` is true or false respectively.

func MakeHexString

func MakeHexString(s string) *PdfObjectString

MakeHexString creates an PdfObjectString from a string intended for output as a hexadecimal string.

func MakeString

func MakeString(s string) *PdfObjectString

MakeString creates an PdfObjectString from a string. NOTE: PDF does not use utf-8 string encoding like Go so `s` will often not be a utf-8 encoded string.

func MakeStringFromBytes

func MakeStringFromBytes(data []byte) *PdfObjectString

MakeStringFromBytes creates an PdfObjectString from a byte array. This is more natural than MakeString as `data` is usually not utf-8 encoded.

func (*PdfObjectString) Bytes

func (str *PdfObjectString) Bytes() []byte

Bytes returns the PdfObjectString content as a []byte array.

func (*PdfObjectString) Decoded

func (str *PdfObjectString) Decoded() string

Decoded returns the PDFDocEncoding or UTF-16BE decoded string contents. UTF-16BE is applied when the first two bytes are 0xFE, 0XFF, otherwise decoding of PDFDocEncoding is performed.

func (*PdfObjectString) IsHexadecimal

func (str *PdfObjectString) IsHexadecimal() bool

IsHexadecimal checks if the PdfObjectString contains Hexadecimal data.

func (*PdfObjectString) Str

func (str *PdfObjectString) Str() string

Str returns the string value of the PdfObjectString. Defined in addition to String() function to clarify that this function returns the underlying string directly, whereas the String function technically could include debug info.

func (*PdfObjectString) String

func (str *PdfObjectString) String() string

String returns a string representation of the *PdfObjectString.

func (*PdfObjectString) WriteString

func (str *PdfObjectString) WriteString() string

WriteString outputs the object as it is to be written to file.

type PdfParser

PdfParser parses a PDF file and provides access to the object structure of the PDF.

type PdfParser struct {
    ObjCache objectCache
    // contains filtered or unexported fields
}

func NewCompliancePdfParser

func NewCompliancePdfParser(rs io.ReadSeeker) (parser *PdfParser, err error)

NewCompliancePdfParser creates a new PdfParser that will parse input reader with the focus on extracting more metadata, which might affect performance of the regular PdfParser this function.

func NewParser

func NewParser(rs io.ReadSeeker) (*PdfParser, error)

NewParser creates a new parser for a PDF file via ReadSeeker. Loads the cross reference stream and trailer. An error is returned on failure.

func NewParserFromString

func NewParserFromString(txt string) *PdfParser

NewParserFromString is used for testing purposes.

func (*PdfParser) CheckAccessRights

func (parser *PdfParser) CheckAccessRights(password []byte) (bool, security.Permissions, error)

CheckAccessRights checks access rights and permissions for a specified password. If either user/owner password is specified, full rights are granted, otherwise the access rights are specified by the Permissions flag.

The bool flag indicates that the user can access and view the file. The AccessPermissions shows what access the user has for editing etc. An error is returned if there was a problem performing the authentication.

func (*PdfParser) Decrypt

func (parser *PdfParser) Decrypt(password []byte) (bool, error)

Decrypt attempts to decrypt the PDF file with a specified password. Also tries to decrypt with an empty password. Returns true if successful, false otherwise. An error is returned when there is a problem with decrypting.

func (*PdfParser) GetCrypter

func (parser *PdfParser) GetCrypter() *PdfCrypt

GetCrypter returns the PdfCrypt instance which has information about the PDFs encryption.

func (*PdfParser) GetEncryptObj

func (parser *PdfParser) GetEncryptObj() *PdfIndirectObject

GetEncryptObj returns the PdfIndirectObject which has information about the PDFs encryption details.

func (*PdfParser) GetFileOffset

func (parser *PdfParser) GetFileOffset() int64

GetFileOffset returns the current file offset, accounting for buffered position.

func (*PdfParser) GetObjectNums

func (parser *PdfParser) GetObjectNums() []int

GetObjectNums returns a sorted list of object numbers of the PDF objects in the file.

func (*PdfParser) GetPreviousRevisionParser

func (parser *PdfParser) GetPreviousRevisionParser() (*PdfParser, error)

GetPreviousRevisionParser returns PdfParser for the previous version of the Pdf document.

func (*PdfParser) GetPreviousRevisionReadSeeker

func (parser *PdfParser) GetPreviousRevisionReadSeeker() (io.ReadSeeker, error)

GetPreviousRevisionReadSeeker returns ReadSeeker for the previous version of the Pdf document.

func (*PdfParser) GetRevision

func (parser *PdfParser) GetRevision(revisionNumber int) (*PdfParser, error)

GetRevision returns PdfParser for the specific version of the Pdf document.

func (*PdfParser) GetRevisionNumber

func (parser *PdfParser) GetRevisionNumber() int

GetRevisionNumber returns the current version of the Pdf document.

func (*PdfParser) GetTrailer

func (parser *PdfParser) GetTrailer() *PdfObjectDictionary

GetTrailer returns the PDFs trailer dictionary. The trailer dictionary is typically the starting point for a PDF, referencing other key objects that are important in the document structure.

func (*PdfParser) GetUpdatedObjects

func (parser *PdfParser) GetUpdatedObjects(prevParser *PdfParser) (map[int64]PdfObject, error)

GetUpdatedObjects returns pdf objects which were updated from the specific version (from prevParser).

func (*PdfParser) GetXrefOffset

func (parser *PdfParser) GetXrefOffset() int64

GetXrefOffset returns the offset of the xref table.

func (*PdfParser) GetXrefTable

func (parser *PdfParser) GetXrefTable() XrefTable

GetXrefTable returns the PDFs xref table.

func (*PdfParser) GetXrefType

func (parser *PdfParser) GetXrefType() *xrefType

GetXrefType returns the type of the first xref object (table or stream).

func (*PdfParser) Inspect

func (parser *PdfParser) Inspect() (map[string]int, error)

Inspect analyzes the document object structure. Returns a map of object types (by name) with the instance count as value.

func (*PdfParser) IsAuthenticated

func (parser *PdfParser) IsAuthenticated() bool

IsAuthenticated returns true if the PDF has already been authenticated for accessing.

func (*PdfParser) IsEncrypted

func (parser *PdfParser) IsEncrypted() (bool, error)

IsEncrypted checks if the document is encrypted. A bool flag is returned indicating the result. First time when called, will check if the Encrypt dictionary is accessible through the trailer dictionary. If encrypted, prepares a crypt datastructure which can be used to authenticate and decrypt the document. On failure, an error is returned.

func (*PdfParser) LookupByNumber

func (parser *PdfParser) LookupByNumber(objNumber int) (PdfObject, error)

LookupByNumber looks up a PdfObject by object number. Returns an error on failure.

func (*PdfParser) LookupByReference

func (parser *PdfParser) LookupByReference(ref PdfObjectReference) (PdfObject, error)

LookupByReference looks up a PdfObject by a reference.

func (*PdfParser) ParseDict

func (parser *PdfParser) ParseDict() (*PdfObjectDictionary, error)

ParseDict reads and parses a PDF dictionary object enclosed with '<<' and '>>'

func (*PdfParser) ParseIndirectObject

func (parser *PdfParser) ParseIndirectObject() (PdfObject, error)

ParseIndirectObject parses an indirect object from the input stream. Can also be an object stream. Returns the indirect object (*PdfIndirectObject) or the stream object (*PdfObjectStream).

func (*PdfParser) ParserMetadata

func (parser *PdfParser) ParserMetadata() (ParserMetadata, error)

ParserMetadata gets the pdf parser metadata.

func (*PdfParser) PdfVersion

func (parser *PdfParser) PdfVersion() Version

PdfVersion returns version of the PDF file.

func (*PdfParser) ReadAtLeast

func (parser *PdfParser) ReadAtLeast(p []byte, n int) (int, error)

ReadAtLeast reads at least n bytes into slice p. Returns the number of bytes read (should always be == n), and an error on failure.

func (*PdfParser) ReadBytesAt

func (parser *PdfParser) ReadBytesAt(offset, len int64) ([]byte, error)

ReadBytesAt reads byte content at specific offset and length within the PDF.

func (*PdfParser) Resolve

func (parser *PdfParser) Resolve(obj PdfObject) (PdfObject, error)

Resolve resolves a PdfObject to direct object, looking up and resolving references as needed (unlike TraceToDirect).

func (*PdfParser) SetFileOffset

func (parser *PdfParser) SetFileOffset(offset int64)

SetFileOffset sets the file to an offset position and resets buffer.

type RawEncoder

RawEncoder implements Raw encoder/decoder (no encoding, pass through)

type RawEncoder struct{}

func NewRawEncoder

func NewRawEncoder() *RawEncoder

NewRawEncoder returns a new instace of RawEncoder.

func (*RawEncoder) DecodeBytes

func (enc *RawEncoder) DecodeBytes(encoded []byte) ([]byte, error)

DecodeBytes returns the passed in slice of bytes. The purpose of the method is to satisfy the StreamEncoder interface.

func (*RawEncoder) DecodeStream

func (enc *RawEncoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)

DecodeStream returns the passed in stream as a slice of bytes. The purpose of the method is to satisfy the StreamEncoder interface.

func (*RawEncoder) EncodeBytes

func (enc *RawEncoder) EncodeBytes(data []byte) ([]byte, error)

EncodeBytes returns the passed in slice of bytes. The purpose of the method is to satisfy the StreamEncoder interface.

func (*RawEncoder) GetFilterName

func (enc *RawEncoder) GetFilterName() string

GetFilterName returns the name of the encoding filter.

func (*RawEncoder) MakeDecodeParams

func (enc *RawEncoder) MakeDecodeParams() PdfObject

MakeDecodeParams makes a new instance of an encoding dictionary based on the current encoder settings.

func (*RawEncoder) MakeStreamDict

func (enc *RawEncoder) MakeStreamDict() *PdfObjectDictionary

MakeStreamDict makes a new instance of an encoding dictionary for a stream object.

func (*RawEncoder) UpdateParams

func (enc *RawEncoder) UpdateParams(params *PdfObjectDictionary)

UpdateParams updates the parameter values of the encoder.

type RunLengthEncoder

RunLengthEncoder represents Run length encoding.

type RunLengthEncoder struct {
}

func NewRunLengthEncoder

func NewRunLengthEncoder() *RunLengthEncoder

NewRunLengthEncoder makes a new run length encoder

func (*RunLengthEncoder) DecodeBytes

func (enc *RunLengthEncoder) DecodeBytes(encoded []byte) ([]byte, error)

DecodeBytes decodes a byte slice from Run length encoding.

7.4.5 RunLengthDecode Filter The RunLengthDecode filter decodes data that has been encoded in a simple byte-oriented format based on run length. The encoded data shall be a sequence of runs, where each run shall consist of a length byte followed by 1 to 128 bytes of data. If the length byte is in the range 0 to 127, the following length + 1 (1 to 128) bytes shall be copied literally during decompression. If length is in the range 129 to 255, the following single byte shall be copied 257 - length (2 to 128) times during decompression. A length value of 128 shall denote EOD.

func (*RunLengthEncoder) DecodeStream

func (enc *RunLengthEncoder) DecodeStream(streamObj *PdfObjectStream) ([]byte, error)

DecodeStream decodes RunLengthEncoded stream object and give back decoded bytes.

func (*RunLengthEncoder) EncodeBytes

func (enc *RunLengthEncoder) EncodeBytes(data []byte) ([]byte, error)

EncodeBytes encodes a bytes array and return the encoded value based on the encoder parameters.

func (*RunLengthEncoder) GetFilterName

func (enc *RunLengthEncoder) GetFilterName() string

GetFilterName returns the name of the encoding filter.

func (*RunLengthEncoder) MakeDecodeParams

func (enc *RunLengthEncoder) MakeDecodeParams() PdfObject

MakeDecodeParams makes a new instance of an encoding dictionary based on the current encoder settings.

func (*RunLengthEncoder) MakeStreamDict

func (enc *RunLengthEncoder) MakeStreamDict() *PdfObjectDictionary

MakeStreamDict makes a new instance of an encoding dictionary for a stream object.

func (*RunLengthEncoder) UpdateParams

func (enc *RunLengthEncoder) UpdateParams(params *PdfObjectDictionary)

UpdateParams updates the parameter values of the encoder.

type StreamEncoder

StreamEncoder represents the interface for all PDF stream encoders.

type StreamEncoder interface {
    GetFilterName() string
    MakeDecodeParams() PdfObject
    MakeStreamDict() *PdfObjectDictionary
    UpdateParams(params *PdfObjectDictionary)

    EncodeBytes(data []byte) ([]byte, error)
    DecodeBytes(encoded []byte) ([]byte, error)
    DecodeStream(streamObj *PdfObjectStream) ([]byte, error)
}

func NewEncoderFromStream

func NewEncoderFromStream(streamObj *PdfObjectStream) (StreamEncoder, error)

NewEncoderFromStream creates a StreamEncoder based on the stream's dictionary.

type Version

Version represents a version of a PDF standard.

type Version struct {
    Major int
    Minor int
}

func (Version) String

func (v Version) String() string

String returns the PDF version as a string. Implements interface fmt.Stringer.

type XrefObject

XrefObject defines a cross reference entry which is a map between object number (with generation number) and the location of the actual object, either as a file offset (xref table entry), or as a location within an xref stream object (xref object stream).

type XrefObject struct {
    XType        xrefType
    ObjectNumber int
    Generation   int
    // For normal xrefs (defined by OFFSET)
    Offset int64
    // For xrefs to object streams.
    OsObjNumber int
    OsObjIndex  int
}

type XrefTable

XrefTable represents the cross references in a PDF, i.e. the table of objects and information where to access within the PDF file.

type XrefTable struct {
    ObjectMap map[int]XrefObject // Maps object number to XrefObject
    // contains filtered or unexported fields
}

Subdirectories

Name Synopsis
..
security
crypt