mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-02 22:17:06 +08:00
133 lines
40 KiB
Go
133 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 (_dc "encoding/binary";_e "fmt";_b "github.com/unidoc/unipdf/v3/common";_ca "github.com/unidoc/unipdf/v3/internal/bitwise";_af "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_a "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";
|
|
_g "github.com/unidoc/unipdf/v3/internal/jbig2/document/segments";_bgf "github.com/unidoc/unipdf/v3/internal/jbig2/encoder/classer";_bg "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_ef "io";_f "math";_c "runtime/debug";);func (_cedf *Page )createPage (_ffb *_g .PageInformationSegment )error {var _bb error ;
|
|
if !_ffb .IsStripe ||_ffb .PageBMHeight !=-1{_bb =_cedf .createNormalPage (_ffb );}else {_bb =_cedf .createStripedPage (_ffb );};return _bb ;};func (_dbcb *Page )getResolutionY ()(int ,error ){const _bcef ="\u0067\u0065\u0074\u0052\u0065\u0073\u006f\u006c\u0075t\u0069\u006f\u006e\u0059";
|
|
if _dbcb .ResolutionY !=0{return _dbcb .ResolutionY ,nil ;};_fddb :=_dbcb .getPageInformationSegment ();if _fddb ==nil {return 0,_bg .Error (_bcef ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_fgfb ,_dabc :=_fddb .GetSegmentData ();
|
|
if _dabc !=nil {return 0,_bg .Wrap (_dabc ,_bcef ,"");};_abeg ,_ffe :=_fgfb .(*_g .PageInformationSegment );if !_ffe {return 0,_bg .Errorf (_bcef ,"\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",_fgfb );
|
|
};_dbcb .ResolutionY =_abeg .ResolutionY ;return _dbcb .ResolutionY ,nil ;};func (_eecf *Globals )GetSymbolDictionary ()(*_g .Header ,error ){const _bacf ="G\u006c\u006f\u0062\u0061\u006c\u0073.\u0047\u0065\u0074\u0053\u0079\u006d\u0062\u006f\u006cD\u0069\u0063\u0074i\u006fn\u0061\u0072\u0079";
|
|
if _eecf ==nil {return nil ,_bg .Error (_bacf ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (_eecf .Segments )==0{return nil ,_bg .Error (_bacf ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");
|
|
};for _ ,_ged :=range _eecf .Segments {if _ged .Type ==_g .TSymbolDictionary {return _ged ,nil ;};};return nil ,_bg .Error (_bacf ,"\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 (_efg *Page )AddPageInformationSegment (){_daf :=&_g .PageInformationSegment {PageBMWidth :_efg .FinalWidth ,PageBMHeight :_efg .FinalHeight ,ResolutionX :_efg .ResolutionX ,ResolutionY :_efg .ResolutionY ,IsLossless :_efg .IsLossless };if _efg .BlackIsOne {_daf .DefaultPixelValue =uint8 (0x1);
|
|
};_dab :=&_g .Header {PageAssociation :_efg .PageNumber ,SegmentDataLength :uint64 (_daf .Size ()),SegmentData :_daf ,Type :_g .TPageInformation };_efg .Segments =append (_efg .Segments ,_dab );};func (_bdb *Document )reachedEOF (_afa int64 )(bool ,error ){const _afc ="\u0072\u0065\u0061\u0063\u0068\u0065\u0064\u0045\u004f\u0046";
|
|
_ ,_ebcf :=_bdb .InputStream .Seek (_afa ,_ef .SeekStart );if _ebcf !=nil {_b .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",_ebcf );
|
|
return false ,_bg .Wrap (_ebcf ,_afc ,"\u0069n\u0070\u0075\u0074\u0020\u0073\u0074\u0072\u0065\u0061\u006d\u0020s\u0065\u0065\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};_ ,_ebcf =_bdb .InputStream .ReadBits (32);if _ebcf ==_ef .EOF {return true ,nil ;
|
|
}else if _ebcf !=nil {return false ,_bg .Wrap (_ebcf ,_afc ,"");};return false ,nil ;};func _feef (_eeb _ca .StreamReader ,_beg *Globals )(*Document ,error ){_de :=&Document {Pages :make (map[int ]*Page ),InputStream :_eeb ,OrganizationType :_g .OSequential ,NumberOfPagesUnknown :true ,GlobalSegments :_beg ,_ec :9};
|
|
if _de .GlobalSegments ==nil {_de .GlobalSegments =&Globals {};};if _cdce :=_de .mapData ();_cdce !=nil {return nil ,_cdce ;};return _de ,nil ;};var _dd =[]byte {0x97,0x4A,0x42,0x32,0x0D,0x0A,0x1A,0x0A};func (_bba *Page )getPageInformationSegment ()*_g .Header {for _ ,_dcca :=range _bba .Segments {if _dcca .Type ==_g .TPageInformation {return _dcca ;
|
|
};};_b .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",_bba );
|
|
return nil ;};func (_faa *Page )addTextRegionSegment (_cgge []*_g .Header ,_aeg ,_efdg map[int ]int ,_ddg []int ,_gca *_a .Points ,_gedc *_a .Bitmaps ,_egc *_af .IntSlice ,_agg *_a .Boxes ,_cff ,_ddgd int ){_ed :=&_g .TextRegion {NumberOfSymbols :uint32 (_ddgd )};
|
|
_ed .InitEncode (_aeg ,_efdg ,_ddg ,_gca ,_gedc ,_egc ,_agg ,_faa .FinalWidth ,_faa .FinalHeight ,_cff );_agc :=&_g .Header {RTSegments :_cgge ,SegmentData :_ed ,PageAssociation :_faa .PageNumber ,Type :_g .TImmediateTextRegion };_dcc :=_g .TPageInformation ;
|
|
if _efdg !=nil {_dcc =_g .TSymbolDictionary ;};var _deb int ;for ;_deb < len (_faa .Segments );_deb ++{if _faa .Segments [_deb ].Type ==_dcc {_deb ++;break ;};};_faa .Segments =append (_faa .Segments ,nil );copy (_faa .Segments [_deb +1:],_faa .Segments [_deb :]);
|
|
_faa .Segments [_deb ]=_agc ;};func (_bee *Document )nextSegmentNumber ()uint32 {_ffg :=_bee .CurrentSegmentNumber ;_bee .CurrentSegmentNumber ++;return _ffg ;};func (_aec *Page )AddEndOfPageSegment (){_ddb :=&_g .Header {Type :_g .TEndOfPage ,PageAssociation :_aec .PageNumber };
|
|
_aec .Segments =append (_aec .Segments ,_ddb );};func (_ebcc *Globals )GetSegment (segmentNumber int )(*_g .Header ,error ){const _gacg ="\u0047l\u006fb\u0061\u006c\u0073\u002e\u0047e\u0074\u0053e\u0067\u006d\u0065\u006e\u0074";if _ebcc ==nil {return nil ,_bg .Error (_gacg ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};if len (_ebcc .Segments )==0{return nil ,_bg .Error (_gacg ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");};var _cgd *_g .Header ;for _ ,_cgd =range _ebcc .Segments {if _cgd .SegmentNumber ==uint32 (segmentNumber ){break ;
|
|
};};if _cgd ==nil {return nil ,_bg .Error (_gacg ,"\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u0020\u006e\u006f\u0074\u0020f\u006f\u0075\u006e\u0064");};return _cgd ,nil ;};func (_geeg *Page )createNormalPage (_ccb *_g .PageInformationSegment )error {const _bagc ="\u0063\u0072e\u0061\u0074\u0065N\u006f\u0072\u006d\u0061\u006c\u0050\u0061\u0067\u0065";
|
|
_geeg .Bitmap =_a .New (_ccb .PageBMWidth ,_ccb .PageBMHeight );if _ccb .DefaultPixelValue !=0{_geeg .Bitmap .SetDefaultPixel ();};for _ ,_ccd :=range _geeg .Segments {switch _ccd .Type {case 6,7,22,23,38,39,42,43:_b .Log .Trace ("\u0047\u0065\u0074\u0074in\u0067\u0020\u0053\u0065\u0067\u006d\u0065\u006e\u0074\u003a\u0020\u0025\u0064",_ccd .SegmentNumber );
|
|
_adc ,_adcb :=_ccd .GetSegmentData ();if _adcb !=nil {return _adcb ;};_bcga ,_ecaf :=_adc .(_g .Regioner );if !_ecaf {_b .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",_adc );
|
|
return _bg .Errorf (_bagc ,"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",_adc );
|
|
};_gde ,_adcb :=_bcga .GetRegionBitmap ();if _adcb !=nil {return _bg .Wrap (_adcb ,_bagc ,"");};if _geeg .fitsPage (_ccb ,_gde ){_geeg .Bitmap =_gde ;}else {_ede :=_bcga .GetRegionInfo ();_ebf :=_geeg .getCombinationOperator (_ccb ,_ede .CombinaionOperator );
|
|
_adcb =_a .Blit (_gde ,_geeg .Bitmap ,int (_ede .XLocation ),int (_ede .YLocation ),_ebf );if _adcb !=nil {return _bg .Wrap (_adcb ,_bagc ,"");};};};};return nil ;};type Page struct{Segments []*_g .Header ;PageNumber int ;Bitmap *_a .Bitmap ;FinalHeight int ;
|
|
FinalWidth int ;ResolutionX int ;ResolutionY int ;IsLossless bool ;Document *Document ;FirstSegmentNumber int ;EncodingMethod EncodingMethod ;BlackIsOne bool ;};func DecodeDocument (input _ca .StreamReader ,globals *Globals )(*Document ,error ){return _feef (input ,globals );
|
|
};const (GenericEM EncodingMethod =iota ;CorrelationEM ;RankHausEM ;);func (_gac *Document )produceClassifiedPage (_baf *Page ,_eg *_g .Header )(_cf error ){const _ae ="p\u0072\u006f\u0064\u0075ce\u0043l\u0061\u0073\u0073\u0069\u0066i\u0065\u0064\u0050\u0061\u0067\u0065";
|
|
var _ab map[int ]int ;_dcdg :=_gac ._eca ;_fg :=[]*_g .Header {_eg };if len (_gac ._aa [_baf .PageNumber ])> 0{_ab =map[int ]int {};_ega ,_dga :=_gac .addSymbolDictionary (_baf .PageNumber ,_gac .Classer .UndilatedTemplates ,_gac ._aa [_baf .PageNumber ],_ab ,false );
|
|
if _dga !=nil {return _bg .Wrap (_dga ,_ae ,"");};_fg =append (_fg ,_ega );_dcdg +=len (_gac ._aa [_baf .PageNumber ]);};_fgf :=_gac ._da [_baf .PageNumber ];_b .Log .Debug ("P\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020c\u006f\u006d\u0070\u0073: \u0025\u0076",_baf .PageNumber ,_fgf );
|
|
_baf .addTextRegionSegment (_fg ,_gac ._ga ,_ab ,_gac ._da [_baf .PageNumber ],_gac .Classer .PtaLL ,_gac .Classer .UndilatedTemplates ,_gac .Classer .ClassIDs ,nil ,_gfc (_dcdg ),len (_gac ._da [_baf .PageNumber ]));return nil ;};func (_cfe *Page )composePageBitmap ()error {const _baa ="\u0063\u006f\u006d\u0070\u006f\u0073\u0065\u0050\u0061\u0067\u0065\u0042i\u0074\u006d\u0061\u0070";
|
|
if _cfe .PageNumber ==0{return nil ;};_bag :=_cfe .getPageInformationSegment ();if _bag ==nil {return _bg .Error (_baa ,"\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");
|
|
};_bece ,_dbg :=_bag .GetSegmentData ();if _dbg !=nil {return _dbg ;};_edcb ,_eecb :=_bece .(*_g .PageInformationSegment );if !_eecb {return _bg .Error (_baa ,"\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 _dbg =_cfe .createPage (_edcb );_dbg !=nil {return _bg .Wrap (_dbg ,_baa ,"");};_cfe .clearSegmentData ();return nil ;};func (_be *Document )AddGenericPage (bm *_a .Bitmap ,duplicateLineRemoval bool )(_gb error ){const _db ="\u0044\u006f\u0063um\u0065\u006e\u0074\u002e\u0041\u0064\u0064\u0047\u0065\u006e\u0065\u0072\u0069\u0063\u0050\u0061\u0067\u0065";
|
|
if !_be .FullHeaders &&_be .NumberOfPages !=0{return _bg .Error (_db ,"\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");
|
|
};_bf :=&Page {Segments :[]*_g .Header {},Bitmap :bm ,Document :_be ,FinalHeight :bm .Height ,FinalWidth :bm .Width ,IsLossless :true ,BlackIsOne :bm .Color ==_a .Chocolate };_bf .PageNumber =int (_be .nextPageNumber ());_be .Pages [_bf .PageNumber ]=_bf ;
|
|
bm .InverseData ();_bf .AddPageInformationSegment ();if _gb =_bf .AddGenericRegion (bm ,0,0,0,_g .TImmediateGenericRegion ,duplicateLineRemoval );_gb !=nil {return _bg .Wrap (_gb ,_db ,"");};if _be .FullHeaders {_bf .AddEndOfPageSegment ();};return nil ;
|
|
};func (_eefa *Document )nextPageNumber ()uint32 {_eefa .NumberOfPages ++;return _eefa .NumberOfPages };func (_feb *Document )GetGlobalSegment (i int )(*_g .Header ,error ){_dgf ,_eef :=_feb .GlobalSegments .GetSegment (i );if _eef !=nil {return nil ,_bg .Wrap (_eef ,"\u0047\u0065t\u0047\u006c\u006fb\u0061\u006c\u0053\u0065\u0067\u006d\u0065\u006e\u0074","");
|
|
};return _dgf ,nil ;};func (_cdgc *Page )GetWidth ()(int ,error ){return _cdgc .getWidth ()};func (_gga *Document )encodeEOFHeader (_cfde _ca .BinaryWriter )(_gee int ,_fd error ){_bcd :=&_g .Header {SegmentNumber :_gga .nextSegmentNumber (),Type :_g .TEndOfFile };
|
|
if _gee ,_fd =_bcd .Encode (_cfde );_fd !=nil {return 0,_bg .Wrap (_fd ,"\u0065n\u0063o\u0064\u0065\u0045\u004f\u0046\u0048\u0065\u0061\u0064\u0065\u0072","");};return _gee ,nil ;};func (_cbee *Page )getResolutionX ()(int ,error ){const _aed ="\u0067\u0065\u0074\u0052\u0065\u0073\u006f\u006c\u0075t\u0069\u006f\u006e\u0058";
|
|
if _cbee .ResolutionX !=0{return _cbee .ResolutionX ,nil ;};_dcde :=_cbee .getPageInformationSegment ();if _dcde ==nil {return 0,_bg .Error (_aed ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_edd ,_eda :=_dcde .GetSegmentData ();
|
|
if _eda !=nil {return 0,_bg .Wrap (_eda ,_aed ,"");};_bbg ,_agcd :=_edd .(*_g .PageInformationSegment );if !_agcd {return 0,_bg .Errorf (_aed ,"\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",_edd );
|
|
};_cbee .ResolutionX =_bbg .ResolutionX ;return _cbee .ResolutionX ,nil ;};func (_efb *Page )Encode (w _ca .BinaryWriter )(_agcg int ,_aef error ){const _bab ="P\u0061\u0067\u0065\u002e\u0045\u006e\u0063\u006f\u0064\u0065";var _aege int ;for _ ,_dfg :=range _efb .Segments {if _aege ,_aef =_dfg .Encode (w );
|
|
_aef !=nil {return _agcg ,_bg .Wrap (_aef ,_bab ,"");};_agcg +=_aege ;};return _agcg ,nil ;};func (_cggg *Document )Encode ()(_ffc []byte ,_dgaa error ){const _gfd ="\u0044o\u0063u\u006d\u0065\u006e\u0074\u002e\u0045\u006e\u0063\u006f\u0064\u0065";var _gfg ,_ge int ;
|
|
if _cggg .FullHeaders {if _gfg ,_dgaa =_cggg .encodeFileHeader (_cggg ._dg );_dgaa !=nil {return nil ,_bg .Wrap (_dgaa ,_gfd ,"");};};var (_abg bool ;_fef *_g .Header ;_eec *Page ;);if _dgaa =_cggg .completeClassifiedPages ();_dgaa !=nil {return nil ,_bg .Wrap (_dgaa ,_gfd ,"");
|
|
};if _dgaa =_cggg .produceClassifiedPages ();_dgaa !=nil {return nil ,_bg .Wrap (_dgaa ,_gfd ,"");};if _cggg .GlobalSegments !=nil {for _ ,_fef =range _cggg .GlobalSegments .Segments {if _dgaa =_cggg .encodeSegment (_fef ,&_gfg );_dgaa !=nil {return nil ,_bg .Wrap (_dgaa ,_gfd ,"");
|
|
};};};for _fa :=1;_fa <=int (_cggg .NumberOfPages );_fa ++{if _eec ,_abg =_cggg .Pages [_fa ];!_abg {return nil ,_bg .Errorf (_gfd ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_fa );};for _ ,_fef =range _eec .Segments {if _dgaa =_cggg .encodeSegment (_fef ,&_gfg );
|
|
_dgaa !=nil {return nil ,_bg .Wrap (_dgaa ,_gfd ,"");};};};if _cggg .FullHeaders {if _ge ,_dgaa =_cggg .encodeEOFHeader (_cggg ._dg );_dgaa !=nil {return nil ,_bg .Wrap (_dgaa ,_gfd ,"");};_gfg +=_ge ;};_ffc =_cggg ._dg .Data ();if len (_ffc )!=_gfg {_b .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",_gfg ,len (_ffc ));
|
|
};return _ffc ,nil ;};func InitEncodeDocument (fullHeaders bool )*Document {return &Document {FullHeaders :fullHeaders ,_dg :_ca .BufferedMSB (),Pages :map[int ]*Page {},_aa :map[int ][]int {},_ga :map[int ]int {},_da :map[int ][]int {}};};func _geg (_dafg *Document ,_gegb int )*Page {return &Page {Document :_dafg ,PageNumber :_gegb ,Segments :[]*_g .Header {}};
|
|
};func (_adb *Document )mapData ()error {const _agf ="\u006da\u0070\u0044\u0061\u0074\u0061";var (_dff []*_g .Header ;_ebd int64 ;_fbg _g .Type ;);_ebe ,_fbde :=_adb .isFileHeaderPresent ();if _fbde !=nil {return _bg .Wrap (_fbde ,_agf ,"");};if _ebe {if _fbde =_adb .parseFileHeader ();
|
|
_fbde !=nil {return _bg .Wrap (_fbde ,_agf ,"");};_ebd +=int64 (_adb ._ec );_adb .FullHeaders =true ;};var (_cab *Page ;_fdd bool ;);for _fbg !=51&&!_fdd {_bgef ,_aab :=_g .NewHeader (_adb ,_adb .InputStream ,_ebd ,_adb .OrganizationType );if _aab !=nil {return _bg .Wrap (_aab ,_agf ,"");
|
|
};_b .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",_bgef .SegmentNumber ,_bgef .Type );
|
|
_fbg =_bgef .Type ;if _fbg !=_g .TEndOfFile {if _bgef .PageAssociation !=0{_cab =_adb .Pages [_bgef .PageAssociation ];if _cab ==nil {_cab =_geg (_adb ,_bgef .PageAssociation );_adb .Pages [_bgef .PageAssociation ]=_cab ;if _adb .NumberOfPagesUnknown {_adb .NumberOfPages ++;
|
|
};};_cab .Segments =append (_cab .Segments ,_bgef );}else {_adb .GlobalSegments .AddSegment (_bgef );};};_dff =append (_dff ,_bgef );_ebd =_adb .InputStream .StreamPosition ();if _adb .OrganizationType ==_g .OSequential {_ebd +=int64 (_bgef .SegmentDataLength );
|
|
};_fdd ,_aab =_adb .reachedEOF (_ebd );if _aab !=nil {_b .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",_aab );
|
|
return _bg .Wrap (_aab ,_agf ,"");};};_adb .determineRandomDataOffsets (_dff ,uint64 (_ebd ));return nil ;};func (_bcgag *Page )fitsPage (_fbga *_g .PageInformationSegment ,_dccf *_a .Bitmap )bool {return _bcgag .countRegions ()==1&&_fbga .DefaultPixelValue ==0&&_fbga .PageBMWidth ==_dccf .Width &&_fbga .PageBMHeight ==_dccf .Height ;
|
|
};type EncodingMethod int ;func (_dce *Page )clearSegmentData (){for _cdf :=range _dce .Segments {_dce .Segments [_cdf ].CleanSegmentData ();};};func (_afb *Page )GetSegment (number int )(*_g .Header ,error ){const _dgcb ="\u0050a\u0067e\u002e\u0047\u0065\u0074\u0053\u0065\u0067\u006d\u0065\u006e\u0074";
|
|
for _ ,_bebd :=range _afb .Segments {if _bebd .SegmentNumber ==uint32 (number ){return _bebd ,nil ;};};_dgba :=make ([]uint32 ,len (_afb .Segments ));for _bdf ,_dgad :=range _afb .Segments {_dgba [_bdf ]=_dgad .SegmentNumber ;};return nil ,_bg .Errorf (_dgcb ,"\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 ,_afb .PageNumber ,_dgba );
|
|
};func (_ade *Page )GetBitmap ()(_dgbb *_a .Bitmap ,_cede error ){_b .Log .Trace (_e .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",_ade .PageNumber ));
|
|
defer func (){if _cede !=nil {_b .Log .Trace (_e .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",_ade .PageNumber ,_cede ));
|
|
}else {_b .Log .Trace (_e .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",_ade .PageNumber ));};}();if _ade .Bitmap !=nil {return _ade .Bitmap ,nil ;
|
|
};_cede =_ade .composePageBitmap ();if _cede !=nil {return nil ,_cede ;};return _ade .Bitmap ,nil ;};func (_edce *Page )String ()string {return _e .Sprintf ("\u0050\u0061\u0067\u0065\u0020\u0023\u0025\u0064",_edce .PageNumber );};func (_gcbd *Page )collectPageStripes ()(_bce []_g .Segmenter ,_gbg error ){const _ffaa ="\u0063o\u006cl\u0065\u0063\u0074\u0050\u0061g\u0065\u0053t\u0072\u0069\u0070\u0065\u0073";
|
|
var _cdcea _g .Segmenter ;for _ ,_eebf :=range _gcbd .Segments {switch _eebf .Type {case 6,7,22,23,38,39,42,43:_cdcea ,_gbg =_eebf .GetSegmentData ();if _gbg !=nil {return nil ,_bg .Wrap (_gbg ,_ffaa ,"");};_bce =append (_bce ,_cdcea );case 50:_cdcea ,_gbg =_eebf .GetSegmentData ();
|
|
if _gbg !=nil {return nil ,_gbg ;};_cdcc ,_beba :=_cdcea .(*_g .EndOfStripe );if !_beba {return nil ,_bg .Errorf (_ffaa ,"\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",_cdcea );
|
|
};_bce =append (_bce ,_cdcc );_gcbd .FinalHeight =_cdcc .LineNumber ();};};return _bce ,nil ;};func (_deaa *Page )getHeight ()(int ,error ){const _adbc ="\u0067e\u0074\u0048\u0065\u0069\u0067\u0068t";if _deaa .FinalHeight !=0{return _deaa .FinalHeight ,nil ;
|
|
};_fdg :=_deaa .getPageInformationSegment ();if _fdg ==nil {return 0,_bg .Error (_adbc ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_fcd ,_becb :=_fdg .GetSegmentData ();if _becb !=nil {return 0,_bg .Wrap (_becb ,_adbc ,"");
|
|
};_cgde ,_feg :=_fcd .(*_g .PageInformationSegment );if !_feg {return 0,_bg .Errorf (_adbc ,"\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",_fcd );
|
|
};if _cgde .PageBMHeight ==_f .MaxInt32 {_ ,_becb =_deaa .GetBitmap ();if _becb !=nil {return 0,_bg .Wrap (_becb ,_adbc ,"");};}else {_deaa .FinalHeight =_cgde .PageBMHeight ;};return _deaa .FinalHeight ,nil ;};func (_gaa *Page )GetResolutionX ()(int ,error ){return _gaa .getResolutionX ()};
|
|
func (_fcbb *Page )countRegions ()int {var _eeed int ;for _ ,_gdea :=range _fcbb .Segments {switch _gdea .Type {case 6,7,22,23,38,39,42,43:_eeed ++;};};return _eeed ;};type Globals struct{Segments []*_g .Header ;};func (_add *Document )encodeSegment (_bec *_g .Header ,_cbe *int )error {const _gef ="\u0065\u006e\u0063\u006f\u0064\u0065\u0053\u0065\u0067\u006d\u0065\u006e\u0074";
|
|
_bec .SegmentNumber =_add .nextSegmentNumber ();_dac ,_aeb :=_bec .Encode (_add ._dg );if _aeb !=nil {return _bg .Wrapf (_aeb ,_gef ,"\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u003a\u0020\u0027\u0025\u0064\u0027",_bec .SegmentNumber );};*_cbe +=_dac ;
|
|
return nil ;};func (_dcdc *Globals )AddSegment (segment *_g .Header ){_dcdc .Segments =append (_dcdc .Segments ,segment );};func (_aaf *Globals )GetSegmentByIndex (index int )(*_g .Header ,error ){const _ecac ="\u0047l\u006f\u0062\u0061\u006cs\u002e\u0047\u0065\u0074\u0053e\u0067m\u0065n\u0074\u0042\u0079\u0049\u006e\u0064\u0065x";
|
|
if _aaf ==nil {return nil ,_bg .Error (_ecac ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (_aaf .Segments )==0{return nil ,_bg .Error (_ecac ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");
|
|
};if index > len (_aaf .Segments )-1{return nil ,_bg .Error (_ecac ,"\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");};return _aaf .Segments [index ],nil ;};func (_fgfe *Page )AddGenericRegion (bm *_a .Bitmap ,xloc ,yloc ,template int ,tp _g .Type ,duplicateLineRemoval bool )error {const _dbcg ="P\u0061\u0067\u0065\u002eAd\u0064G\u0065\u006e\u0065\u0072\u0069c\u0052\u0065\u0067\u0069\u006f\u006e";
|
|
_gfca :=&_g .GenericRegion {};if _fga :=_gfca .InitEncode (bm ,xloc ,yloc ,template ,duplicateLineRemoval );_fga !=nil {return _bg .Wrap (_fga ,_dbcg ,"");};_ebdc :=&_g .Header {Type :_g .TImmediateGenericRegion ,PageAssociation :_fgfe .PageNumber ,SegmentData :_gfca };
|
|
_fgfe .Segments =append (_fgfe .Segments ,_ebdc );return nil ;};func (_cbfee *Page )lastSegmentNumber ()(_bafec uint32 ,_aeac error ){const _dfb ="\u006c\u0061\u0073\u0074\u0053\u0065\u0067\u006d\u0065\u006e\u0074\u004eu\u006d\u0062\u0065\u0072";if len (_cbfee .Segments )==0{return _bafec ,_bg .Errorf (_dfb ,"\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",_cbfee .PageNumber );
|
|
};return _cbfee .Segments [len (_cbfee .Segments )-1].SegmentNumber ,nil ;};func (_bea *Document )encodeFileHeader (_eee _ca .BinaryWriter )(_bgg int ,_adf error ){const _ggab ="\u0065\u006ec\u006f\u0064\u0065F\u0069\u006c\u0065\u0048\u0065\u0061\u0064\u0065\u0072";
|
|
_bgg ,_adf =_eee .Write (_dd );if _adf !=nil {return _bgg ,_bg .Wrap (_adf ,_ggab ,"\u0069\u0064");};if _adf =_eee .WriteByte (0x01);_adf !=nil {return _bgg ,_bg .Wrap (_adf ,_ggab ,"\u0066\u006c\u0061g\u0073");};_bgg ++;_bca :=make ([]byte ,4);_dc .BigEndian .PutUint32 (_bca ,_bea .NumberOfPages );
|
|
_gcc ,_adf :=_eee .Write (_bca );if _adf !=nil {return _gcc ,_bg .Wrap (_adf ,_ggab ,"p\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072");};_bgg +=_gcc ;return _bgg ,nil ;};func (_edc *Page )GetResolutionY ()(int ,error ){return _edc .getResolutionY ()};
|
|
func (_gaae *Page )createStripedPage (_ffgb *_g .PageInformationSegment )error {const _gfb ="\u0063\u0072\u0065\u0061\u0074\u0065\u0053\u0074\u0072\u0069\u0070\u0065d\u0050\u0061\u0067\u0065";_babb ,_fbdf :=_gaae .collectPageStripes ();if _fbdf !=nil {return _bg .Wrap (_fbdf ,_gfb ,"");
|
|
};var _bdbd int ;for _ ,_feed :=range _babb {if _egae ,_cfg :=_feed .(*_g .EndOfStripe );_cfg {_bdbd =_egae .LineNumber ()+1;}else {_dfgg :=_feed .(_g .Regioner );_becd :=_dfgg .GetRegionInfo ();_bafe :=_gaae .getCombinationOperator (_ffgb ,_becd .CombinaionOperator );
|
|
_cce ,_ffa :=_dfgg .GetRegionBitmap ();if _ffa !=nil {return _bg .Wrap (_ffa ,_gfb ,"");};_ffa =_a .Blit (_cce ,_gaae .Bitmap ,int (_becd .XLocation ),_bdbd ,_bafe );if _ffa !=nil {return _bg .Wrap (_ffa ,_gfb ,"");};};};return nil ;};func (_fc *Document )AddClassifiedPage (bm *_a .Bitmap ,method _bgf .Method )(_eb error ){const _ba ="\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 !_fc .FullHeaders &&_fc .NumberOfPages !=0{return _bg .Error (_ba ,"\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 _fc .Classer ==nil {if _fc .Classer ,_eb =_bgf .Init (_bgf .DefaultSettings ());_eb !=nil {return _bg .Wrap (_eb ,_ba ,"");};};_bgc :=int (_fc .nextPageNumber ());_efe :=&Page {Segments :[]*_g .Header {},Bitmap :bm ,Document :_fc ,FinalHeight :bm .Height ,FinalWidth :bm .Width ,PageNumber :_bgc };
|
|
_fc .Pages [_bgc ]=_efe ;switch method {case _bgf .RankHaus :_efe .EncodingMethod =RankHausEM ;case _bgf .Correlation :_efe .EncodingMethod =CorrelationEM ;};_efe .AddPageInformationSegment ();if _eb =_fc .Classer .AddPage (bm ,_bgc ,method );_eb !=nil {return _bg .Wrap (_eb ,_ba ,"");
|
|
};if _fc .FullHeaders {_efe .AddEndOfPageSegment ();};return nil ;};func (_gbdg *Document )GetPage (pageNumber int )(_g .Pager ,error ){const _fee ="\u0044\u006fc\u0075\u006d\u0065n\u0074\u002e\u0047\u0065\u0074\u0050\u0061\u0067\u0065";if pageNumber < 0{_b .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 ,_c .Stack ());
|
|
return nil ,_bg .Errorf (_fee ,"\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 (_gbdg .Pages ){_b .Log .Debug ("\u0050\u0061\u0067\u0065 n\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u003a\u0020\u0025\u0064\u002e\u0020%\u0073",pageNumber ,_c .Stack ());return nil ,_bg .Error (_fee ,"\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");
|
|
};_ceb ,_gfdb :=_gbdg .Pages [pageNumber ];if !_gfdb {_b .Log .Debug ("\u0050\u0061\u0067\u0065 n\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u003a\u0020\u0025\u0064\u002e\u0020%\u0073",pageNumber ,_c .Stack ());return nil ,_bg .Errorf (_fee ,"\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 _ceb ,nil ;};func (_egg *Document )GetNumberOfPages ()(uint32 ,error ){if _egg .NumberOfPagesUnknown ||_egg .NumberOfPages ==0{if len (_egg .Pages )==0{if _gc :=_egg .mapData ();_gc !=nil {return 0,_bg .Wrap (_gc ,"\u0044o\u0063\u0075\u006d\u0065n\u0074\u002e\u0047\u0065\u0074N\u0075m\u0062e\u0072\u004f\u0066\u0050\u0061\u0067\u0065s","");
|
|
};};return uint32 (len (_egg .Pages )),nil ;};return _egg .NumberOfPages ,nil ;};func (_dad *Page )getCombinationOperator (_efgb *_g .PageInformationSegment ,_bfe _a .CombinationOperator )_a .CombinationOperator {if _efgb .CombinationOperatorOverrideAllowed (){return _bfe ;
|
|
};return _efgb .CombinationOperator ();};func (_ebb *Document )completeSymbols ()(_fbd error ){const _cgg ="\u0063o\u006dp\u006c\u0065\u0074\u0065\u0053\u0079\u006d\u0062\u006f\u006c\u0073";if _ebb .Classer ==nil {return nil ;};if _ebb .Classer .UndilatedTemplates ==nil {return _bg .Error (_cgg ,"\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");
|
|
};_cea :=len (_ebb .Pages )==1;_cdc :=make ([]int ,_ebb .Classer .UndilatedTemplates .Size ());var _bga int ;for _cfd :=0;_cfd < _ebb .Classer .ClassIDs .Size ();_cfd ++{_bga ,_fbd =_ebb .Classer .ClassIDs .Get (_cfd );if _fbd !=nil {return _bg .Wrap (_fbd ,_cgg ,"\u0063\u006c\u0061\u0073\u0073\u0020\u0049\u0044\u0027\u0073");
|
|
};_cdc [_bga ]++;};var _dgc []int ;for _dbc :=0;_dbc < _ebb .Classer .UndilatedTemplates .Size ();_dbc ++{if _cdc [_dbc ]==0{return _bg .Error (_cgg ,"\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 _cdc [_dbc ]> 1||_cea {_dgc =append (_dgc ,_dbc );};};_ebb ._eca =len (_dgc );var _gbd ,_gbdf int ;for _afd :=0;_afd < _ebb .Classer .ComponentPageNumbers .Size ();_afd ++{_gbd ,_fbd =_ebb .Classer .ComponentPageNumbers .Get (_afd );if _fbd !=nil {return _bg .Wrapf (_fbd ,_cgg ,"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",_afd );
|
|
};_gbdf ,_fbd =_ebb .Classer .ClassIDs .Get (_afd );if _fbd !=nil {return _bg .Wrapf (_fbd ,_cgg ,"\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",_gbd );
|
|
};if _cdc [_gbdf ]==1&&!_cea {_ebb ._aa [_gbd ]=append (_ebb ._aa [_gbd ],_gbdf );};};if _fbd =_ebb .Classer .ComputeLLCorners ();_fbd !=nil {return _bg .Wrap (_fbd ,_cgg ,"");};return nil ;};func (_ccea *Page )getWidth ()(int ,error ){const _efbg ="\u0067\u0065\u0074\u0057\u0069\u0064\u0074\u0068";
|
|
if _ccea .FinalWidth !=0{return _ccea .FinalWidth ,nil ;};_bcfe :=_ccea .getPageInformationSegment ();if _bcfe ==nil {return 0,_bg .Error (_efbg ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_gdb ,_dafb :=_bcfe .GetSegmentData ();
|
|
if _dafb !=nil {return 0,_bg .Wrap (_dafb ,_efbg ,"");};_agb ,_dbd :=_gdb .(*_g .PageInformationSegment );if !_dbd {return 0,_bg .Errorf (_efbg ,"\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",_gdb );
|
|
};_ccea .FinalWidth =_agb .PageBMWidth ;return _ccea .FinalWidth ,nil ;};func (_ebbe *Page )nextSegmentNumber ()uint32 {return _ebbe .Document .nextSegmentNumber ()};type Document struct{Pages map[int ]*Page ;NumberOfPagesUnknown bool ;NumberOfPages uint32 ;
|
|
GBUseExtTemplate bool ;InputStream _ca .StreamReader ;GlobalSegments *Globals ;OrganizationType _g .OrganizationType ;Classer *_bgf .Classer ;XRes ,YRes int ;FullHeaders bool ;CurrentSegmentNumber uint32 ;AverageTemplates *_a .Bitmaps ;BaseIndexes []int ;
|
|
Refinement bool ;RefineLevel int ;_ec uint8 ;_dg *_ca .BufferedWriter ;EncodeGlobals bool ;_eca int ;_aa map[int ][]int ;_da map[int ][]int ;_bc []int ;_ga map[int ]int ;};func (_gd *Document )parseFileHeader ()error {const _gaf ="\u0070a\u0072s\u0065\u0046\u0069\u006c\u0065\u0048\u0065\u0061\u0064\u0065\u0072";
|
|
_ ,_fca :=_gd .InputStream .Seek (8,_ef .SeekStart );if _fca !=nil {return _bg .Wrap (_fca ,_gaf ,"\u0069\u0064");};_ ,_fca =_gd .InputStream .ReadBits (5);if _fca !=nil {return _bg .Wrap (_fca ,_gaf ,"\u0072\u0065\u0073\u0065\u0072\u0076\u0065\u0064\u0020\u0062\u0069\u0074\u0073");
|
|
};_efec ,_fca :=_gd .InputStream .ReadBit ();if _fca !=nil {return _bg .Wrap (_fca ,_gaf ,"\u0065x\u0074e\u006e\u0064\u0065\u0064\u0020t\u0065\u006dp\u006c\u0061\u0074\u0065\u0073");};if _efec ==1{_gd .GBUseExtTemplate =true ;};_efec ,_fca =_gd .InputStream .ReadBit ();
|
|
if _fca !=nil {return _bg .Wrap (_fca ,_gaf ,"\u0075\u006e\u006b\u006eow\u006e\u0020\u0070\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072");};if _efec !=1{_gd .NumberOfPagesUnknown =false ;};_efec ,_fca =_gd .InputStream .ReadBit ();if _fca !=nil {return _bg .Wrap (_fca ,_gaf ,"\u006f\u0072\u0067\u0061\u006e\u0069\u007a\u0061\u0074\u0069\u006f\u006e \u0074\u0079\u0070\u0065");
|
|
};_gd .OrganizationType =_g .OrganizationType (_efec );if !_gd .NumberOfPagesUnknown {_gd .NumberOfPages ,_fca =_gd .InputStream .ReadUint32 ();if _fca !=nil {return _bg .Wrap (_fca ,_gaf ,"\u006eu\u006db\u0065\u0072\u0020\u006f\u0066\u0020\u0070\u0061\u0067\u0065\u0073");
|
|
};_gd ._ec =13;};return nil ;};func (_efd *Document )isFileHeaderPresent ()(bool ,error ){_efd .InputStream .Mark ();for _ ,_aea :=range _dd {_egf ,_abe :=_efd .InputStream .ReadByte ();if _abe !=nil {return false ,_abe ;};if _aea !=_egf {_efd .InputStream .Reset ();
|
|
return false ,nil ;};};_efd .InputStream .Reset ();return true ,nil ;};func (_bd *Document )produceClassifiedPages ()(_gag error ){const _ee ="\u0070\u0072\u006f\u0064uc\u0065\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0050\u0061\u0067e\u0073";
|
|
if _bd .Classer ==nil {return nil ;};var (_ddc *Page ;_ced bool ;_cdd *_g .Header ;);for _bcc :=1;_bcc <=int (_bd .NumberOfPages );_bcc ++{if _ddc ,_ced =_bd .Pages [_bcc ];!_ced {return _bg .Errorf (_ee ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_bcc );
|
|
};if _ddc .EncodingMethod ==GenericEM {continue ;};if _cdd ==nil {if _cdd ,_gag =_bd .GlobalSegments .GetSymbolDictionary ();_gag !=nil {return _bg .Wrap (_gag ,_ee ,"");};};if _gag =_bd .produceClassifiedPage (_ddc ,_cdd );_gag !=nil {return _bg .Wrapf (_gag ,_ee ,"\u0070\u0061\u0067\u0065\u003a\u0020\u0027\u0025\u0064\u0027",_bcc );
|
|
};};return nil ;};func (_fba *Document )addSymbolDictionary (_ag int ,_gbf *_a .Bitmaps ,_cg []int ,_dcdb map[int ]int ,_bac bool )(*_g .Header ,error ){const _dgb ="\u0061\u0064\u0064\u0053ym\u0062\u006f\u006c\u0044\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079";
|
|
_agd :=&_g .SymbolDictionary {};if _bge :=_agd .InitEncode (_gbf ,_cg ,_dcdb ,_bac );_bge !=nil {return nil ,_bge ;};_cbf :=&_g .Header {Type :_g .TSymbolDictionary ,PageAssociation :_ag ,SegmentData :_agd };if _ag ==0{if _fba .GlobalSegments ==nil {_fba .GlobalSegments =&Globals {};
|
|
};_fba .GlobalSegments .AddSegment (_cbf );return _cbf ,nil ;};_cc ,_ff :=_fba .Pages [_ag ];if !_ff {return nil ,_bg .Errorf (_dgb ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_ag );};var (_dcf int ;
|
|
_acb *_g .Header ;);for _dcf ,_acb =range _cc .Segments {if _acb .Type ==_g .TPageInformation {break ;};};_dcf ++;_cc .Segments =append (_cc .Segments ,nil );copy (_cc .Segments [_dcf +1:],_cc .Segments [_dcf :]);_cc .Segments [_dcf ]=_cbf ;return _cbf ,nil ;
|
|
};func _gfc (_daa int )int {_fe :=0;_bfg :=(_daa &(_daa -1))==0;_daa >>=1;for ;_daa !=0;_daa >>=1{_fe ++;};if _bfg {return _fe ;};return _fe +1;};func (_bae *Document )completeClassifiedPages ()(_ce error ){const _ac ="\u0063\u006f\u006dpl\u0065\u0074\u0065\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0050\u0061\u0067\u0065\u0073";
|
|
if _bae .Classer ==nil {return nil ;};_bae ._bc =make ([]int ,_bae .Classer .UndilatedTemplates .Size ());for _beb :=0;_beb < _bae .Classer .ClassIDs .Size ();_beb ++{_gf ,_dcd :=_bae .Classer .ClassIDs .Get (_beb );if _dcd !=nil {return _bg .Wrapf (_dcd ,_ac ,"\u0063\u006c\u0061\u0073s \u0077\u0069\u0074\u0068\u0020\u0069\u0064\u003a\u0020\u0027\u0025\u0064\u0027",_beb );
|
|
};_bae ._bc [_gf ]++;};var _ad []int ;for _df :=0;_df < _bae .Classer .UndilatedTemplates .Size ();_df ++{if _bae .NumberOfPages ==1||_bae ._bc [_df ]> 1{_ad =append (_ad ,_df );};};var (_bcg *Page ;_fb bool ;);for _eba ,_fcb :=range *_bae .Classer .ComponentPageNumbers {if _bcg ,_fb =_bae .Pages [_fcb ];
|
|
!_fb {return _bg .Errorf (_ac ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_eba );};if _bcg .EncodingMethod ==GenericEM {_b .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",_eba );
|
|
continue ;};_bae ._da [_fcb ]=append (_bae ._da [_fcb ],_eba );_cb ,_cag :=_bae .Classer .ClassIDs .Get (_eba );if _cag !=nil {return _bg .Wrapf (_cag ,_ac ,"\u006e\u006f\u0020\u0073uc\u0068\u0020\u0063\u006c\u0061\u0073\u0073\u0049\u0044\u003a\u0020\u0025\u0064",_eba );
|
|
};if _bae ._bc [_cb ]==1&&_bae .NumberOfPages !=1{_fbc :=append (_bae ._aa [_fcb ],_cb );_bae ._aa [_fcb ]=_fbc ;};};if _ce =_bae .Classer .ComputeLLCorners ();_ce !=nil {return _bg .Wrap (_ce ,_ac ,"");};if _ ,_ce =_bae .addSymbolDictionary (0,_bae .Classer .UndilatedTemplates ,_ad ,_bae ._ga ,false );
|
|
_ce !=nil {return _bg .Wrap (_ce ,_ac ,"");};return nil ;};func (_bdd *Page )GetHeight ()(int ,error ){return _bdd .getHeight ()};func (_fbdb *Document )determineRandomDataOffsets (_bccc []*_g .Header ,_gcb uint64 ){if _fbdb .OrganizationType !=_g .ORandom {return ;
|
|
};for _ ,_gg :=range _bccc {_gg .SegmentDataStartOffset =_gcb ;_gcb +=_gg .SegmentDataLength ;};}; |