mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-02 22:17:06 +08:00
134 lines
40 KiB
Go
134 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 (_db "encoding/binary";_e "fmt";_dd "github.com/unidoc/unipdf/v3/common";_ed "github.com/unidoc/unipdf/v3/internal/bitwise";_b "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_cc "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";
|
|
_dc "github.com/unidoc/unipdf/v3/internal/jbig2/document/segments";_ef "github.com/unidoc/unipdf/v3/internal/jbig2/encoder/classer";_ec "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_a "io";_g "math";_c "runtime/debug";);func (_gcg *Page )GetResolutionX ()(int ,error ){return _gcg .getResolutionX ()};
|
|
func (_baf *Document )nextPageNumber ()uint32 {_baf .NumberOfPages ++;return _baf .NumberOfPages };func (_add *Document )encodeFileHeader (_bee _ed .BinaryWriter )(_aca int ,_bgc error ){const _bca ="\u0065\u006ec\u006f\u0064\u0065F\u0069\u006c\u0065\u0048\u0065\u0061\u0064\u0065\u0072";
|
|
_aca ,_bgc =_bee .Write (_de );if _bgc !=nil {return _aca ,_ec .Wrap (_bgc ,_bca ,"\u0069\u0064");};if _bgc =_bee .WriteByte (0x01);_bgc !=nil {return _aca ,_ec .Wrap (_bgc ,_bca ,"\u0066\u006c\u0061g\u0073");};_aca ++;_bbb :=make ([]byte ,4);_db .BigEndian .PutUint32 (_bbb ,_add .NumberOfPages );
|
|
_gd ,_bgc :=_bee .Write (_bbb );if _bgc !=nil {return _gd ,_ec .Wrap (_bgc ,_bca ,"p\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072");};_aca +=_gd ;return _aca ,nil ;};func (_bcb *Page )fitsPage (_bdf *_dc .PageInformationSegment ,_agbd *_cc .Bitmap )bool {return _bcb .countRegions ()==1&&_bdf .DefaultPixelValue ==0&&_bdf .PageBMWidth ==_agbd .Width &&_bdf .PageBMHeight ==_agbd .Height ;
|
|
};func (_gadf *Document )GetGlobalSegment (i int )(*_dc .Header ,error ){_ac ,_aaca :=_gadf .GlobalSegments .GetSegment (i );if _aaca !=nil {return nil ,_ec .Wrap (_aaca ,"\u0047\u0065t\u0047\u006c\u006fb\u0061\u006c\u0053\u0065\u0067\u006d\u0065\u006e\u0074","");
|
|
};return _ac ,nil ;};func (_dbae *Document )mapData ()error {const _aba ="\u006da\u0070\u0044\u0061\u0074\u0061";var (_dbbe []*_dc .Header ;_gca int64 ;_dgb _dc .Type ;);_cbb ,_gbab :=_dbae .isFileHeaderPresent ();if _gbab !=nil {return _ec .Wrap (_gbab ,_aba ,"");
|
|
};if _cbb {if _gbab =_dbae .parseFileHeader ();_gbab !=nil {return _ec .Wrap (_gbab ,_aba ,"");};_gca +=int64 (_dbae ._bf );_dbae .FullHeaders =true ;};var (_edaf *Page ;_bdb bool ;);for _dgb !=51&&!_bdb {_fd ,_cabe :=_dc .NewHeader (_dbae ,_dbae .InputStream ,_gca ,_dbae .OrganizationType );
|
|
if _cabe !=nil {return _ec .Wrap (_cabe ,_aba ,"");};_dd .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",_fd .SegmentNumber ,_fd .Type );
|
|
_dgb =_fd .Type ;if _dgb !=_dc .TEndOfFile {if _fd .PageAssociation !=0{_edaf =_dbae .Pages [_fd .PageAssociation ];if _edaf ==nil {_edaf =_ddee (_dbae ,_fd .PageAssociation );_dbae .Pages [_fd .PageAssociation ]=_edaf ;if _dbae .NumberOfPagesUnknown {_dbae .NumberOfPages ++;
|
|
};};_edaf .Segments =append (_edaf .Segments ,_fd );}else {_dbae .GlobalSegments .AddSegment (_fd );};};_dbbe =append (_dbbe ,_fd );_gca =_dbae .InputStream .StreamPosition ();if _dbae .OrganizationType ==_dc .OSequential {_gca +=int64 (_fd .SegmentDataLength );
|
|
};_bdb ,_cabe =_dbae .reachedEOF (_gca );if _cabe !=nil {_dd .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",_cabe );
|
|
return _ec .Wrap (_cabe ,_aba ,"");};};_dbae .determineRandomDataOffsets (_dbbe ,uint64 (_gca ));return nil ;};func (_cgd *Globals )AddSegment (segment *_dc .Header ){_cgd .Segments =append (_cgd .Segments ,segment )};func (_bfeg *Document )GetPage (pageNumber int )(_dc .Pager ,error ){const _daa ="\u0044\u006fc\u0075\u006d\u0065n\u0074\u002e\u0047\u0065\u0074\u0050\u0061\u0067\u0065";
|
|
if pageNumber < 0{_dd .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 ,_ec .Errorf (_daa ,"\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 (_bfeg .Pages ){_dd .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 ,_ec .Error (_daa ,"\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");
|
|
};_dfd ,_dcg :=_bfeg .Pages [pageNumber ];if !_dcg {_dd .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 ,_ec .Errorf (_daa ,"\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 _dfd ,nil ;};type EncodingMethod int ;func (_eec *Page )GetResolutionY ()(int ,error ){return _eec .getResolutionY ()};func (_egdf *Page )countRegions ()int {var _cgeb int ;for _ ,_acb :=range _egdf .Segments {switch _acb .Type {case 6,7,22,23,38,39,42,43:_cgeb ++;
|
|
};};return _cgeb ;};func (_feg *Page )addTextRegionSegment (_agbb []*_dc .Header ,_fg ,_adg map[int ]int ,_bda []int ,_dbe *_cc .Points ,_ggg *_cc .Bitmaps ,_dge *_b .IntSlice ,_acc *_cc .Boxes ,_gedd ,_fce int ){_dbaf :=&_dc .TextRegion {NumberOfSymbols :uint32 (_fce )};
|
|
_dbaf .InitEncode (_fg ,_adg ,_bda ,_dbe ,_ggg ,_dge ,_acc ,_feg .FinalWidth ,_feg .FinalHeight ,_gedd );_bbgg :=&_dc .Header {RTSegments :_agbb ,SegmentData :_dbaf ,PageAssociation :_feg .PageNumber ,Type :_dc .TImmediateTextRegion };_gfa :=_dc .TPageInformation ;
|
|
if _adg !=nil {_gfa =_dc .TSymbolDictionary ;};var _bcec int ;for ;_bcec < len (_feg .Segments );_bcec ++{if _feg .Segments [_bcec ].Type ==_gfa {_bcec ++;break ;};};_feg .Segments =append (_feg .Segments ,nil );copy (_feg .Segments [_bcec +1:],_feg .Segments [_bcec :]);
|
|
_feg .Segments [_bcec ]=_bbgg ;};func (_cgb *Page )getCombinationOperator (_cegg *_dc .PageInformationSegment ,_eeg _cc .CombinationOperator )_cc .CombinationOperator {if _cegg .CombinationOperatorOverrideAllowed (){return _eeg ;};return _cegg .CombinationOperator ();
|
|
};func (_ddd *Page )lastSegmentNumber ()(_fae uint32 ,_gcge error ){const _ebed ="\u006c\u0061\u0073\u0074\u0053\u0065\u0067\u006d\u0065\u006e\u0074\u004eu\u006d\u0062\u0065\u0072";if len (_ddd .Segments )==0{return _fae ,_ec .Errorf (_ebed ,"\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",_ddd .PageNumber );
|
|
};return _ddd .Segments [len (_ddd .Segments )-1].SegmentNumber ,nil ;};func (_gad *Document )produceClassifiedPage (_deb *Page ,_gba *_dc .Header )(_gaa error ){const _bec ="p\u0072\u006f\u0064\u0075ce\u0043l\u0061\u0073\u0073\u0069\u0066i\u0065\u0064\u0050\u0061\u0067\u0065";
|
|
var _dda map[int ]int ;_adb :=_gad ._bb ;_efdf :=[]*_dc .Header {_gba };if len (_gad ._ea [_deb .PageNumber ])> 0{_dda =map[int ]int {};_ggd ,_ggf :=_gad .addSymbolDictionary (_deb .PageNumber ,_gad .Classer .UndilatedTemplates ,_gad ._ea [_deb .PageNumber ],_dda ,false );
|
|
if _ggf !=nil {return _ec .Wrap (_ggf ,_bec ,"");};_efdf =append (_efdf ,_ggd );_adb +=len (_gad ._ea [_deb .PageNumber ]);};_abe :=_gad ._ge [_deb .PageNumber ];_dd .Log .Debug ("P\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020c\u006f\u006d\u0070\u0073: \u0025\u0076",_deb .PageNumber ,_abe );
|
|
_deb .addTextRegionSegment (_efdf ,_gad ._bbc ,_dda ,_gad ._ge [_deb .PageNumber ],_gad .Classer .PtaLL ,_gad .Classer .UndilatedTemplates ,_gad .Classer .ClassIDs ,nil ,_gfbd (_adb ),len (_gad ._ge [_deb .PageNumber ]));return nil ;};func (_fbb *Globals )GetSegmentByIndex (index int )(*_dc .Header ,error ){const _afce ="\u0047l\u006f\u0062\u0061\u006cs\u002e\u0047\u0065\u0074\u0053e\u0067m\u0065n\u0074\u0042\u0079\u0049\u006e\u0064\u0065x";
|
|
if _fbb ==nil {return nil ,_ec .Error (_afce ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (_fbb .Segments )==0{return nil ,_ec .Error (_afce ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");
|
|
};if index > len (_fbb .Segments )-1{return nil ,_ec .Error (_afce ,"\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");};return _fbb .Segments [index ],nil ;};func (_afc *Document )reachedEOF (_bfga int64 )(bool ,error ){const _dcgd ="\u0072\u0065\u0061\u0063\u0068\u0065\u0064\u0045\u004f\u0046";
|
|
_ ,_aag :=_afc .InputStream .Seek (_bfga ,_a .SeekStart );if _aag !=nil {_dd .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",_aag );
|
|
return false ,_ec .Wrap (_aag ,_dcgd ,"\u0069n\u0070\u0075\u0074\u0020\u0073\u0074\u0072\u0065\u0061\u006d\u0020s\u0065\u0065\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};_ ,_aag =_afc .InputStream .ReadBits (32);if _aag ==_a .EOF {return true ,nil ;
|
|
}else if _aag !=nil {return false ,_ec .Wrap (_aag ,_dcgd ,"");};return false ,nil ;};func (_fcd *Page )GetWidth ()(int ,error ){return _fcd .getWidth ()};func (_aggf *Document )determineRandomDataOffsets (_bfee []*_dc .Header ,_fbf uint64 ){if _aggf .OrganizationType !=_dc .ORandom {return ;
|
|
};for _ ,_cda :=range _bfee {_cda .SegmentDataStartOffset =_fbf ;_fbf +=_cda .SegmentDataLength ;};};func (_ebe *Page )getResolutionX ()(int ,error ){const _ddce ="\u0067\u0065\u0074\u0052\u0065\u0073\u006f\u006c\u0075t\u0069\u006f\u006e\u0058";if _ebe .ResolutionX !=0{return _ebe .ResolutionX ,nil ;
|
|
};_fbc :=_ebe .getPageInformationSegment ();if _fbc ==nil {return 0,_ec .Error (_ddce ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_agc ,_bbbb :=_fbc .GetSegmentData ();if _bbbb !=nil {return 0,_ec .Wrap (_bbbb ,_ddce ,"");
|
|
};_fefg ,_fdf :=_agc .(*_dc .PageInformationSegment );if !_fdf {return 0,_ec .Errorf (_ddce ,"\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",_agc );
|
|
};_ebe .ResolutionX =_fefg .ResolutionX ;return _ebe .ResolutionX ,nil ;};func _ddee (_bfce *Document ,_ffa int )*Page {return &Page {Document :_bfce ,PageNumber :_ffa ,Segments :[]*_dc .Header {}};};type Document struct{Pages map[int ]*Page ;NumberOfPagesUnknown bool ;
|
|
NumberOfPages uint32 ;GBUseExtTemplate bool ;InputStream _ed .StreamReader ;GlobalSegments *Globals ;OrganizationType _dc .OrganizationType ;Classer *_ef .Classer ;XRes ,YRes int ;FullHeaders bool ;CurrentSegmentNumber uint32 ;AverageTemplates *_cc .Bitmaps ;
|
|
BaseIndexes []int ;Refinement bool ;RefineLevel int ;_bf uint8 ;_f *_ed .BufferedWriter ;EncodeGlobals bool ;_bb int ;_ea map[int ][]int ;_ge map[int ][]int ;_efe []int ;_bbc map[int ]int ;};func (_bac *Document )parseFileHeader ()error {const _gcb ="\u0070a\u0072s\u0065\u0046\u0069\u006c\u0065\u0048\u0065\u0061\u0064\u0065\u0072";
|
|
_ ,_fec :=_bac .InputStream .Seek (8,_a .SeekStart );if _fec !=nil {return _ec .Wrap (_fec ,_gcb ,"\u0069\u0064");};_ ,_fec =_bac .InputStream .ReadBits (5);if _fec !=nil {return _ec .Wrap (_fec ,_gcb ,"\u0072\u0065\u0073\u0065\u0072\u0076\u0065\u0064\u0020\u0062\u0069\u0074\u0073");
|
|
};_abg ,_fec :=_bac .InputStream .ReadBit ();if _fec !=nil {return _ec .Wrap (_fec ,_gcb ,"\u0065x\u0074e\u006e\u0064\u0065\u0064\u0020t\u0065\u006dp\u006c\u0061\u0074\u0065\u0073");};if _abg ==1{_bac .GBUseExtTemplate =true ;};_abg ,_fec =_bac .InputStream .ReadBit ();
|
|
if _fec !=nil {return _ec .Wrap (_fec ,_gcb ,"\u0075\u006e\u006b\u006eow\u006e\u0020\u0070\u0061\u0067\u0065\u0020\u006e\u0075\u006d\u0062\u0065\u0072");};if _abg !=1{_bac .NumberOfPagesUnknown =false ;};_abg ,_fec =_bac .InputStream .ReadBit ();if _fec !=nil {return _ec .Wrap (_fec ,_gcb ,"\u006f\u0072\u0067\u0061\u006e\u0069\u007a\u0061\u0074\u0069\u006f\u006e \u0074\u0079\u0070\u0065");
|
|
};_bac .OrganizationType =_dc .OrganizationType (_abg );if !_bac .NumberOfPagesUnknown {_bac .NumberOfPages ,_fec =_bac .InputStream .ReadUint32 ();if _fec !=nil {return _ec .Wrap (_fec ,_gcb ,"\u006eu\u006db\u0065\u0072\u0020\u006f\u0066\u0020\u0070\u0061\u0067\u0065\u0073");
|
|
};_bac ._bf =13;};return nil ;};type Page struct{Segments []*_dc .Header ;PageNumber int ;Bitmap *_cc .Bitmap ;FinalHeight int ;FinalWidth int ;ResolutionX int ;ResolutionY int ;IsLossless bool ;Document *Document ;FirstSegmentNumber int ;EncodingMethod EncodingMethod ;
|
|
BlackIsOne bool ;};func (_aea *Page )createNormalPage (_cbd *_dc .PageInformationSegment )error {const _ccd ="\u0063\u0072e\u0061\u0074\u0065N\u006f\u0072\u006d\u0061\u006c\u0050\u0061\u0067\u0065";_aea .Bitmap =_cc .New (_cbd .PageBMWidth ,_cbd .PageBMHeight );
|
|
if _cbd .DefaultPixelValue !=0{_aea .Bitmap .SetDefaultPixel ();};for _ ,_ecc :=range _aea .Segments {switch _ecc .Type {case 6,7,22,23,38,39,42,43:_dd .Log .Trace ("\u0047\u0065\u0074\u0074in\u0067\u0020\u0053\u0065\u0067\u006d\u0065\u006e\u0074\u003a\u0020\u0025\u0064",_ecc .SegmentNumber );
|
|
_ebbd ,_afcd :=_ecc .GetSegmentData ();if _afcd !=nil {return _afcd ;};_dfb ,_dfcc :=_ebbd .(_dc .Regioner );if !_dfcc {_dd .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",_ebbd );
|
|
return _ec .Errorf (_ccd ,"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",_ebbd );
|
|
};_ggdd ,_afcd :=_dfb .GetRegionBitmap ();if _afcd !=nil {return _ec .Wrap (_afcd ,_ccd ,"");};if _aea .fitsPage (_cbd ,_ggdd ){_aea .Bitmap =_ggdd ;}else {_cbg :=_dfb .GetRegionInfo ();_abgg :=_aea .getCombinationOperator (_cbd ,_cbg .CombinaionOperator );
|
|
_afcd =_cc .Blit (_ggdd ,_aea .Bitmap ,int (_cbg .XLocation ),int (_cbg .YLocation ),_abgg );if _afcd !=nil {return _ec .Wrap (_afcd ,_ccd ,"");};};};};return nil ;};func (_ff *Document )completeClassifiedPages ()(_cg error ){const _gfb ="\u0063\u006f\u006dpl\u0065\u0074\u0065\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0050\u0061\u0067\u0065\u0073";
|
|
if _ff .Classer ==nil {return nil ;};_ff ._efe =make ([]int ,_ff .Classer .UndilatedTemplates .Size ());for _ab :=0;_ab < _ff .Classer .ClassIDs .Size ();_ab ++{_be ,_efeb :=_ff .Classer .ClassIDs .Get (_ab );if _efeb !=nil {return _ec .Wrapf (_efeb ,_gfb ,"\u0063\u006c\u0061\u0073s \u0077\u0069\u0074\u0068\u0020\u0069\u0064\u003a\u0020\u0027\u0025\u0064\u0027",_ab );
|
|
};_ff ._efe [_be ]++;};var _df []int ;for _daf :=0;_daf < _ff .Classer .UndilatedTemplates .Size ();_daf ++{if _ff .NumberOfPages ==1||_ff ._efe [_daf ]> 1{_df =append (_df ,_daf );};};var (_gb *Page ;_aa bool ;);for _fbd ,_dde :=range *_ff .Classer .ComponentPageNumbers {if _gb ,_aa =_ff .Pages [_dde ];
|
|
!_aa {return _ec .Errorf (_gfb ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_fbd );};if _gb .EncodingMethod ==GenericEM {_dd .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",_fbd );
|
|
continue ;};_ff ._ge [_dde ]=append (_ff ._ge [_dde ],_fbd );_efd ,_cgg :=_ff .Classer .ClassIDs .Get (_fbd );if _cgg !=nil {return _ec .Wrapf (_cgg ,_gfb ,"\u006e\u006f\u0020\u0073uc\u0068\u0020\u0063\u006c\u0061\u0073\u0073\u0049\u0044\u003a\u0020\u0025\u0064",_fbd );
|
|
};if _ff ._efe [_efd ]==1&&_ff .NumberOfPages !=1{_gc :=append (_ff ._ea [_dde ],_efd );_ff ._ea [_dde ]=_gc ;};};if _cg =_ff .Classer .ComputeLLCorners ();_cg !=nil {return _ec .Wrap (_cg ,_gfb ,"");};if _ ,_cg =_ff .addSymbolDictionary (0,_ff .Classer .UndilatedTemplates ,_df ,_ff ._bbc ,false );
|
|
_cg !=nil {return _ec .Wrap (_cg ,_gfb ,"");};return nil ;};func (_beg *Page )clearSegmentData (){for _gff :=range _beg .Segments {_beg .Segments [_gff ].CleanSegmentData ();};};func (_bgcc *Page )getPageInformationSegment ()*_dc .Header {for _ ,_dfe :=range _bgcc .Segments {if _dfe .Type ==_dc .TPageInformation {return _dfe ;
|
|
};};_dd .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",_bgcc );
|
|
return nil ;};func (_ddc *Document )isFileHeaderPresent ()(bool ,error ){_ddc .InputStream .Mark ();for _ ,_eaa :=range _de {_dbb ,_ged :=_ddc .InputStream .ReadByte ();if _ged !=nil {return false ,_ged ;};if _eaa !=_dbb {_ddc .InputStream .Reset ();return false ,nil ;
|
|
};};_ddc .InputStream .Reset ();return true ,nil ;};func _gfbd (_aac int )int {_cce :=0;_ebc :=(_aac &(_aac -1))==0;_aac >>=1;for ;_aac !=0;_aac >>=1{_cce ++;};if _ebc {return _cce ;};return _cce +1;};func (_eac *Page )collectPageStripes ()(_gfc []_dc .Segmenter ,_adc error ){const _aaga ="\u0063o\u006cl\u0065\u0063\u0074\u0050\u0061g\u0065\u0053t\u0072\u0069\u0070\u0065\u0073";
|
|
var _cac _dc .Segmenter ;for _ ,_fag :=range _eac .Segments {switch _fag .Type {case 6,7,22,23,38,39,42,43:_cac ,_adc =_fag .GetSegmentData ();if _adc !=nil {return nil ,_ec .Wrap (_adc ,_aaga ,"");};_gfc =append (_gfc ,_cac );case 50:_cac ,_adc =_fag .GetSegmentData ();
|
|
if _adc !=nil {return nil ,_adc ;};_fef ,_efb :=_cac .(*_dc .EndOfStripe );if !_efb {return nil ,_ec .Errorf (_aaga ,"\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",_cac );
|
|
};_gfc =append (_gfc ,_fef );_eac .FinalHeight =_fef .LineNumber ();};};return _gfc ,nil ;};func (_aaab *Page )GetSegment (number int )(*_dc .Header ,error ){const _afbg ="\u0050a\u0067e\u002e\u0047\u0065\u0074\u0053\u0065\u0067\u006d\u0065\u006e\u0074";
|
|
for _ ,_egce :=range _aaab .Segments {if _egce .SegmentNumber ==uint32 (number ){return _egce ,nil ;};};_bebe :=make ([]uint32 ,len (_aaab .Segments ));for _baa ,_aga :=range _aaab .Segments {_bebe [_baa ]=_aga .SegmentNumber ;};return nil ,_ec .Errorf (_afbg ,"\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 ,_aaab .PageNumber ,_bebe );
|
|
};func (_gfd *Document )nextSegmentNumber ()uint32 {_bcac :=_gfd .CurrentSegmentNumber ;_gfd .CurrentSegmentNumber ++;return _bcac ;};func (_dbc *Document )AddClassifiedPage (bm *_cc .Bitmap ,method _ef .Method )(_eag error ){const _fb ="\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 !_dbc .FullHeaders &&_dbc .NumberOfPages !=0{return _ec .Error (_fb ,"\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 _dbc .Classer ==nil {if _dbc .Classer ,_eag =_ef .Init (_ef .DefaultSettings ());_eag !=nil {return _ec .Wrap (_eag ,_fb ,"");};};_ecd :=int (_dbc .nextPageNumber ());_da :=&Page {Segments :[]*_dc .Header {},Bitmap :bm ,Document :_dbc ,FinalHeight :bm .Height ,FinalWidth :bm .Width ,PageNumber :_ecd };
|
|
_dbc .Pages [_ecd ]=_da ;switch method {case _ef .RankHaus :_da .EncodingMethod =RankHausEM ;case _ef .Correlation :_da .EncodingMethod =CorrelationEM ;};_da .AddPageInformationSegment ();if _eag =_dbc .Classer .AddPage (bm ,_ecd ,method );_eag !=nil {return _ec .Wrap (_eag ,_fb ,"");
|
|
};if _dbc .FullHeaders {_da .AddEndOfPageSegment ();};return nil ;};func (_bgccf *Page )getHeight ()(int ,error ){const _efa ="\u0067e\u0074\u0048\u0065\u0069\u0067\u0068t";if _bgccf .FinalHeight !=0{return _bgccf .FinalHeight ,nil ;};_abbf :=_bgccf .getPageInformationSegment ();
|
|
if _abbf ==nil {return 0,_ec .Error (_efa ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_bfef ,_caf :=_abbf .GetSegmentData ();if _caf !=nil {return 0,_ec .Wrap (_caf ,_efa ,"");};_bdcc ,_gae :=_bfef .(*_dc .PageInformationSegment );
|
|
if !_gae {return 0,_ec .Errorf (_efa ,"\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",_bfef );
|
|
};if _bdcc .PageBMHeight ==_g .MaxInt32 {_ ,_caf =_bgccf .GetBitmap ();if _caf !=nil {return 0,_ec .Wrap (_caf ,_efa ,"");};}else {_bgccf .FinalHeight =_bdcc .PageBMHeight ;};return _bgccf .FinalHeight ,nil ;};func (_afb *Page )Encode (w _ed .BinaryWriter )(_gaab int ,_cee error ){const _dgdf ="P\u0061\u0067\u0065\u002e\u0045\u006e\u0063\u006f\u0064\u0065";
|
|
var _ecf int ;for _ ,_eba :=range _afb .Segments {if _ecf ,_cee =_eba .Encode (w );_cee !=nil {return _gaab ,_ec .Wrap (_cee ,_dgdf ,"");};_gaab +=_ecf ;};return _gaab ,nil ;};type Globals struct{Segments []*_dc .Header ;};func (_fdd *Page )createStripedPage (_gfdf *_dc .PageInformationSegment )error {const _bea ="\u0063\u0072\u0065\u0061\u0074\u0065\u0053\u0074\u0072\u0069\u0070\u0065d\u0050\u0061\u0067\u0065";
|
|
_abdc ,_degb :=_fdd .collectPageStripes ();if _degb !=nil {return _ec .Wrap (_degb ,_bea ,"");};var _ceg int ;for _ ,_cbdg :=range _abdc {if _gee ,_gec :=_cbdg .(*_dc .EndOfStripe );_gec {_ceg =_gee .LineNumber ()+1;}else {_dcba :=_cbdg .(_dc .Regioner );
|
|
_bcg :=_dcba .GetRegionInfo ();_cbda :=_fdd .getCombinationOperator (_gfdf ,_bcg .CombinaionOperator );_eeb ,_gcaf :=_dcba .GetRegionBitmap ();if _gcaf !=nil {return _ec .Wrap (_gcaf ,_bea ,"");};_gcaf =_cc .Blit (_eeb ,_fdd .Bitmap ,int (_bcg .XLocation ),_ceg ,_cbda );
|
|
if _gcaf !=nil {return _ec .Wrap (_gcaf ,_bea ,"");};};};return nil ;};func (_dfa *Page )createPage (_ffe *_dc .PageInformationSegment )error {var _dgec error ;if !_ffe .IsStripe ||_ffe .PageBMHeight !=-1{_dgec =_dfa .createNormalPage (_ffe );}else {_dgec =_dfa .createStripedPage (_ffe );
|
|
};return _dgec ;};func (_bc *Document )completeSymbols ()(_bce error ){const _ccc ="\u0063o\u006dp\u006c\u0065\u0074\u0065\u0053\u0079\u006d\u0062\u006f\u006c\u0073";if _bc .Classer ==nil {return nil ;};if _bc .Classer .UndilatedTemplates ==nil {return _ec .Error (_ccc ,"\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");
|
|
};_ebg :=len (_bc .Pages )==1;_ae :=make ([]int ,_bc .Classer .UndilatedTemplates .Size ());var _dgd int ;for _ded :=0;_ded < _bc .Classer .ClassIDs .Size ();_ded ++{_dgd ,_bce =_bc .Classer .ClassIDs .Get (_ded );if _bce !=nil {return _ec .Wrap (_bce ,_ccc ,"\u0063\u006c\u0061\u0073\u0073\u0020\u0049\u0044\u0027\u0073");
|
|
};_ae [_dgd ]++;};var _beb []int ;for _cd :=0;_cd < _bc .Classer .UndilatedTemplates .Size ();_cd ++{if _ae [_cd ]==0{return _ec .Error (_ccc ,"\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 _ae [_cd ]> 1||_ebg {_beb =append (_beb ,_cd );};};_bc ._bb =len (_beb );var _agd ,_bfc int ;for _fc :=0;_fc < _bc .Classer .ComponentPageNumbers .Size ();_fc ++{_agd ,_bce =_bc .Classer .ComponentPageNumbers .Get (_fc );if _bce !=nil {return _ec .Wrapf (_bce ,_ccc ,"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",_fc );
|
|
};_bfc ,_bce =_bc .Classer .ClassIDs .Get (_fc );if _bce !=nil {return _ec .Wrapf (_bce ,_ccc ,"\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",_agd );
|
|
};if _ae [_bfc ]==1&&!_ebg {_bc ._ea [_agd ]=append (_bc ._ea [_agd ],_bfc );};};if _bce =_bc .Classer .ComputeLLCorners ();_bce !=nil {return _ec .Wrap (_bce ,_ccc ,"");};return nil ;};func (_egd *Document )GetNumberOfPages ()(uint32 ,error ){if _egd .NumberOfPagesUnknown ||_egd .NumberOfPages ==0{if len (_egd .Pages )==0{if _af :=_egd .mapData ();
|
|
_af !=nil {return 0,_ec .Wrap (_af ,"\u0044o\u0063\u0075\u006d\u0065n\u0074\u002e\u0047\u0065\u0074N\u0075m\u0062e\u0072\u004f\u0066\u0050\u0061\u0067\u0065s","");};};return uint32 (len (_egd .Pages )),nil ;};return _egd .NumberOfPages ,nil ;};func (_ebb *Document )encodeSegment (_ce *_dc .Header ,_bff *int )error {const _fad ="\u0065\u006e\u0063\u006f\u0064\u0065\u0053\u0065\u0067\u006d\u0065\u006e\u0074";
|
|
_ce .SegmentNumber =_ebb .nextSegmentNumber ();_dgg ,_bfb :=_ce .Encode (_ebb ._f );if _bfb !=nil {return _ec .Wrapf (_bfb ,_fad ,"\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u003a\u0020\u0027\u0025\u0064\u0027",_ce .SegmentNumber );};*_bff +=_dgg ;return nil ;
|
|
};func (_dgbg *Page )composePageBitmap ()error {const _gda ="\u0063\u006f\u006d\u0070\u006f\u0073\u0065\u0050\u0061\u0067\u0065\u0042i\u0074\u006d\u0061\u0070";if _dgbg .PageNumber ==0{return nil ;};_dfcf :=_dgbg .getPageInformationSegment ();if _dfcf ==nil {return _ec .Error (_gda ,"\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");
|
|
};_cdg ,_aff :=_dfcf .GetSegmentData ();if _aff !=nil {return _aff ;};_cabd ,_bacf :=_cdg .(*_dc .PageInformationSegment );if !_bacf {return _ec .Error (_gda ,"\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 _aff =_dgbg .createPage (_cabd );_aff !=nil {return _ec .Wrap (_aff ,_gda ,"");};_dgbg .clearSegmentData ();return nil ;};func (_gg *Document )produceClassifiedPages ()(_gbf error ){const _ca ="\u0070\u0072\u006f\u0064uc\u0065\u0043\u006c\u0061\u0073\u0073\u0069\u0066\u0069\u0065\u0064\u0050\u0061\u0067e\u0073";
|
|
if _gg .Classer ==nil {return nil ;};var (_gfe *Page ;_ad bool ;_aae *_dc .Header ;);for _eg :=1;_eg <=int (_gg .NumberOfPages );_eg ++{if _gfe ,_ad =_gg .Pages [_eg ];!_ad {return _ec .Errorf (_ca ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_eg );
|
|
};if _gfe .EncodingMethod ==GenericEM {continue ;};if _aae ==nil {if _aae ,_gbf =_gg .GlobalSegments .GetSymbolDictionary ();_gbf !=nil {return _ec .Wrap (_gbf ,_ca ,"");};};if _gbf =_gg .produceClassifiedPage (_gfe ,_aae );_gbf !=nil {return _ec .Wrapf (_gbf ,_ca ,"\u0070\u0061\u0067\u0065\u003a\u0020\u0027\u0025\u0064\u0027",_eg );
|
|
};};return nil ;};var _de =[]byte {0x97,0x4A,0x42,0x32,0x0D,0x0A,0x1A,0x0A};func (_bdc *Page )String ()string {return _e .Sprintf ("\u0050\u0061\u0067\u0065\u0020\u0023\u0025\u0064",_bdc .PageNumber );};func InitEncodeDocument (fullHeaders bool )*Document {return &Document {FullHeaders :fullHeaders ,_f :_ed .BufferedMSB (),Pages :map[int ]*Page {},_ea :map[int ][]int {},_bbc :map[int ]int {},_ge :map[int ][]int {}};
|
|
};func (_dec *Page )AddGenericRegion (bm *_cc .Bitmap ,xloc ,yloc ,template int ,tp _dc .Type ,duplicateLineRemoval bool )error {const _dcgg ="P\u0061\u0067\u0065\u002eAd\u0064G\u0065\u006e\u0065\u0072\u0069c\u0052\u0065\u0067\u0069\u006f\u006e";_dad :=&_dc .GenericRegion {};
|
|
if _ggfb :=_dad .InitEncode (bm ,xloc ,yloc ,template ,duplicateLineRemoval );_ggfb !=nil {return _ec .Wrap (_ggfb ,_dcgg ,"");};_ecb :=&_dc .Header {Type :_dc .TImmediateGenericRegion ,PageAssociation :_dec .PageNumber ,SegmentData :_dad };_dec .Segments =append (_dec .Segments ,_ecb );
|
|
return nil ;};func (_aage *Page )GetHeight ()(int ,error ){return _aage .getHeight ()};func (_eb *Document )AddGenericPage (bm *_cc .Bitmap ,duplicateLineRemoval bool )(_gf 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 !_eb .FullHeaders &&_eb .NumberOfPages !=0{return _ec .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");
|
|
};_ga :=&Page {Segments :[]*_dc .Header {},Bitmap :bm ,Document :_eb ,FinalHeight :bm .Height ,FinalWidth :bm .Width ,IsLossless :true ,BlackIsOne :bm .Color ==_cc .Chocolate };_ga .PageNumber =int (_eb .nextPageNumber ());_eb .Pages [_ga .PageNumber ]=_ga ;
|
|
bm .InverseData ();_ga .AddPageInformationSegment ();if _gf =_ga .AddGenericRegion (bm ,0,0,0,_dc .TImmediateGenericRegion ,duplicateLineRemoval );_gf !=nil {return _ec .Wrap (_gf ,_bg ,"");};if _eb .FullHeaders {_ga .AddEndOfPageSegment ();};return nil ;
|
|
};func (_ggc *Page )GetBitmap ()(_ecg *_cc .Bitmap ,_cea error ){_dd .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",_ggc .PageNumber ));
|
|
defer func (){if _cea !=nil {_dd .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",_ggc .PageNumber ,_cea ));
|
|
}else {_dd .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",_ggc .PageNumber ));};}();if _ggc .Bitmap !=nil {return _ggc .Bitmap ,nil ;
|
|
};_cea =_ggc .composePageBitmap ();if _cea !=nil {return nil ,_cea ;};return _ggc .Bitmap ,nil ;};func (_abee *Page )nextSegmentNumber ()uint32 {return _abee .Document .nextSegmentNumber ()};func (_eee *Page )getWidth ()(int ,error ){const _bed ="\u0067\u0065\u0074\u0057\u0069\u0064\u0074\u0068";
|
|
if _eee .FinalWidth !=0{return _eee .FinalWidth ,nil ;};_dcgb :=_eee .getPageInformationSegment ();if _dcgb ==nil {return 0,_ec .Error (_bed ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");};_cf ,_abac :=_dcgb .GetSegmentData ();
|
|
if _abac !=nil {return 0,_ec .Wrap (_abac ,_bed ,"");};_eef ,_bgb :=_cf .(*_dc .PageInformationSegment );if !_bgb {return 0,_ec .Errorf (_bed ,"\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",_cf );
|
|
};_eee .FinalWidth =_eef .PageBMWidth ;return _eee .FinalWidth ,nil ;};func (_bd *Document )Encode ()(_agg []byte ,_dfc error ){const _bcd ="\u0044o\u0063u\u006d\u0065\u006e\u0074\u002e\u0045\u006e\u0063\u006f\u0064\u0065";var _ddaf ,_eda int ;if _bd .FullHeaders {if _ddaf ,_dfc =_bd .encodeFileHeader (_bd ._f );
|
|
_dfc !=nil {return nil ,_ec .Wrap (_dfc ,_bcd ,"");};};var (_bge bool ;_egb *_dc .Header ;_bde *Page ;);if _dfc =_bd .completeClassifiedPages ();_dfc !=nil {return nil ,_ec .Wrap (_dfc ,_bcd ,"");};if _dfc =_bd .produceClassifiedPages ();_dfc !=nil {return nil ,_ec .Wrap (_dfc ,_bcd ,"");
|
|
};if _bd .GlobalSegments !=nil {for _ ,_egb =range _bd .GlobalSegments .Segments {if _dfc =_bd .encodeSegment (_egb ,&_ddaf );_dfc !=nil {return nil ,_ec .Wrap (_dfc ,_bcd ,"");};};};for _agb :=1;_agb <=int (_bd .NumberOfPages );_agb ++{if _bde ,_bge =_bd .Pages [_agb ];
|
|
!_bge {return nil ,_ec .Errorf (_bcd ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_agb );};for _ ,_egb =range _bde .Segments {if _dfc =_bd .encodeSegment (_egb ,&_ddaf );_dfc !=nil {return nil ,_ec .Wrap (_dfc ,_bcd ,"");
|
|
};};};if _bd .FullHeaders {if _eda ,_dfc =_bd .encodeEOFHeader (_bd ._f );_dfc !=nil {return nil ,_ec .Wrap (_dfc ,_bcd ,"");};_ddaf +=_eda ;};_agg =_bd ._f .Data ();if len (_agg )!=_ddaf {_dd .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",_ddaf ,len (_agg ));
|
|
};return _agg ,nil ;};const (GenericEM EncodingMethod =iota ;CorrelationEM ;RankHausEM ;);func (_cge *Globals )GetSegment (segmentNumber int )(*_dc .Header ,error ){const _fbfd ="\u0047l\u006fb\u0061\u006c\u0073\u002e\u0047e\u0074\u0053e\u0067\u006d\u0065\u006e\u0074";
|
|
if _cge ==nil {return nil ,_ec .Error (_fbfd ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (_cge .Segments )==0{return nil ,_ec .Error (_fbfd ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");
|
|
};var _gbfd *_dc .Header ;for _ ,_gbfd =range _cge .Segments {if _gbfd .SegmentNumber ==uint32 (segmentNumber ){break ;};};if _gbfd ==nil {return nil ,_ec .Error (_fbfd ,"\u0073\u0065\u0067\u006d\u0065\u006e\u0074\u0020\u006e\u006f\u0074\u0020f\u006f\u0075\u006e\u0064");
|
|
};return _gbfd ,nil ;};func (_aad *Page )AddPageInformationSegment (){_gfbb :=&_dc .PageInformationSegment {PageBMWidth :_aad .FinalWidth ,PageBMHeight :_aad .FinalHeight ,ResolutionX :_aad .ResolutionX ,ResolutionY :_aad .ResolutionY ,IsLossless :_aad .IsLossless };
|
|
if _aad .BlackIsOne {_gfbb .DefaultPixelValue =uint8 (0x1);};_ace :=&_dc .Header {PageAssociation :_aad .PageNumber ,SegmentDataLength :uint64 (_gfbb .Size ()),SegmentData :_gfbb ,Type :_dc .TPageInformation };_aad .Segments =append (_aad .Segments ,_ace );
|
|
};func (_cag *Document )addSymbolDictionary (_abc int ,_daff *_cc .Bitmaps ,_ggfc []int ,_cab map[int ]int ,_cagf bool )(*_dc .Header ,error ){const _abca ="\u0061\u0064\u0064\u0053ym\u0062\u006f\u006c\u0044\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079";
|
|
_ba :=&_dc .SymbolDictionary {};if _fe :=_ba .InitEncode (_daff ,_ggfc ,_cab ,_cagf );_fe !=nil {return nil ,_fe ;};_bfe :=&_dc .Header {Type :_dc .TSymbolDictionary ,PageAssociation :_abc ,SegmentData :_ba };if _abc ==0{if _cag .GlobalSegments ==nil {_cag .GlobalSegments =&Globals {};
|
|
};_cag .GlobalSegments .AddSegment (_bfe );return _bfe ,nil ;};_fa ,_gcc :=_cag .Pages [_abc ];if !_gcc {return nil ,_ec .Errorf (_abca ,"p\u0061g\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020n\u006f\u0074\u0020\u0066ou\u006e\u0064",_abc );};var (_cb int ;
|
|
_ag *_dc .Header ;);for _cb ,_ag =range _fa .Segments {if _ag .Type ==_dc .TPageInformation {break ;};};_cb ++;_fa .Segments =append (_fa .Segments ,nil );copy (_fa .Segments [_cb +1:],_fa .Segments [_cb :]);_fa .Segments [_cb ]=_bfe ;return _bfe ,nil ;
|
|
};func (_bdaa *Page )getResolutionY ()(int ,error ){const _bafa ="\u0067\u0065\u0074\u0052\u0065\u0073\u006f\u006c\u0075t\u0069\u006f\u006e\u0059";if _bdaa .ResolutionY !=0{return _bdaa .ResolutionY ,nil ;};_dfdc :=_bdaa .getPageInformationSegment ();if _dfdc ==nil {return 0,_ec .Error (_bafa ,"n\u0069l\u0020\u0070\u0061\u0067\u0065\u0020\u0069\u006ef\u006f\u0072\u006d\u0061ti\u006f\u006e");
|
|
};_bdfe ,_becf :=_dfdc .GetSegmentData ();if _becf !=nil {return 0,_ec .Wrap (_becf ,_bafa ,"");};_fge ,_eagg :=_bdfe .(*_dc .PageInformationSegment );if !_eagg {return 0,_ec .Errorf (_bafa ,"\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",_bdfe );
|
|
};_bdaa .ResolutionY =_fge .ResolutionY ;return _bdaa .ResolutionY ,nil ;};func (_fee *Globals )GetSymbolDictionary ()(*_dc .Header ,error ){const _bgf ="G\u006c\u006f\u0062\u0061\u006c\u0073.\u0047\u0065\u0074\u0053\u0079\u006d\u0062\u006f\u006cD\u0069\u0063\u0074i\u006fn\u0061\u0072\u0079";
|
|
if _fee ==nil {return nil ,_ec .Error (_bgf ,"\u0067\u006c\u006f\u0062al\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (_fee .Segments )==0{return nil ,_ec .Error (_bgf ,"\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u0020\u0061\u0072\u0065\u0020e\u006d\u0070\u0074\u0079");
|
|
};for _ ,_ebge :=range _fee .Segments {if _ebge .Type ==_dc .TSymbolDictionary {return _ebge ,nil ;};};return nil ,_ec .Error (_bgf ,"\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 _gef (_abd _ed .StreamReader ,_dcf *Globals )(*Document ,error ){_dcb :=&Document {Pages :make (map[int ]*Page ),InputStream :_abd ,OrganizationType :_dc .OSequential ,NumberOfPagesUnknown :true ,GlobalSegments :_dcf ,_bf :9};if _dcb .GlobalSegments ==nil {_dcb .GlobalSegments =&Globals {};
|
|
};if _bgd :=_dcb .mapData ();_bgd !=nil {return nil ,_bgd ;};return _dcb ,nil ;};func (_egg *Document )encodeEOFHeader (_bfg _ed .BinaryWriter )(_aaa int ,_bbg error ){_dba :=&_dc .Header {SegmentNumber :_egg .nextSegmentNumber (),Type :_dc .TEndOfFile };
|
|
if _aaa ,_bbg =_dba .Encode (_bfg );_bbg !=nil {return 0,_ec .Wrap (_bbg ,"\u0065n\u0063o\u0064\u0065\u0045\u004f\u0046\u0048\u0065\u0061\u0064\u0065\u0072","");};return _aaa ,nil ;};func DecodeDocument (input _ed .StreamReader ,globals *Globals )(*Document ,error ){return _gef (input ,globals );
|
|
};func (_deg *Page )AddEndOfPageSegment (){_egc :=&_dc .Header {Type :_dc .TEndOfPage ,PageAssociation :_deg .PageNumber };_deg .Segments =append (_deg .Segments ,_egc );}; |