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 (_e "encoding/binary";_bf "fmt";_c "github.com/unidoc/unipdf/v3/common";_a "github.com/unidoc/unipdf/v3/internal/bitwise";_cf "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_cb "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";
|
|
_da "github.com/unidoc/unipdf/v3/internal/jbig2/document/segments";_bff "github.com/unidoc/unipdf/v3/internal/jbig2/encoder/classer";_ef "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_d "io";_b "math";_fg "runtime/debug";);func (_aae *Document )isFileHeaderPresent ()(bool ,error ){_aae .InputStream .Mark ();
|
|
for _ ,_fdfc :=range _ag {_ffe ,_beb :=_aae .InputStream .ReadByte ();if _beb !=nil {return false ,_beb ;};if _fdfc !=_ffe {_aae .InputStream .Reset ();return false ,nil ;};};_aae .InputStream .Reset ();return true ,nil ;};func (_fcg *Globals )GetSegment (segmentNumber int )(*_da .Header ,error ){const _fcff ="\u0047l\u006fb\u0061\u006c\u0073\u002e\u0047e\u0074\u0053e\u0067\u006d\u0065\u006e\u0074";
|
|
if _fcg ==nil {return nil ,_ef .Error (_fcff ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (_fcg .Segments )==0{return nil ,_ef .Error (_fcff ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");
|
|
};var _fgb *_da .Header ;for _ ,_fgb =range _fcg .Segments {if _fgb .SegmentNumber ==uint32 (segmentNumber ){break ;};};if _fgb ==nil {return nil ,_ef .Error (_fcff ,"\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u0020\u006e\u006f\u0074\u0020f\u006f\u0075\u006e\u0064");
|
|
};return _fgb ,nil ;};type Document struct{Pages map[int ]*Page ;NumberOfPagesUnknown bool ;NumberOfPages uint32 ;GBUseExtTemplate bool ;InputStream _a .StreamReader ;GlobalSegments *Globals ;OrganizationType _da .OrganizationType ;Classer *_bff .Classer ;
|
|
XRes ,YRes int ;FullHeaders bool ;CurrentSegmentNumber uint32 ;AverageTemplates *_cb .Bitmaps ;BaseIndexes []int ;Refinement bool ;RefineLevel int ;_ff uint8 ;_fc *_a .BufferedWriter ;EncodeGlobals bool ;_af int ;_aa map[int ][]int ;_eg map[int ][]int ;
|
|
_cg []int ;_egd map[int ]int ;};func (_de *Document )AddGenericPage (bm *_cb .Bitmap ,duplicateLineRemoval bool )(_g error ){const _cc ="\u0044\u006f\u0063um\u0065\u006e\u0074\u002e\u0041\u0064\u0064\u0047\u0065\u006e\u0065\u0072\u0069\u0063\u0050\u0061\u0067\u0065";
|
|
if !_de .FullHeaders &&_de .NumberOfPages !=0{return _ef .Error (_cc ,"\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");
|
|
};_fb :=&Page {Segments :[]*_da .Header {},Bitmap :bm ,Document :_de ,FinalHeight :bm .Height ,FinalWidth :bm .Width ,IsLossless :true ,BlackIsOne :bm .Color ==_cb .Chocolate };_fb .PageNumber =int (_de .nextPageNumber ());_de .Pages [_fb .PageNumber ]=_fb ;
|
|
bm .InverseData ();_fb .AddPageInformationSegment ();if _g =_fb .AddGenericRegion (bm ,0,0,0,_da .TImmediateGenericRegion ,duplicateLineRemoval );_g !=nil {return _ef .Wrap (_g ,_cc ,"");};if _de .FullHeaders {_fb .AddEndOfPageSegment ();};return nil ;
|
|
};type Page struct{Segments []*_da .Header ;PageNumber int ;Bitmap *_cb .Bitmap ;FinalHeight int ;FinalWidth int ;ResolutionX int ;ResolutionY int ;IsLossless bool ;Document *Document ;FirstSegmentNumber int ;EncodingMethod EncodingMethod ;BlackIsOne bool ;
|
|
};func (_cff *Page )AddGenericRegion (bm *_cb .Bitmap ,xloc ,yloc ,template int ,tp _da .Type ,duplicateLineRemoval bool )error {const _dgf ="P\u0061\u0067\u0065\u002eAd\u0064G\u0065\u006e\u0065\u0072\u0069c\u0052\u0065\u0067\u0069\u006f\u006e";_aba :=&_da .GenericRegion {};
|
|
if _bccc :=_aba .InitEncode (bm ,xloc ,yloc ,template ,duplicateLineRemoval );_bccc !=nil {return _ef .Wrap (_bccc ,_dgf ,"");};_gge :=&_da .Header {Type :_da .TImmediateGenericRegion ,PageAssociation :_cff .PageNumber ,SegmentData :_aba };_cff .Segments =append (_cff .Segments ,_gge );
|
|
return nil ;};func (_gbd *Page )GetBitmap ()(_faf *_cb .Bitmap ,_bcdd error ){_c .Log .Trace (_bf .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",_gbd .PageNumber ));
|
|
defer func (){if _bcdd !=nil {_c .Log .Trace (_bf .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",_gbd .PageNumber ,_bcdd ));
|
|
}else {_c .Log .Trace (_bf .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",_gbd .PageNumber ));};}();if _gbd .Bitmap !=nil {return _gbd .Bitmap ,nil ;
|
|
};_bcdd =_gbd .composePageBitmap ();if _bcdd !=nil {return nil ,_bcdd ;};return _gbd .Bitmap ,nil ;};func (_ggae *Page )GetResolutionY ()(int ,error ){return _ggae .getResolutionY ()};func (_gdg *Document )GetGlobalSegment (i int )(*_da .Header ,error ){_egg ,_baa :=_gdg .GlobalSegments .GetSegment (i );
|
|
if _baa !=nil {return nil ,_ef .Wrap (_baa ,"\u0047\u0065t\u0047\u006c\u006fb\u0061\u006c\u0053\u0065\u0067\u006d\u0065\u006e\u0074","");};return _egg ,nil ;};func (_cdd *Page )GetResolutionX ()(int ,error ){return _cdd .getResolutionX ()};var _ag =[]byte {0x97,0x4A,0x42,0x32,0x0D,0x0A,0x1A,0x0A};
|
|
func (_fda *Document )GetNumberOfPages ()(uint32 ,error ){if _fda .NumberOfPagesUnknown ||_fda .NumberOfPages ==0{if len (_fda .Pages )==0{if _cbbc :=_fda .mapData ();_cbbc !=nil {return 0,_ef .Wrap (_cbbc ,"\u0044o\u0063\u0075\u006d\u0065n\u0074\u002e\u0047\u0065\u0074N\u0075m\u0062e\u0072\u004f\u0066\u0050\u0061\u0067\u0065s","");
|
|
};};return uint32 (len (_fda .Pages )),nil ;};return _fda .NumberOfPages ,nil ;};func (_acg *Document )nextPageNumber ()uint32 {_acg .NumberOfPages ++;return _acg .NumberOfPages };func (_fac *Document )Encode ()(_cbb []byte ,_gab error ){const _cba ="\u0044o\u0063u\u006d\u0065\u006e\u0074\u002e\u0045\u006e\u0063\u006f\u0064\u0065";
|
|
var _bb ,_bdb int ;if _fac .FullHeaders {if _bb ,_gab =_fac .encodeFileHeader (_fac ._fc );_gab !=nil {return nil ,_ef .Wrap (_gab ,_cba ,"");};};var (_eda bool ;_fcb *_da .Header ;_cbbe *Page ;);if _gab =_fac .completeClassifiedPages ();_gab !=nil {return nil ,_ef .Wrap (_gab ,_cba ,"");
|
|
};if _gab =_fac .produceClassifiedPages ();_gab !=nil {return nil ,_ef .Wrap (_gab ,_cba ,"");};if _fac .GlobalSegments !=nil {for _ ,_fcb =range _fac .GlobalSegments .Segments {if _gab =_fac .encodeSegment (_fcb ,&_bb );_gab !=nil {return nil ,_ef .Wrap (_gab ,_cba ,"");
|
|
};};};for _cbg :=1;_cbg <=int (_fac .NumberOfPages );_cbg ++{if _cbbe ,_eda =_fac .Pages [_cbg ];!_eda {return nil ,_ef .Errorf (_cba ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_cbg );};for _ ,_fcb =range _cbbe .Segments {if _gab =_fac .encodeSegment (_fcb ,&_bb );
|
|
_gab !=nil {return nil ,_ef .Wrap (_gab ,_cba ,"");};};};if _fac .FullHeaders {if _bdb ,_gab =_fac .encodeEOFHeader (_fac ._fc );_gab !=nil {return nil ,_ef .Wrap (_gab ,_cba ,"");};_bb +=_bdb ;};_cbb =_fac ._fc .Data ();if len (_cbb )!=_bb {_c .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",_bb ,len (_cbb ));
|
|
};return _cbb ,nil ;};func (_bfd *Globals )AddSegment (segment *_da .Header ){_bfd .Segments =append (_bfd .Segments ,segment )};func (_fag *Document )mapData ()error {const _afb ="\u006da\u0070\u0044\u0061\u0074\u0061";var (_adee []*_da .Header ;_agf int64 ;
|
|
_ege _da .Type ;);_egf ,_ebd :=_fag .isFileHeaderPresent ();if _ebd !=nil {return _ef .Wrap (_ebd ,_afb ,"");};if _egf {if _ebd =_fag .parseFileHeader ();_ebd !=nil {return _ef .Wrap (_ebd ,_afb ,"");};_agf +=int64 (_fag ._ff );_fag .FullHeaders =true ;
|
|
};var (_gga *Page ;_cee bool ;);for _ege !=51&&!_cee {_bebc ,_gbb :=_da .NewHeader (_fag ,_fag .InputStream ,_agf ,_fag .OrganizationType );if _gbb !=nil {return _ef .Wrap (_gbb ,_afb ,"");};_c .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",_bebc .SegmentNumber ,_bebc .Type );
|
|
_ege =_bebc .Type ;if _ege !=_da .TEndOfFile {if _bebc .PageAssociation !=0{_gga =_fag .Pages [_bebc .PageAssociation ];if _gga ==nil {_gga =_fage (_fag ,_bebc .PageAssociation );_fag .Pages [_bebc .PageAssociation ]=_gga ;if _fag .NumberOfPagesUnknown {_fag .NumberOfPages ++;
|
|
};};_gga .Segments =append (_gga .Segments ,_bebc );}else {_fag .GlobalSegments .AddSegment (_bebc );};};_adee =append (_adee ,_bebc );_agf =_fag .InputStream .StreamPosition ();if _fag .OrganizationType ==_da .OSequential {_agf +=int64 (_bebc .SegmentDataLength );
|
|
};_cee ,_gbb =_fag .reachedEOF (_agf );if _gbb !=nil {_c .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",_gbb );
|
|
return _ef .Wrap (_gbb ,_afb ,"");};};_fag .determineRandomDataOffsets (_adee ,uint64 (_agf ));return nil ;};func (_ega *Document )nextSegmentNumber ()uint32 {_badd :=_ega .CurrentSegmentNumber ;_ega .CurrentSegmentNumber ++;return _badd ;};func (_ebddf *Page )composePageBitmap ()error {const _gca ="\u0063\u006f\u006d\u0070\u006f\u0073\u0065\u0050\u0061\u0067\u0065\u0042i\u0074\u006d\u0061\u0070";
|
|
if _ebddf .PageNumber ==0{return nil ;};_gabf :=_ebddf .getPageInformationSegment ();if _gabf ==nil {return _ef .Error (_gca ,"\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");
|
|
};_gda ,_cbcb :=_gabf .GetSegmentData ();if _cbcb !=nil {return _cbcb ;};_adf ,_fab :=_gda .(*_da .PageInformationSegment );if !_fab {return _ef .Error (_gca ,"\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 _cbcb =_ebddf .createPage (_adf );_cbcb !=nil {return _ef .Wrap (_cbcb ,_gca ,"");};_ebddf .clearSegmentData ();return nil ;};func (_ggc *Page )getResolutionY ()(int ,error ){const _gag ="\u0067\u0065\u0074\u0052\u0065\u0073\u006f\u006c\u0075t\u0069\u006f\u006e\u0059";
|
|
if _ggc .ResolutionY !=0{return _ggc .ResolutionY ,nil ;};_gace :=_ggc .getPageInformationSegment ();if _gace ==nil {return 0,_ef .Error (_gag ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_ffad ,_bffeg :=_gace .GetSegmentData ();
|
|
if _bffeg !=nil {return 0,_ef .Wrap (_bffeg ,_gag ,"");};_dfc ,_cbe :=_ffad .(*_da .PageInformationSegment );if !_cbe {return 0,_ef .Errorf (_gag ,"\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",_ffad );
|
|
};_ggc .ResolutionY =_dfc .ResolutionY ;return _ggc .ResolutionY ,nil ;};func (_daf *Document )encodeSegment (_dae *_da .Header ,_cdg *int )error {const _cdc ="\u0065\u006e\u0063\u006f\u0064\u0065\u0053\u0065\u0067\u006d\u0065\u006e\u0074";_dae .SegmentNumber =_daf .nextSegmentNumber ();
|
|
_gea ,_gcc :=_dae .Encode (_daf ._fc );if _gcc !=nil {return _ef .Wrapf (_gcc ,_cdc ,"\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u003a\u0020\u0027\u0025\u0064\u0027",_dae .SegmentNumber );};*_cdg +=_gea ;return nil ;};func (_dg *Document )completeClassifiedPages ()(_ea error ){const _bdc ="\u0063\u006f\u006dpl\u0065\u0074\u0065\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0050\u0061\u0067\u0065\u0073";
|
|
if _dg .Classer ==nil {return nil ;};_dg ._cg =make ([]int ,_dg .Classer .UndilatedTemplates .Size ());for _cbc :=0;_cbc < _dg .Classer .ClassIDs .Size ();_cbc ++{_cfb ,_cfg :=_dg .Classer .ClassIDs .Get (_cbc );if _cfg !=nil {return _ef .Wrapf (_cfg ,_bdc ,"\u0063\u006c\u0061\u0073s \u0077\u0069\u0074\u0068\u0020\u0069\u0064\u003a\u0020\u0027\u0025\u0064\u0027",_cbc );
|
|
};_dg ._cg [_cfb ]++;};var _cfc []int ;for _gc :=0;_gc < _dg .Classer .UndilatedTemplates .Size ();_gc ++{if _dg .NumberOfPages ==1||_dg ._cg [_gc ]> 1{_cfc =append (_cfc ,_gc );};};var (_deg *Page ;_gf bool ;);for _fd ,_ga :=range *_dg .Classer .ComponentPageNumbers {if _deg ,_gf =_dg .Pages [_ga ];
|
|
!_gf {return _ef .Errorf (_bdc ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_fd );};if _deg .EncodingMethod ==GenericEM {_c .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",_fd );
|
|
continue ;};_dg ._eg [_ga ]=append (_dg ._eg [_ga ],_fd );_ffb ,_age :=_dg .Classer .ClassIDs .Get (_fd );if _age !=nil {return _ef .Wrapf (_age ,_bdc ,"\u006e\u006f\u0020\u0073uc\u0068\u0020\u0063\u006c\u0061\u0073\u0073\u0049\u0044\u003a\u0020\u0025\u0064",_fd );
|
|
};if _dg ._cg [_ffb ]==1&&_dg .NumberOfPages !=1{_ee :=append (_dg ._aa [_ga ],_ffb );_dg ._aa [_ga ]=_ee ;};};if _ea =_dg .Classer .ComputeLLCorners ();_ea !=nil {return _ef .Wrap (_ea ,_bdc ,"");};if _ ,_ea =_dg .addSymbolDictionary (0,_dg .Classer .UndilatedTemplates ,_cfc ,_dg ._egd ,false );
|
|
_ea !=nil {return _ef .Wrap (_ea ,_bdc ,"");};return nil ;};func (_fca *Globals )GetSymbolDictionary ()(*_da .Header ,error ){const _ddf ="G\u006c\u006f\u0062\u0061\u006c\u0073.\u0047\u0065\u0074\u0053\u0079\u006d\u0062\u006f\u006cD\u0069\u0063\u0074i\u006fn\u0061\u0072\u0079";
|
|
if _fca ==nil {return nil ,_ef .Error (_ddf ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (_fca .Segments )==0{return nil ,_ef .Error (_ddf ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");
|
|
};for _ ,_bdbe :=range _fca .Segments {if _bdbe .Type ==_da .TSymbolDictionary {return _bdbe ,nil ;};};return nil ,_ef .Error (_ddf ,"\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 (_bdcb *Document )reachedEOF (_gdd int64 )(bool ,error ){const _def ="\u0072\u0065\u0061\u0063\u0068\u0065\u0064\u0045\u004f\u0046";_ ,_daeg :=_bdcb .InputStream .Seek (_gdd ,_d .SeekStart );if _daeg !=nil {_c .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",_daeg );
|
|
return false ,_ef .Wrap (_daeg ,_def ,"\u0069n\u0070\u0075\u0074\u0020\u0073\u0074\u0072\u0065\u0061\u006d\u0020s\u0065\u0065\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};_ ,_daeg =_bdcb .InputStream .ReadBits (32);if _daeg ==_d .EOF {return true ,nil ;
|
|
}else if _daeg !=nil {return false ,_ef .Wrap (_daeg ,_def ,"");};return false ,nil ;};type EncodingMethod int ;func (_cab *Page )createStripedPage (_cge *_da .PageInformationSegment )error {const _bca ="\u0063\u0072\u0065\u0061\u0074\u0065\u0053\u0074\u0072\u0069\u0070\u0065d\u0050\u0061\u0067\u0065";
|
|
_aca ,_ecd :=_cab .collectPageStripes ();if _ecd !=nil {return _ef .Wrap (_ecd ,_bca ,"");};var _ddb int ;for _ ,_ddfd :=range _aca {if _gcg ,_adg :=_ddfd .(*_da .EndOfStripe );_adg {_ddb =_gcg .LineNumber ()+1;}else {_fbb :=_ddfd .(_da .Regioner );_afa :=_fbb .GetRegionInfo ();
|
|
_bdec :=_cab .getCombinationOperator (_cge ,_afa .CombinaionOperator );_acac ,_gcgf :=_fbb .GetRegionBitmap ();if _gcgf !=nil {return _ef .Wrap (_gcgf ,_bca ,"");};_gcgf =_cb .Blit (_acac ,_cab .Bitmap ,int (_afa .XLocation ),_ddb ,_bdec );if _gcgf !=nil {return _ef .Wrap (_gcgf ,_bca ,"");
|
|
};};};return nil ;};func (_bfg *Document )determineRandomDataOffsets (_dgb []*_da .Header ,_dde uint64 ){if _bfg .OrganizationType !=_da .ORandom {return ;};for _ ,_cec :=range _dgb {_cec .SegmentDataStartOffset =_dde ;_dde +=_cec .SegmentDataLength ;};
|
|
};func _fage (_egb *Document ,_gccf int )*Page {return &Page {Document :_egb ,PageNumber :_gccf ,Segments :[]*_da .Header {}};};func (_bdd *Page )AddPageInformationSegment (){_geae :=&_da .PageInformationSegment {PageBMWidth :_bdd .FinalWidth ,PageBMHeight :_bdd .FinalHeight ,ResolutionX :_bdd .ResolutionX ,ResolutionY :_bdd .ResolutionY ,IsLossless :_bdd .IsLossless };
|
|
if _bdd .BlackIsOne {_geae .DefaultPixelValue =uint8 (0x1);};_gbcf :=&_da .Header {PageAssociation :_bdd .PageNumber ,SegmentDataLength :uint64 (_geae .Size ()),SegmentData :_geae ,Type :_da .TPageInformation };_bdd .Segments =append (_bdd .Segments ,_gbcf );
|
|
};func (_cfbb *Document )parseFileHeader ()error {const _ebdd ="\u0070a\u0072s\u0065\u0046\u0069\u006c\u0065\u0048\u0065\u0061\u0064\u0065\u0072";_ ,_ebb :=_cfbb .InputStream .Seek (8,_d .SeekStart );if _ebb !=nil {return _ef .Wrap (_ebb ,_ebdd ,"\u0069\u0064");
|
|
};_ ,_ebb =_cfbb .InputStream .ReadBits (5);if _ebb !=nil {return _ef .Wrap (_ebb ,_ebdd ,"\u0072\u0065\u0073\u0065\u0072\u0076\u0065\u0064\u0020\u0062\u0069\u0074\u0073");};_aeg ,_ebb :=_cfbb .InputStream .ReadBit ();if _ebb !=nil {return _ef .Wrap (_ebb ,_ebdd ,"\u0065x\u0074e\u006e\u0064\u0065\u0064\u0020t\u0065\u006dp\u006c\u0061\u0074\u0065\u0073");
|
|
};if _aeg ==1{_cfbb .GBUseExtTemplate =true ;};_aeg ,_ebb =_cfbb .InputStream .ReadBit ();if _ebb !=nil {return _ef .Wrap (_ebb ,_ebdd ,"\u0075\u006e\u006b\u006eow\u006e\u0020\u0070\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072");};if _aeg !=1{_cfbb .NumberOfPagesUnknown =false ;
|
|
};_aeg ,_ebb =_cfbb .InputStream .ReadBit ();if _ebb !=nil {return _ef .Wrap (_ebb ,_ebdd ,"\u006f\u0072\u0067\u0061\u006e\u0069\u007a\u0061\u0074\u0069\u006f\u006e \u0074\u0079\u0070\u0065");};_cfbb .OrganizationType =_da .OrganizationType (_aeg );if !_cfbb .NumberOfPagesUnknown {_cfbb .NumberOfPages ,_ebb =_cfbb .InputStream .ReadUint32 ();
|
|
if _ebb !=nil {return _ef .Wrap (_ebb ,_ebdd ,"\u006eu\u006db\u0065\u0072\u0020\u006f\u0066\u0020\u0070\u0061\u0067\u0065\u0073");};_cfbb ._ff =13;};return nil ;};func (_degc *Document )completeSymbols ()(_fdd error ){const _dbf ="\u0063o\u006dp\u006c\u0065\u0074\u0065\u0053\u0079\u006d\u0062\u006f\u006c\u0073";
|
|
if _degc .Classer ==nil {return nil ;};if _degc .Classer .UndilatedTemplates ==nil {return _ef .Error (_dbf ,"\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");
|
|
};_baf :=len (_degc .Pages )==1;_ggg :=make ([]int ,_degc .Classer .UndilatedTemplates .Size ());var _bg int ;for _gde :=0;_gde < _degc .Classer .ClassIDs .Size ();_gde ++{_bg ,_fdd =_degc .Classer .ClassIDs .Get (_gde );if _fdd !=nil {return _ef .Wrap (_fdd ,_dbf ,"\u0063\u006c\u0061\u0073\u0073\u0020\u0049\u0044\u0027\u0073");
|
|
};_ggg [_bg ]++;};var _fdf []int ;for _geb :=0;_geb < _degc .Classer .UndilatedTemplates .Size ();_geb ++{if _ggg [_geb ]==0{return _ef .Error (_dbf ,"\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 _ggg [_geb ]> 1||_baf {_fdf =append (_fdf ,_geb );};};_degc ._af =len (_fdf );var _bad ,_ec int ;for _dgg :=0;_dgg < _degc .Classer .ComponentPageNumbers .Size ();_dgg ++{_bad ,_fdd =_degc .Classer .ComponentPageNumbers .Get (_dgg );if _fdd !=nil {return _ef .Wrapf (_fdd ,_dbf ,"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",_dgg );
|
|
};_ec ,_fdd =_degc .Classer .ClassIDs .Get (_dgg );if _fdd !=nil {return _ef .Wrapf (_fdd ,_dbf ,"\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",_bad );
|
|
};if _ggg [_ec ]==1&&!_baf {_degc ._aa [_bad ]=append (_degc ._aa [_bad ],_ec );};};if _fdd =_degc .Classer .ComputeLLCorners ();_fdd !=nil {return _ef .Wrap (_fdd ,_dbf ,"");};return nil ;};func (_dba *Page )GetHeight ()(int ,error ){return _dba .getHeight ()};
|
|
func (_bgg *Page )lastSegmentNumber ()(_gaca uint32 ,_bdbcd error ){const _cbbd ="\u006c\u0061\u0073\u0074\u0053\u0065\u0067\u006d\u0065\u006e\u0074\u004eu\u006d\u0062\u0065\u0072";if len (_bgg .Segments )==0{return _gaca ,_ef .Errorf (_cbbd ,"\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",_bgg .PageNumber );
|
|
};return _bgg .Segments [len (_bgg .Segments )-1].SegmentNumber ,nil ;};func (_gb *Document )AddClassifiedPage (bm *_cb .Bitmap ,method _bff .Method )(_ae error ){const _bc ="\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 !_gb .FullHeaders &&_gb .NumberOfPages !=0{return _ef .Error (_bc ,"\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 _gb .Classer ==nil {if _gb .Classer ,_ae =_bff .Init (_bff .DefaultSettings ());_ae !=nil {return _ef .Wrap (_ae ,_bc ,"");};};_bd :=int (_gb .nextPageNumber ());_dd :=&Page {Segments :[]*_da .Header {},Bitmap :bm ,Document :_gb ,FinalHeight :bm .Height ,FinalWidth :bm .Width ,PageNumber :_bd };
|
|
_gb .Pages [_bd ]=_dd ;switch method {case _bff .RankHaus :_dd .EncodingMethod =RankHausEM ;case _bff .Correlation :_dd .EncodingMethod =CorrelationEM ;};_dd .AddPageInformationSegment ();if _ae =_gb .Classer .AddPage (bm ,_bd ,method );_ae !=nil {return _ef .Wrap (_ae ,_bc ,"");
|
|
};if _gb .FullHeaders {_dd .AddEndOfPageSegment ();};return nil ;};func InitEncodeDocument (fullHeaders bool )*Document {return &Document {FullHeaders :fullHeaders ,_fc :_a .BufferedMSB (),Pages :map[int ]*Page {},_aa :map[int ][]int {},_egd :map[int ]int {},_eg :map[int ][]int {}};
|
|
};func (_edaf *Document )GetPage (pageNumber int )(_da .Pager ,error ){const _dc ="\u0044\u006fc\u0075\u006d\u0065n\u0074\u002e\u0047\u0065\u0074\u0050\u0061\u0067\u0065";if pageNumber < 0{_c .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 ,_fg .Stack ());
|
|
return nil ,_ef .Errorf (_dc ,"\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 (_edaf .Pages ){_c .Log .Debug ("\u0050\u0061\u0067\u0065 n\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u003a\u0020\u0025\u0064\u002e\u0020%\u0073",pageNumber ,_fg .Stack ());return nil ,_ef .Error (_dc ,"\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");
|
|
};_bab ,_efg :=_edaf .Pages [pageNumber ];if !_efg {_c .Log .Debug ("\u0050\u0061\u0067\u0065 n\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u003a\u0020\u0025\u0064\u002e\u0020%\u0073",pageNumber ,_fg .Stack ());return nil ,_ef .Errorf (_dc ,"\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 _bab ,nil ;};func _ffed (_cfe _a .StreamReader ,_eeff *Globals )(*Document ,error ){_afd :=&Document {Pages :make (map[int ]*Page ),InputStream :_cfe ,OrganizationType :_da .OSequential ,NumberOfPagesUnknown :true ,GlobalSegments :_eeff ,_ff :9};
|
|
if _afd .GlobalSegments ==nil {_afd .GlobalSegments =&Globals {};};if _bcc :=_afd .mapData ();_bcc !=nil {return nil ,_bcc ;};return _afd ,nil ;};func (_cagg *Page )countRegions ()int {var _dgdb int ;for _ ,_ddbe :=range _cagg .Segments {switch _ddbe .Type {case 6,7,22,23,38,39,42,43:_dgdb ++;
|
|
};};return _dgdb ;};func (_cdcc *Page )getHeight ()(int ,error ){const _fba ="\u0067e\u0074\u0048\u0065\u0069\u0067\u0068t";if _cdcc .FinalHeight !=0{return _cdcc .FinalHeight ,nil ;};_bec :=_cdcc .getPageInformationSegment ();if _bec ==nil {return 0,_ef .Error (_fba ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");
|
|
};_gac ,_gfd :=_bec .GetSegmentData ();if _gfd !=nil {return 0,_ef .Wrap (_gfd ,_fba ,"");};_dce ,_ddfg :=_gac .(*_da .PageInformationSegment );if !_ddfg {return 0,_ef .Errorf (_fba ,"\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",_gac );
|
|
};if _dce .PageBMHeight ==_b .MaxInt32 {_ ,_gfd =_cdcc .GetBitmap ();if _gfd !=nil {return 0,_ef .Wrap (_gfd ,_fba ,"");};}else {_cdcc .FinalHeight =_dce .PageBMHeight ;};return _cdcc .FinalHeight ,nil ;};func DecodeDocument (input _a .StreamReader ,globals *Globals )(*Document ,error ){return _ffed (input ,globals );
|
|
};func (_ada *Page )String ()string {return _bf .Sprintf ("\u0050\u0061\u0067\u0065\u0020\u0023\u0025\u0064",_ada .PageNumber );};func (_fde *Page )getWidth ()(int ,error ){const _fea ="\u0067\u0065\u0074\u0057\u0069\u0064\u0074\u0068";if _fde .FinalWidth !=0{return _fde .FinalWidth ,nil ;
|
|
};_aegg :=_fde .getPageInformationSegment ();if _aegg ==nil {return 0,_ef .Error (_fea ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_dca ,_ebg :=_aegg .GetSegmentData ();if _ebg !=nil {return 0,_ef .Wrap (_ebg ,_fea ,"");
|
|
};_bdg ,_dcg :=_dca .(*_da .PageInformationSegment );if !_dcg {return 0,_ef .Errorf (_fea ,"\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",_dca );
|
|
};_fde .FinalWidth =_bdg .PageBMWidth ;return _fde .FinalWidth ,nil ;};func (_fcag *Page )GetWidth ()(int ,error ){return _fcag .getWidth ()};func (_dge *Document )addSymbolDictionary (_ed int ,_aga *_cb .Bitmaps ,_efe []int ,_gfgc map[int ]int ,_df bool )(*_da .Header ,error ){const _fcf ="\u0061\u0064\u0064\u0053ym\u0062\u006f\u006c\u0044\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079";
|
|
_faa :=&_da .SymbolDictionary {};if _bfa :=_faa .InitEncode (_aga ,_efe ,_gfgc ,_df );_bfa !=nil {return nil ,_bfa ;};_gfe :=&_da .Header {Type :_da .TSymbolDictionary ,PageAssociation :_ed ,SegmentData :_faa };if _ed ==0{if _dge .GlobalSegments ==nil {_dge .GlobalSegments =&Globals {};
|
|
};_dge .GlobalSegments .AddSegment (_gfe );return _gfe ,nil ;};_bcd ,_dac :=_dge .Pages [_ed ];if !_dac {return nil ,_ef .Errorf (_fcf ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_ed );};var (_cgg int ;
|
|
_gbf *_da .Header ;);for _cgg ,_gbf =range _bcd .Segments {if _gbf .Type ==_da .TPageInformation {break ;};};_cgg ++;_bcd .Segments =append (_bcd .Segments ,nil );copy (_bcd .Segments [_cgg +1:],_bcd .Segments [_cgg :]);_bcd .Segments [_cgg ]=_gfe ;return _gfe ,nil ;
|
|
};type Globals struct{Segments []*_da .Header ;};func (_gfc *Document )encodeEOFHeader (_eac _a .BinaryWriter )(_bbd int ,_edf error ){_ac :=&_da .Header {SegmentNumber :_gfc .nextSegmentNumber (),Type :_da .TEndOfFile };if _bbd ,_edf =_ac .Encode (_eac );
|
|
_edf !=nil {return 0,_ef .Wrap (_edf ,"\u0065n\u0063o\u0064\u0065\u0045\u004f\u0046\u0048\u0065\u0061\u0064\u0065\u0072","");};return _bbd ,nil ;};func (_bcg *Page )getCombinationOperator (_dbge *_da .PageInformationSegment ,_bee _cb .CombinationOperator )_cb .CombinationOperator {if _dbge .CombinationOperatorOverrideAllowed (){return _bee ;
|
|
};return _dbge .CombinationOperator ();};func (_fe *Page )createPage (_fgdc *_da .PageInformationSegment )error {var _feg error ;if !_fgdc .IsStripe ||_fgdc .PageBMHeight !=-1{_feg =_fe .createNormalPage (_fgdc );}else {_feg =_fe .createStripedPage (_fgdc );
|
|
};return _feg ;};func (_gfgf *Page )getResolutionX ()(int ,error ){const _fef ="\u0067\u0065\u0074\u0052\u0065\u0073\u006f\u006c\u0075t\u0069\u006f\u006e\u0058";if _gfgf .ResolutionX !=0{return _gfgf .ResolutionX ,nil ;};_gaac :=_gfgf .getPageInformationSegment ();
|
|
if _gaac ==nil {return 0,_ef .Error (_fef ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_feac ,_bfe :=_gaac .GetSegmentData ();if _bfe !=nil {return 0,_ef .Wrap (_bfe ,_fef ,"");};_dcf ,_fgef :=_feac .(*_da .PageInformationSegment );
|
|
if !_fgef {return 0,_ef .Errorf (_fef ,"\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",_feac );
|
|
};_gfgf .ResolutionX =_dcf .ResolutionX ;return _gfgf .ResolutionX ,nil ;};func (_eff *Page )collectPageStripes ()(_dec []_da .Segmenter ,_bddf error ){const _bdf ="\u0063o\u006cl\u0065\u0063\u0074\u0050\u0061g\u0065\u0053t\u0072\u0069\u0070\u0065\u0073";
|
|
var _fced _da .Segmenter ;for _ ,_adb :=range _eff .Segments {switch _adb .Type {case 6,7,22,23,38,39,42,43:_fced ,_bddf =_adb .GetSegmentData ();if _bddf !=nil {return nil ,_ef .Wrap (_bddf ,_bdf ,"");};_dec =append (_dec ,_fced );case 50:_fced ,_bddf =_adb .GetSegmentData ();
|
|
if _bddf !=nil {return nil ,_bddf ;};_efea ,_dfb :=_fced .(*_da .EndOfStripe );if !_dfb {return nil ,_ef .Errorf (_bdf ,"\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",_fced );
|
|
};_dec =append (_dec ,_efea );_eff .FinalHeight =_efea .LineNumber ();};};return _dec ,nil ;};func (_aab *Page )getPageInformationSegment ()*_da .Header {for _ ,_aggc :=range _aab .Segments {if _aggc .Type ==_da .TPageInformation {return _aggc ;};};_c .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",_aab );
|
|
return nil ;};func (_abg *Document )encodeFileHeader (_be _a .BinaryWriter )(_ecg int ,_aea error ){const _dbe ="\u0065\u006ec\u006f\u0064\u0065F\u0069\u006c\u0065\u0048\u0065\u0061\u0064\u0065\u0072";_ecg ,_aea =_be .Write (_ag );if _aea !=nil {return _ecg ,_ef .Wrap (_aea ,_dbe ,"\u0069\u0064");
|
|
};if _aea =_be .WriteByte (0x01);_aea !=nil {return _ecg ,_ef .Wrap (_aea ,_dbe ,"\u0066\u006c\u0061g\u0073");};_ecg ++;_aac :=make ([]byte ,4);_e .BigEndian .PutUint32 (_aac ,_abg .NumberOfPages );_ade ,_aea :=_be .Write (_aac );if _aea !=nil {return _ade ,_ef .Wrap (_aea ,_dbe ,"p\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072");
|
|
};_ecg +=_ade ;return _ecg ,nil ;};func (_abf *Globals )GetSegmentByIndex (index int )(*_da .Header ,error ){const _dbb ="\u0047l\u006f\u0062\u0061\u006cs\u002e\u0047\u0065\u0074\u0053e\u0067m\u0065n\u0074\u0042\u0079\u0049\u006e\u0064\u0065x";if _abf ==nil {return nil ,_ef .Error (_dbb ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
|
|
};if len (_abf .Segments )==0{return nil ,_ef .Error (_dbb ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");};if index > len (_abf .Segments )-1{return nil ,_ef .Error (_dbb ,"\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");
|
|
};return _abf .Segments [index ],nil ;};func (_gfg *Document )produceClassifiedPage (_eaf *Page ,_eaa *_da .Header )(_agg error ){const _fgd ="p\u0072\u006f\u0064\u0075ce\u0043l\u0061\u0073\u0073\u0069\u0066i\u0065\u0064\u0050\u0061\u0067\u0065";var _aag map[int ]int ;
|
|
_fa :=_gfg ._af ;_cd :=[]*_da .Header {_eaa };if len (_gfg ._aa [_eaf .PageNumber ])> 0{_aag =map[int ]int {};_gaa ,_efa :=_gfg .addSymbolDictionary (_eaf .PageNumber ,_gfg .Classer .UndilatedTemplates ,_gfg ._aa [_eaf .PageNumber ],_aag ,false );if _efa !=nil {return _ef .Wrap (_efa ,_fgd ,"");
|
|
};_cd =append (_cd ,_gaa );_fa +=len (_gfg ._aa [_eaf .PageNumber ]);};_ge :=_gfg ._eg [_eaf .PageNumber ];_c .Log .Debug ("P\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020c\u006f\u006d\u0070\u0073: \u0025\u0076",_eaf .PageNumber ,_ge );_eaf .addTextRegionSegment (_cd ,_gfg ._egd ,_aag ,_gfg ._eg [_eaf .PageNumber ],_gfg .Classer .PtaLL ,_gfg .Classer .UndilatedTemplates ,_gfg .Classer .ClassIDs ,nil ,_eb (_fa ),len (_gfg ._eg [_eaf .PageNumber ]));
|
|
return nil ;};func _eb (_db int )int {_gd :=0;_dgd :=(_db &(_db -1))==0;_db >>=1;for ;_db !=0;_db >>=1{_gd ++;};if _dgd {return _gd ;};return _gd +1;};func (_ggea *Page )addTextRegionSegment (_ebdf []*_da .Header ,_bda ,_aed map[int ]int ,_fbf []int ,_ffa *_cb .Points ,_fge *_cb .Bitmaps ,_cffa *_cf .IntSlice ,_bffe *_cb .Boxes ,_aee ,_fce int ){_bbf :=&_da .TextRegion {NumberOfSymbols :uint32 (_fce )};
|
|
_bbf .InitEncode (_bda ,_aed ,_fbf ,_ffa ,_fge ,_cffa ,_bffe ,_ggea .FinalWidth ,_ggea .FinalHeight ,_aee );_edb :=&_da .Header {RTSegments :_ebdf ,SegmentData :_bbf ,PageAssociation :_ggea .PageNumber ,Type :_da .TImmediateTextRegion };_ded :=_da .TPageInformation ;
|
|
if _aed !=nil {_ded =_da .TSymbolDictionary ;};var _adc int ;for ;_adc < len (_ggea .Segments );_adc ++{if _ggea .Segments [_adc ].Type ==_ded {_adc ++;break ;};};_ggea .Segments =append (_ggea .Segments ,nil );copy (_ggea .Segments [_adc +1:],_ggea .Segments [_adc :]);
|
|
_ggea .Segments [_adc ]=_edb ;};func (_ca *Page )Encode (w _a .BinaryWriter )(_gebb int ,_ebbg error ){const _aad ="P\u0061\u0067\u0065\u002e\u0045\u006e\u0063\u006f\u0064\u0065";var _fcd int ;for _ ,_dafc :=range _ca .Segments {if _fcd ,_ebbg =_dafc .Encode (w );
|
|
_ebbg !=nil {return _gebb ,_ef .Wrap (_ebbg ,_aad ,"");};_gebb +=_fcd ;};return _gebb ,nil ;};func (_ddef *Page )AddEndOfPageSegment (){_ceed :=&_da .Header {Type :_da .TEndOfPage ,PageAssociation :_ddef .PageNumber };_ddef .Segments =append (_ddef .Segments ,_ceed );
|
|
};func (_aff *Page )clearSegmentData (){for _bfae :=range _aff .Segments {_aff .Segments [_bfae ].CleanSegmentData ();};};func (_dbg *Page )fitsPage (_ddffe *_da .PageInformationSegment ,_bgd *_cb .Bitmap )bool {return _dbg .countRegions ()==1&&_ddffe .DefaultPixelValue ==0&&_ddffe .PageBMWidth ==_bgd .Width &&_ddffe .PageBMHeight ==_bgd .Height ;
|
|
};func (_agfb *Page )nextSegmentNumber ()uint32 {return _agfb .Document .nextSegmentNumber ()};func (_bddb *Page )GetSegment (number int )(*_da .Header ,error ){const _dda ="\u0050a\u0067e\u002e\u0047\u0065\u0074\u0053\u0065\u0067\u006d\u0065\u006e\u0074";
|
|
for _ ,_cbbb :=range _bddb .Segments {if _cbbb .SegmentNumber ==uint32 (number ){return _cbbb ,nil ;};};_bba :=make ([]uint32 ,len (_bddb .Segments ));for _gef ,_eeg :=range _bddb .Segments {_bba [_gef ]=_eeg .SegmentNumber ;};return nil ,_ef .Errorf (_dda ,"\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 ,_bddb .PageNumber ,_bba );
|
|
};func (_dea *Document )produceClassifiedPages ()(_eef error ){const _ce ="\u0070\u0072\u006f\u0064uc\u0065\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0050\u0061\u0067e\u0073";if _dea .Classer ==nil {return nil ;};var (_gg *Page ;_ba bool ;
|
|
_ceb *_da .Header ;);for _gbc :=1;_gbc <=int (_dea .NumberOfPages );_gbc ++{if _gg ,_ba =_dea .Pages [_gbc ];!_ba {return _ef .Errorf (_ce ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_gbc );};if _gg .EncodingMethod ==GenericEM {continue ;
|
|
};if _ceb ==nil {if _ceb ,_eef =_dea .GlobalSegments .GetSymbolDictionary ();_eef !=nil {return _ef .Wrap (_eef ,_ce ,"");};};if _eef =_dea .produceClassifiedPage (_gg ,_ceb );_eef !=nil {return _ef .Wrapf (_eef ,_ce ,"\u0070\u0061\u0067\u0065\u003a\u0020\u0027\u0025\u0064\u0027",_gbc );
|
|
};};return nil ;};func (_agd *Page )createNormalPage (_cag *_da .PageInformationSegment )error {const _eca ="\u0063\u0072e\u0061\u0074\u0065N\u006f\u0072\u006d\u0061\u006c\u0050\u0061\u0067\u0065";_agd .Bitmap =_cb .New (_cag .PageBMWidth ,_cag .PageBMHeight );
|
|
if _cag .DefaultPixelValue !=0{_agd .Bitmap .SetDefaultPixel ();};for _ ,_dab :=range _agd .Segments {switch _dab .Type {case 6,7,22,23,38,39,42,43:_c .Log .Trace ("\u0047\u0065\u0074\u0074in\u0067\u0020\u0053\u0065\u0067\u006d\u0065\u006e\u0074\u003a\u0020\u0025\u0064",_dab .SegmentNumber );
|
|
_ddff ,_abe :=_dab .GetSegmentData ();if _abe !=nil {return _abe ;};_gefe ,_bdbc :=_ddff .(_da .Regioner );if !_bdbc {_c .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",_ddff );
|
|
return _ef .Errorf (_eca ,"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",_ddff );
|
|
};_bde ,_abe :=_gefe .GetRegionBitmap ();if _abe !=nil {return _ef .Wrap (_abe ,_eca ,"");};if _agd .fitsPage (_cag ,_bde ){_agd .Bitmap =_bde ;}else {_ede :=_gefe .GetRegionInfo ();_gaaa :=_agd .getCombinationOperator (_cag ,_ede .CombinaionOperator );
|
|
_abe =_cb .Blit (_bde ,_agd .Bitmap ,int (_ede .XLocation ),int (_ede .YLocation ),_gaaa );if _abe !=nil {return _ef .Wrap (_abe ,_eca ,"");};};};};return nil ;};const (GenericEM EncodingMethod =iota ;CorrelationEM ;RankHausEM ;); |