mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-02 22:17:06 +08:00
32 lines
30 KiB
Go
32 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 (_dd "bufio";_ca "bytes";_d "encoding/hex";_a "errors";_cc "fmt";_dg "github.com/unidoc/unipdf/v3/common";_e "github.com/unidoc/unipdf/v3/core";_ff "io";_de "os";_c "regexp";_b "sort";_af "strconv";_ac "strings";);func (_agg *fdfParser )parseDict ()(*_e .PdfObjectDictionary ,error ){_dg .Log .Trace ("\u0052\u0065\u0061\u0064\u0069\u006e\u0067\u0020\u0046\u0044\u0046\u0020D\u0069\u0063\u0074\u0021");_efbg :=_e .MakeDict ();_aab ,_ :=_agg ._be .ReadByte ();if _aab !='<'{return nil ,_a .New ("\u0069\u006e\u0076a\u006c\u0069\u0064\u0020\u0064\u0069\u0063\u0074");};_aab ,_ =_agg ._be .ReadByte ();if _aab !='<'{return nil ,_a .New ("\u0069\u006e\u0076a\u006c\u0069\u0064\u0020\u0064\u0069\u0063\u0074");};for {_agg .skipSpaces ();_agg .skipComments ();_bdg ,_cba :=_agg ._be .Peek (2);if _cba !=nil {return nil ,_cba ;};_dg .Log .Trace ("D\u0069c\u0074\u0020\u0070\u0065\u0065\u006b\u003a\u0020%\u0073\u0020\u0028\u0025 x\u0029\u0021",string (_bdg ),string (_bdg ));if (_bdg [0]=='>')&&(_bdg [1]=='>'){_dg .Log .Trace ("\u0045\u004f\u0046\u0020\u0064\u0069\u0063\u0074\u0069o\u006e\u0061\u0072\u0079");_agg ._be .ReadByte ();_agg ._be .ReadByte ();break ;};_dg .Log .Trace ("\u0050a\u0072s\u0065\u0020\u0074\u0068\u0065\u0020\u006e\u0061\u006d\u0065\u0021");_afd ,_cba :=_agg .parseName ();_dg .Log .Trace ("\u004be\u0079\u003a\u0020\u0025\u0073",_afd );if _cba !=nil {_dg .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",_cba );return nil ,_cba ;};if len (_afd )> 4&&_afd [len (_afd )-4:]=="\u006e\u0075\u006c\u006c"{_dce :=_afd [0:len (_afd )-4];_dg .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",_afd );_dg .Log .Debug ("\u004e\u0065\u0077\u0020ke\u0079\u0020\u0022\u0025\u0073\u0022\u0020\u003d\u0020\u006e\u0075\u006c\u006c",_dce );_agg .skipSpaces ();_feac ,_ :=_agg ._be .Peek (1);if _feac [0]=='/'{_efbg .Set (_dce ,_e .MakeNull ());continue ;};};_agg .skipSpaces ();_edb ,_cba :=_agg .parseObject ();if _cba !=nil {return nil ,_cba ;};_efbg .Set (_afd ,_edb );_dg .Log .Trace ("\u0064\u0069\u0063\u0074\u005b\u0025\u0073\u005d\u0020\u003d\u0020\u0025\u0073",_afd ,_edb .String ());};_dg .Log .Trace ("\u0072\u0065\u0074\u0075rn\u0069\u006e\u0067\u0020\u0046\u0044\u0046\u0020\u0044\u0069\u0063\u0074\u0021");return _efbg ,nil ;};
|
|
|
|
// FieldDictionaries returns a map of field names to field dictionaries.
|
|
func (fdf *Data )FieldDictionaries ()(map[string ]*_e .PdfObjectDictionary ,error ){_cf :=map[string ]*_e .PdfObjectDictionary {};for _bf :=0;_bf < fdf ._aa .Len ();_bf ++{_ga ,_dgd :=_e .GetDict (fdf ._aa .Get (_bf ));if _dgd {_gc ,_ :=_e .GetString (_ga .Get ("\u0054"));if _gc !=nil {_cf [_gc .Str ()]=_ga ;};};};return _cf ,nil ;};func (_acec *fdfParser )seekToEOFMarker (_aac int64 )error {_cgg :=int64 (0);_bfc :=int64 (1000);for _cgg < _aac {if _aac <=(_bfc +_cgg ){_bfc =_aac -_cgg ;};_ ,_bgd :=_acec ._ec .Seek (-_cgg -_bfc ,_ff .SeekEnd );if _bgd !=nil {return _bgd ;};_dgc :=make ([]byte ,_bfc );_acec ._ec .Read (_dgc );_dg .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 (_dgc ));_afbg :=_ccc .FindAllStringIndex (string (_dgc ),-1);if _afbg !=nil {_age :=_afbg [len (_afbg )-1];_dg .Log .Trace ("\u0049\u006e\u0064\u003a\u0020\u0025\u0020\u0064",_afbg );_acec ._ec .Seek (-_cgg -_bfc +int64 (_age [0]),_ff .SeekEnd );return nil ;};_dg .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");_cgg +=_bfc ;};_dg .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 _a .New ("\u0045\u004f\u0046\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064");};
|
|
|
|
// Root returns the Root of the FDF document.
|
|
func (_baa *fdfParser )Root ()(*_e .PdfObjectDictionary ,error ){if _baa ._adc !=nil {if _dbab ,_fae :=_baa .trace (_baa ._adc .Get ("\u0052\u006f\u006f\u0074")).(*_e .PdfObjectDictionary );_fae {if _bde ,_bbbf :=_baa .trace (_dbab .Get ("\u0046\u0044\u0046")).(*_e .PdfObjectDictionary );_bbbf {return _bde ,nil ;};};};var _ecc []int64 ;for _fgd :=range _baa ._dba {_ecc =append (_ecc ,_fgd );};_b .Slice (_ecc ,func (_egd ,_cfcc int )bool {return _ecc [_egd ]< _ecc [_cfcc ]});for _ ,_dbb :=range _ecc {_ccb :=_baa ._dba [_dbb ];if _ccbc ,_bga :=_baa .trace (_ccb ).(*_e .PdfObjectDictionary );_bga {if _cdac ,_accf :=_baa .trace (_ccbc .Get ("\u0046\u0044\u0046")).(*_e .PdfObjectDictionary );_accf {return _cdac ,nil ;};};};return nil ,_a .New ("\u0046\u0044\u0046\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064");};func (_efg *fdfParser )getFileOffset ()int64 {_gcfc ,_ :=_efg ._ec .Seek (0,_ff .SeekCurrent );_gcfc -=int64 (_efg ._be .Buffered ());return _gcfc ;};func (_cde *fdfParser )parseArray ()(*_e .PdfObjectArray ,error ){_cbe :=_e .MakeArray ();_cde ._be .ReadByte ();for {_cde .skipSpaces ();_bff ,_aae :=_cde ._be .Peek (1);if _aae !=nil {return _cbe ,_aae ;};if _bff [0]==']'{_cde ._be .ReadByte ();break ;};_cff ,_aae :=_cde .parseObject ();if _aae !=nil {return _cbe ,_aae ;};_cbe .Append (_cff );};return _cbe ,nil ;};func (_bdgb *fdfParser )seekFdfVersionTopDown ()(int ,int ,error ){_bdgb ._ec .Seek (0,_ff .SeekStart );_bdgb ._be =_dd .NewReader (_bdgb ._ec );_fcag :=20;_bega :=make ([]byte ,_fcag );for {_bfg ,_dcbc :=_bdgb ._be .ReadByte ();if _dcbc !=nil {if _dcbc ==_ff .EOF {break ;}else {return 0,0,_dcbc ;};};if _e .IsDecimalDigit (_bfg )&&_bega [_fcag -1]=='.'&&_e .IsDecimalDigit (_bega [_fcag -2])&&_bega [_fcag -3]=='-'&&_bega [_fcag -4]=='F'&&_bega [_fcag -5]=='D'&&_bega [_fcag -6]=='P'{_cdd :=int (_bega [_fcag -2]-'0');_ceba :=int (_bfg -'0');return _cdd ,_ceba ,nil ;};_bega =append (_bega [1:_fcag ],_bfg );};return 0,0,_a .New ("\u0076\u0065\u0072\u0073\u0069\u006f\u006e\u0020\u006e\u006f\u0074\u0020f\u006f\u0075\u006e\u0064");};
|
|
|
|
// Data represents forms data format (FDF) file data.
|
|
type Data struct{_fe *_e .PdfObjectDictionary ;_aa *_e .PdfObjectArray ;};var _bdd =_c .MustCompile ("\u0025F\u0044F\u002d\u0028\u005c\u0064\u0029\u005c\u002e\u0028\u005c\u0064\u0029");var _ccec =_c .MustCompile ("^\u005c\u0073\u002a\u0028\\d\u002b)\u005c\u0073\u002b\u0028\u005cd\u002b\u0029\u005c\u0073\u002b\u0052");var _ccc =_c .MustCompile ("\u0025\u0025\u0045O\u0046");func (_cd *fdfParser )skipComments ()error {if _ ,_fa :=_cd .skipSpaces ();_fa !=nil {return _fa ;};_ge :=true ;for {_agb ,_da :=_cd ._be .Peek (1);if _da !=nil {_dg .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u0020\u0025\u0073",_da .Error ());return _da ;};if _ge &&_agb [0]!='%'{return nil ;};_ge =false ;if (_agb [0]!='\r')&&(_agb [0]!='\n'){_cd ._be .ReadByte ();}else {break ;};};return _cd .skipComments ();};func (_ded *fdfParser )parseHexString ()(*_e .PdfObjectString ,error ){_ded ._be .ReadByte ();var _febe _ca .Buffer ;for {_cag ,_eb :=_ded ._be .Peek (1);if _eb !=nil {return _e .MakeHexString (""),_eb ;};if _cag [0]=='>'{_ded ._be .ReadByte ();break ;};_afbd ,_ :=_ded ._be .ReadByte ();if !_e .IsWhiteSpace (_afbd ){_febe .WriteByte (_afbd );};};if _febe .Len ()%2==1{_febe .WriteRune ('0');};_bcf ,_bddb :=_d .DecodeString (_febe .String ());if _bddb !=nil {_dg .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",_febe .String ());return _e .MakeHexString (""),nil ;};return _e .MakeHexString (string (_bcf )),nil ;};func (_ef *fdfParser )readAtLeast (_fca []byte ,_gcf int )(int ,error ){_adb :=_gcf ;_bb :=0;_gg :=0;for _adb > 0{_cbd ,_caf :=_ef ._be .Read (_fca [_bb :]);if _caf !=nil {_dg .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",_cbd ,_gg ,_caf .Error ());return _bb ,_a .New ("\u0066\u0061\u0069\u006c\u0065\u0064\u0020\u0072\u0065a\u0064\u0069\u006e\u0067");};_gg ++;_bb +=_cbd ;_adb -=_cbd ;};return _bb ,nil ;};func _fbgg (_dcb string )(*fdfParser ,error ){_faa :=fdfParser {};_eeaf :=[]byte (_dcb );_gcdb :=_ca .NewReader (_eeaf );_faa ._ec =_gcdb ;_faa ._dba =map[int64 ]_e .PdfObject {};_cbeg :=_dd .NewReader (_gcdb );_faa ._be =_cbeg ;_faa ._ceg =int64 (len (_dcb ));return &_faa ,_faa .parse ();};var _bcb =_c .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 _fg =_c .MustCompile ("\u0028\u005c\u0064\u002b)\\\u0073\u002b\u0028\u005c\u0064\u002b\u0029\u005c\u0073\u002b\u006f\u0062\u006a");func (_gb *fdfParser )parseBool ()(_e .PdfObjectBool ,error ){_gdf ,_gdc :=_gb ._be .Peek (4);if _gdc !=nil {return _e .PdfObjectBool (false ),_gdc ;};if (len (_gdf )>=4)&&(string (_gdf [:4])=="\u0074\u0072\u0075\u0065"){_gb ._be .Discard (4);return _e .PdfObjectBool (true ),nil ;};_gdf ,_gdc =_gb ._be .Peek (5);if _gdc !=nil {return _e .PdfObjectBool (false ),_gdc ;};if (len (_gdf )>=5)&&(string (_gdf [:5])=="\u0066\u0061\u006cs\u0065"){_gb ._be .Discard (5);return _e .PdfObjectBool (false ),nil ;};return _e .PdfObjectBool (false ),_a .New ("\u0075n\u0065\u0078\u0070\u0065c\u0074\u0065\u0064\u0020\u0062o\u006fl\u0065a\u006e\u0020\u0073\u0074\u0072\u0069\u006eg");};func (_cef *fdfParser )parseObject ()(_e .PdfObject ,error ){_dg .Log .Trace ("\u0052e\u0061d\u0020\u0064\u0069\u0072\u0065c\u0074\u0020o\u0062\u006a\u0065\u0063\u0074");_cef .skipSpaces ();for {_fade ,_fbae :=_cef ._be .Peek (2);if _fbae !=nil {return nil ,_fbae ;};_dg .Log .Trace ("\u0050e\u0065k\u0020\u0073\u0074\u0072\u0069\u006e\u0067\u003a\u0020\u0025\u0073",string (_fade ));if _fade [0]=='/'{_gge ,_fdf :=_cef .parseName ();_dg .Log .Trace ("\u002d\u003e\u004ea\u006d\u0065\u003a\u0020\u0027\u0025\u0073\u0027",_gge );return &_gge ,_fdf ;}else if _fade [0]=='('{_dg .Log .Trace ("\u002d>\u0053\u0074\u0072\u0069\u006e\u0067!");return _cef .parseString ();}else if _fade [0]=='['{_dg .Log .Trace ("\u002d\u003e\u0041\u0072\u0072\u0061\u0079\u0021");return _cef .parseArray ();}else if (_fade [0]=='<')&&(_fade [1]=='<'){_dg .Log .Trace ("\u002d>\u0044\u0069\u0063\u0074\u0021");return _cef .parseDict ();}else if _fade [0]=='<'{_dg .Log .Trace ("\u002d\u003e\u0048\u0065\u0078\u0020\u0073\u0074\u0072\u0069\u006e\u0067\u0021");return _cef .parseHexString ();}else if _fade [0]=='%'{_cef .readComment ();_cef .skipSpaces ();}else {_dg .Log .Trace ("\u002d\u003eN\u0075\u006d\u0062e\u0072\u0020\u006f\u0072\u0020\u0072\u0065\u0066\u003f");_fade ,_ =_cef ._be .Peek (15);_cgb :=string (_fade );_dg .Log .Trace ("\u0050\u0065\u0065k\u0020\u0073\u0074\u0072\u003a\u0020\u0025\u0073",_cgb );if (len (_cgb )> 3)&&(_cgb [:4]=="\u006e\u0075\u006c\u006c"){_cceg ,_cec :=_cef .parseNull ();return &_cceg ,_cec ;}else if (len (_cgb )> 4)&&(_cgb [:5]=="\u0066\u0061\u006cs\u0065"){_fee ,_eee :=_cef .parseBool ();return &_fee ,_eee ;}else if (len (_cgb )> 3)&&(_cgb [:4]=="\u0074\u0072\u0075\u0065"){_cdgg ,_efbc :=_cef .parseBool ();return &_cdgg ,_efbc ;};_cded :=_ccec .FindStringSubmatch (string (_cgb ));if len (_cded )> 1{_fade ,_ =_cef ._be .ReadBytes ('R');_dg .Log .Trace ("\u002d\u003e\u0020\u0021\u0052\u0065\u0066\u003a\u0020\u0027\u0025\u0073\u0027",string (_fade [:]));_ggf ,_fdge :=_gdef (string (_fade ));return &_ggf ,_fdge ;};_bbg :=_ag .FindStringSubmatch (string (_cgb ));if len (_bbg )> 1{_dg .Log .Trace ("\u002d\u003e\u0020\u004e\u0075\u006d\u0062\u0065\u0072\u0021");return _cef .parseNumber ();};_bbg =_bcb .FindStringSubmatch (string (_cgb ));if len (_bbg )> 1{_dg .Log .Trace ("\u002d\u003e\u0020\u0045xp\u006f\u006e\u0065\u006e\u0074\u0069\u0061\u006c\u0020\u004e\u0075\u006d\u0062\u0065r\u0021");_dg .Log .Trace ("\u0025\u0020\u0073",_bbg );return _cef .parseNumber ();};_dg .Log .Debug ("\u0045R\u0052\u004f\u0052\u0020U\u006e\u006b\u006e\u006f\u0077n\u0020(\u0070e\u0065\u006b\u0020\u0022\u0025\u0073\u0022)",_cgb );return nil ,_a .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 (_ace *fdfParser )readComment ()(string ,error ){var _ddb _ca .Buffer ;_ ,_cdg :=_ace .skipSpaces ();if _cdg !=nil {return _ddb .String (),_cdg ;};_dbf :=true ;for {_feb ,_fd :=_ace ._be .Peek (1);if _fd !=nil {_dg .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u0020\u0025\u0073",_fd .Error ());return _ddb .String (),_fd ;};if _dbf &&_feb [0]!='%'{return _ddb .String (),_a .New ("c\u006f\u006d\u006d\u0065\u006e\u0074 \u0073\u0068\u006f\u0075\u006c\u0064\u0020\u0073\u0074a\u0072\u0074\u0020w\u0069t\u0068\u0020\u0025");};_dbf =false ;if (_feb [0]!='\r')&&(_feb [0]!='\n'){_fad ,_ :=_ace ._be .ReadByte ();_ddb .WriteByte (_fad );}else {break ;};};return _ddb .String (),nil ;};
|
|
|
|
// FieldValues implements interface model.FieldValueProvider.
|
|
// Returns a map of field names to values (PdfObjects).
|
|
func (fdf *Data )FieldValues ()(map[string ]_e .PdfObject ,error ){_gf ,_fc :=fdf .FieldDictionaries ();if _fc !=nil {return nil ,_fc ;};var _eg []string ;for _ba :=range _gf {_eg =append (_eg ,_ba );};_b .Strings (_eg );_bc :=map[string ]_e .PdfObject {};for _ ,_dga :=range _eg {_cg :=_gf [_dga ];_fea :=_e .TraceToDirectObject (_cg .Get ("\u0056"));_bc [_dga ]=_fea ;};return _bc ,nil ;};func (_cdb *fdfParser )parse ()error {_cdb ._ec .Seek (0,_ff .SeekStart );_cdb ._be =_dd .NewReader (_cdb ._ec );for {_cdb .skipComments ();_fdd ,_gaad :=_cdb ._be .Peek (20);if _gaad !=nil {_dg .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 _gaad ;};if _ac .HasPrefix (string (_fdd ),"\u0074r\u0061\u0069\u006c\u0065\u0072"){_cdb ._be .Discard (7);_cdb .skipSpaces ();_cdb .skipComments ();_dfg ,_ :=_cdb .parseDict ();_cdb ._adc =_dfg ;break ;};_febd :=_fg .FindStringSubmatchIndex (string (_fdd ));if len (_febd )< 6{_dg .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 (_fdd ));return _a .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");};_gedf ,_gaad :=_cdb .parseIndirectObject ();if _gaad !=nil {return _gaad ;};switch _abc :=_gedf .(type ){case *_e .PdfIndirectObject :_cdb ._dba [_abc .ObjectNumber ]=_abc ;case *_e .PdfObjectStream :_cdb ._dba [_abc .ObjectNumber ]=_abc ;default:return _a .New ("\u0074\u0079\u0070\u0065\u0020\u0065\u0072\u0072\u006f\u0072");};};return nil ;};func (_gaa *fdfParser )setFileOffset (_bad int64 ){_gaa ._ec .Seek (_bad ,_ff .SeekStart );_gaa ._be =_dd .NewReader (_gaa ._ec );};func (_cdc *fdfParser )parseName ()(_e .PdfObjectName ,error ){var _gde _ca .Buffer ;_ddaa :=false ;for {_ccac ,_dad :=_cdc ._be .Peek (1);if _dad ==_ff .EOF {break ;};if _dad !=nil {return _e .PdfObjectName (_gde .String ()),_dad ;};if !_ddaa {if _ccac [0]=='/'{_ddaa =true ;_cdc ._be .ReadByte ();}else if _ccac [0]=='%'{_cdc .readComment ();_cdc .skipSpaces ();}else {_dg .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",_ccac ,_ccac );return _e .PdfObjectName (_gde .String ()),_cc .Errorf ("\u0069n\u0076a\u006c\u0069\u0064\u0020\u006ea\u006d\u0065:\u0020\u0028\u0025\u0063\u0029",_ccac [0]);};}else {if _e .IsWhiteSpace (_ccac [0]){break ;}else if (_ccac [0]=='/')||(_ccac [0]=='[')||(_ccac [0]=='(')||(_ccac [0]==']')||(_ccac [0]=='<')||(_ccac [0]=='>'){break ;}else if _ccac [0]=='#'{_ddd ,_df :=_cdc ._be .Peek (3);if _df !=nil {return _e .PdfObjectName (_gde .String ()),_df ;};_cdc ._be .Discard (3);_fgf ,_df :=_d .DecodeString (string (_ddd [1:3]));if _df !=nil {return _e .PdfObjectName (_gde .String ()),_df ;};_gde .Write (_fgf );}else {_cae ,_ :=_cdc ._be .ReadByte ();_gde .WriteByte (_cae );};};};return _e .PdfObjectName (_gde .String ()),nil ;};func (_ed *fdfParser )skipSpaces ()(int ,error ){_efb :=0;for {_bac ,_ab :=_ed ._be .ReadByte ();if _ab !=nil {return 0,_ab ;};if _e .IsWhiteSpace (_bac ){_efb ++;}else {_ed ._be .UnreadByte ();break ;};};return _efb ,nil ;};func (_efbgb *fdfParser )parseIndirectObject ()(_e .PdfObject ,error ){_bfa :=_e .PdfIndirectObject {};_dg .Log .Trace ("\u002dR\u0065a\u0064\u0020\u0069\u006e\u0064i\u0072\u0065c\u0074\u0020\u006f\u0062\u006a");_gcb ,_cea :=_efbgb ._be .Peek (20);if _cea !=nil {_dg .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 &_bfa ,_cea ;};_dg .Log .Trace ("\u0028\u0069\u006edi\u0072\u0065\u0063\u0074\u0020\u006f\u0062\u006a\u0020\u0070\u0065\u0065\u006b\u0020\u0022\u0025\u0073\u0022",string (_gcb ));_agba :=_fg .FindStringSubmatchIndex (string (_gcb ));if len (_agba )< 6{_dg .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 (_gcb ));return &_bfa ,_a .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");};_efbgb ._be .Discard (_agba [0]);_dg .Log .Trace ("O\u0066\u0066\u0073\u0065\u0074\u0073\u0020\u0025\u0020\u0064",_agba );_gbf :=_agba [1]-_agba [0];_fda :=make ([]byte ,_gbf );_ ,_cea =_efbgb .readAtLeast (_fda ,_gbf );if _cea !=nil {_dg .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",_cea );return nil ,_cea ;};_dg .Log .Trace ("\u0074\u0065\u0078t\u006c\u0069\u006e\u0065\u003a\u0020\u0025\u0073",_fda );_cga :=_fg .FindStringSubmatch (string (_fda ));if len (_cga )< 3{_dg .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 (_fda ));return &_bfa ,_a .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");};_eadf ,_ :=_af .Atoi (_cga [1]);_eae ,_ :=_af .Atoi (_cga [2]);_bfa .ObjectNumber =int64 (_eadf );_bfa .GenerationNumber =int64 (_eae );for {_fcf ,_ged :=_efbgb ._be .Peek (2);if _ged !=nil {return &_bfa ,_ged ;};_dg .Log .Trace ("I\u006ed\u002e\u0020\u0070\u0065\u0065\u006b\u003a\u0020%\u0073\u0020\u0028\u0025 x\u0029\u0021",string (_fcf ),string (_fcf ));if _e .IsWhiteSpace (_fcf [0]){_efbgb .skipSpaces ();}else if _fcf [0]=='%'{_efbgb .skipComments ();}else if (_fcf [0]=='<')&&(_fcf [1]=='<'){_dg .Log .Trace ("\u0043\u0061\u006c\u006c\u0020\u0050\u0061\u0072\u0073e\u0044\u0069\u0063\u0074");_bfa .PdfObject ,_ged =_efbgb .parseDict ();_dg .Log .Trace ("\u0045\u004f\u0046\u0020Ca\u006c\u006c\u0020\u0050\u0061\u0072\u0073\u0065\u0044\u0069\u0063\u0074\u003a\u0020%\u0076",_ged );if _ged !=nil {return &_bfa ,_ged ;};_dg .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 (_fcf [0]=='/')||(_fcf [0]=='(')||(_fcf [0]=='[')||(_fcf [0]=='<'){_bfa .PdfObject ,_ged =_efbgb .parseObject ();if _ged !=nil {return &_bfa ,_ged ;};_dg .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 _fcf [0]=='e'{_eeeg ,_fcg :=_efbgb .readTextLine ();if _fcg !=nil {return nil ,_fcg ;};if len (_eeeg )>=6&&_eeeg [0:6]=="\u0065\u006e\u0064\u006f\u0062\u006a"{break ;};}else if _fcf [0]=='s'{_fcf ,_ =_efbgb ._be .Peek (10);if string (_fcf [:6])=="\u0073\u0074\u0072\u0065\u0061\u006d"{_dada :=6;if len (_fcf )> 6{if _e .IsWhiteSpace (_fcf [_dada ])&&_fcf [_dada ]!='\r'&&_fcf [_dada ]!='\n'{_dg .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");_dada ++;};if _fcf [_dada ]=='\r'{_dada ++;if _fcf [_dada ]=='\n'{_dada ++;};}else if _fcf [_dada ]=='\n'{_dada ++;};};_efbgb ._be .Discard (_dada );_ecf ,_dgb :=_bfa .PdfObject .(*_e .PdfObjectDictionary );if !_dgb {return nil ,_a .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");};_dg .Log .Trace ("\u0053\u0074\u0072\u0065\u0061\u006d\u0020\u0064\u0069c\u0074\u0020\u0025\u0073",_ecf );_afg ,_ffg :=_ecf .Get ("\u004c\u0065\u006e\u0067\u0074\u0068").(*_e .PdfObjectInteger );if !_ffg {return nil ,_a .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");};_ffc :=*_afg ;if _ffc < 0{return nil ,_a .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 (_ffc )> _efbgb ._ceg {_dg .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 ,_a .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");};_ebg :=make ([]byte ,_ffc );_ ,_ged =_efbgb .readAtLeast (_ebg ,int (_ffc ));if _ged !=nil {_dg .Log .Debug ("E\u0052\u0052\u004f\u0052 s\u0074r\u0065\u0061\u006d\u0020\u0028%\u0064\u0029\u003a\u0020\u0025\u0058",len (_ebg ),_ebg );_dg .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_ged );return nil ,_ged ;};_bdag :=_e .PdfObjectStream {};_bdag .Stream =_ebg ;_bdag .PdfObjectDictionary =_bfa .PdfObject .(*_e .PdfObjectDictionary );_bdag .ObjectNumber =_bfa .ObjectNumber ;_bdag .GenerationNumber =_bfa .GenerationNumber ;_efbgb .skipSpaces ();_efbgb ._be .Discard (9);_efbgb .skipSpaces ();return &_bdag ,nil ;};};_bfa .PdfObject ,_ged =_efbgb .parseObject ();return &_bfa ,_ged ;};};_dg .Log .Trace ("\u0052\u0065\u0074\u0075rn\u0069\u006e\u0067\u0020\u0069\u006e\u0064\u0069\u0072\u0065\u0063\u0074\u0021");return &_bfa ,nil ;};
|
|
|
|
// LoadFromPath loads FDF form data from file path `fdfPath`.
|
|
func LoadFromPath (fdfPath string )(*Data ,error ){_cca ,_db :=_de .Open (fdfPath );if _db !=nil {return nil ,_db ;};defer _cca .Close ();return Load (_cca );};func (_fdg *fdfParser )parseNull ()(_e .PdfObjectNull ,error ){_ ,_ccd :=_fdg ._be .Discard (4);return _e .PdfObjectNull {},_ccd ;};
|
|
|
|
// Load loads FDF form data from `r`.
|
|
func Load (r _ff .ReadSeeker )(*Data ,error ){_ce ,_bd :=_faed (r );if _bd !=nil {return nil ,_bd ;};_g ,_bd :=_ce .Root ();if _bd !=nil {return nil ,_bd ;};_ea ,_cce :=_e .GetArray (_g .Get ("\u0046\u0069\u0065\u006c\u0064\u0073"));if !_cce {return nil ,_a .New ("\u0066\u0069\u0065\u006c\u0064\u0073\u0020\u006d\u0069s\u0073\u0069\u006e\u0067");};return &Data {_aa :_ea ,_fe :_g },nil ;};type fdfParser struct{_gfgd int ;_fcae int ;_dba map[int64 ]_e .PdfObject ;_ec _ff .ReadSeeker ;_be *_dd .Reader ;_ceg int64 ;_adc *_e .PdfObjectDictionary ;};func (_afb *fdfParser )parseNumber ()(_e .PdfObject ,error ){return _e .ParseNumber (_afb ._be )};func (_ggea *fdfParser )parseFdfVersion ()(int ,int ,error ){_ggea ._ec .Seek (0,_ff .SeekStart );_ead :=20;_bdaf :=make ([]byte ,_ead );_ggea ._ec .Read (_bdaf );_gcc :=_bdd .FindStringSubmatch (string (_bdaf ));if len (_gcc )< 3{_cfc ,_bec ,_dfe :=_ggea .seekFdfVersionTopDown ();if _dfe !=nil {_dg .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,_dfe ;};return _cfc ,_bec ,nil ;};_dade ,_eac :=_af .Atoi (_gcc [1]);if _eac !=nil {return 0,0,_eac ;};_dede ,_eac :=_af .Atoi (_gcc [2]);if _eac !=nil {return 0,0,_eac ;};_dg .Log .Debug ("\u0046\u0064\u0066\u0020\u0076\u0065\u0072\u0073\u0069\u006f\u006e\u0020%\u0064\u002e\u0025\u0064",_dade ,_dede );return int (_dade ),int (_dede ),nil ;};func (_ee *fdfParser )parseString ()(*_e .PdfObjectString ,error ){_ee ._be .ReadByte ();var _acc _ca .Buffer ;_bcbg :=1;for {_beg ,_abd :=_ee ._be .Peek (1);if _abd !=nil {return _e .MakeString (_acc .String ()),_abd ;};if _beg [0]=='\\'{_ee ._be .ReadByte ();_ggc ,_fb :=_ee ._be .ReadByte ();if _fb !=nil {return _e .MakeString (_acc .String ()),_fb ;};if _e .IsOctalDigit (_ggc ){_bbb ,_gcd :=_ee ._be .Peek (2);if _gcd !=nil {return _e .MakeString (_acc .String ()),_gcd ;};var _egc []byte ;_egc =append (_egc ,_ggc );for _ ,_dc :=range _bbb {if _e .IsOctalDigit (_dc ){_egc =append (_egc ,_dc );}else {break ;};};_ee ._be .Discard (len (_egc )-1);_dg .Log .Trace ("\u004e\u0075\u006d\u0065ri\u0063\u0020\u0073\u0074\u0072\u0069\u006e\u0067\u0020\u0022\u0025\u0073\u0022",_egc );_eaa ,_gcd :=_af .ParseUint (string (_egc ),8,32);if _gcd !=nil {return _e .MakeString (_acc .String ()),_gcd ;};_acc .WriteByte (byte (_eaa ));continue ;};switch _ggc {case 'n':_acc .WriteRune ('\n');case 'r':_acc .WriteRune ('\r');case 't':_acc .WriteRune ('\t');case 'b':_acc .WriteRune ('\b');case 'f':_acc .WriteRune ('\f');case '(':_acc .WriteRune ('(');case ')':_acc .WriteRune (')');case '\\':_acc .WriteRune ('\\');};continue ;}else if _beg [0]=='('{_bcbg ++;}else if _beg [0]==')'{_bcbg --;if _bcbg ==0{_ee ._be .ReadByte ();break ;};};_ae ,_ :=_ee ._be .ReadByte ();_acc .WriteByte (_ae );};return _e .MakeString (_acc .String ()),nil ;};func _gdef (_fba string )(_e .PdfObjectReference ,error ){_eea :=_e .PdfObjectReference {};_cfg :=_ccec .FindStringSubmatch (string (_fba ));if len (_cfg )< 3{_dg .Log .Debug ("\u0045\u0072\u0072or\u0020\u0070\u0061\u0072\u0073\u0069\u006e\u0067\u0020\u0072\u0065\u0066\u0065\u0072\u0065\u006e\u0063\u0065");return _eea ,_a .New ("\u0075n\u0061\u0062\u006c\u0065 \u0074\u006f\u0020\u0070\u0061r\u0073e\u0020r\u0065\u0066\u0065\u0072\u0065\u006e\u0063e");};_cdag ,_efbf :=_af .Atoi (_cfg [1]);if _efbf !=nil {_dg .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",_cfg [1]);return _eea ,nil ;};_eea .ObjectNumber =int64 (_cdag );_dee ,_efbf :=_af .Atoi (_cfg [2]);if _efbf !=nil {_dg .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",_cfg [2]);return _eea ,nil ;};_eea .GenerationNumber =int64 (_dee );return _eea ,nil ;};var _ag =_c .MustCompile ("\u005e\u005b\u005c\u002b\u002d\u002e\u005d\u002a\u0028\u005b\u0030\u002d9\u002e\u005d\u002b\u0029");func (_afbf *fdfParser )trace (_ceb _e .PdfObject )_e .PdfObject {switch _bae :=_ceb .(type ){case *_e .PdfObjectReference :_bcc ,_aeg :=_afbf ._dba [_bae .ObjectNumber ].(*_e .PdfIndirectObject );if _aeg {return _bcc .PdfObject ;};_dg .Log .Debug ("\u0054\u0079\u0070\u0065\u0020\u0065\u0072\u0072\u006f\u0072");return nil ;case *_e .PdfIndirectObject :return _bae .PdfObject ;};return _ceb ;};func _faed (_fgg _ff .ReadSeeker )(*fdfParser ,error ){_fdae :=&fdfParser {};_fdae ._ec =_fgg ;_fdae ._dba =map[int64 ]_e .PdfObject {};_dac ,_fbgc ,_dddd :=_fdae .parseFdfVersion ();if _dddd !=nil {_dg .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",_dddd );return nil ,_dddd ;};_fdae ._gfgd =_dac ;_fdae ._fcae =_fbgc ;_dddd =_fdae .parse ();return _fdae ,_dddd ;};func (_gd *fdfParser )readTextLine ()(string ,error ){var _gga _ca .Buffer ;for {_cafc ,_bef :=_gd ._be .Peek (1);if _bef !=nil {_dg .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u0020\u0025\u0073",_bef .Error ());return _gga .String (),_bef ;};if (_cafc [0]!='\r')&&(_cafc [0]!='\n'){_ade ,_ :=_gd ._be .ReadByte ();_gga .WriteByte (_ade );}else {break ;};};return _gga .String (),nil ;}; |