mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-02 22:17:06 +08:00
130 lines
40 KiB
Go
130 lines
40 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 document ;import (_b "encoding/binary";_d "fmt";_g "github.com/unidoc/unipdf/v3/common";_gf "github.com/unidoc/unipdf/v3/internal/bitwise";_a "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_c "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";
|
|
_cd "github.com/unidoc/unipdf/v3/internal/jbig2/document/segments";_eef "github.com/unidoc/unipdf/v3/internal/jbig2/encoder/classer";_fa "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_ee "io";_e "math";_bc "runtime/debug";);func (_fgf *Page )GetSegment (number int )(*_cd .Header ,error ){const _ggag ="\u0050a\u0067e\u002e\u0047\u0065\u0074\u0053\u0065\u0067\u006d\u0065\u006e\u0074";
|
|
for _ ,_dbad :=range _fgf .Segments {if _dbad .SegmentNumber ==uint32 (number ){return _dbad ,nil ;};};_gdff :=make ([]uint32 ,len (_fgf .Segments ));for _gfcf ,_cag :=range _fgf .Segments {_gdff [_gfcf ]=_cag .SegmentNumber ;};return nil ,_fa .Errorf (_ggag ,"\u0073e\u0067\u006d\u0065n\u0074\u0020\u0077i\u0074h \u006e\u0075\u006d\u0062\u0065\u0072\u003a \u0027\u0025\u0064\u0027\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u0020\u0069\u006e\u0020\u0074\u0068\u0065\u0020\u0070\u0061\u0067\u0065\u003a\u0020'%\u0064'\u002e\u0020\u004b\u006e\u006f\u0077n\u0020\u0073\u0065\u0067\u006de\u006e\u0074\u0020\u006e\u0075\u006d\u0062\u0065\u0072\u0073\u003a \u0025\u0076",number ,_fgf .PageNumber ,_gdff );
|
|
};func (_ffge *Page )String ()string {return _d .Sprintf ("\u0050\u0061\u0067\u0065\u0020\u0023\u0025\u0064",_ffge .PageNumber );};func (_gc *Document )encodeSegment (_ecf *_cd .Header ,_efbc *int )error {const _fcc ="\u0065\u006e\u0063\u006f\u0064\u0065\u0053\u0065\u0067\u006d\u0065\u006e\u0074";
|
|
_ecf .SegmentNumber =_gc .nextSegmentNumber ();_eeg ,_edb :=_ecf .Encode (_gc ._ff );if _edb !=nil {return _fa .Wrapf (_edb ,_fcc ,"\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u003a\u0020\u0027\u0025\u0064\u0027",_ecf .SegmentNumber );};*_efbc +=_eeg ;return nil ;
|
|
};func (_ge *Document )produceClassifiedPage (_fab *Page ,_ffg *_cd .Header )(_ca error ){const _bg ="p\u0072\u006f\u0064\u0075ce\u0043l\u0061\u0073\u0073\u0069\u0066i\u0065\u0064\u0050\u0061\u0067\u0065";var _eg map[int ]int ;_bdf :=_ge ._ba ;_cg :=[]*_cd .Header {_ffg };
|
|
if len (_ge ._dd [_fab .PageNumber ])> 0{_eg =map[int ]int {};_gfeb ,_df :=_ge .addSymbolDictionary (_fab .PageNumber ,_ge .Classer .UndilatedTemplates ,_ge ._dd [_fab .PageNumber ],_eg ,false );if _df !=nil {return _fa .Wrap (_df ,_bg ,"");};_cg =append (_cg ,_gfeb );
|
|
_bdf +=len (_ge ._dd [_fab .PageNumber ]);};_gd :=_ge ._da [_fab .PageNumber ];_g .Log .Debug ("P\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020c\u006f\u006d\u0070\u0073: \u0025\u0076",_fab .PageNumber ,_gd );_fab .addTextRegionSegment (_cg ,_ge ._af ,_eg ,_ge ._da [_fab .PageNumber ],_ge .Classer .PtaLL ,_ge .Classer .UndilatedTemplates ,_ge .Classer .ClassIDs ,nil ,_ffc (_bdf ),len (_ge ._da [_fab .PageNumber ]));
|
|
return nil ;};func (_aef *Globals )GetSymbolDictionary ()(*_cd .Header ,error ){const _dcdb ="G\u006c\u006f\u0062\u0061\u006c\u0073.\u0047\u0065\u0074\u0053\u0079\u006d\u0062\u006f\u006cD\u0069\u0063\u0074i\u006fn\u0061\u0072\u0079";if _aef ==nil {return nil ,_fa .Error (_dcdb ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};if len (_aef .Segments )==0{return nil ,_fa .Error (_dcdb ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");};for _ ,_egc :=range _aef .Segments {if _egc .Type ==_cd .TSymbolDictionary {return _egc ,nil ;
|
|
};};return nil ,_fa .Error (_dcdb ,"\u0067\u006c\u006fba\u006c\u0020\u0073\u0079\u006d\u0062\u006f\u006c\u0020d\u0069c\u0074i\u006fn\u0061\u0072\u0079\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064");};func InitEncodeDocument (fullHeaders bool )*Document {return &Document {FullHeaders :fullHeaders ,_ff :_gf .BufferedMSB (),Pages :map[int ]*Page {},_dd :map[int ][]int {},_af :map[int ]int {},_da :map[int ][]int {}};
|
|
};func (_bge *Document )encodeFileHeader (_cdeg _gf .BinaryWriter )(_dfe int ,_abda error ){const _ad ="\u0065\u006ec\u006f\u0064\u0065F\u0069\u006c\u0065\u0048\u0065\u0061\u0064\u0065\u0072";_dfe ,_abda =_cdeg .Write (_fd );if _abda !=nil {return _dfe ,_fa .Wrap (_abda ,_ad ,"\u0069\u0064");
|
|
};if _abda =_cdeg .WriteByte (0x01);_abda !=nil {return _dfe ,_fa .Wrap (_abda ,_ad ,"\u0066\u006c\u0061g\u0073");};_dfe ++;_afc :=make ([]byte ,4);_b .BigEndian .PutUint32 (_afc ,_bge .NumberOfPages );_bec ,_abda :=_cdeg .Write (_afc );if _abda !=nil {return _bec ,_fa .Wrap (_abda ,_ad ,"p\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072");
|
|
};_dfe +=_bec ;return _dfe ,nil ;};func (_gcag *Page )lastSegmentNumber ()(_ccab uint32 ,_ffeac error ){const _eda ="\u006c\u0061\u0073\u0074\u0053\u0065\u0067\u006d\u0065\u006e\u0074\u004eu\u006d\u0062\u0065\u0072";if len (_gcag .Segments )==0{return _ccab ,_fa .Errorf (_eda ,"\u006e\u006f\u0020se\u0067\u006d\u0065\u006e\u0074\u0073\u0020\u0066\u006fu\u006ed\u0020i\u006e \u0074\u0068\u0065\u0020\u0070\u0061\u0067\u0065\u0020\u0027\u0025\u0064\u0027",_gcag .PageNumber );
|
|
};return _gcag .Segments [len (_gcag .Segments )-1].SegmentNumber ,nil ;};func (_ffd *Document )GetNumberOfPages ()(uint32 ,error ){if _ffd .NumberOfPagesUnknown ||_ffd .NumberOfPages ==0{if len (_ffd .Pages )==0{if _gce :=_ffd .mapData ();_gce !=nil {return 0,_fa .Wrap (_gce ,"\u0044o\u0063\u0075\u006d\u0065n\u0074\u002e\u0047\u0065\u0074N\u0075m\u0062e\u0072\u004f\u0066\u0050\u0061\u0067\u0065s","");
|
|
};};return uint32 (len (_ffd .Pages )),nil ;};return _ffd .NumberOfPages ,nil ;};func (_efe *Document )determineRandomDataOffsets (_agc []*_cd .Header ,_deg uint64 ){if _efe .OrganizationType !=_cd .ORandom {return ;};for _ ,_bfg :=range _agc {_bfg .SegmentDataStartOffset =_deg ;
|
|
_deg +=_bfg .SegmentDataLength ;};};func (_cda *Globals )AddSegment (segment *_cd .Header ){_cda .Segments =append (_cda .Segments ,segment )};const (GenericEM EncodingMethod =iota ;CorrelationEM ;RankHausEM ;);func (_fbd *Page )AddEndOfPageSegment (){_agb :=&_cd .Header {Type :_cd .TEndOfPage ,PageAssociation :_fbd .PageNumber };
|
|
_fbd .Segments =append (_fbd .Segments ,_agb );};func (_dcd *Globals )GetSegmentByIndex (index int )(*_cd .Header ,error ){const _ebb ="\u0047l\u006f\u0062\u0061\u006cs\u002e\u0047\u0065\u0074\u0053e\u0067m\u0065n\u0074\u0042\u0079\u0049\u006e\u0064\u0065x";
|
|
if _dcd ==nil {return nil ,_fa .Error (_ebb ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (_dcd .Segments )==0{return nil ,_fa .Error (_ebb ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");
|
|
};if index > len (_dcd .Segments )-1{return nil ,_fa .Error (_ebb ,"\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");};return _dcd .Segments [index ],nil ;};func (_gfg *Document )nextSegmentNumber ()uint32 {_bfc :=_gfg .CurrentSegmentNumber ;
|
|
_gfg .CurrentSegmentNumber ++;return _bfc ;};func (_gbe *Page )createNormalPage (_bbd *_cd .PageInformationSegment )error {const _dbgf ="\u0063\u0072e\u0061\u0074\u0065N\u006f\u0072\u006d\u0061\u006c\u0050\u0061\u0067\u0065";_gbe .Bitmap =_c .New (_bbd .PageBMWidth ,_bbd .PageBMHeight );
|
|
if _bbd .DefaultPixelValue !=0{_gbe .Bitmap .SetDefaultPixel ();};for _ ,_abc :=range _gbe .Segments {switch _abc .Type {case 6,7,22,23,38,39,42,43:_g .Log .Trace ("\u0047\u0065\u0074\u0074in\u0067\u0020\u0053\u0065\u0067\u006d\u0065\u006e\u0074\u003a\u0020\u0025\u0064",_abc .SegmentNumber );
|
|
_ace ,_gef :=_abc .GetSegmentData ();if _gef !=nil {return _gef ;};_bcd ,_aedf :=_ace .(_cd .Regioner );if !_aedf {_g .Log .Debug ("\u0053\u0065g\u006d\u0065\u006e\u0074\u003a\u0020\u0025\u0054\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0061\u0020\u0052\u0065\u0067\u0069on\u0065\u0072",_ace );
|
|
return _fa .Errorf (_dbgf ,"i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006a\u0062i\u0067\u0032\u0020\u0073\u0065\u0067\u006den\u0074\u0020\u0074\u0079p\u0065\u0020\u002d\u0020\u006e\u006f\u0074\u0020\u0061 R\u0065\u0067i\u006f\u006e\u0065\u0072\u003a\u0020\u0025\u0054",_ace );
|
|
};_faa ,_gef :=_bcd .GetRegionBitmap ();if _gef !=nil {return _fa .Wrap (_gef ,_dbgf ,"");};if _gbe .fitsPage (_bbd ,_faa ){_gbe .Bitmap =_faa ;}else {_ecd :=_bcd .GetRegionInfo ();_fge :=_gbe .getCombinationOperator (_bbd ,_ecd .CombinaionOperator );_gef =_c .Blit (_faa ,_gbe .Bitmap ,int (_ecd .XLocation ),int (_ecd .YLocation ),_fge );
|
|
if _gef !=nil {return _fa .Wrap (_gef ,_dbgf ,"");};};};};return nil ;};func (_egag *Document )nextPageNumber ()uint32 {_egag .NumberOfPages ++;return _egag .NumberOfPages };func (_abe *Page )nextSegmentNumber ()uint32 {return _abe .Document .nextSegmentNumber ()};
|
|
func (_cbg *Page )collectPageStripes ()(_dfd []_cd .Segmenter ,_bfea error ){const _dbd ="\u0063o\u006cl\u0065\u0063\u0074\u0050\u0061g\u0065\u0053t\u0072\u0069\u0070\u0065\u0073";var _ebd _cd .Segmenter ;for _ ,_bcc :=range _cbg .Segments {switch _bcc .Type {case 6,7,22,23,38,39,42,43:_ebd ,_bfea =_bcc .GetSegmentData ();
|
|
if _bfea !=nil {return nil ,_fa .Wrap (_bfea ,_dbd ,"");};_dfd =append (_dfd ,_ebd );case 50:_ebd ,_bfea =_bcc .GetSegmentData ();if _bfea !=nil {return nil ,_bfea ;};_cabc ,_fce :=_ebd .(*_cd .EndOfStripe );if !_fce {return nil ,_fa .Errorf (_dbd ,"\u0045\u006e\u0064\u004f\u0066\u0053\u0074\u0072\u0069\u0070\u0065\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u006f\u0066\u0020\u0076\u0061l\u0069\u0064\u0020\u0074\u0079p\u0065\u003a \u0027\u0025\u0054\u0027",_ebd );
|
|
};_dfd =append (_dfd ,_cabc );_cbg .FinalHeight =_cabc .LineNumber ();};};return _dfd ,nil ;};func (_cff *Document )isFileHeaderPresent ()(bool ,error ){_cff .InputStream .Mark ();for _ ,_bcg :=range _fd {_fcgg ,_bb :=_cff .InputStream .ReadByte ();if _bb !=nil {return false ,_bb ;
|
|
};if _bcg !=_fcgg {_cff .InputStream .Reset ();return false ,nil ;};};_cff .InputStream .Reset ();return true ,nil ;};func (_ccb *Page )GetBitmap ()(_dacb *_c .Bitmap ,_agcb error ){_g .Log .Trace (_d .Sprintf ("\u005b\u0050\u0041G\u0045\u005d\u005b\u0023%\u0064\u005d\u0020\u0047\u0065\u0074\u0042i\u0074\u006d\u0061\u0070\u0020\u0062\u0065\u0067\u0069\u006e\u0073\u002e\u002e\u002e",_ccb .PageNumber ));
|
|
defer func (){if _agcb !=nil {_g .Log .Trace (_d .Sprintf ("\u005b\u0050\u0041\u0047\u0045\u005d\u005b\u0023\u0025\u0064\u005d\u0020\u0047\u0065\u0074B\u0069t\u006d\u0061\u0070\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u002e\u0020\u0025\u0076",_ccb .PageNumber ,_agcb ));
|
|
}else {_g .Log .Trace (_d .Sprintf ("\u005b\u0050\u0041\u0047\u0045\u005d\u005b\u0023\u0025\u0064]\u0020\u0047\u0065\u0074\u0042\u0069\u0074m\u0061\u0070\u0020\u0066\u0069\u006e\u0069\u0073\u0068\u0065\u0064",_ccb .PageNumber ));};}();if _ccb .Bitmap !=nil {return _ccb .Bitmap ,nil ;
|
|
};_agcb =_ccb .composePageBitmap ();if _agcb !=nil {return nil ,_agcb ;};return _ccb .Bitmap ,nil ;};func (_cbc *Page )getPageInformationSegment ()*_cd .Header {for _ ,_acb :=range _cbc .Segments {if _acb .Type ==_cd .TPageInformation {return _acb ;};};
|
|
_g .Log .Debug ("\u0050\u0061\u0067\u0065\u0020\u0069\u006e\u0066o\u0072\u006d\u0061ti\u006f\u006e\u0020\u0073\u0065\u0067m\u0065\u006e\u0074\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u0020\u0066o\u0072\u0020\u0070\u0061\u0067\u0065\u003a\u0020%\u0073\u002e",_cbc );
|
|
return nil ;};type Page struct{Segments []*_cd .Header ;PageNumber int ;Bitmap *_c .Bitmap ;FinalHeight int ;FinalWidth int ;ResolutionX int ;ResolutionY int ;IsLossless bool ;Document *Document ;FirstSegmentNumber int ;EncodingMethod EncodingMethod ;BlackIsOne bool ;
|
|
};func (_fbdd *Page )GetWidth ()(int ,error ){return _fbdd .getWidth ()};func (_aec *Page )GetResolutionX ()(int ,error ){return _aec .getResolutionX ()};type EncodingMethod int ;func (_ffed *Page )addTextRegionSegment (_ggcc []*_cd .Header ,_adf ,_eff map[int ]int ,_geab []int ,_cac *_c .Points ,_bdg *_c .Bitmaps ,_ead *_a .IntSlice ,_aed *_c .Boxes ,_beae ,_cab int ){_fcgb :=&_cd .TextRegion {NumberOfSymbols :uint32 (_cab )};
|
|
_fcgb .InitEncode (_adf ,_eff ,_geab ,_cac ,_bdg ,_ead ,_aed ,_ffed .FinalWidth ,_ffed .FinalHeight ,_beae );_gebg :=&_cd .Header {RTSegments :_ggcc ,SegmentData :_fcgb ,PageAssociation :_ffed .PageNumber ,Type :_cd .TImmediateTextRegion };_gga :=_cd .TPageInformation ;
|
|
if _eff !=nil {_gga =_cd .TSymbolDictionary ;};var _egd int ;for ;_egd < len (_ffed .Segments );_egd ++{if _ffed .Segments [_egd ].Type ==_gga {_egd ++;break ;};};_ffed .Segments =append (_ffed .Segments ,nil );copy (_ffed .Segments [_egd +1:],_ffed .Segments [_egd :]);
|
|
_ffed .Segments [_egd ]=_gebg ;};func (_cdg *Document )AddGenericPage (bm *_c .Bitmap ,duplicateLineRemoval bool )(_be error ){const _bd ="\u0044\u006f\u0063um\u0065\u006e\u0074\u002e\u0041\u0064\u0064\u0047\u0065\u006e\u0065\u0072\u0069\u0063\u0050\u0061\u0067\u0065";
|
|
if !_cdg .FullHeaders &&_cdg .NumberOfPages !=0{return _fa .Error (_bd ,"\u0064\u006f\u0063\u0075\u006de\u006e\u0074\u0020\u0061\u006c\u0072\u0065a\u0064\u0079\u0020\u0063\u006f\u006e\u0074\u0061\u0069\u006e\u0073\u0020\u0070\u0061\u0067\u0065\u002e\u0020\u0046\u0069\u006c\u0065\u004d\u006f\u0064\u0065\u0020\u0064\u0069\u0073\u0061\u006c\u006c\u006f\u0077\u0073\u0020\u0061\u0064\u0064i\u006e\u0067\u0020\u006d\u006f\u0072\u0065\u0020\u0074\u0068\u0061\u006e \u006f\u006e\u0065\u0020\u0070\u0061g\u0065");
|
|
};_fe :=&Page {Segments :[]*_cd .Header {},Bitmap :bm ,Document :_cdg ,FinalHeight :bm .Height ,FinalWidth :bm .Width ,IsLossless :true ,BlackIsOne :bm .Color ==_c .Chocolate };_fe .PageNumber =int (_cdg .nextPageNumber ());_cdg .Pages [_fe .PageNumber ]=_fe ;
|
|
bm .InverseData ();_fe .AddPageInformationSegment ();if _be =_fe .AddGenericRegion (bm ,0,0,0,_cd .TImmediateGenericRegion ,duplicateLineRemoval );_be !=nil {return _fa .Wrap (_be ,_bd ,"");};if _cdg .FullHeaders {_fe .AddEndOfPageSegment ();};return nil ;
|
|
};func (_gaf *Globals )GetSegment (segmentNumber int )(*_cd .Header ,error ){const _aga ="\u0047l\u006fb\u0061\u006c\u0073\u002e\u0047e\u0074\u0053e\u0067\u006d\u0065\u006e\u0074";if _gaf ==nil {return nil ,_fa .Error (_aga ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};if len (_gaf .Segments )==0{return nil ,_fa .Error (_aga ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");};var _edc *_cd .Header ;for _ ,_edc =range _gaf .Segments {if _edc .SegmentNumber ==uint32 (segmentNumber ){break ;
|
|
};};if _edc ==nil {return nil ,_fa .Error (_aga ,"\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u0020\u006e\u006f\u0074\u0020f\u006f\u0075\u006e\u0064");};return _edc ,nil ;};func (_afd *Document )mapData ()error {const _fbe ="\u006da\u0070\u0044\u0061\u0074\u0061";
|
|
var (_caa []*_cd .Header ;_ded int64 ;_ggc _cd .Type ;);_aad ,_aee :=_afd .isFileHeaderPresent ();if _aee !=nil {return _fa .Wrap (_aee ,_fbe ,"");};if _aad {if _aee =_afd .parseFileHeader ();_aee !=nil {return _fa .Wrap (_aee ,_fbe ,"");};_ded +=int64 (_afd ._ec );
|
|
_afd .FullHeaders =true ;};var (_dec *Page ;_gca bool ;);for _ggc !=51&&!_gca {_cfd ,_geb :=_cd .NewHeader (_afd ,_afd .InputStream ,_ded ,_afd .OrganizationType );if _geb !=nil {return _fa .Wrap (_geb ,_fbe ,"");};_g .Log .Trace ("\u0044\u0065c\u006f\u0064\u0069\u006eg\u0020\u0073e\u0067\u006d\u0065\u006e\u0074\u0020\u006e\u0075m\u0062\u0065\u0072\u003a\u0020\u0025\u0064\u002c\u0020\u0054\u0079\u0070e\u003a\u0020\u0025\u0073",_cfd .SegmentNumber ,_cfd .Type );
|
|
_ggc =_cfd .Type ;if _ggc !=_cd .TEndOfFile {if _cfd .PageAssociation !=0{_dec =_afd .Pages [_cfd .PageAssociation ];if _dec ==nil {_dec =_ggac (_afd ,_cfd .PageAssociation );_afd .Pages [_cfd .PageAssociation ]=_dec ;if _afd .NumberOfPagesUnknown {_afd .NumberOfPages ++;
|
|
};};_dec .Segments =append (_dec .Segments ,_cfd );}else {_afd .GlobalSegments .AddSegment (_cfd );};};_caa =append (_caa ,_cfd );_ded =_afd .InputStream .StreamPosition ();if _afd .OrganizationType ==_cd .OSequential {_ded +=int64 (_cfd .SegmentDataLength );
|
|
};_gca ,_geb =_afd .reachedEOF (_ded );if _geb !=nil {_g .Log .Debug ("\u006a\u0062\u0069\u0067\u0032 \u0064\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u0020\u0072\u0065\u0061\u0063h\u0065\u0064\u0020\u0045\u004f\u0046\u0020\u0077\u0069\u0074\u0068\u0020\u0065\u0072\u0072\u006f\u0072\u003a\u0020\u0025\u0076",_geb );
|
|
return _fa .Wrap (_geb ,_fbe ,"");};};_afd .determineRandomDataOffsets (_caa ,uint64 (_ded ));return nil ;};func (_gaaf *Page )clearSegmentData (){for _gbb :=range _gaaf .Segments {_gaaf .Segments [_gbb ].CleanSegmentData ();};};func (_gfe *Document )AddClassifiedPage (bm *_c .Bitmap ,method _eef .Method )(_ac error ){const _bea ="\u0044\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u002e\u0041\u0064d\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064P\u0061\u0067\u0065";
|
|
if !_gfe .FullHeaders &&_gfe .NumberOfPages !=0{return _fa .Error (_bea ,"\u0064\u006f\u0063\u0075\u006de\u006e\u0074\u0020\u0061\u006c\u0072\u0065a\u0064\u0079\u0020\u0063\u006f\u006e\u0074\u0061\u0069\u006e\u0073\u0020\u0070\u0061\u0067\u0065\u002e\u0020\u0046\u0069\u006c\u0065\u004d\u006f\u0064\u0065\u0020\u0064\u0069\u0073\u0061\u006c\u006c\u006f\u0077\u0073\u0020\u0061\u0064\u0064i\u006e\u0067\u0020\u006d\u006f\u0072\u0065\u0020\u0074\u0068\u0061\u006e \u006f\u006e\u0065\u0020\u0070\u0061g\u0065");
|
|
};if _gfe .Classer ==nil {if _gfe .Classer ,_ac =_eef .Init (_eef .DefaultSettings ());_ac !=nil {return _fa .Wrap (_ac ,_bea ,"");};};_ed :=int (_gfe .nextPageNumber ());_ab :=&Page {Segments :[]*_cd .Header {},Bitmap :bm ,Document :_gfe ,FinalHeight :bm .Height ,FinalWidth :bm .Width ,PageNumber :_ed };
|
|
_gfe .Pages [_ed ]=_ab ;switch method {case _eef .RankHaus :_ab .EncodingMethod =RankHausEM ;case _eef .Correlation :_ab .EncodingMethod =CorrelationEM ;};_ab .AddPageInformationSegment ();if _ac =_gfe .Classer .AddPage (bm ,_ed ,method );_ac !=nil {return _fa .Wrap (_ac ,_bea ,"");
|
|
};if _gfe .FullHeaders {_ab .AddEndOfPageSegment ();};return nil ;};func (_ag *Document )completeClassifiedPages ()(_dg error ){const _gb ="\u0063\u006f\u006dpl\u0065\u0074\u0065\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0050\u0061\u0067\u0065\u0073";
|
|
if _ag .Classer ==nil {return nil ;};_ag ._eefg =make ([]int ,_ag .Classer .UndilatedTemplates .Size ());for _dge :=0;_dge < _ag .Classer .ClassIDs .Size ();_dge ++{_dc ,_db :=_ag .Classer .ClassIDs .Get (_dge );if _db !=nil {return _fa .Wrapf (_db ,_gb ,"\u0063\u006c\u0061\u0073s \u0077\u0069\u0074\u0068\u0020\u0069\u0064\u003a\u0020\u0027\u0025\u0064\u0027",_dge );
|
|
};_ag ._eefg [_dc ]++;};var _dbg []int ;for _gg :=0;_gg < _ag .Classer .UndilatedTemplates .Size ();_gg ++{if _ag .NumberOfPages ==1||_ag ._eefg [_gg ]> 1{_dbg =append (_dbg ,_gg );};};var (_afg *Page ;_eee bool ;);for _fc ,_dbf :=range *_ag .Classer .ComponentPageNumbers {if _afg ,_eee =_ag .Pages [_dbf ];
|
|
!_eee {return _fa .Errorf (_gb ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_fc );};if _afg .EncodingMethod ==GenericEM {_g .Log .Error ("\u0047\u0065\u006e\u0065\u0072\u0069c\u0020\u0070\u0061g\u0065\u0020\u0077i\u0074\u0068\u0020\u006e\u0075\u006d\u0062\u0065\u0072\u003a \u0027\u0025\u0064\u0027\u0020ma\u0070\u0070\u0065\u0064\u0020\u0061\u0073\u0020\u0063\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0020\u0070\u0061\u0067\u0065",_fc );
|
|
continue ;};_ag ._da [_dbf ]=append (_ag ._da [_dbf ],_fc );_de ,_cf :=_ag .Classer .ClassIDs .Get (_fc );if _cf !=nil {return _fa .Wrapf (_cf ,_gb ,"\u006e\u006f\u0020\u0073uc\u0068\u0020\u0063\u006c\u0061\u0073\u0073\u0049\u0044\u003a\u0020\u0025\u0064",_fc );
|
|
};if _ag ._eefg [_de ]==1&&_ag .NumberOfPages !=1{_dbfe :=append (_ag ._dd [_dbf ],_de );_ag ._dd [_dbf ]=_dbfe ;};};if _dg =_ag .Classer .ComputeLLCorners ();_dg !=nil {return _fa .Wrap (_dg ,_gb ,"");};if _ ,_dg =_ag .addSymbolDictionary (0,_ag .Classer .UndilatedTemplates ,_dbg ,_ag ._af ,false );
|
|
_dg !=nil {return _fa .Wrap (_dg ,_gb ,"");};return nil ;};var _fd =[]byte {0x97,0x4A,0x42,0x32,0x0D,0x0A,0x1A,0x0A};func (_efbe *Page )GetResolutionY ()(int ,error ){return _efbe .getResolutionY ()};func (_bdc *Page )countRegions ()int {var _bca int ;
|
|
for _ ,_bef :=range _bdc .Segments {switch _bef .Type {case 6,7,22,23,38,39,42,43:_bca ++;};};return _bca ;};func _ggac (_gdg *Document ,_gaa int )*Page {return &Page {Document :_gdg ,PageNumber :_gaa ,Segments :[]*_cd .Header {}};};func (_gbf *Document )Encode ()(_cc []byte ,_dba error ){const _ega ="\u0044o\u0063u\u006d\u0065\u006e\u0074\u002e\u0045\u006e\u0063\u006f\u0064\u0065";
|
|
var _cb ,_gdf int ;if _gbf .FullHeaders {if _cb ,_dba =_gbf .encodeFileHeader (_gbf ._ff );_dba !=nil {return nil ,_fa .Wrap (_dba ,_ega ,"");};};var (_gbae bool ;_dac *_cd .Header ;_cfcb *Page ;);if _dba =_gbf .completeClassifiedPages ();_dba !=nil {return nil ,_fa .Wrap (_dba ,_ega ,"");
|
|
};if _dba =_gbf .produceClassifiedPages ();_dba !=nil {return nil ,_fa .Wrap (_dba ,_ega ,"");};if _gbf .GlobalSegments !=nil {for _ ,_dac =range _gbf .GlobalSegments .Segments {if _dba =_gbf .encodeSegment (_dac ,&_cb );_dba !=nil {return nil ,_fa .Wrap (_dba ,_ega ,"");
|
|
};};};for _fcg :=1;_fcg <=int (_gbf .NumberOfPages );_fcg ++{if _cfcb ,_gbae =_gbf .Pages [_fcg ];!_gbae {return nil ,_fa .Errorf (_ega ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_fcg );};for _ ,_dac =range _cfcb .Segments {if _dba =_gbf .encodeSegment (_dac ,&_cb );
|
|
_dba !=nil {return nil ,_fa .Wrap (_dba ,_ega ,"");};};};if _gbf .FullHeaders {if _gdf ,_dba =_gbf .encodeEOFHeader (_gbf ._ff );_dba !=nil {return nil ,_fa .Wrap (_dba ,_ega ,"");};_cb +=_gdf ;};_cc =_gbf ._ff .Data ();if len (_cc )!=_cb {_g .Log .Debug ("\u0042\u0079\u0074\u0065\u0073 \u0077\u0072\u0069\u0074\u0074\u0065\u006e \u0028\u006e\u0029\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0065\u0071\u0075\u0061\u006c\u0020\u0074\u006f\u0020\u0074\u0068\u0065\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u0020\u006f\u0066\u0020t\u0068\u0065\u0020\u0064\u0061\u0074\u0061\u0020\u0065\u006e\u0063\u006fd\u0065\u0064\u003a\u0020\u0027\u0025d\u0027",_cb ,len (_cc ));
|
|
};return _cc ,nil ;};func (_cca *Document )parseFileHeader ()error {const _ffcd ="\u0070a\u0072s\u0065\u0046\u0069\u006c\u0065\u0048\u0065\u0061\u0064\u0065\u0072";_ ,_fgc :=_cca .InputStream .Seek (8,_ee .SeekStart );if _fgc !=nil {return _fa .Wrap (_fgc ,_ffcd ,"\u0069\u0064");
|
|
};_ ,_fgc =_cca .InputStream .ReadBits (5);if _fgc !=nil {return _fa .Wrap (_fgc ,_ffcd ,"\u0072\u0065\u0073\u0065\u0072\u0076\u0065\u0064\u0020\u0062\u0069\u0074\u0073");};_gad ,_fgc :=_cca .InputStream .ReadBit ();if _fgc !=nil {return _fa .Wrap (_fgc ,_ffcd ,"\u0065x\u0074e\u006e\u0064\u0065\u0064\u0020t\u0065\u006dp\u006c\u0061\u0074\u0065\u0073");
|
|
};if _gad ==1{_cca .GBUseExtTemplate =true ;};_gad ,_fgc =_cca .InputStream .ReadBit ();if _fgc !=nil {return _fa .Wrap (_fgc ,_ffcd ,"\u0075\u006e\u006b\u006eow\u006e\u0020\u0070\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072");};if _gad !=1{_cca .NumberOfPagesUnknown =false ;
|
|
};_gad ,_fgc =_cca .InputStream .ReadBit ();if _fgc !=nil {return _fa .Wrap (_fgc ,_ffcd ,"\u006f\u0072\u0067\u0061\u006e\u0069\u007a\u0061\u0074\u0069\u006f\u006e \u0074\u0079\u0070\u0065");};_cca .OrganizationType =_cd .OrganizationType (_gad );if !_cca .NumberOfPagesUnknown {_cca .NumberOfPages ,_fgc =_cca .InputStream .ReadUint32 ();
|
|
if _fgc !=nil {return _fa .Wrap (_fgc ,_ffcd ,"\u006eu\u006db\u0065\u0072\u0020\u006f\u0066\u0020\u0070\u0061\u0067\u0065\u0073");};_cca ._ec =13;};return nil ;};func (_abb *Page )createPage (_abae *_cd .PageInformationSegment )error {var _bbe error ;if !_abae .IsStripe ||_abae .PageBMHeight !=-1{_bbe =_abb .createNormalPage (_abae );
|
|
}else {_bbe =_abb .createStripedPage (_abae );};return _bbe ;};func (_afgb *Page )GetHeight ()(int ,error ){return _afgb .getHeight ()};func (_afe *Page )AddPageInformationSegment (){_bcb :=&_cd .PageInformationSegment {PageBMWidth :_afe .FinalWidth ,PageBMHeight :_afe .FinalHeight ,ResolutionX :_afe .ResolutionX ,ResolutionY :_afe .ResolutionY ,IsLossless :_afe .IsLossless };
|
|
if _afe .BlackIsOne {_bcb .DefaultPixelValue =uint8 (0x1);};_dcdc :=&_cd .Header {PageAssociation :_afe .PageNumber ,SegmentDataLength :uint64 (_bcb .Size ()),SegmentData :_bcb ,Type :_cd .TPageInformation };_afe .Segments =append (_afe .Segments ,_dcdc );
|
|
};func (_eb *Document )GetGlobalSegment (i int )(*_cd .Header ,error ){_dgg ,_bae :=_eb .GlobalSegments .GetSegment (i );if _bae !=nil {return nil ,_fa .Wrap (_bae ,"\u0047\u0065t\u0047\u006c\u006fb\u0061\u006c\u0053\u0065\u0067\u006d\u0065\u006e\u0074","");
|
|
};return _dgg ,nil ;};func (_cfb *Document )encodeEOFHeader (_gfc _gf .BinaryWriter )(_fg int ,_afa error ){_ggg :=&_cd .Header {SegmentNumber :_cfb .nextSegmentNumber (),Type :_cd .TEndOfFile };if _fg ,_afa =_ggg .Encode (_gfc );_afa !=nil {return 0,_fa .Wrap (_afa ,"\u0065n\u0063o\u0064\u0065\u0045\u004f\u0046\u0048\u0065\u0061\u0064\u0065\u0072","");
|
|
};return _fg ,nil ;};func (_ga *Document )produceClassifiedPages ()(_ef error ){const _ddf ="\u0070\u0072\u006f\u0064uc\u0065\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0050\u0061\u0067e\u0073";if _ga .Classer ==nil {return nil ;};var (_gba *Page ;
|
|
_bab bool ;_bde *_cd .Header ;);for _gag :=1;_gag <=int (_ga .NumberOfPages );_gag ++{if _gba ,_bab =_ga .Pages [_gag ];!_bab {return _fa .Errorf (_ddf ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_gag );
|
|
};if _gba .EncodingMethod ==GenericEM {continue ;};if _bde ==nil {if _bde ,_ef =_ga .GlobalSegments .GetSymbolDictionary ();_ef !=nil {return _fa .Wrap (_ef ,_ddf ,"");};};if _ef =_ga .produceClassifiedPage (_gba ,_bde );_ef !=nil {return _fa .Wrapf (_ef ,_ddf ,"\u0070\u0061\u0067\u0065\u003a\u0020\u0027\u0025\u0064\u0027",_gag );
|
|
};};return nil ;};type Document struct{Pages map[int ]*Page ;NumberOfPagesUnknown bool ;NumberOfPages uint32 ;GBUseExtTemplate bool ;InputStream _gf .StreamReader ;GlobalSegments *Globals ;OrganizationType _cd .OrganizationType ;Classer *_eef .Classer ;
|
|
XRes ,YRes int ;FullHeaders bool ;CurrentSegmentNumber uint32 ;AverageTemplates *_c .Bitmaps ;BaseIndexes []int ;Refinement bool ;RefineLevel int ;_ec uint8 ;_ff *_gf .BufferedWriter ;EncodeGlobals bool ;_ba int ;_dd map[int ][]int ;_da map[int ][]int ;
|
|
_eefg []int ;_af map[int ]int ;};func (_dcb *Document )completeSymbols ()(_bf error ){const _aagf ="\u0063o\u006dp\u006c\u0065\u0074\u0065\u0053\u0079\u006d\u0062\u006f\u006c\u0073";if _dcb .Classer ==nil {return nil ;};if _dcb .Classer .UndilatedTemplates ==nil {return _fa .Error (_aagf ,"\u006e\u006f t\u0065\u006d\u0070l\u0061\u0074\u0065\u0073 de\u0066in\u0065\u0064\u0020\u0066\u006f\u0072\u0020th\u0065\u0020\u0063\u006c\u0061\u0073\u0073e\u0072");
|
|
};_cfc :=len (_dcb .Pages )==1;_gde :=make ([]int ,_dcb .Classer .UndilatedTemplates .Size ());var _bafb int ;for _eeec :=0;_eeec < _dcb .Classer .ClassIDs .Size ();_eeec ++{_bafb ,_bf =_dcb .Classer .ClassIDs .Get (_eeec );if _bf !=nil {return _fa .Wrap (_bf ,_aagf ,"\u0063\u006c\u0061\u0073\u0073\u0020\u0049\u0044\u0027\u0073");
|
|
};_gde [_bafb ]++;};var _cde []int ;for _fdg :=0;_fdg < _dcb .Classer .UndilatedTemplates .Size ();_fdg ++{if _gde [_fdg ]==0{return _fa .Error (_aagf ,"\u006eo\u0020\u0073y\u006d\u0062\u006f\u006cs\u0020\u0069\u006es\u0074\u0061\u006e\u0063\u0065\u0073\u0020\u0066\u006fun\u0064\u0020\u0066o\u0072\u0020g\u0069\u0076\u0065\u006e\u0020\u0063l\u0061\u0073s\u003f\u0020");
|
|
};if _gde [_fdg ]> 1||_cfc {_cde =append (_cde ,_fdg );};};_dcb ._ba =len (_cde );var _gee ,_bad int ;for _dcc :=0;_dcc < _dcb .Classer .ComponentPageNumbers .Size ();_dcc ++{_gee ,_bf =_dcb .Classer .ComponentPageNumbers .Get (_dcc );if _bf !=nil {return _fa .Wrapf (_bf ,_aagf ,"p\u0061\u0067\u0065\u003a\u0020\u0027\u0025\u0064\u0027 \u006e\u006f\u0074\u0020\u0066\u006f\u0075nd\u0020\u0069\u006e\u0020t\u0068\u0065\u0020\u0063\u006c\u0061\u0073\u0073\u0065r \u0070\u0061g\u0065\u006e\u0075\u006d\u0062\u0065\u0072\u0073",_dcc );
|
|
};_bad ,_bf =_dcb .Classer .ClassIDs .Get (_dcc );if _bf !=nil {return _fa .Wrapf (_bf ,_aagf ,"\u0063\u0061\u006e\u0027\u0074\u0020\u0067e\u0074\u0020\u0073y\u006d\u0062\u006f\u006c \u0066\u006f\u0072\u0020\u0070\u0061\u0067\u0065\u0020\u0027\u0025\u0064\u0027\u0020\u0066\u0072\u006f\u006d\u0020\u0063\u006c\u0061\u0073\u0073\u0065\u0072",_gee );
|
|
};if _gde [_bad ]==1&&!_cfc {_dcb ._dd [_gee ]=append (_dcb ._dd [_gee ],_bad );};};if _bf =_dcb .Classer .ComputeLLCorners ();_bf !=nil {return _fa .Wrap (_bf ,_aagf ,"");};return nil ;};func (_fdf *Page )AddGenericRegion (bm *_c .Bitmap ,xloc ,yloc ,template int ,tp _cd .Type ,duplicateLineRemoval bool )error {const _ffe ="P\u0061\u0067\u0065\u002eAd\u0064G\u0065\u006e\u0065\u0072\u0069c\u0052\u0065\u0067\u0069\u006f\u006e";
|
|
_bgb :=&_cd .GenericRegion {};if _aff :=_bgb .InitEncode (bm ,xloc ,yloc ,template ,duplicateLineRemoval );_aff !=nil {return _fa .Wrap (_aff ,_ffe ,"");};_gec :=&_cd .Header {Type :_cd .TImmediateGenericRegion ,PageAssociation :_fdf .PageNumber ,SegmentData :_bgb };
|
|
_fdf .Segments =append (_fdf .Segments ,_gec );return nil ;};func (_dgd *Page )getHeight ()(int ,error ){const _fgd ="\u0067e\u0074\u0048\u0065\u0069\u0067\u0068t";if _dgd .FinalHeight !=0{return _dgd .FinalHeight ,nil ;};_egf :=_dgd .getPageInformationSegment ();
|
|
if _egf ==nil {return 0,_fa .Error (_fgd ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_fga ,_dga :=_egf .GetSegmentData ();if _dga !=nil {return 0,_fa .Wrap (_dga ,_fgd ,"");};_gcb ,_bgcc :=_fga .(*_cd .PageInformationSegment );
|
|
if !_bgcc {return 0,_fa .Errorf (_fgd ,"\u0070\u0061\u0067\u0065\u0020\u0069n\u0066\u006f\u0072\u006d\u0061\u0074\u0069\u006f\u006e\u0020\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u0020\u0069\u0073 \u006f\u0066\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0074\u0079\u0070e\u003a \u0027\u0025\u0054\u0027",_fga );
|
|
};if _gcb .PageBMHeight ==_e .MaxInt32 {_ ,_dga =_dgd .GetBitmap ();if _dga !=nil {return 0,_fa .Wrap (_dga ,_fgd ,"");};}else {_dgd .FinalHeight =_gcb .PageBMHeight ;};return _dgd .FinalHeight ,nil ;};func (_dccb *Page )getResolutionY ()(int ,error ){const _fbeb ="\u0067\u0065\u0074\u0052\u0065\u0073\u006f\u006c\u0075t\u0069\u006f\u006e\u0059";
|
|
if _dccb .ResolutionY !=0{return _dccb .ResolutionY ,nil ;};_fbc :=_dccb .getPageInformationSegment ();if _fbc ==nil {return 0,_fa .Error (_fbeb ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_eea ,_cbf :=_fbc .GetSegmentData ();
|
|
if _cbf !=nil {return 0,_fa .Wrap (_cbf ,_fbeb ,"");};_aeb ,_aea :=_eea .(*_cd .PageInformationSegment );if !_aea {return 0,_fa .Errorf (_fbeb ,"\u0070\u0061\u0067\u0065\u0020\u0069\u006e\u0066o\u0072\u006d\u0061ti\u006f\u006e\u0020\u0073\u0065\u0067m\u0065\u006e\u0074\u0020\u0069\u0073\u0020\u006f\u0066\u0020\u0069\u006e\u0076\u0061\u006ci\u0064\u0020\u0074\u0079\u0070\u0065\u003a\u0027%\u0054\u0027",_eea );
|
|
};_dccb .ResolutionY =_aeb .ResolutionY ;return _dccb .ResolutionY ,nil ;};type Globals struct{Segments []*_cd .Header ;};func DecodeDocument (input _gf .StreamReader ,globals *Globals )(*Document ,error ){return _eca (input ,globals );};func (_bfcc *Page )Encode (w _gf .BinaryWriter )(_ggcd int ,_daba error ){const _decg ="P\u0061\u0067\u0065\u002e\u0045\u006e\u0063\u006f\u0064\u0065";
|
|
var _dbe int ;for _ ,_ebfd :=range _bfcc .Segments {if _dbe ,_daba =_ebfd .Encode (w );_daba !=nil {return _ggcd ,_fa .Wrap (_daba ,_decg ,"");};_ggcd +=_dbe ;};return _ggcd ,nil ;};func (_baf *Document )addSymbolDictionary (_ae int ,_fb *_c .Bitmaps ,_abd []int ,_aba map[int ]int ,_abac bool )(*_cd .Header ,error ){const _ce ="\u0061\u0064\u0064\u0053ym\u0062\u006f\u006c\u0044\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079";
|
|
_aae :=&_cd .SymbolDictionary {};if _gda :=_aae .InitEncode (_fb ,_abd ,_aba ,_abac );_gda !=nil {return nil ,_gda ;};_ea :=&_cd .Header {Type :_cd .TSymbolDictionary ,PageAssociation :_ae ,SegmentData :_aae };if _ae ==0{if _baf .GlobalSegments ==nil {_baf .GlobalSegments =&Globals {};
|
|
};_baf .GlobalSegments .AddSegment (_ea );return _ea ,nil ;};_efb ,_fcd :=_baf .Pages [_ae ];if !_fcd {return nil ,_fa .Errorf (_ce ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_ae );};var (_geg int ;
|
|
_aag *_cd .Header ;);for _geg ,_aag =range _efb .Segments {if _aag .Type ==_cd .TPageInformation {break ;};};_geg ++;_efb .Segments =append (_efb .Segments ,nil );copy (_efb .Segments [_geg +1:],_efb .Segments [_geg :]);_efb .Segments [_geg ]=_ea ;return _ea ,nil ;
|
|
};func (_dad *Page )getResolutionX ()(int ,error ){const _eab ="\u0067\u0065\u0074\u0052\u0065\u0073\u006f\u006c\u0075t\u0069\u006f\u006e\u0058";if _dad .ResolutionX !=0{return _dad .ResolutionX ,nil ;};_affd :=_dad .getPageInformationSegment ();if _affd ==nil {return 0,_fa .Error (_eab ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");
|
|
};_ebc ,_ddb :=_affd .GetSegmentData ();if _ddb !=nil {return 0,_fa .Wrap (_ddb ,_eab ,"");};_dcda ,_dda :=_ebc .(*_cd .PageInformationSegment );if !_dda {return 0,_fa .Errorf (_eab ,"\u0070\u0061\u0067\u0065\u0020\u0069n\u0066\u006f\u0072\u006d\u0061\u0074\u0069\u006f\u006e\u0020\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u0020\u0069\u0073 \u006f\u0066\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0074\u0079\u0070e\u003a \u0027\u0025\u0054\u0027",_ebc );
|
|
};_dad .ResolutionX =_dcda .ResolutionX ;return _dad .ResolutionX ,nil ;};func (_fcdg *Document )reachedEOF (_dff int64 )(bool ,error ){const _cea ="\u0072\u0065\u0061\u0063\u0068\u0065\u0064\u0045\u004f\u0046";_ ,_gea :=_fcdg .InputStream .Seek (_dff ,_ee .SeekStart );
|
|
if _gea !=nil {_g .Log .Debug ("\u0072\u0065\u0061c\u0068\u0065\u0064\u0045\u004f\u0046\u0020\u002d\u0020\u0064\u002e\u0049\u006e\u0070\u0075\u0074\u0053\u0074\u0072\u0065\u0061\u006d\u002e\u0053\u0065\u0065\u006b\u0020\u0066a\u0069\u006c\u0065\u0064\u003a\u0020\u0025\u0076",_gea );
|
|
return false ,_fa .Wrap (_gea ,_cea ,"\u0069n\u0070\u0075\u0074\u0020\u0073\u0074\u0072\u0065\u0061\u006d\u0020s\u0065\u0065\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};_ ,_gea =_fcdg .InputStream .ReadBits (32);if _gea ==_ee .EOF {return true ,nil ;
|
|
}else if _gea !=nil {return false ,_fa .Wrap (_gea ,_cea ,"");};return false ,nil ;};func (_dcdd *Page )getWidth ()(int ,error ){const _gff ="\u0067\u0065\u0074\u0057\u0069\u0064\u0074\u0068";if _dcdd .FinalWidth !=0{return _dcdd .FinalWidth ,nil ;};_aadg :=_dcdd .getPageInformationSegment ();
|
|
if _aadg ==nil {return 0,_fa .Error (_gff ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_afec ,_dcg :=_aadg .GetSegmentData ();if _dcg !=nil {return 0,_fa .Wrap (_dcg ,_gff ,"");};_ecg ,_fbdc :=_afec .(*_cd .PageInformationSegment );
|
|
if !_fbdc {return 0,_fa .Errorf (_gff ,"\u0070\u0061\u0067\u0065\u0020\u0069n\u0066\u006f\u0072\u006d\u0061\u0074\u0069\u006f\u006e\u0020\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u0020\u0069\u0073 \u006f\u0066\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0074\u0079\u0070e\u003a \u0027\u0025\u0054\u0027",_afec );
|
|
};_dcdd .FinalWidth =_ecg .PageBMWidth ;return _dcdd .FinalWidth ,nil ;};func (_ege *Document )GetPage (pageNumber int )(_cd .Pager ,error ){const _badg ="\u0044\u006fc\u0075\u006d\u0065n\u0074\u002e\u0047\u0065\u0074\u0050\u0061\u0067\u0065";if pageNumber < 0{_g .Log .Debug ("\u004a\u0042\u0049\u00472\u0020\u0050\u0061\u0067\u0065\u0020\u002d\u0020\u0047e\u0074\u0050\u0061\u0067\u0065\u003a\u0020\u0025\u0064\u002e\u0020\u0050\u0061\u0067\u0065\u0020\u0063\u0061n\u006e\u006f\u0074\u0020\u0062e\u0020\u006c\u006f\u0077\u0065\u0072\u0020\u0074\u0068\u0061\u006e\u0020\u0030\u002e\u0020\u0025\u0073",pageNumber ,_bc .Stack ());
|
|
return nil ,_fa .Errorf (_badg ,"\u0069\u006e\u0076\u0061l\u0069\u0064\u0020\u006a\u0062\u0069\u0067\u0032\u0020d\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u0020\u002d\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064 \u0069\u006e\u0076\u0061\u006ci\u0064\u0020\u0070\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072\u003a\u0020\u0025\u0064",pageNumber );
|
|
};if pageNumber > len (_ege .Pages ){_g .Log .Debug ("\u0050\u0061\u0067\u0065 n\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u003a\u0020\u0025\u0064\u002e\u0020%\u0073",pageNumber ,_bc .Stack ());return nil ,_fa .Error (_badg ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006a\u0062\u0069\u0067\u0032 \u0064\u006f\u0063\u0075\u006d\u0065n\u0074\u0020\u002d\u0020\u0070\u0061\u0067\u0065\u0020\u006e\u006f\u0074\u0020f\u006f\u0075\u006e\u0064");
|
|
};_dgffb ,_efa :=_ege .Pages [pageNumber ];if !_efa {_g .Log .Debug ("\u0050\u0061\u0067\u0065 n\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u003a\u0020\u0025\u0064\u002e\u0020%\u0073",pageNumber ,_bc .Stack ());return nil ,_fa .Errorf (_badg ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006a\u0062\u0069\u0067\u0032 \u0064\u006f\u0063\u0075\u006d\u0065n\u0074\u0020\u002d\u0020\u0070\u0061\u0067\u0065\u0020\u006e\u006f\u0074\u0020f\u006f\u0075\u006e\u0064");
|
|
};return _dgffb ,nil ;};func (_gfdc *Page )createStripedPage (_bfgf *_cd .PageInformationSegment )error {const _beac ="\u0063\u0072\u0065\u0061\u0074\u0065\u0053\u0074\u0072\u0069\u0070\u0065d\u0050\u0061\u0067\u0065";_fad ,_feb :=_gfdc .collectPageStripes ();
|
|
if _feb !=nil {return _fa .Wrap (_feb ,_beac ,"");};var _badga int ;for _ ,_age :=range _fad {if _bgc ,_agbd :=_age .(*_cd .EndOfStripe );_agbd {_badga =_bgc .LineNumber ()+1;}else {_gdfa :=_age .(_cd .Regioner );_dbc :=_gdfa .GetRegionInfo ();_geef :=_gfdc .getCombinationOperator (_bfgf ,_dbc .CombinaionOperator );
|
|
_bfe ,_geea :=_gdfa .GetRegionBitmap ();if _geea !=nil {return _fa .Wrap (_geea ,_beac ,"");};_geea =_c .Blit (_bfe ,_gfdc .Bitmap ,int (_dbc .XLocation ),_badga ,_geef );if _geea !=nil {return _fa .Wrap (_geea ,_beac ,"");};};};return nil ;};func (_bfb *Page )composePageBitmap ()error {const _abf ="\u0063\u006f\u006d\u0070\u006f\u0073\u0065\u0050\u0061\u0067\u0065\u0042i\u0074\u006d\u0061\u0070";
|
|
if _bfb .PageNumber ==0{return nil ;};_gcg :=_bfb .getPageInformationSegment ();if _gcg ==nil {return _fa .Error (_abf ,"\u0070\u0061\u0067e \u0069\u006e\u0066\u006f\u0072\u006d\u0061\u0074\u0069o\u006e \u0073e\u0067m\u0065\u006e\u0074\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064");
|
|
};_ade ,_ggcg :=_gcg .GetSegmentData ();if _ggcg !=nil {return _ggcg ;};_dbfb ,_ede :=_ade .(*_cd .PageInformationSegment );if !_ede {return _fa .Error (_abf ,"\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006da\u0074\u0069\u006f\u006e \u0073\u0065\u0067\u006d\u0065\u006e\u0074\u0020\u0069\u0073\u0020\u006f\u0066\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0074\u0079\u0070\u0065");
|
|
};if _ggcg =_bfb .createPage (_dbfb );_ggcg !=nil {return _fa .Wrap (_ggcg ,_abf ,"");};_bfb .clearSegmentData ();return nil ;};func _eca (_bbf _gf .StreamReader ,_gfd *Globals )(*Document ,error ){_ebf :=&Document {Pages :make (map[int ]*Page ),InputStream :_bbf ,OrganizationType :_cd .OSequential ,NumberOfPagesUnknown :true ,GlobalSegments :_gfd ,_ec :9};
|
|
if _ebf .GlobalSegments ==nil {_ebf .GlobalSegments =&Globals {};};if _edbc :=_ebf .mapData ();_edbc !=nil {return nil ,_edbc ;};return _ebf ,nil ;};func _ffc (_dgf int )int {_dgff :=0;_aa :=(_dgf &(_dgf -1))==0;_dgf >>=1;for ;_dgf !=0;_dgf >>=1{_dgff ++;
|
|
};if _aa {return _dgff ;};return _dgff +1;};func (_cdab *Page )fitsPage (_abdd *_cd .PageInformationSegment ,_dacc *_c .Bitmap )bool {return _cdab .countRegions ()==1&&_abdd .DefaultPixelValue ==0&&_abdd .PageBMWidth ==_dacc .Width &&_abdd .PageBMHeight ==_dacc .Height ;
|
|
};func (_eggd *Page )getCombinationOperator (_dbgfd *_cd .PageInformationSegment ,_eag _c .CombinationOperator )_c .CombinationOperator {if _dbgfd .CombinationOperatorOverrideAllowed (){return _eag ;};return _dbgfd .CombinationOperator ();}; |