diff options
| author | leshe4ka46 <alex9102naid1@ya.ru> | 2025-10-19 14:47:59 +0300 |
|---|---|---|
| committer | leshe4ka46 <alex9102naid1@ya.ru> | 2025-10-19 14:47:59 +0300 |
| commit | e17a425dfb3382310fb5863f516dacdca9f44956 (patch) | |
| tree | 7babb3048d0eb20aa1e68e9b29c2acfa794ab96f /unipdf/internal/jbig2/document/document.go | |
| parent | 091963a50c3bb2926f559f01c49e8f5bd03d2bfd (diff) | |
fuck the unipdf licencing
Diffstat (limited to 'unipdf/internal/jbig2/document/document.go')
| -rw-r--r-- | unipdf/internal/jbig2/document/document.go | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/unipdf/internal/jbig2/document/document.go b/unipdf/internal/jbig2/document/document.go new file mode 100644 index 0000000..83ec811 --- /dev/null +++ b/unipdf/internal/jbig2/document/document.go @@ -0,0 +1,132 @@ +// +// 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 (_fd "encoding/binary";_a "fmt";_fac "github.com/unidoc/unipdf/v4/common";_ag "github.com/unidoc/unipdf/v4/internal/bitwise";_c "github.com/unidoc/unipdf/v4/internal/jbig2/basic";_ed "github.com/unidoc/unipdf/v4/internal/jbig2/bitmap"; +_cf "github.com/unidoc/unipdf/v4/internal/jbig2/document/segments";_ede "github.com/unidoc/unipdf/v4/internal/jbig2/encoder/classer";_b "github.com/unidoc/unipdf/v4/internal/jbig2/errors";_ac "io";_fa "math";_e "runtime/debug";);func (_fded *Page )GetSegment (number int )(*_cf .Header ,error ){const _cab ="\u0050a\u0067e\u002e\u0047\u0065\u0074\u0053\u0065\u0067\u006d\u0065\u006e\u0074"; +for _ ,_eecg :=range _fded .Segments {if _eecg .SegmentNumber ==uint32 (number ){return _eecg ,nil ;};};_eaf :=make ([]uint32 ,len (_fded .Segments ));for _ggc ,_fag :=range _fded .Segments {_eaf [_ggc ]=_fag .SegmentNumber ;};return nil ,_b .Errorf (_cab ,"\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 ,_fded .PageNumber ,_eaf ); +};func (_gcg *Page )AddPageInformationSegment (){_ddg :=&_cf .PageInformationSegment {PageBMWidth :_gcg .FinalWidth ,PageBMHeight :_gcg .FinalHeight ,ResolutionX :_gcg .ResolutionX ,ResolutionY :_gcg .ResolutionY ,IsLossless :_gcg .IsLossless };if _gcg .BlackIsOne {_ddg .DefaultPixelValue =uint8 (0x1); +};_cbe :=&_cf .Header {PageAssociation :_gcg .PageNumber ,SegmentDataLength :uint64 (_ddg .Size ()),SegmentData :_ddg ,Type :_cf .TPageInformation };_gcg .Segments =append (_gcg .Segments ,_cbe );};func (_ddc *Document )encodeSegment (_gca *_cf .Header ,_ege *int )error {const _de ="\u0065\u006e\u0063\u006f\u0064\u0065\u0053\u0065\u0067\u006d\u0065\u006e\u0074"; +_gca .SegmentNumber =_ddc .nextSegmentNumber ();_dae ,_dcf :=_gca .Encode (_ddc ._g );if _dcf !=nil {return _b .Wrapf (_dcf ,_de ,"\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u003a\u0020\u0027\u0025\u0064\u0027",_gca .SegmentNumber );};*_ege +=_dae ;return nil ; +};func (_ab *Document )mapData ()error {const _dg ="\u006da\u0070\u0044\u0061\u0074\u0061";var (_eef []*_cf .Header ;_ded int64 ;_adf _cf .Type ;);_ebe ,_eec :=_ab .isFileHeaderPresent ();if _eec !=nil {return _b .Wrap (_eec ,_dg ,"");};if _ebe {if _eec =_ab .parseFileHeader (); +_eec !=nil {return _b .Wrap (_eec ,_dg ,"");};_ded +=int64 (_ab ._ff );_ab .FullHeaders =true ;};var (_bfg *Page ;_fdbe bool ;);for _adf !=51&&!_fdbe {_dfb ,_daeb :=_cf .NewHeader (_ab ,_ab .InputStream ,_ded ,_ab .OrganizationType );if _daeb !=nil {return _b .Wrap (_daeb ,_dg ,""); +};_fac .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",_dfb .SegmentNumber ,_dfb .Type ); +_adf =_dfb .Type ;if _adf !=_cf .TEndOfFile {if _dfb .PageAssociation !=0{_bfg =_ab .Pages [_dfb .PageAssociation ];if _bfg ==nil {_bfg =_cafe (_ab ,_dfb .PageAssociation );_ab .Pages [_dfb .PageAssociation ]=_bfg ;if _ab .NumberOfPagesUnknown {_ab .NumberOfPages ++; +};};_bfg .Segments =append (_bfg .Segments ,_dfb );}else {_ab .GlobalSegments .AddSegment (_dfb );};};_eef =append (_eef ,_dfb );_ded =_ab .InputStream .AbsolutePosition ();if _ab .OrganizationType ==_cf .OSequential {_ded +=int64 (_dfb .SegmentDataLength ); +};_fdbe ,_daeb =_ab .reachedEOF (_ded );if _daeb !=nil {_fac .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",_daeb ); +return _b .Wrap (_daeb ,_dg ,"");};};_ab .determineRandomDataOffsets (_eef ,uint64 (_ded ));return nil ;};func (_feb *Globals )AddSegment (segment *_cf .Header ){_feb .Segments =append (_feb .Segments ,segment )};func (_dbc *Page )collectPageStripes ()(_agd []_cf .Segmenter ,_fae error ){const _gcb ="\u0063o\u006cl\u0065\u0063\u0074\u0050\u0061g\u0065\u0053t\u0072\u0069\u0070\u0065\u0073"; +var _gec _cf .Segmenter ;for _ ,_gcea :=range _dbc .Segments {switch _gcea .Type {case 6,7,22,23,38,39,42,43:_gec ,_fae =_gcea .GetSegmentData ();if _fae !=nil {return nil ,_b .Wrap (_fae ,_gcb ,"");};_agd =append (_agd ,_gec );case 50:_gec ,_fae =_gcea .GetSegmentData (); +if _fae !=nil {return nil ,_fae ;};_afa ,_eafe :=_gec .(*_cf .EndOfStripe );if !_eafe {return nil ,_b .Errorf (_gcb ,"\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",_gec ); +};_agd =append (_agd ,_afa );_dbc .FinalHeight =_afa .LineNumber ();};};return _agd ,nil ;};func (_cc *Document )completeClassifiedPages ()(_gbc error ){const _eb ="\u0063\u006f\u006dpl\u0065\u0074\u0065\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0050\u0061\u0067\u0065\u0073"; +if _cc .Classer ==nil {return nil ;};_cc ._cd =make ([]int ,_cc .Classer .UndilatedTemplates .Size ());for _dc :=0;_dc < _cc .Classer .ClassIDs .Size ();_dc ++{_fde ,_ea :=_cc .Classer .ClassIDs .Get (_dc );if _ea !=nil {return _b .Wrapf (_ea ,_eb ,"\u0063\u006c\u0061\u0073s \u0077\u0069\u0074\u0068\u0020\u0069\u0064\u003a\u0020\u0027\u0025\u0064\u0027",_dc ); +};_cc ._cd [_fde ]++;};var _dcg []int ;for _ga :=0;_ga < _cc .Classer .UndilatedTemplates .Size ();_ga ++{if _cc .NumberOfPages ==1||_cc ._cd [_ga ]> 1{_dcg =append (_dcg ,_ga );};};var (_gbf *Page ;_eba bool ;);for _da ,_fg :=range *_cc .Classer .ComponentPageNumbers {if _gbf ,_eba =_cc .Pages [_fg ]; +!_eba {return _b .Errorf (_eb ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_da );};if _gbf .EncodingMethod ==GenericEM {_fac .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",_da ); +continue ;};_cc ._gb [_fg ]=append (_cc ._gb [_fg ],_da );_fdef ,_bgf :=_cc .Classer .ClassIDs .Get (_da );if _bgf !=nil {return _b .Wrapf (_bgf ,_eb ,"\u006e\u006f\u0020\u0073uc\u0068\u0020\u0063\u006c\u0061\u0073\u0073\u0049\u0044\u003a\u0020\u0025\u0064",_da ); +};if _cc ._cd [_fdef ]==1&&_cc .NumberOfPages !=1{_ead :=append (_cc ._dd [_fg ],_fdef );_cc ._dd [_fg ]=_ead ;};};if _gbc =_cc .Classer .ComputeLLCorners ();_gbc !=nil {return _b .Wrap (_gbc ,_eb ,"");};if _ ,_gbc =_cc .addSymbolDictionary (0,_cc .Classer .UndilatedTemplates ,_dcg ,_cc ._cb ,false ); +_gbc !=nil {return _b .Wrap (_gbc ,_eb ,"");};return nil ;};func (_afad *Page )fitsPage (_edbga *_cf .PageInformationSegment ,_dfa *_ed .Bitmap )bool {return _afad .countRegions ()==1&&_edbga .DefaultPixelValue ==0&&_edbga .PageBMWidth ==_dfa .Width &&_edbga .PageBMHeight ==_dfa .Height ; +};func (_bge *Document )reachedEOF (_cee int64 )(bool ,error ){const _ffd ="\u0072\u0065\u0061\u0063\u0068\u0065\u0064\u0045\u004f\u0046";_ ,_gdb :=_bge .InputStream .Seek (_cee ,_ac .SeekStart );if _gdb !=nil {_fac .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",_gdb ); +return false ,_b .Wrap (_gdb ,_ffd ,"\u0069n\u0070\u0075\u0074\u0020\u0073\u0074\u0072\u0065\u0061\u006d\u0020s\u0065\u0065\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};_ ,_gdb =_bge .InputStream .ReadBits (32);if _gdb ==_ac .EOF {return true ,nil ; +}else if _gdb !=nil {return false ,_b .Wrap (_gdb ,_ffd ,"");};return false ,nil ;};func (_ddab *Document )isFileHeaderPresent ()(bool ,error ){_ddab .InputStream .Mark ();for _ ,_gbe :=range _d {_cac ,_edfc :=_ddab .InputStream .ReadByte ();if _edfc !=nil {return false ,_edfc ; +};if _gbe !=_cac {_ddab .InputStream .Reset ();return false ,nil ;};};_ddab .InputStream .Reset ();return true ,nil ;};type Globals struct{Segments []*_cf .Header ;};func _fdd (_ba *_ag .Reader ,_ccc *Globals )(*Document ,error ){_bdd :=&Document {Pages :make (map[int ]*Page ),InputStream :_ba ,OrganizationType :_cf .OSequential ,NumberOfPagesUnknown :true ,GlobalSegments :_ccc ,_ff :9}; +if _bdd .GlobalSegments ==nil {_bdd .GlobalSegments =&Globals {};};if _dbb :=_bdd .mapData ();_dbb !=nil {return nil ,_dbb ;};return _bdd ,nil ;};func (_gge *Globals )GetSymbolDictionary ()(*_cf .Header ,error ){const _gfe ="G\u006c\u006f\u0062\u0061\u006c\u0073.\u0047\u0065\u0074\u0053\u0079\u006d\u0062\u006f\u006cD\u0069\u0063\u0074i\u006fn\u0061\u0072\u0079"; +if _gge ==nil {return nil ,_b .Error (_gfe ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (_gge .Segments )==0{return nil ,_b .Error (_gfe ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079"); +};for _ ,_ggg :=range _gge .Segments {if _ggg .Type ==_cf .TSymbolDictionary {return _ggg ,nil ;};};return nil ,_b .Error (_gfe ,"\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 (_bfc *Globals )GetSegment (segmentNumber int )(*_cf .Header ,error ){const _cedc ="\u0047l\u006fb\u0061\u006c\u0073\u002e\u0047e\u0074\u0053e\u0067\u006d\u0065\u006e\u0074";if _bfc ==nil {return nil ,_b .Error (_cedc ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064"); +};if len (_bfc .Segments )==0{return nil ,_b .Error (_cedc ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");};var _be *_cf .Header ;for _ ,_be =range _bfc .Segments {if _be .SegmentNumber ==uint32 (segmentNumber ){break ; +};};if _be ==nil {return nil ,_b .Error (_cedc ,"\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u0020\u006e\u006f\u0074\u0020f\u006f\u0075\u006e\u0064");};return _be ,nil ;};func (_facd *Page )getCombinationOperator (_efe *_cf .PageInformationSegment ,_fff _ed .CombinationOperator )_ed .CombinationOperator {if _efe .CombinationOperatorOverrideAllowed (){return _fff ; +};return _efe .CombinationOperator ();};func (_fgd *Document )parseFileHeader ()error {const _cfef ="\u0070a\u0072s\u0065\u0046\u0069\u006c\u0065\u0048\u0065\u0061\u0064\u0065\u0072";_ ,_fb :=_fgd .InputStream .Seek (8,_ac .SeekStart );if _fb !=nil {return _b .Wrap (_fb ,_cfef ,"\u0069\u0064"); +};_ ,_fb =_fgd .InputStream .ReadBits (5);if _fb !=nil {return _b .Wrap (_fb ,_cfef ,"\u0072\u0065\u0073\u0065\u0072\u0076\u0065\u0064\u0020\u0062\u0069\u0074\u0073");};_abe ,_fb :=_fgd .InputStream .ReadBit ();if _fb !=nil {return _b .Wrap (_fb ,_cfef ,"\u0065x\u0074e\u006e\u0064\u0065\u0064\u0020t\u0065\u006dp\u006c\u0061\u0074\u0065\u0073"); +};if _abe ==1{_fgd .GBUseExtTemplate =true ;};_abe ,_fb =_fgd .InputStream .ReadBit ();if _fb !=nil {return _b .Wrap (_fb ,_cfef ,"\u0075\u006e\u006b\u006eow\u006e\u0020\u0070\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072");};if _abe !=1{_fgd .NumberOfPagesUnknown =false ; +};_abe ,_fb =_fgd .InputStream .ReadBit ();if _fb !=nil {return _b .Wrap (_fb ,_cfef ,"\u006f\u0072\u0067\u0061\u006e\u0069\u007a\u0061\u0074\u0069\u006f\u006e \u0074\u0079\u0070\u0065");};_fgd .OrganizationType =_cf .OrganizationType (_abe );if !_fgd .NumberOfPagesUnknown {_fgd .NumberOfPages ,_fb =_fgd .InputStream .ReadUint32 (); +if _fb !=nil {return _b .Wrap (_fb ,_cfef ,"\u006eu\u006db\u0065\u0072\u0020\u006f\u0066\u0020\u0070\u0061\u0067\u0065\u0073");};_fgd ._ff =13;};return nil ;};func (_fbc *Page )nextSegmentNumber ()uint32 {return _fbc .Document .nextSegmentNumber ()};func (_dac *Page )GetWidth ()(int ,error ){return _dac .getWidth ()}; +func _fga (_cg int )int {_gfd :=0;_dfd :=(_cg &(_cg -1))==0;_cg >>=1;for ;_cg !=0;_cg >>=1{_gfd ++;};if _dfd {return _gfd ;};return _gfd +1;};func (_ca *Document )produceClassifiedPage (_gc *Page ,_ccf *_cf .Header )(_gce error ){const _fgb ="p\u0072\u006f\u0064\u0075ce\u0043l\u0061\u0073\u0073\u0069\u0066i\u0065\u0064\u0050\u0061\u0067\u0065"; +var _bb map[int ]int ;_fdf :=_ca ._bc ;_edf :=[]*_cf .Header {_ccf };if len (_ca ._dd [_gc .PageNumber ])> 0{_bb =map[int ]int {};_edb ,_aa :=_ca .addSymbolDictionary (_gc .PageNumber ,_ca .Classer .UndilatedTemplates ,_ca ._dd [_gc .PageNumber ],_bb ,false ); +if _aa !=nil {return _b .Wrap (_aa ,_fgb ,"");};_edf =append (_edf ,_edb );_fdf +=len (_ca ._dd [_gc .PageNumber ]);};_ebb :=_ca ._gb [_gc .PageNumber ];_fac .Log .Debug ("P\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020c\u006f\u006d\u0070\u0073: \u0025\u0076",_gc .PageNumber ,_ebb ); +_gc .addTextRegionSegment (_edf ,_ca ._cb ,_bb ,_ca ._gb [_gc .PageNumber ],_ca .Classer .PtaLL ,_ca .Classer .UndilatedTemplates ,_ca .Classer .ClassIDs ,nil ,_fga (_fdf ),len (_ca ._gb [_gc .PageNumber ]));return nil ;};func (_fec *Page )GetBitmap ()(_fda *_ed .Bitmap ,_bad error ){_fac .Log .Trace (_a .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",_fec .PageNumber )); +defer func (){if _bad !=nil {_fac .Log .Trace (_a .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",_fec .PageNumber ,_bad )); +}else {_fac .Log .Trace (_a .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",_fec .PageNumber ));};}();if _fec .Bitmap !=nil {return _fec .Bitmap ,nil ; +};_bad =_fec .composePageBitmap ();if _bad !=nil {return nil ,_bad ;};return _fec .Bitmap ,nil ;};func (_cgd *Document )addSymbolDictionary (_ae int ,_bd *_ed .Bitmaps ,_aae []int ,_cgda map[int ]int ,_dad bool )(*_cf .Header ,error ){const _ad ="\u0061\u0064\u0064\u0053ym\u0062\u006f\u006c\u0044\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079"; +_gdg :=&_cf .SymbolDictionary {};if _bcf :=_gdg .InitEncode (_bd ,_aae ,_cgda ,_dad );_bcf !=nil {return nil ,_bcf ;};_acf :=&_cf .Header {Type :_cf .TSymbolDictionary ,PageAssociation :_ae ,SegmentData :_gdg };if _ae ==0{if _cgd .GlobalSegments ==nil {_cgd .GlobalSegments =&Globals {}; +};_cgd .GlobalSegments .AddSegment (_acf );return _acf ,nil ;};_bda ,_eed :=_cgd .Pages [_ae ];if !_eed {return nil ,_b .Errorf (_ad ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_ae );};var (_bce int ; +_bgg *_cf .Header ;);for _bce ,_bgg =range _bda .Segments {if _bgg .Type ==_cf .TPageInformation {break ;};};_bce ++;_bda .Segments =append (_bda .Segments ,nil );copy (_bda .Segments [_bce +1:],_bda .Segments [_bce :]);_bda .Segments [_bce ]=_acf ;return _acf ,nil ; +};func (_afg *Page )addTextRegionSegment (_faa []*_cf .Header ,_bed ,_bcbd map[int ]int ,_gdc []int ,_cdf *_ed .Points ,_ggbg *_ed .Bitmaps ,_dfg *_c .IntSlice ,_bef *_ed .Boxes ,_eaef ,_ega int ){_eaec :=&_cf .TextRegion {NumberOfSymbols :uint32 (_ega )}; +_eaec .InitEncode (_bed ,_bcbd ,_gdc ,_cdf ,_ggbg ,_dfg ,_bef ,_afg .FinalWidth ,_afg .FinalHeight ,_eaef );_cde :=&_cf .Header {RTSegments :_faa ,SegmentData :_eaec ,PageAssociation :_afg .PageNumber ,Type :_cf .TImmediateTextRegion };_egg :=_cf .TPageInformation ; +if _bcbd !=nil {_egg =_cf .TSymbolDictionary ;};var _bfbf int ;for ;_bfbf < len (_afg .Segments );_bfbf ++{if _afg .Segments [_bfbf ].Type ==_egg {_bfbf ++;break ;};};_afg .Segments =append (_afg .Segments ,nil );copy (_afg .Segments [_bfbf +1:],_afg .Segments [_bfbf :]); +_afg .Segments [_bfbf ]=_cde ;};func (_fba *Page )getPageInformationSegment ()*_cf .Header {for _ ,_dbd :=range _fba .Segments {if _dbd .Type ==_cf .TPageInformation {return _dbd ;};};_fac .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",_fba ); +return nil ;};func (_eae *Document )nextSegmentNumber ()uint32 {_bdga :=_eae .CurrentSegmentNumber ;_eae .CurrentSegmentNumber ++;return _bdga ;};func (_dfag *Page )getWidth ()(int ,error ){const _gaea ="\u0067\u0065\u0074\u0057\u0069\u0064\u0074\u0068"; +if _dfag .FinalWidth !=0{return _dfag .FinalWidth ,nil ;};_egeb :=_dfag .getPageInformationSegment ();if _egeb ==nil {return 0,_b .Error (_gaea ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_egdb ,_adbc :=_egeb .GetSegmentData (); +if _adbc !=nil {return 0,_b .Wrap (_adbc ,_gaea ,"");};_dde ,_cbg :=_egdb .(*_cf .PageInformationSegment );if !_cbg {return 0,_b .Errorf (_gaea ,"\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",_egdb ); +};_dfag .FinalWidth =_dde .PageBMWidth ;return _dfag .FinalWidth ,nil ;};func (_afb *Page )clearSegmentData (){for _ecg :=range _afb .Segments {_afb .Segments [_ecg ].CleanSegmentData ();};};func (_ggeg *Page )GetResolutionX ()(int ,error ){return _ggeg .getResolutionX ()}; +func (_bff *Page )AddEndOfPageSegment (){_ge :=&_cf .Header {Type :_cf .TEndOfPage ,PageAssociation :_bff .PageNumber };_bff .Segments =append (_bff .Segments ,_ge );};func _cafe (_edbg *Document ,_aea int )*Page {return &Page {Document :_edbg ,PageNumber :_aea ,Segments :[]*_cf .Header {}}; +};func (_egf *Document )nextPageNumber ()uint32 {_egf .NumberOfPages ++;return _egf .NumberOfPages };func (_ceb *Document )encodeEOFHeader (_ebba _ag .BinaryWriter )(_cdg int ,_aab error ){_fca :=&_cf .Header {SegmentNumber :_ceb .nextSegmentNumber (),Type :_cf .TEndOfFile }; +if _cdg ,_aab =_fca .Encode (_ebba );_aab !=nil {return 0,_b .Wrap (_aab ,"\u0065n\u0063o\u0064\u0065\u0045\u004f\u0046\u0048\u0065\u0061\u0064\u0065\u0072","");};return _cdg ,nil ;};func (_acc *Document )determineRandomDataOffsets (_af []*_cf .Header ,_gg uint64 ){if _acc .OrganizationType !=_cf .ORandom {return ; +};for _ ,_caa :=range _af {_caa .SegmentDataStartOffset =_gg ;_gg +=_caa .SegmentDataLength ;};};func (_dada *Document )Encode ()(_cbc []byte ,_caf error ){const _db ="\u0044o\u0063u\u006d\u0065\u006e\u0074\u002e\u0045\u006e\u0063\u006f\u0064\u0065";var _bf ,_acg int ; +if _dada .FullHeaders {if _bf ,_caf =_dada .encodeFileHeader (_dada ._g );_caf !=nil {return nil ,_b .Wrap (_caf ,_db ,"");};};var (_fdc bool ;_ef *_cf .Header ;_fcd *Page ;);if _caf =_dada .completeClassifiedPages ();_caf !=nil {return nil ,_b .Wrap (_caf ,_db ,""); +};if _caf =_dada .produceClassifiedPages ();_caf !=nil {return nil ,_b .Wrap (_caf ,_db ,"");};if _dada .GlobalSegments !=nil {for _ ,_ef =range _dada .GlobalSegments .Segments {if _caf =_dada .encodeSegment (_ef ,&_bf );_caf !=nil {return nil ,_b .Wrap (_caf ,_db ,""); +};};};for _aaa :=1;_aaa <=int (_dada .NumberOfPages );_aaa ++{if _fcd ,_fdc =_dada .Pages [_aaa ];!_fdc {return nil ,_b .Errorf (_db ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_aaa );};for _ ,_ef =range _fcd .Segments {if _caf =_dada .encodeSegment (_ef ,&_bf ); +_caf !=nil {return nil ,_b .Wrap (_caf ,_db ,"");};};};if _dada .FullHeaders {if _acg ,_caf =_dada .encodeEOFHeader (_dada ._g );_caf !=nil {return nil ,_b .Wrap (_caf ,_db ,"");};_bf +=_acg ;};_cbc =_dada ._g .Data ();if len (_cbc )!=_bf {_fac .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",_bf ,len (_cbc )); +};return _cbc ,nil ;};func (_gcd *Document )GetGlobalSegment (i int )(*_cf .Header ,error ){_bfa ,_gae :=_gcd .GlobalSegments .GetSegment (i );if _gae !=nil {return nil ,_b .Wrap (_gae ,"\u0047\u0065t\u0047\u006c\u006fb\u0061\u006c\u0053\u0065\u0067\u006d\u0065\u006e\u0074",""); +};return _bfa ,nil ;};const (GenericEM EncodingMethod =iota ;CorrelationEM ;RankHausEM ;);var _d =[]byte {0x97,0x4A,0x42,0x32,0x0D,0x0A,0x1A,0x0A};func (_eg *Document )AddGenericPage (bm *_ed .Bitmap ,duplicateLineRemoval bool )(_cff error ){const _bg ="\u0044\u006f\u0063um\u0065\u006e\u0074\u002e\u0041\u0064\u0064\u0047\u0065\u006e\u0065\u0072\u0069\u0063\u0050\u0061\u0067\u0065"; +if !_eg .FullHeaders &&_eg .NumberOfPages !=0{return _b .Error (_bg ,"\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"); +};_ee :=&Page {Segments :[]*_cf .Header {},Bitmap :bm ,Document :_eg ,FinalHeight :bm .Height ,FinalWidth :bm .Width ,IsLossless :true ,BlackIsOne :bm .Color ==_ed .Chocolate };_ee .PageNumber =int (_eg .nextPageNumber ());_eg .Pages [_ee .PageNumber ]=_ee ; +bm .InverseData ();_ee .AddPageInformationSegment ();if _cff =_ee .AddGenericRegion (bm ,0,0,0,_cf .TImmediateGenericRegion ,duplicateLineRemoval );_cff !=nil {return _b .Wrap (_cff ,_bg ,"");};if _eg .FullHeaders {_ee .AddEndOfPageSegment ();};return nil ; +};func (_afac *Page )countRegions ()int {var _gbfe int ;for _ ,_abcb :=range _afac .Segments {switch _abcb .Type {case 6,7,22,23,38,39,42,43:_gbfe ++;};};return _gbfe ;};func (_cag *Document )GetNumberOfPages ()(uint32 ,error ){if _cag .NumberOfPagesUnknown ||_cag .NumberOfPages ==0{if len (_cag .Pages )==0{if _bdg :=_cag .mapData (); +_bdg !=nil {return 0,_b .Wrap (_bdg ,"\u0044o\u0063\u0075\u006d\u0065n\u0074\u002e\u0047\u0065\u0074N\u0075m\u0062e\u0072\u004f\u0066\u0050\u0061\u0067\u0065s","");};};return uint32 (len (_cag .Pages )),nil ;};return _cag .NumberOfPages ,nil ;};func (_bbe *Page )createStripedPage (_cffd *_cf .PageInformationSegment )error {const _bee ="\u0063\u0072\u0065\u0061\u0074\u0065\u0053\u0074\u0072\u0069\u0070\u0065d\u0050\u0061\u0067\u0065"; +_bgfa ,_bbdf :=_bbe .collectPageStripes ();if _bbdf !=nil {return _b .Wrap (_bbdf ,_bee ,"");};var _beg int ;for _ ,_faag :=range _bgfa {if _ffb ,_fgag :=_faag .(*_cf .EndOfStripe );_fgag {_beg =_ffb .LineNumber ()+1;}else {_gaef :=_faag .(_cf .Regioner ); +_dgb :=_gaef .GetRegionInfo ();_ebcd :=_bbe .getCombinationOperator (_cffd ,_dgb .CombinaionOperator );_cbd ,_bcg :=_gaef .GetRegionBitmap ();if _bcg !=nil {return _b .Wrap (_bcg ,_bee ,"");};_bcg =_ed .Blit (_cbd ,_bbe .Bitmap ,int (_dgb .XLocation ),_beg ,_ebcd ); +if _bcg !=nil {return _b .Wrap (_bcg ,_bee ,"");};};};return nil ;};func (_ccb *Page )getHeight ()(int ,error ){const _fbb ="\u0067e\u0074\u0048\u0065\u0069\u0067\u0068t";if _ccb .FinalHeight !=0{return _ccb .FinalHeight ,nil ;};_deg :=_ccb .getPageInformationSegment (); +if _deg ==nil {return 0,_b .Error (_fbb ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_bbae ,_ggae :=_deg .GetSegmentData ();if _ggae !=nil {return 0,_b .Wrap (_ggae ,_fbb ,"");};_ace ,_bcd :=_bbae .(*_cf .PageInformationSegment ); +if !_bcd {return 0,_b .Errorf (_fbb ,"\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",_bbae ); +};if _ace .PageBMHeight ==_fa .MaxInt32 {_ ,_ggae =_ccb .GetBitmap ();if _ggae !=nil {return 0,_b .Wrap (_ggae ,_fbb ,"");};}else {_ccb .FinalHeight =_ace .PageBMHeight ;};return _ccb .FinalHeight ,nil ;};type EncodingMethod int ;func (_cfe *Document )AddClassifiedPage (bm *_ed .Bitmap ,method _ede .Method )(_gf error ){const _fe ="\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 !_cfe .FullHeaders &&_cfe .NumberOfPages !=0{return _b .Error (_fe ,"\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 _cfe .Classer ==nil {if _cfe .Classer ,_gf =_ede .Init (_ede .DefaultSettings ());_gf !=nil {return _b .Wrap (_gf ,_fe ,"");};};_cda :=int (_cfe .nextPageNumber ());_gd :=&Page {Segments :[]*_cf .Header {},Bitmap :bm ,Document :_cfe ,FinalHeight :bm .Height ,FinalWidth :bm .Width ,PageNumber :_cda }; +_cfe .Pages [_cda ]=_gd ;switch method {case _ede .RankHaus :_gd .EncodingMethod =RankHausEM ;case _ede .Correlation :_gd .EncodingMethod =CorrelationEM ;};_gd .AddPageInformationSegment ();if _gf =_cfe .Classer .AddPage (bm ,_cda ,method );_gf !=nil {return _b .Wrap (_gf ,_fe ,""); +};if _cfe .FullHeaders {_gd .AddEndOfPageSegment ();};return nil ;};func (_acb *Document )completeSymbols ()(_ec error ){const _ce ="\u0063o\u006dp\u006c\u0065\u0074\u0065\u0053\u0079\u006d\u0062\u006f\u006c\u0073";if _acb .Classer ==nil {return nil ;}; +if _acb .Classer .UndilatedTemplates ==nil {return _b .Error (_ce ,"\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");};_cgb :=len (_acb .Pages )==1; +_dca :=make ([]int ,_acb .Classer .UndilatedTemplates .Size ());var _fc int ;for _bdb :=0;_bdb < _acb .Classer .ClassIDs .Size ();_bdb ++{_fc ,_ec =_acb .Classer .ClassIDs .Get (_bdb );if _ec !=nil {return _b .Wrap (_ec ,_ce ,"\u0063\u006c\u0061\u0073\u0073\u0020\u0049\u0044\u0027\u0073"); +};_dca [_fc ]++;};var _fcb []int ;for _ced :=0;_ced < _acb .Classer .UndilatedTemplates .Size ();_ced ++{if _dca [_ced ]==0{return _b .Error (_ce ,"\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 _dca [_ced ]> 1||_cgb {_fcb =append (_fcb ,_ced );};};_acb ._bc =len (_fcb );var _adb ,_aag int ;for _aef :=0;_aef < _acb .Classer .ComponentPageNumbers .Size ();_aef ++{_adb ,_ec =_acb .Classer .ComponentPageNumbers .Get (_aef );if _ec !=nil {return _b .Wrapf (_ec ,_ce ,"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",_aef ); +};_aag ,_ec =_acb .Classer .ClassIDs .Get (_aef );if _ec !=nil {return _b .Wrapf (_ec ,_ce ,"\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",_adb ); +};if _dca [_aag ]==1&&!_cgb {_acb ._dd [_adb ]=append (_acb ._dd [_adb ],_aag );};};if _ec =_acb .Classer .ComputeLLCorners ();_ec !=nil {return _b .Wrap (_ec ,_ce ,"");};return nil ;};func (_abg *Page )createPage (_acfd *_cf .PageInformationSegment )error {var _dbe error ; +if !_acfd .IsStripe ||_acfd .PageBMHeight !=-1{_dbe =_abg .createNormalPage (_acfd );}else {_dbe =_abg .createStripedPage (_acfd );};return _dbe ;};func (_df *Document )produceClassifiedPages ()(_age error ){const _egd ="\u0070\u0072\u006f\u0064uc\u0065\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0050\u0061\u0067e\u0073"; +if _df .Classer ==nil {return nil ;};var (_fdb *Page ;_bcb bool ;_aca *_cf .Header ;);for _faf :=1;_faf <=int (_df .NumberOfPages );_faf ++{if _fdb ,_bcb =_df .Pages [_faf ];!_bcb {return _b .Errorf (_egd ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_faf ); +};if _fdb .EncodingMethod ==GenericEM {continue ;};if _aca ==nil {if _aca ,_age =_df .GlobalSegments .GetSymbolDictionary ();_age !=nil {return _b .Wrap (_age ,_egd ,"");};};if _age =_df .produceClassifiedPage (_fdb ,_aca );_age !=nil {return _b .Wrapf (_age ,_egd ,"\u0070\u0061\u0067\u0065\u003a\u0020\u0027\u0025\u0064\u0027",_faf ); +};};return nil ;};func (_bfb *Document )encodeFileHeader (_gde _ag .BinaryWriter )(_ggb int ,_fgg error ){const _gadf ="\u0065\u006ec\u006f\u0064\u0065F\u0069\u006c\u0065\u0048\u0065\u0061\u0064\u0065\u0072";_ggb ,_fgg =_gde .Write (_d );if _fgg !=nil {return _ggb ,_b .Wrap (_fgg ,_gadf ,"\u0069\u0064"); +};if _fgg =_gde .WriteByte (0x01);_fgg !=nil {return _ggb ,_b .Wrap (_fgg ,_gadf ,"\u0066\u006c\u0061g\u0073");};_ggb ++;_acac :=make ([]byte ,4);_fd .BigEndian .PutUint32 (_acac ,_bfb .NumberOfPages );_bgd ,_fgg :=_gde .Write (_acac );if _fgg !=nil {return _bgd ,_b .Wrap (_fgg ,_gadf ,"p\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072"); +};_ggb +=_bgd ;return _ggb ,nil ;};type Document struct{Pages map[int ]*Page ;NumberOfPagesUnknown bool ;NumberOfPages uint32 ;GBUseExtTemplate bool ;InputStream *_ag .Reader ;GlobalSegments *Globals ;OrganizationType _cf .OrganizationType ;Classer *_ede .Classer ; +XRes ,YRes int ;FullHeaders bool ;CurrentSegmentNumber uint32 ;AverageTemplates *_ed .Bitmaps ;BaseIndexes []int ;Refinement bool ;RefineLevel int ;_ff uint8 ;_g *_ag .BufferedWriter ;EncodeGlobals bool ;_bc int ;_dd map[int ][]int ;_gb map[int ][]int ; +_cd []int ;_cb map[int ]int ;};func DecodeDocument (input *_ag .Reader ,globals *Globals )(*Document ,error ){return _fdd (input ,globals );};func (_bged *Page )GetResolutionY ()(int ,error ){return _bged .getResolutionY ()};func (_bggb *Page )AddGenericRegion (bm *_ed .Bitmap ,xloc ,yloc ,template int ,tp _cf .Type ,duplicateLineRemoval bool )error {const _eea ="P\u0061\u0067\u0065\u002eAd\u0064G\u0065\u006e\u0065\u0072\u0069c\u0052\u0065\u0067\u0069\u006f\u006e"; +_gfde :=&_cf .GenericRegion {};if _accg :=_gfde .InitEncode (bm ,xloc ,yloc ,template ,duplicateLineRemoval );_accg !=nil {return _b .Wrap (_accg ,_eea ,"");};_fbd :=&_cf .Header {Type :_cf .TImmediateGenericRegion ,PageAssociation :_bggb .PageNumber ,SegmentData :_gfde }; +_bggb .Segments =append (_bggb .Segments ,_fbd );return nil ;};func (_eead *Page )composePageBitmap ()error {const _ccg ="\u0063\u006f\u006d\u0070\u006f\u0073\u0065\u0050\u0061\u0067\u0065\u0042i\u0074\u006d\u0061\u0070";if _eead .PageNumber ==0{return nil ; +};_bfd :=_eead .getPageInformationSegment ();if _bfd ==nil {return _b .Error (_ccg ,"\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"); +};_ccda ,_ddabd :=_bfd .GetSegmentData ();if _ddabd !=nil {return _ddabd ;};_gea ,_cef :=_ccda .(*_cf .PageInformationSegment );if !_cef {return _b .Error (_ccg ,"\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 _ddabd =_eead .createPage (_gea );_ddabd !=nil {return _b .Wrap (_ddabd ,_ccg ,"");};_eead .clearSegmentData ();return nil ;};func (_bbd *Page )String ()string {return _a .Sprintf ("\u0050\u0061\u0067\u0065\u0020\u0023\u0025\u0064",_bbd .PageNumber ); +};func (_bcec *Page )GetHeight ()(int ,error ){return _bcec .getHeight ()};func (_ecc *Page )Encode (w _ag .BinaryWriter )(_aaab int ,_ebaf error ){const _cbf ="P\u0061\u0067\u0065\u002e\u0045\u006e\u0063\u006f\u0064\u0065";var _ggbc int ;for _ ,_dcb :=range _ecc .Segments {if _ggbc ,_ebaf =_dcb .Encode (w ); +_ebaf !=nil {return _aaab ,_b .Wrap (_ebaf ,_cbf ,"");};_aaab +=_ggbc ;};return _aaab ,nil ;};type Page struct{Segments []*_cf .Header ;PageNumber int ;Bitmap *_ed .Bitmap ;FinalHeight int ;FinalWidth int ;ResolutionX int ;ResolutionY int ;IsLossless bool ; +Document *Document ;FirstSegmentNumber int ;EncodingMethod EncodingMethod ;BlackIsOne bool ;};func (_cec *Globals )GetSegmentByIndex (index int )(*_cf .Header ,error ){const _bec ="\u0047l\u006f\u0062\u0061\u006cs\u002e\u0047\u0065\u0074\u0053e\u0067m\u0065n\u0074\u0042\u0079\u0049\u006e\u0064\u0065x"; +if _cec ==nil {return nil ,_b .Error (_bec ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (_cec .Segments )==0{return nil ,_b .Error (_bec ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079"); +};if index > len (_cec .Segments )-1{return nil ,_b .Error (_bec ,"\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");};return _cec .Segments [index ],nil ;};func (_add *Page )getResolutionY ()(int ,error ){const _bege ="\u0067\u0065\u0074\u0052\u0065\u0073\u006f\u006c\u0075t\u0069\u006f\u006e\u0059"; +if _add .ResolutionY !=0{return _add .ResolutionY ,nil ;};_fcg :=_add .getPageInformationSegment ();if _fcg ==nil {return 0,_b .Error (_bege ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_bdac ,_ccge :=_fcg .GetSegmentData (); +if _ccge !=nil {return 0,_b .Wrap (_ccge ,_bege ,"");};_caaf ,_dge :=_bdac .(*_cf .PageInformationSegment );if !_dge {return 0,_b .Errorf (_bege ,"\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",_bdac ); +};_add .ResolutionY =_caaf .ResolutionY ;return _add .ResolutionY ,nil ;};func (_egb *Document )GetPage (pageNumber int )(_cf .Pager ,error ){const _ffa ="\u0044\u006fc\u0075\u006d\u0065n\u0074\u002e\u0047\u0065\u0074\u0050\u0061\u0067\u0065";if pageNumber < 0{_fac .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 ,_e .Stack ()); +return nil ,_b .Errorf (_ffa ,"\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 (_egb .Pages ){_fac .Log .Debug ("\u0050\u0061\u0067\u0065 n\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u003a\u0020\u0025\u0064\u002e\u0020%\u0073",pageNumber ,_e .Stack ());return nil ,_b .Error (_ffa ,"\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"); +};_cdc ,_fgae :=_egb .Pages [pageNumber ];if !_fgae {_fac .Log .Debug ("\u0050\u0061\u0067\u0065 n\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u003a\u0020\u0025\u0064\u002e\u0020%\u0073",pageNumber ,_e .Stack ());return nil ,_b .Errorf (_ffa ,"\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 _cdc ,nil ;};func InitEncodeDocument (fullHeaders bool )*Document {return &Document {FullHeaders :fullHeaders ,_g :_ag .BufferedMSB (),Pages :map[int ]*Page {},_dd :map[int ][]int {},_cb :map[int ]int {},_gb :map[int ][]int {}};};func (_eece *Page )createNormalPage (_fdbg *_cf .PageInformationSegment )error {const _gaee ="\u0063\u0072e\u0061\u0074\u0065N\u006f\u0072\u006d\u0061\u006c\u0050\u0061\u0067\u0065"; +_eece .Bitmap =_ed .New (_fdbg .PageBMWidth ,_fdbg .PageBMHeight );if _fdbg .DefaultPixelValue !=0{_eece .Bitmap .SetDefaultPixel ();};for _ ,_ebc :=range _eece .Segments {switch _ebc .Type {case 6,7,22,23,38,39,42,43:_fac .Log .Trace ("\u0047\u0065\u0074\u0074in\u0067\u0020\u0053\u0065\u0067\u006d\u0065\u006e\u0074\u003a\u0020\u0025\u0064",_ebc .SegmentNumber ); +_eeb ,_bfcg :=_ebc .GetSegmentData ();if _bfcg !=nil {return _bfcg ;};_acab ,_fggg :=_eeb .(_cf .Regioner );if !_fggg {_fac .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",_eeb ); +return _b .Errorf (_gaee ,"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",_eeb ); +};_fbf ,_bfcg :=_acab .GetRegionBitmap ();if _bfcg !=nil {return _b .Wrap (_bfcg ,_gaee ,"");};if _eece .fitsPage (_fdbg ,_fbf ){_eece .Bitmap =_fbf ;}else {_daf :=_acab .GetRegionInfo ();_gga :=_eece .getCombinationOperator (_fdbg ,_daf .CombinaionOperator ); +_bfcg =_ed .Blit (_fbf ,_eece .Bitmap ,int (_daf .XLocation ),int (_daf .YLocation ),_gga );if _bfcg !=nil {return _b .Wrap (_bfcg ,_gaee ,"");};};};};return nil ;};func (_ccdf *Page )lastSegmentNumber ()(_cbdg uint32 ,_faff error ){const _eebe ="\u006c\u0061\u0073\u0074\u0053\u0065\u0067\u006d\u0065\u006e\u0074\u004eu\u006d\u0062\u0065\u0072"; +if len (_ccdf .Segments )==0{return _cbdg ,_b .Errorf (_eebe ,"\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",_ccdf .PageNumber ); +};return _ccdf .Segments [len (_ccdf .Segments )-1].SegmentNumber ,nil ;};func (_gceb *Page )getResolutionX ()(int ,error ){const _ggf ="\u0067\u0065\u0074\u0052\u0065\u0073\u006f\u006c\u0075t\u0069\u006f\u006e\u0058";if _gceb .ResolutionX !=0{return _gceb .ResolutionX ,nil ; +};_aec :=_gceb .getPageInformationSegment ();if _aec ==nil {return 0,_b .Error (_ggf ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_bbf ,_fdag :=_aec .GetSegmentData ();if _fdag !=nil {return 0,_b .Wrap (_fdag ,_ggf ,""); +};_abcc ,_bac :=_bbf .(*_cf .PageInformationSegment );if !_bac {return 0,_b .Errorf (_ggf ,"\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",_bbf ); +};_gceb .ResolutionX =_abcc .ResolutionX ;return _gceb .ResolutionX ,nil ;};
\ No newline at end of file |
