unipdf/fdf/fdf.go
2024-12-20 06:39:10 +00:00

123 lines
30 KiB
Go

//
// Copyright 2020 FoxyUtils ehf. All rights reserved.
//
// This is a commercial product and requires a license to operate.
// A trial license can be obtained at https://unidoc.io
//
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
//
// Use of this source code is governed by the UniDoc End User License Agreement
// terms that can be accessed at https://unidoc.io/eula/
// Package fdf provides support for loading form field data from Form Field Data (FDF) files.
package fdf ;import (_d "bufio";_ga "bytes";_ab "encoding/hex";_b "errors";_eg "fmt";_f "github.com/unidoc/unipdf/v3/common";_df "github.com/unidoc/unipdf/v3/core";_gb "io";_aba "os";_g "regexp";_c "sort";_a "strconv";_ef "strings";);func (_bgf *fdfParser )parseIndirectObject ()(_df .PdfObject ,error ){_fabc :=_df .PdfIndirectObject {};
_f .Log .Trace ("\u002dR\u0065a\u0064\u0020\u0069\u006e\u0064i\u0072\u0065c\u0074\u0020\u006f\u0062\u006a");_dad ,_eag :=_bgf ._adcc .Peek (20);if _eag !=nil {_f .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0046\u0061\u0069\u006c\u0020\u0074\u006f\u0020r\u0065a\u0064\u0020\u0069\u006e\u0064\u0069\u0072\u0065\u0063\u0074\u0020\u006f\u0062\u006a");
return &_fabc ,_eag ;};_f .Log .Trace ("\u0028\u0069\u006edi\u0072\u0065\u0063\u0074\u0020\u006f\u0062\u006a\u0020\u0070\u0065\u0065\u006b\u0020\u0022\u0025\u0073\u0022",string (_dad ));_dddf :=_gg .FindStringSubmatchIndex (string (_dad ));if len (_dddf )< 6{_f .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020U\u006e\u0061\u0062l\u0065\u0020\u0074\u006f \u0066\u0069\u006e\u0064\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020\u0073\u0069\u0067\u006e\u0061\u0074\u0075\u0072\u0065\u0020\u0028\u0025\u0073\u0029",string (_dad ));
return &_fabc ,_b .New ("\u0075\u006e\u0061b\u006c\u0065\u0020\u0074\u006f\u0020\u0064\u0065\u0074\u0065\u0063\u0074\u0020\u0069\u006e\u0064\u0069\u0072\u0065\u0063\u0074\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020s\u0069\u0067\u006e\u0061\u0074\u0075\u0072\u0065");
};_bgf ._adcc .Discard (_dddf [0]);_f .Log .Trace ("O\u0066\u0066\u0073\u0065\u0074\u0073\u0020\u0025\u0020\u0064",_dddf );_caa :=_dddf [1]-_dddf [0];_eegg :=make ([]byte ,_caa );_ ,_eag =_bgf .readAtLeast (_eegg ,_caa );if _eag !=nil {_f .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0075\u006e\u0061\u0062l\u0065\u0020\u0074\u006f\u0020\u0072\u0065\u0061\u0064\u0020-\u0020\u0025\u0073",_eag );
return nil ,_eag ;};_f .Log .Trace ("\u0074\u0065\u0078t\u006c\u0069\u006e\u0065\u003a\u0020\u0025\u0073",_eegg );_eceg :=_gg .FindStringSubmatch (string (_eegg ));if len (_eceg )< 3{_f .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020U\u006e\u0061\u0062l\u0065\u0020\u0074\u006f \u0066\u0069\u006e\u0064\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020\u0073\u0069\u0067\u006e\u0061\u0074\u0075\u0072\u0065\u0020\u0028\u0025\u0073\u0029",string (_eegg ));
return &_fabc ,_b .New ("\u0075\u006e\u0061b\u006c\u0065\u0020\u0074\u006f\u0020\u0064\u0065\u0074\u0065\u0063\u0074\u0020\u0069\u006e\u0064\u0069\u0072\u0065\u0063\u0074\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020s\u0069\u0067\u006e\u0061\u0074\u0075\u0072\u0065");
};_dde ,_ :=_a .Atoi (_eceg [1]);_ddge ,_ :=_a .Atoi (_eceg [2]);_fabc .ObjectNumber =int64 (_dde );_fabc .GenerationNumber =int64 (_ddge );for {_gbff ,_fdg :=_bgf ._adcc .Peek (2);if _fdg !=nil {return &_fabc ,_fdg ;};_f .Log .Trace ("I\u006ed\u002e\u0020\u0070\u0065\u0065\u006b\u003a\u0020%\u0073\u0020\u0028\u0025 x\u0029\u0021",string (_gbff ),string (_gbff ));
if _df .IsWhiteSpace (_gbff [0]){_bgf .skipSpaces ();}else if _gbff [0]=='%'{_bgf .skipComments ();}else if (_gbff [0]=='<')&&(_gbff [1]=='<'){_f .Log .Trace ("\u0043\u0061\u006c\u006c\u0020\u0050\u0061\u0072\u0073e\u0044\u0069\u0063\u0074");_fabc .PdfObject ,_fdg =_bgf .parseDict ();
_f .Log .Trace ("\u0045\u004f\u0046\u0020Ca\u006c\u006c\u0020\u0050\u0061\u0072\u0073\u0065\u0044\u0069\u0063\u0074\u003a\u0020%\u0076",_fdg );if _fdg !=nil {return &_fabc ,_fdg ;};_f .Log .Trace ("\u0050\u0061\u0072\u0073\u0065\u0064\u0020\u0064\u0069\u0063t\u0069\u006f\u006e\u0061\u0072\u0079\u002e.\u002e\u0020\u0066\u0069\u006e\u0069\u0073\u0068\u0065\u0064\u002e");
}else if (_gbff [0]=='/')||(_gbff [0]=='(')||(_gbff [0]=='[')||(_gbff [0]=='<'){_fabc .PdfObject ,_fdg =_bgf .parseObject ();if _fdg !=nil {return &_fabc ,_fdg ;};_f .Log .Trace ("P\u0061\u0072\u0073\u0065\u0064\u0020o\u0062\u006a\u0065\u0063\u0074\u0020\u002e\u002e\u002e \u0066\u0069\u006ei\u0073h\u0065\u0064\u002e");
}else {if _gbff [0]=='e'{_abbf ,_gbfe :=_bgf .readTextLine ();if _gbfe !=nil {return nil ,_gbfe ;};if len (_abbf )>=6&&_abbf [0:6]=="\u0065\u006e\u0064\u006f\u0062\u006a"{break ;};}else if _gbff [0]=='s'{_gbff ,_ =_bgf ._adcc .Peek (10);if string (_gbff [:6])=="\u0073\u0074\u0072\u0065\u0061\u006d"{_bge :=6;
if len (_gbff )> 6{if _df .IsWhiteSpace (_gbff [_bge ])&&_gbff [_bge ]!='\r'&&_gbff [_bge ]!='\n'{_f .Log .Debug ("\u004e\u006fn\u002d\u0063\u006f\u006e\u0066\u006f\u0072\u006d\u0061\u006e\u0074\u0020\u0046\u0044\u0046\u0020\u006e\u006f\u0074 \u0065\u006e\u0064\u0069\u006e\u0067 \u0073\u0074\u0072\u0065\u0061\u006d\u0020\u006c\u0069\u006e\u0065\u0020\u0070\u0072o\u0070\u0065r\u006c\u0079\u0020\u0077i\u0074\u0068\u0020\u0045\u004fL\u0020\u006d\u0061\u0072\u006b\u0065\u0072");
_bge ++;};if _gbff [_bge ]=='\r'{_bge ++;if _gbff [_bge ]=='\n'{_bge ++;};}else if _gbff [_bge ]=='\n'{_bge ++;};};_bgf ._adcc .Discard (_bge );_fbe ,_cffe :=_fabc .PdfObject .(*_df .PdfObjectDictionary );if !_cffe {return nil ,_b .New ("\u0073\u0074\u0072\u0065\u0061\u006d\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020\u006di\u0073s\u0069\u006e\u0067\u0020\u0064\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079");
};_f .Log .Trace ("\u0053\u0074\u0072\u0065\u0061\u006d\u0020\u0064\u0069c\u0074\u0020\u0025\u0073",_fbe );_fag ,_bfdb :=_fbe .Get ("\u004c\u0065\u006e\u0067\u0074\u0068").(*_df .PdfObjectInteger );if !_bfdb {return nil ,_b .New ("\u0073\u0074re\u0061\u006d\u0020l\u0065\u006e\u0067\u0074h n\u0065ed\u0073\u0020\u0074\u006f\u0020\u0062\u0065 a\u006e\u0020\u0069\u006e\u0074\u0065\u0067e\u0072");
};_abe :=*_fag ;if _abe < 0{return nil ,_b .New ("\u0073\u0074\u0072\u0065\u0061\u006d\u0020\u006e\u0065\u0065\u0064\u0073\u0020\u0074\u006f \u0062e\u0020\u006c\u006f\u006e\u0067\u0065\u0072\u0020\u0074\u0068\u0061\u006e\u0020\u0030");};if int64 (_abe )> _bgf ._fab {_f .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a\u0020\u0053t\u0072\u0065\u0061\u006d\u0020l\u0065\u006e\u0067\u0074\u0068\u0020\u0063\u0061\u006e\u006e\u006f\u0074\u0020\u0062\u0065\u0020\u006c\u0061\u0072\u0067\u0065\u0072\u0020\u0074\u0068\u0061\u006e\u0020\u0066\u0069\u006c\u0065\u0020\u0073\u0069\u007a\u0065");
return nil ,_b .New ("\u0069n\u0076\u0061l\u0069\u0064\u0020\u0073t\u0072\u0065\u0061m\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u002c\u0020la\u0072\u0067\u0065r\u0020\u0074h\u0061\u006e\u0020\u0066\u0069\u006ce\u0020\u0073i\u007a\u0065");};_cgg :=make ([]byte ,_abe );
_ ,_fdg =_bgf .readAtLeast (_cgg ,int (_abe ));if _fdg !=nil {_f .Log .Debug ("E\u0052\u0052\u004f\u0052 s\u0074r\u0065\u0061\u006d\u0020\u0028%\u0064\u0029\u003a\u0020\u0025\u0058",len (_cgg ),_cgg );_f .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_fdg );
return nil ,_fdg ;};_eade :=_df .PdfObjectStream {};_eade .Stream =_cgg ;_eade .PdfObjectDictionary =_fabc .PdfObject .(*_df .PdfObjectDictionary );_eade .ObjectNumber =_fabc .ObjectNumber ;_eade .GenerationNumber =_fabc .GenerationNumber ;_bgf .skipSpaces ();
_bgf ._adcc .Discard (9);_bgf .skipSpaces ();return &_eade ,nil ;};};_fabc .PdfObject ,_fdg =_bgf .parseObject ();return &_fabc ,_fdg ;};};_f .Log .Trace ("\u0052\u0065\u0074\u0075rn\u0069\u006e\u0067\u0020\u0069\u006e\u0064\u0069\u0072\u0065\u0063\u0074\u0021");
return &_fabc ,nil ;};func (_eff *fdfParser )skipComments ()error {if _ ,_dcf :=_eff .skipSpaces ();_dcf !=nil {return _dcf ;};_dfc :=true ;for {_cg ,_afa :=_eff ._adcc .Peek (1);if _afa !=nil {_f .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u0020\u0025\u0073",_afa .Error ());
return _afa ;};if _dfc &&_cg [0]!='%'{return nil ;};_dfc =false ;if (_cg [0]!='\r')&&(_cg [0]!='\n'){_eff ._adcc .ReadByte ();}else {break ;};};return _eff .skipComments ();};var _efd =_g .MustCompile ("\u005e\u005b\u005c\u002b\u002d\u002e\u005d\u002a\u0028\u005b\u0030\u002d9\u002e\u005d\u002b\u0029");
var _gg =_g .MustCompile ("\u0028\u005c\u0064\u002b)\\\u0073\u002b\u0028\u005c\u0064\u002b\u0029\u005c\u0073\u002b\u006f\u0062\u006a");func (_ebb *fdfParser )parseNull ()(_df .PdfObjectNull ,error ){_ ,_afc :=_ebb ._adcc .Discard (4);return _df .PdfObjectNull {},_afc ;
};var _bg =_g .MustCompile ("\u0025F\u0044F\u002d\u0028\u005c\u0064\u0029\u005c\u002e\u0028\u005c\u0064\u0029");func (_gbe *fdfParser )parseNumber ()(_df .PdfObject ,error ){return _df .ParseNumber (_gbe ._adcc )};
// Load loads FDF form data from `r`.
func Load (r _gb .ReadSeeker )(*Data ,error ){_ec ,_ff :=_ede (r );if _ff !=nil {return nil ,_ff ;};_ad ,_ff :=_ec .Root ();if _ff !=nil {return nil ,_ff ;};_ge ,_de :=_df .GetArray (_ad .Get ("\u0046\u0069\u0065\u006c\u0064\u0073"));if !_de {return nil ,_b .New ("\u0066\u0069\u0065\u006c\u0064\u0073\u0020\u006d\u0069s\u0073\u0069\u006e\u0067");
};return &Data {_dc :_ge ,_af :_ad },nil ;};
// FieldDictionaries returns a map of field names to field dictionaries.
func (fdf *Data )FieldDictionaries ()(map[string ]*_df .PdfObjectDictionary ,error ){_ag :=map[string ]*_df .PdfObjectDictionary {};for _dff :=0;_dff < fdf ._dc .Len ();_dff ++{_bf ,_adf :=_df .GetDict (fdf ._dc .Get (_dff ));if _adf {_aa ,_ :=_df .GetString (_bf .Get ("\u0054"));
if _aa !=nil {_ag [_aa .Str ()]=_bf ;};};};return _ag ,nil ;};func _gac (_eea string )(*fdfParser ,error ){_dge :=fdfParser {};_bda :=[]byte (_eea );_cfg :=_ga .NewReader (_bda );_dge ._dce =_cfg ;_dge ._gdee =map[int64 ]_df .PdfObject {};_gabd :=_d .NewReader (_cfg );
_dge ._adcc =_gabd ;_dge ._fab =int64 (len (_eea ));return &_dge ,_dge .parse ();};
// FieldValues implements interface model.FieldValueProvider.
// Returns a map of field names to values (PdfObjects).
func (fdf *Data )FieldValues ()(map[string ]_df .PdfObject ,error ){_cf ,_ac :=fdf .FieldDictionaries ();if _ac !=nil {return nil ,_ac ;};var _be []string ;for _bb :=range _cf {_be =append (_be ,_bb );};_c .Strings (_be );_afbb :=map[string ]_df .PdfObject {};
for _ ,_dae :=range _be {_dd :=_cf [_dae ];_dfd :=_df .TraceToDirectObject (_dd .Get ("\u0056"));_afbb [_dae ]=_dfd ;};return _afbb ,nil ;};func (_cge *fdfParser )parseObject ()(_df .PdfObject ,error ){_f .Log .Trace ("\u0052e\u0061d\u0020\u0064\u0069\u0072\u0065c\u0074\u0020o\u0062\u006a\u0065\u0063\u0074");
_cge .skipSpaces ();for {_ecb ,_ece :=_cge ._adcc .Peek (2);if _ece !=nil {return nil ,_ece ;};_f .Log .Trace ("\u0050e\u0065k\u0020\u0073\u0074\u0072\u0069\u006e\u0067\u003a\u0020\u0025\u0073",string (_ecb ));if _ecb [0]=='/'{_efb ,_ca :=_cge .parseName ();
_f .Log .Trace ("\u002d\u003e\u004ea\u006d\u0065\u003a\u0020\u0027\u0025\u0073\u0027",_efb );return &_efb ,_ca ;}else if _ecb [0]=='('{_f .Log .Trace ("\u002d>\u0053\u0074\u0072\u0069\u006e\u0067!");return _cge .parseString ();}else if _ecb [0]=='['{_f .Log .Trace ("\u002d\u003e\u0041\u0072\u0072\u0061\u0079\u0021");
return _cge .parseArray ();}else if (_ecb [0]=='<')&&(_ecb [1]=='<'){_f .Log .Trace ("\u002d>\u0044\u0069\u0063\u0074\u0021");return _cge .parseDict ();}else if _ecb [0]=='<'{_f .Log .Trace ("\u002d\u003e\u0048\u0065\u0078\u0020\u0073\u0074\u0072\u0069\u006e\u0067\u0021");
return _cge .parseHexString ();}else if _ecb [0]=='%'{_cge .readComment ();_cge .skipSpaces ();}else {_f .Log .Trace ("\u002d\u003eN\u0075\u006d\u0062e\u0072\u0020\u006f\u0072\u0020\u0072\u0065\u0066\u003f");_ecb ,_ =_cge ._adcc .Peek (15);_ggef :=string (_ecb );
_f .Log .Trace ("\u0050\u0065\u0065k\u0020\u0073\u0074\u0072\u003a\u0020\u0025\u0073",_ggef );if (len (_ggef )> 3)&&(_ggef [:4]=="\u006e\u0075\u006c\u006c"){_aad ,_gf :=_cge .parseNull ();return &_aad ,_gf ;}else if (len (_ggef )> 4)&&(_ggef [:5]=="\u0066\u0061\u006cs\u0065"){_dbf ,_bc :=_cge .parseBool ();
return &_dbf ,_bc ;}else if (len (_ggef )> 3)&&(_ggef [:4]=="\u0074\u0072\u0075\u0065"){_cdb ,_cdf :=_cge .parseBool ();return &_cdb ,_cdf ;};_bab :=_ee .FindStringSubmatch (_ggef );if len (_bab )> 1{_ecb ,_ =_cge ._adcc .ReadBytes ('R');_f .Log .Trace ("\u002d\u003e\u0020\u0021\u0052\u0065\u0066\u003a\u0020\u0027\u0025\u0073\u0027",string (_ecb [:]));
_eeb ,_dbd :=_agb (string (_ecb ));return &_eeb ,_dbd ;};_dgd :=_efd .FindStringSubmatch (_ggef );if len (_dgd )> 1{_f .Log .Trace ("\u002d\u003e\u0020\u004e\u0075\u006d\u0062\u0065\u0072\u0021");return _cge .parseNumber ();};_dgd =_gae .FindStringSubmatch (_ggef );
if len (_dgd )> 1{_f .Log .Trace ("\u002d\u003e\u0020\u0045xp\u006f\u006e\u0065\u006e\u0074\u0069\u0061\u006c\u0020\u004e\u0075\u006d\u0062\u0065r\u0021");_f .Log .Trace ("\u0025\u0020\u0073",_dgd );return _cge .parseNumber ();};_f .Log .Debug ("\u0045R\u0052\u004f\u0052\u0020U\u006e\u006b\u006e\u006f\u0077n\u0020(\u0070e\u0065\u006b\u0020\u0022\u0025\u0073\u0022)",_ggef );
return nil ,_b .New ("\u006f\u0062\u006a\u0065\u0063t\u0020\u0070\u0061\u0072\u0073\u0069\u006e\u0067\u0020\u0065\u0072\u0072\u006fr\u0020\u002d\u0020\u0075\u006e\u0065\u0078\u0070\u0065\u0063\u0074\u0065\u0064\u0020\u0070\u0061\u0074\u0074\u0065\u0072\u006e");
};};};func _ede (_acdg _gb .ReadSeeker )(*fdfParser ,error ){_ddc :=&fdfParser {};_ddc ._dce =_acdg ;_ddc ._gdee =map[int64 ]_df .PdfObject {};_cggb ,_bdg ,_cfga :=_ddc .parseFdfVersion ();if _cfga !=nil {_f .Log .Error ("U\u006e\u0061\u0062\u006c\u0065\u0020t\u006f\u0020\u0070\u0061\u0072\u0073\u0065\u0020\u0076e\u0072\u0073\u0069o\u006e:\u0020\u0025\u0076",_cfga );
return nil ,_cfga ;};_ddc ._adc =_cggb ;_ddc ._dda =_bdg ;_cfga =_ddc .parse ();return _ddc ,_cfga ;};func (_efg *fdfParser )parseBool ()(_df .PdfObjectBool ,error ){_abb ,_dcff :=_efg ._adcc .Peek (4);if _dcff !=nil {return _df .PdfObjectBool (false ),_dcff ;
};if (len (_abb )>=4)&&(string (_abb [:4])=="\u0074\u0072\u0075\u0065"){_efg ._adcc .Discard (4);return _df .PdfObjectBool (true ),nil ;};_abb ,_dcff =_efg ._adcc .Peek (5);if _dcff !=nil {return _df .PdfObjectBool (false ),_dcff ;};if (len (_abb )>=5)&&(string (_abb [:5])=="\u0066\u0061\u006cs\u0065"){_efg ._adcc .Discard (5);
return _df .PdfObjectBool (false ),nil ;};return _df .PdfObjectBool (false ),_b .New ("\u0075n\u0065\u0078\u0070\u0065c\u0074\u0065\u0064\u0020\u0062o\u006fl\u0065a\u006e\u0020\u0073\u0074\u0072\u0069\u006eg");};func (_cfd *fdfParser )seekToEOFMarker (_eec int64 )error {_bbe :=int64 (0);
_cb :=int64 (1000);for _bbe < _eec {if _eec <=(_cb +_bbe ){_cb =_eec -_bbe ;};_ ,_eggb :=_cfd ._dce .Seek (-_bbe -_cb ,_gb .SeekEnd );if _eggb !=nil {return _eggb ;};_fbgf :=make ([]byte ,_cb );_cfd ._dce .Read (_fbgf );_f .Log .Trace ("\u004c\u006f\u006f\u006bi\u006e\u0067\u0020\u0066\u006f\u0072\u0020\u0045\u004f\u0046 \u006da\u0072\u006b\u0065\u0072\u003a\u0020\u0022%\u0073\u0022",string (_fbgf ));
_def :=_cd .FindAllStringIndex (string (_fbgf ),-1);if _def !=nil {_dcec :=_def [len (_def )-1];_f .Log .Trace ("\u0049\u006e\u0064\u003a\u0020\u0025\u0020\u0064",_def );_cfd ._dce .Seek (-_bbe -_cb +int64 (_dcec [0]),_gb .SeekEnd );return nil ;};_f .Log .Debug ("\u0057\u0061\u0072\u006e\u0069\u006eg\u003a\u0020\u0045\u004f\u0046\u0020\u006d\u0061\u0072\u006b\u0065\u0072\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075n\u0064\u0021\u0020\u002d\u0020\u0063\u006f\u006e\u0074\u0069\u006e\u0075\u0065\u0020s\u0065e\u006b\u0069\u006e\u0067");
_bbe +=_cb ;};_f .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u003a\u0020\u0045\u004f\u0046\u0020\u006d\u0061\u0072\u006be\u0072 \u0077\u0061\u0073\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u002e");return _b .New ("\u0045\u004f\u0046\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064");
};
// LoadFromPath loads FDF form data from file path `fdfPath`.
func LoadFromPath (fdfPath string )(*Data ,error ){_da ,_gd :=_aba .Open (fdfPath );if _gd !=nil {return nil ,_gd ;};defer _da .Close ();return Load (_da );};
// Root returns the Root of the FDF document.
func (_gfb *fdfParser )Root ()(*_df .PdfObjectDictionary ,error ){if _gfb ._bec !=nil {if _fba ,_facd :=_gfb .trace (_gfb ._bec .Get ("\u0052\u006f\u006f\u0074")).(*_df .PdfObjectDictionary );_facd {if _fefd ,_ege :=_gfb .trace (_fba .Get ("\u0046\u0044\u0046")).(*_df .PdfObjectDictionary );
_ege {return _fefd ,nil ;};};};var _cgga []int64 ;for _ebbf :=range _gfb ._gdee {_cgga =append (_cgga ,_ebbf );};_c .Slice (_cgga ,func (_ceb ,_ade int )bool {return _cgga [_ceb ]< _cgga [_ade ]});for _ ,_egdb :=range _cgga {_ebe :=_gfb ._gdee [_egdb ];
if _acg ,_cfc :=_gfb .trace (_ebe ).(*_df .PdfObjectDictionary );_cfc {if _aee ,_eggd :=_gfb .trace (_acg .Get ("\u0046\u0044\u0046")).(*_df .PdfObjectDictionary );_eggd {return _aee ,nil ;};};};return nil ,_b .New ("\u0046\u0044\u0046\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064");
};type fdfParser struct{_adc int ;_dda int ;_gdee map[int64 ]_df .PdfObject ;_dce _gb .ReadSeeker ;_adcc *_d .Reader ;_fab int64 ;_bec *_df .PdfObjectDictionary ;};func (_fac *fdfParser )readTextLine ()(string ,error ){var _cff _ga .Buffer ;for {_dcfa ,_egdg :=_fac ._adcc .Peek (1);
if _egdg !=nil {_f .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u0020\u0025\u0073",_egdg .Error ());return _cff .String (),_egdg ;};if (_dcfa [0]!='\r')&&(_dcfa [0]!='\n'){_fce ,_ :=_fac ._adcc .ReadByte ();_cff .WriteByte (_fce );}else {break ;};};return _cff .String (),nil ;
};func (_fc *fdfParser )readComment ()(string ,error ){var _fb _ga .Buffer ;_ ,_bfd :=_fc .skipSpaces ();if _bfd !=nil {return _fb .String (),_bfd ;};_ce :=true ;for {_abg ,_fcf :=_fc ._adcc .Peek (1);if _fcf !=nil {_f .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u0020\u0025\u0073",_fcf .Error ());
return _fb .String (),_fcf ;};if _ce &&_abg [0]!='%'{return _fb .String (),_b .New ("c\u006f\u006d\u006d\u0065\u006e\u0074 \u0073\u0068\u006f\u0075\u006c\u0064\u0020\u0073\u0074a\u0072\u0074\u0020w\u0069t\u0068\u0020\u0025");};_ce =false ;if (_abg [0]!='\r')&&(_abg [0]!='\n'){_ed ,_ :=_fc ._adcc .ReadByte ();
_fb .WriteByte (_ed );}else {break ;};};return _fb .String (),nil ;};func (_ddg *fdfParser )parseName ()(_df .PdfObjectName ,error ){var _gaeb _ga .Buffer ;_bfe :=false ;for {_efe ,_cea :=_ddg ._adcc .Peek (1);if _cea ==_gb .EOF {break ;};if _cea !=nil {return _df .PdfObjectName (_gaeb .String ()),_cea ;
};if !_bfe {if _efe [0]=='/'{_bfe =true ;_ddg ._adcc .ReadByte ();}else if _efe [0]=='%'{_ddg .readComment ();_ddg .skipSpaces ();}else {_f .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u0020N\u0061\u006d\u0065\u0020\u0073\u0074\u0061\u0072\u0074\u0069\u006e\u0067\u0020w\u0069\u0074\u0068\u0020\u0025\u0073\u0020(\u0025\u0020\u0078\u0029",_efe ,_efe );
return _df .PdfObjectName (_gaeb .String ()),_eg .Errorf ("\u0069n\u0076a\u006c\u0069\u0064\u0020\u006ea\u006d\u0065:\u0020\u0028\u0025\u0063\u0029",_efe [0]);};}else {if _df .IsWhiteSpace (_efe [0]){break ;}else if (_efe [0]=='/')||(_efe [0]=='[')||(_efe [0]=='(')||(_efe [0]==']')||(_efe [0]=='<')||(_efe [0]=='>'){break ;
}else if _efe [0]=='#'{_dgb ,_feg :=_ddg ._adcc .Peek (3);if _feg !=nil {return _df .PdfObjectName (_gaeb .String ()),_feg ;};_ddg ._adcc .Discard (3);_ddd ,_feg :=_ab .DecodeString (string (_dgb [1:3]));if _feg !=nil {return _df .PdfObjectName (_gaeb .String ()),_feg ;
};_gaeb .Write (_ddd );}else {_eaa ,_ :=_ddg ._adcc .ReadByte ();_gaeb .WriteByte (_eaa );};};};return _df .PdfObjectName (_gaeb .String ()),nil ;};func (_adg *fdfParser )seekFdfVersionTopDown ()(int ,int ,error ){_adg ._dce .Seek (0,_gb .SeekStart );_adg ._adcc =_d .NewReader (_adg ._dce );
_fabf :=20;_aed :=make ([]byte ,_fabf );for {_eef ,_efde :=_adg ._adcc .ReadByte ();if _efde !=nil {if _efde ==_gb .EOF {break ;}else {return 0,0,_efde ;};};if _df .IsDecimalDigit (_eef )&&_aed [_fabf -1]=='.'&&_df .IsDecimalDigit (_aed [_fabf -2])&&_aed [_fabf -3]=='-'&&_aed [_fabf -4]=='F'&&_aed [_fabf -5]=='D'&&_aed [_fabf -6]=='P'{_fbc :=int (_aed [_fabf -2]-'0');
_cbe :=int (_eef -'0');return _fbc ,_cbe ,nil ;};_aed =append (_aed [1:_fabf ],_eef );};return 0,0,_b .New ("\u0076\u0065\u0072\u0073\u0069\u006f\u006e\u0020\u006e\u006f\u0074\u0020f\u006f\u0075\u006e\u0064");};func (_abdc *fdfParser )parseFdfVersion ()(int ,int ,error ){_abdc ._dce .Seek (0,_gb .SeekStart );
_gabb :=20;_abcg :=make ([]byte ,_gabb );_abdc ._dce .Read (_abcg );_egg :=_bg .FindStringSubmatch (string (_abcg ));if len (_egg )< 3{_cdbe ,_dca ,_cfb :=_abdc .seekFdfVersionTopDown ();if _cfb !=nil {_f .Log .Debug ("F\u0061\u0069\u006c\u0065\u0064\u0020\u0072\u0065\u0063\u006f\u0076\u0065\u0072\u0079\u0020\u002d\u0020\u0075n\u0061\u0062\u006c\u0065\u0020\u0074\u006f\u0020\u0066\u0069nd\u0020\u0076\u0065r\u0073i\u006f\u006e");
return 0,0,_cfb ;};return _cdbe ,_dca ,nil ;};_acf ,_gbd :=_a .Atoi (_egg [1]);if _gbd !=nil {return 0,0,_gbd ;};_acd ,_gbd :=_a .Atoi (_egg [2]);if _gbd !=nil {return 0,0,_gbd ;};_f .Log .Debug ("\u0046\u0064\u0066\u0020\u0076\u0065\u0072\u0073\u0069\u006f\u006e\u0020%\u0064\u002e\u0025\u0064",_acf ,_acd );
return _acf ,_acd ,nil ;};func (_bgb *fdfParser )parseDict ()(*_df .PdfObjectDictionary ,error ){_f .Log .Trace ("\u0052\u0065\u0061\u0064\u0069\u006e\u0067\u0020\u0046\u0044\u0046\u0020D\u0069\u0063\u0074\u0021");_abc :=_df .MakeDict ();_gbg ,_ :=_bgb ._adcc .ReadByte ();
if _gbg !='<'{return nil ,_b .New ("\u0069\u006e\u0076a\u006c\u0069\u0064\u0020\u0064\u0069\u0063\u0074");};_gbg ,_ =_bgb ._adcc .ReadByte ();if _gbg !='<'{return nil ,_b .New ("\u0069\u006e\u0076a\u006c\u0069\u0064\u0020\u0064\u0069\u0063\u0074");};for {_bgb .skipSpaces ();
_bgb .skipComments ();_gdg ,_baa :=_bgb ._adcc .Peek (2);if _baa !=nil {return nil ,_baa ;};_f .Log .Trace ("D\u0069c\u0074\u0020\u0070\u0065\u0065\u006b\u003a\u0020%\u0073\u0020\u0028\u0025 x\u0029\u0021",string (_gdg ),string (_gdg ));if (_gdg [0]=='>')&&(_gdg [1]=='>'){_f .Log .Trace ("\u0045\u004f\u0046\u0020\u0064\u0069\u0063\u0074\u0069o\u006e\u0061\u0072\u0079");
_bgb ._adcc .ReadByte ();_bgb ._adcc .ReadByte ();break ;};_f .Log .Trace ("\u0050a\u0072s\u0065\u0020\u0074\u0068\u0065\u0020\u006e\u0061\u006d\u0065\u0021");_gbcc ,_baa :=_bgb .parseName ();_f .Log .Trace ("\u004be\u0079\u003a\u0020\u0025\u0073",_gbcc );
if _baa !=nil {_f .Log .Debug ("E\u0052\u0052\u004f\u0052\u0020\u0052e\u0074\u0075\u0072\u006e\u0069\u006e\u0067\u0020\u006ea\u006d\u0065\u0020e\u0072r\u0020\u0025\u0073",_baa );return nil ,_baa ;};if len (_gbcc )> 4&&_gbcc [len (_gbcc )-4:]=="\u006e\u0075\u006c\u006c"{_gcc :=_gbcc [0:len (_gbcc )-4];
_f .Log .Debug ("\u0054\u0061\u006b\u0069n\u0067\u0020\u0063\u0061\u0072\u0065\u0020\u006f\u0066\u0020n\u0075l\u006c\u0020\u0062\u0075\u0067\u0020\u0028%\u0073\u0029",_gbcc );_f .Log .Debug ("\u004e\u0065\u0077\u0020ke\u0079\u0020\u0022\u0025\u0073\u0022\u0020\u003d\u0020\u006e\u0075\u006c\u006c",_gcc );
_bgb .skipSpaces ();_gga ,_ :=_bgb ._adcc .Peek (1);if _gga [0]=='/'{_abc .Set (_gcc ,_df .MakeNull ());continue ;};};_bgb .skipSpaces ();_afd ,_baa :=_bgb .parseObject ();if _baa !=nil {return nil ,_baa ;};_abc .Set (_gbcc ,_afd );_f .Log .Trace ("\u0064\u0069\u0063\u0074\u005b\u0025\u0073\u005d\u0020\u003d\u0020\u0025\u0073",_gbcc ,_afd .String ());
};_f .Log .Trace ("\u0072\u0065\u0074\u0075rn\u0069\u006e\u0067\u0020\u0046\u0044\u0046\u0020\u0044\u0069\u0063\u0074\u0021");return _abc ,nil ;};func (_bfaa *fdfParser )parseString ()(*_df .PdfObjectString ,error ){_bfaa ._adcc .ReadByte ();var _abd _ga .Buffer ;
_cc :=1;for {_gbf ,_bef :=_bfaa ._adcc .Peek (1);if _bef !=nil {return _df .MakeString (_abd .String ()),_bef ;};if _gbf [0]=='\\'{_bfaa ._adcc .ReadByte ();_bgg ,_fca :=_bfaa ._adcc .ReadByte ();if _fca !=nil {return _df .MakeString (_abd .String ()),_fca ;
};if _df .IsOctalDigit (_bgg ){_ebf ,_aca :=_bfaa ._adcc .Peek (2);if _aca !=nil {return _df .MakeString (_abd .String ()),_aca ;};var _fg []byte ;_fg =append (_fg ,_bgg );for _ ,_gec :=range _ebf {if _df .IsOctalDigit (_gec ){_fg =append (_fg ,_gec );
}else {break ;};};_bfaa ._adcc .Discard (len (_fg )-1);_f .Log .Trace ("\u004e\u0075\u006d\u0065ri\u0063\u0020\u0073\u0074\u0072\u0069\u006e\u0067\u0020\u0022\u0025\u0073\u0022",_fg );_fgc ,_aca :=_a .ParseUint (string (_fg ),8,32);if _aca !=nil {return _df .MakeString (_abd .String ()),_aca ;
};_abd .WriteByte (byte (_fgc ));continue ;};switch _bgg {case 'n':_abd .WriteRune ('\n');case 'r':_abd .WriteRune ('\r');case 't':_abd .WriteRune ('\t');case 'b':_abd .WriteRune ('\b');case 'f':_abd .WriteRune ('\f');case '(':_abd .WriteRune ('(');case ')':_abd .WriteRune (')');
case '\\':_abd .WriteRune ('\\');};continue ;}else if _gbf [0]=='('{_cc ++;}else if _gbf [0]==')'{_cc --;if _cc ==0{_bfaa ._adcc .ReadByte ();break ;};};_gcg ,_ :=_bfaa ._adcc .ReadByte ();_abd .WriteByte (_gcg );};return _df .MakeString (_abd .String ()),nil ;
};func (_ba *fdfParser )getFileOffset ()int64 {_fa ,_ :=_ba ._dce .Seek (0,_gb .SeekCurrent );_fa -=int64 (_ba ._adcc .Buffered ());return _fa ;};func (_gc *fdfParser )setFileOffset (_dg int64 ){_gc ._dce .Seek (_dg ,_gb .SeekStart );_gc ._adcc =_d .NewReader (_gc ._dce );
};func (_bgba *fdfParser )parse ()error {_bgba ._dce .Seek (0,_gb .SeekStart );_bgba ._adcc =_d .NewReader (_bgba ._dce );for {_bgba .skipComments ();_cgd ,_fga :=_bgba ._adcc .Peek (20);if _fga !=nil {_f .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0046\u0061\u0069\u006c\u0020\u0074\u006f\u0020r\u0065a\u0064\u0020\u0069\u006e\u0064\u0069\u0072\u0065\u0063\u0074\u0020\u006f\u0062\u006a");
return _fga ;};if _ef .HasPrefix (string (_cgd ),"\u0074r\u0061\u0069\u006c\u0065\u0072"){_bgba ._adcc .Discard (7);_bgba .skipSpaces ();_bgba .skipComments ();_gcd ,_ :=_bgba .parseDict ();_bgba ._bec =_gcd ;break ;};_ggag :=_gg .FindStringSubmatchIndex (string (_cgd ));
if len (_ggag )< 6{_f .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020U\u006e\u0061\u0062l\u0065\u0020\u0074\u006f \u0066\u0069\u006e\u0064\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020\u0073\u0069\u0067\u006e\u0061\u0074\u0075\u0072\u0065\u0020\u0028\u0025\u0073\u0029",string (_cgd ));
return _b .New ("\u0075\u006e\u0061b\u006c\u0065\u0020\u0074\u006f\u0020\u0064\u0065\u0074\u0065\u0063\u0074\u0020\u0069\u006e\u0064\u0069\u0072\u0065\u0063\u0074\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020s\u0069\u0067\u006e\u0061\u0074\u0075\u0072\u0065");
};_ceg ,_fga :=_bgba .parseIndirectObject ();if _fga !=nil {return _fga ;};switch _ebbg :=_ceg .(type ){case *_df .PdfIndirectObject :_bgba ._gdee [_ebbg .ObjectNumber ]=_ebbg ;case *_df .PdfObjectStream :_bgba ._gdee [_ebbg .ObjectNumber ]=_ebbg ;default:return _b .New ("\u0074\u0079\u0070\u0065\u0020\u0065\u0072\u0072\u006f\u0072");
};};return nil ;};func (_faa *fdfParser )parseArray ()(*_df .PdfObjectArray ,error ){_bfc :=_df .MakeArray ();_faa ._adcc .ReadByte ();for {_faa .skipSpaces ();_egc ,_bd :=_faa ._adcc .Peek (1);if _bd !=nil {return _bfc ,_bd ;};if _egc [0]==']'{_faa ._adcc .ReadByte ();
break ;};_bad ,_bd :=_faa .parseObject ();if _bd !=nil {return _bfc ,_bd ;};_bfc .Append (_bad );};return _bfc ,nil ;};func (_ebg *fdfParser )parseHexString ()(*_df .PdfObjectString ,error ){_ebg ._adcc .ReadByte ();var _bbbg _ga .Buffer ;for {_fgf ,_bae :=_ebg ._adcc .Peek (1);
if _bae !=nil {return _df .MakeHexString (""),_bae ;};if _fgf [0]=='>'{_ebg ._adcc .ReadByte ();break ;};_effg ,_ :=_ebg ._adcc .ReadByte ();if !_df .IsWhiteSpace (_effg ){_bbbg .WriteByte (_effg );};};if _bbbg .Len ()%2==1{_bbbg .WriteRune ('0');};_fbg ,_ggb :=_ab .DecodeString (_bbbg .String ());
if _ggb !=nil {_f .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u0020\u0050\u0061\u0072\u0073\u0069\u006e\u0067\u0020\u0068\u0065\u0078\u0020\u0073\u0074r\u0069\u006e\u0067\u003a\u0020\u0027\u0025\u0073\u0027 \u002d\u0020\u0072\u0065\u0074\u0075\u0072\u006e\u0069\u006e\u0067\u0020\u0061n\u0020\u0065\u006d\u0070\u0074\u0079 \u0073\u0074\u0072i\u006e\u0067",_bbbg .String ());
return _df .MakeHexString (""),nil ;};return _df .MakeHexString (string (_fbg )),nil ;};func _agb (_bbc string )(_df .PdfObjectReference ,error ){_feb :=_df .PdfObjectReference {};_gge :=_ee .FindStringSubmatch (_bbc );if len (_gge )< 3{_f .Log .Debug ("\u0045\u0072\u0072or\u0020\u0070\u0061\u0072\u0073\u0069\u006e\u0067\u0020\u0072\u0065\u0066\u0065\u0072\u0065\u006e\u0063\u0065");
return _feb ,_b .New ("\u0075n\u0061\u0062\u006c\u0065 \u0074\u006f\u0020\u0070\u0061r\u0073e\u0020r\u0065\u0066\u0065\u0072\u0065\u006e\u0063e");};_fgb ,_ead :=_a .Atoi (_gge [1]);if _ead !=nil {_f .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u0020\u0070a\u0072\u0073\u0069n\u0067\u0020\u006fb\u006a\u0065c\u0074\u0020\u006e\u0075\u006d\u0062e\u0072 '\u0025\u0073\u0027\u0020\u002d\u0020\u0055\u0073\u0069\u006e\u0067\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020\u006e\u0075\u006d\u0020\u003d\u0020\u0030",_gge [1]);
return _feb ,nil ;};_feb .ObjectNumber =int64 (_fgb );_fcc ,_ead :=_a .Atoi (_gge [2]);if _ead !=nil {_f .Log .Debug ("\u0045\u0072r\u006f\u0072\u0020\u0070\u0061r\u0073\u0069\u006e\u0067\u0020g\u0065\u006e\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u0020\u006e\u0075\u006d\u0062\u0065\u0072\u0020\u0027\u0025\u0073\u0027\u0020\u002d\u0020\u0055\u0073\u0069\u006e\u0067\u0020\u0067\u0065\u006e\u0020\u003d\u0020\u0030",_gge [2]);
return _feb ,nil ;};_feb .GenerationNumber =int64 (_fcc );return _feb ,nil ;};func (_fbb *fdfParser )trace (_edd _df .PdfObject )_df .PdfObject {switch _bgc :=_edd .(type ){case *_df .PdfObjectReference :_abec ,_febg :=_fbb ._gdee [_bgc .ObjectNumber ].(*_df .PdfIndirectObject );
if _febg {return _abec .PdfObject ;};_f .Log .Debug ("\u0054\u0079\u0070\u0065\u0020\u0065\u0072\u0072\u006f\u0072");return nil ;case *_df .PdfIndirectObject :return _bgc .PdfObject ;};return _edd ;};var _gae =_g .MustCompile ("\u005e\u005b\u005c+-\u002e\u005d\u002a\u0028\u005b\u0030\u002d\u0039\u002e]\u002b)\u0065[\u005c+\u002d\u002e\u005d\u002a\u0028\u005b\u0030\u002d\u0039\u002e\u005d\u002b\u0029");
var _ee =_g .MustCompile ("^\u005c\u0073\u002a\u0028\\d\u002b)\u005c\u0073\u002b\u0028\u005cd\u002b\u0029\u005c\u0073\u002b\u0052");func (_ea *fdfParser )readAtLeast (_ega []byte ,_dcd int )(int ,error ){_gab :=_dcd ;_dec :=0;_bbf :=0;for _gab > 0{_db ,_egd :=_ea ._adcc .Read (_ega [_dec :]);
if _egd !=nil {_f .Log .Debug ("\u0045\u0052\u0052O\u0052\u0020\u0046\u0061i\u006c\u0065\u0064\u0020\u0072\u0065\u0061d\u0069\u006e\u0067\u0020\u0028\u0025\u0064\u003b\u0025\u0064\u0029\u0020\u0025\u0073",_db ,_bbf ,_egd .Error ());return _dec ,_b .New ("\u0066\u0061\u0069\u006c\u0065\u0064\u0020\u0072\u0065a\u0064\u0069\u006e\u0067");
};_bbf ++;_dec +=_db ;_gab -=_db ;};return _dec ,nil ;};func (_bba *fdfParser )skipSpaces ()(int ,error ){_aae :=0;for {_bbaf ,_fe :=_bba ._adcc .ReadByte ();if _fe !=nil {return 0,_fe ;};if _df .IsWhiteSpace (_bbaf ){_aae ++;}else {_bba ._adcc .UnreadByte ();
break ;};};return _aae ,nil ;};
// Data represents forms data format (FDF) file data.
type Data struct{_af *_df .PdfObjectDictionary ;_dc *_df .PdfObjectArray ;};var _cd =_g .MustCompile ("\u0025\u0025\u0045O\u0046");