unipdf/extractor/extractor.go
2021-02-22 02:29:48 +00:00

793 lines
180 KiB
Go
Raw Blame History

//
// 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 extractor is used for quickly extracting PDF content through a simple interface.
// Currently offers functionality for extracting textual content.
//
package extractor ;import (_fb "bytes";_b "errors";_a "fmt";_cc "github.com/unidoc/unipdf/v3/common";_af "github.com/unidoc/unipdf/v3/contentstream";_fd "github.com/unidoc/unipdf/v3/core";_ba "github.com/unidoc/unipdf/v3/internal/license";_gc "github.com/unidoc/unipdf/v3/internal/textencoding";
_dg "github.com/unidoc/unipdf/v3/internal/transform";_ec "github.com/unidoc/unipdf/v3/model";_fc "golang.org/x/text/unicode/norm";_gb "golang.org/x/xerrors";_g "image/color";_d "io";_fg "math";_c "regexp";_ef "sort";_bg "strings";_f "unicode";_eb "unicode/utf8";
);
// TextTable represents a table.
// Cells are ordered top-to-bottom, left-to-right.
// Cells[y] is the (0-offset) y'th row in the table.
// Cells[y][x] is the (0-offset) x'th column in the table.
type TextTable struct{W ,H int ;Cells [][]TableCell ;};
// String returns a string describing `pt`.
func (_bfgg PageText )String ()string {_gcd :=_a .Sprintf ("P\u0061\u0067\u0065\u0054ex\u0074:\u0020\u0025\u0064\u0020\u0065l\u0065\u006d\u0065\u006e\u0074\u0073",len (_bfgg ._dggc ));_gbf :=[]string {"\u002d"+_gcd };for _ ,_gag :=range _bfgg ._dggc {_gbf =append (_gbf ,_gag .String ());
};_gbf =append (_gbf ,"\u002b"+_gcd );return _bg .Join (_gbf ,"\u000a");};func _geefg (_gbeb ,_dabgg bounded )float64 {_bdbe :=_cggc (_gbeb ,_dabgg );if !_bdbcg (_bdbe ){return _bdbe ;};return _acbd (_gbeb ,_dabgg );};func (_fdbe paraList )toTextMarks ()[]TextMark {_bddg :=0;
var _baecb []TextMark ;for _aeec ,_dcab :=range _fdbe {if _dcab ._dcdd {continue ;};_afca :=_dcab .toTextMarks (&_bddg );_baecb =append (_baecb ,_afca ...);if _aeec !=len (_fdbe )-1{if _gdee (_dcab ,_fdbe [_aeec +1]){_baecb =_babg (_baecb ,&_bddg ,"\u0020");
}else {_baecb =_babg (_baecb ,&_bddg ,"\u000a");_baecb =_babg (_baecb ,&_bddg ,"\u000a");};};};_baecb =_babg (_baecb ,&_bddg ,"\u000a");_baecb =_babg (_baecb ,&_bddg ,"\u000a");return _baecb ;};func _daae (_ddgdg ,_dgbg _dg .Point )rulingKind {_ceag :=_fg .Abs (_ddgdg .X -_dgbg .X );
_gcgb :=_fg .Abs (_ddgdg .Y -_dgbg .Y );return _fag (_ceag ,_gcgb ,_cbgb );};type markKind int ;
// Text returns the extracted page text.
func (_gdce PageText )Text ()string {return _gdce ._ddab };func (_faca *textPara )fontsize ()float64 {return _faca ._dagfb [0]._deab };func (_edd *imageExtractContext )extractFormImages (_fcg *_fd .PdfObjectName ,_fdg _af .GraphicsState ,_dgea *_ec .PdfPageResources )error {_ggg ,_bfg :=_dgea .GetXObjectFormByName (*_fcg );
if _bfg !=nil {return _bfg ;};if _ggg ==nil {return nil ;};_ggcd ,_bfg :=_ggg .GetContentStream ();if _bfg !=nil {return _bfg ;};_acd :=_ggg .Resources ;if _acd ==nil {_acd =_dgea ;};_bfg =_edd .extractContentStreamImages (string (_ggcd ),_acd );if _bfg !=nil {return _bfg ;
};_edd ._bc ++;return nil ;};func _aabdc (_bfccf ,_dgdaf int )uint64 {return uint64 (_bfccf )*0x1000000+uint64 (_dgdaf )};func (_gfefd paraList )sortReadingOrder (){_cc .Log .Trace ("\u0073\u006fr\u0074\u0052\u0065\u0061\u0064i\u006e\u0067\u004f\u0072\u0064e\u0072\u003a\u0020\u0070\u0061\u0072\u0061\u0073\u003d\u0025\u0064\u0020\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u0078\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d",len (_gfefd ));
if len (_gfefd )<=1{return ;};_gfefd .computeEBBoxes ();_ef .Slice (_gfefd ,func (_dfd ,_bbbd int )bool {return _fffeg (_gfefd [_dfd ],_gfefd [_bbbd ])<=0});_ddcd :=_gfefd .topoOrder ();_gfefd .reorder (_ddcd );};func (_bbfe *wordBag )absorb (_ddbg *wordBag ){_gaecg :=_ddbg .makeRemovals ();
for _dggg ,_cbcf :=range _ddbg ._fbdb {for _ ,_bdf :=range _cbcf {_bbfe .pullWord (_bdf ,_dggg ,_gaecg );};};_ddbg .applyRemovals (_gaecg );};
// Elements returns the TextMarks in `ma`.
func (_dcc *TextMarkArray )Elements ()[]TextMark {return _dcc ._bccg };var _efgf =_c .MustCompile ("\u005e\u005c\u0073\u002a\u0028\u005c\u0064\u002b\u005c\u002e\u003f|\u005b\u0049\u0069\u0076\u005d\u002b\u0029\u005c\u0073\u002a\\\u0029\u003f\u0024");func (_ggbc gridTile )numBorders ()int {_eedf :=0;
if _ggbc ._gdad {_eedf ++;};if _ggbc ._abfb {_eedf ++;};if _ggbc ._ebabg {_eedf ++;};if _ggbc ._bggdg {_eedf ++;};return _eedf ;};func _cab (_bgg *_af .ContentStreamOperation )(float64 ,error ){if len (_bgg .Params )!=1{_fed :=_b .New ("\u0069n\u0063\u006f\u0072\u0072e\u0063\u0074\u0020\u0070\u0061r\u0061m\u0065t\u0065\u0072\u0020\u0063\u006f\u0075\u006et");
_cc .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0025\u0023\u0071\u0020\u0073\u0068\u006f\u0075\u006c\u0064\u0020h\u0061\u0076\u0065\u0020\u0025\u0064\u0020i\u006e\u0070\u0075\u0074\u0020\u0070\u0061\u0072\u0061\u006d\u0073,\u0020\u0067\u006f\u0074\u0020\u0025\u0064\u0020\u0025\u002b\u0076",_bgg .Operand ,1,len (_bgg .Params ),_bgg .Params );
return 0.0,_fed ;};return _fd .GetNumberAsFloat (_bgg .Params [0]);};type textState struct{_faea float64 ;_bca float64 ;_daf float64 ;_ffca float64 ;_eab float64 ;_cfb RenderMode ;_bbb float64 ;_fgd *_ec .PdfFont ;_bbdd _ec .PdfRectangle ;_efef int ;_gdfg int ;
};func (_dccca paraList )writeText (_cdde _d .Writer ){for _ebb ,_dfad :=range _dccca {if _dfad ._dcdd {continue ;};_dfad .writeText (_cdde );if _ebb !=len (_dccca )-1{if _gdee (_dfad ,_dccca [_ebb +1]){_cdde .Write ([]byte ("\u0020"));}else {_cdde .Write ([]byte ("\u000a"));
_cdde .Write ([]byte ("\u000a"));};};};_cdde .Write ([]byte ("\u000a"));_cdde .Write ([]byte ("\u000a"));};func _ffbg (_dffc ,_dddf _ec .PdfRectangle )bool {return _dbfb (_dffc ,_dddf )&&_fdgb (_dffc ,_dddf )};func _aecf (_gad float64 )int {var _bbgc int ;
if _gad >=0{_bbgc =int (_gad /_eeee );}else {_bbgc =int (_gad /_eeee )-1;};return _bbgc ;};func _fdgb (_abd ,_fbef _ec .PdfRectangle )bool {return _abd .Lly <=_fbef .Ury &&_fbef .Lly <=_abd .Ury };func _gggaf (_abea *wordBag ,_fdeg *textWord ,_dggge float64 )bool {return _abea .Urx <=_fdeg .Llx &&_fdeg .Llx < _abea .Urx +_dggge ;
};func _eegg (_aebfa _ec .PdfRectangle ,_cgdc []*textLine )*textPara {return &textPara {PdfRectangle :_aebfa ,_dagfb :_cgdc };};func (_fcge *shapesState )clearPath (){_fcge ._ecdd =nil ;_fcge ._eecc =false ;if _bgec {_cc .Log .Info ("\u0043\u004c\u0045A\u0052\u003a\u0020\u0073\u0073\u003d\u0025\u0073",_fcge );
};};func (_babb *stateStack )pop ()*textState {if _babb .empty (){return nil ;};_cbbe :=*(*_babb )[len (*_babb )-1];*_babb =(*_babb )[:len (*_babb )-1];return &_cbbe ;};func _cbcb (_bdec []pathSection ){if _febb < 0.0{return ;};if _ccde {_cc .Log .Info ("\u0067\u0072\u0061\u006e\u0075\u006c\u0061\u0072\u0069\u007a\u0065\u003a\u0020\u0025\u0064 \u0073u\u0062\u0070\u0061\u0074\u0068\u0020\u0073\u0065\u0063\u0074\u0069\u006f\u006e\u0073",len (_bdec ));
};for _cbfgd ,_ggcf :=range _bdec {for _eaafc ,_bgaaf :=range _ggcf ._gfcc {for _geca ,_eeba :=range _bgaaf ._bgga {_bgaaf ._bgga [_geca ]=_dg .Point {X :_ddad (_eeba .X ),Y :_ddad (_eeba .Y )};if _ccde {_cbaac :=_bgaaf ._bgga [_geca ];if !_cccd (_eeba ,_cbaac ){_dbege :=_dg .Point {X :_cbaac .X -_eeba .X ,Y :_cbaac .Y -_eeba .Y };
_a .Printf ("\u0025\u0034d \u002d\u0020\u00254\u0064\u0020\u002d\u0020%4d\u003a %\u002e\u0032\u0066\u0020\u2192\u0020\u0025.2\u0066\u0020\u0028\u0025\u0067\u0029\u000a",_cbfgd ,_eaafc ,_geca ,_eeba ,_cbaac ,_dbege );};};};};};};func _dccd (_acfe ,_cggcc float64 )bool {return _acfe /_fg .Max (_feed ,_cggcc )< _dgf };
func (_ccbeg *ruling )equals (_dggf *ruling )bool {return _ccbeg ._ecef ==_dggf ._ecef &&_ggab (_ccbeg ._dedc ,_dggf ._dedc )&&_ggab (_ccbeg ._debg ,_dggf ._debg )&&_ggab (_ccbeg ._abfa ,_dggf ._abfa );};func (_aded *wordBag )makeRemovals ()map[int ]map[*textWord ]struct{}{_feg :=make (map[int ]map[*textWord ]struct{},len (_aded ._fbdb ));
for _ccc :=range _aded ._fbdb {_feg [_ccc ]=make (map[*textWord ]struct{});};return _feg ;};func _agdd (_bbde float64 ,_afbdd int )int {if _afbdd ==0{_afbdd =1;};_abbf :=float64 (_afbdd );return int (_fg .Round (_bbde /_abbf )*_abbf );};type pathSection struct{_gfcc []*subpath ;
_g .Color ;};func (_bfgdf rulingList )splitSec ()[]rulingList {_ef .Slice (_bfgdf ,func (_ccdeb ,_adgde int )bool {_ageff ,_dgbae :=_bfgdf [_ccdeb ],_bfgdf [_adgde ];if _ageff ._debg !=_dgbae ._debg {return _ageff ._debg < _dgbae ._debg ;};return _ageff ._abfa < _dgbae ._abfa ;
});_ecdbf :=make (map[*ruling ]struct{},len (_bfgdf ));_ffag :=func (_fgbdg *ruling )rulingList {_bdfa :=rulingList {_fgbdg };_ecdbf [_fgbdg ]=struct{}{};for _ ,_dcabg :=range _bfgdf {if _ ,_dbde :=_ecdbf [_dcabg ];_dbde {continue ;};for _ ,_ddbcb :=range _bdfa {if _dcabg .alignsSec (_ddbcb ){_bdfa =append (_bdfa ,_dcabg );
_ecdbf [_dcabg ]=struct{}{};break ;};};};return _bdfa ;};_gfge :=[]rulingList {_ffag (_bfgdf [0])};for _ ,_dfabb :=range _bfgdf [1:]{if _ ,_aabc :=_ecdbf [_dfabb ];_aabc {continue ;};_gfge =append (_gfge ,_ffag (_dfabb ));};return _gfge ;};func (_adcb *ruling )intersects (_feggb *ruling )bool {_adbge :=(_adcb ._ecef ==_bcgg &&_feggb ._ecef ==_aagf )||(_feggb ._ecef ==_bcgg &&_adcb ._ecef ==_aagf );
_bcae :=func (_bfdd ,_fdbc *ruling )bool {return _bfdd ._debg -_bccea <=_fdbc ._dedc &&_fdbc ._dedc <=_bfdd ._abfa +_bccea ;};_gfdgb :=_bcae (_adcb ,_feggb );_faga :=_bcae (_feggb ,_adcb );if _ccde {_a .Printf ("\u0020\u0020\u0020\u0020\u0069\u006e\u0074\u0065\u0072\u0073\u0065\u0063\u0074\u0073\u003a\u0020\u0020\u006fr\u0074\u0068\u006f\u0067\u006f\u006e\u0061l\u003d\u0025\u0074\u0020\u006f\u0031\u003d\u0025\u0074\u0020\u006f2\u003d\u0025\u0074\u0020\u2192\u0020\u0025\u0074\u000a"+"\u0020\u0020\u0020 \u0020\u0020\u0020\u0076\u003d\u0025\u0073\u000a"+" \u0020\u0020\u0020\u0020\u0020\u0077\u003d\u0025\u0073\u000a",_adbge ,_gfdgb ,_faga ,_adbge &&_gfdgb &&_faga ,_adcb ,_feggb );
};return _adbge &&_gfdgb &&_faga ;};func (_ffacb *textTable )depth ()float64 {_dbcgd :=1e10;for _acdb :=0;_acdb < _ffacb ._ecfcf ;_acdb ++{_bdfg :=_ffacb .get (_acdb ,0);if _bdfg ==nil ||_bdfg ._dcdd {continue ;};_dbcgd =_fg .Min (_dbcgd ,_bdfg .depth ());
};return _dbcgd ;};func _dbfb (_gggf ,_ffbc _ec .PdfRectangle )bool {return _ffbc .Llx <=_gggf .Urx &&_gggf .Llx <=_ffbc .Urx ;};func (_dga *stateStack )push (_aff *textState ){_edf :=*_aff ;*_dga =append (*_dga ,&_edf )};type gridTiling struct{_ec .PdfRectangle ;
_cdcdg []float64 ;_bfag []float64 ;_bcdb map[float64 ]map[float64 ]gridTile ;};
// RangeOffset returns the TextMarks in `ma` that overlap text[start:end] in the extracted text.
// These are tm: `start` <= tm.Offset + len(tm.Text) && tm.Offset < `end` where
// `start` and `end` are offsets in the extracted text.
// NOTE: TextMarks can contain multiple characters. e.g. "ffi" for the ffi ligature so the first and
// last elements of the returned TextMarkArray may only partially overlap text[start:end].
func (_ded *TextMarkArray )RangeOffset (start ,end int )(*TextMarkArray ,error ){if _ded ==nil {return nil ,_b .New ("\u006da\u003d\u003d\u006e\u0069\u006c");};if end < start {return nil ,_a .Errorf ("\u0065\u006e\u0064\u0020\u003c\u0020\u0073\u0074\u0061\u0072\u0074\u002e\u0020\u0052\u0061n\u0067\u0065\u004f\u0066\u0066\u0073\u0065\u0074\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064\u002e\u0020\u0073\u0074\u0061\u0072t=\u0025\u0064\u0020\u0065\u006e\u0064\u003d\u0025\u0064\u0020",start ,end );
};_age :=len (_ded ._bccg );if _age ==0{return _ded ,nil ;};if start < _ded ._bccg [0].Offset {start =_ded ._bccg [0].Offset ;};if end > _ded ._bccg [_age -1].Offset +1{end =_ded ._bccg [_age -1].Offset +1;};_dbf :=_ef .Search (_age ,func (_edba int )bool {return _ded ._bccg [_edba ].Offset +len (_ded ._bccg [_edba ].Text )-1>=start });
if !(0<=_dbf &&_dbf < _age ){_cbbgg :=_a .Errorf ("\u004f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u002e\u0020\u0073\u0074\u0061\u0072\u0074\u003d%\u0064\u0020\u0069\u0053\u0074\u0061\u0072\u0074\u003d\u0025\u0064\u0020\u006c\u0065\u006e\u003d\u0025\u0064\u000a\u0009\u0066\u0069\u0072\u0073\u0074\u003d\u0025\u0076\u000a\u0009 \u006c\u0061\u0073\u0074\u003d%\u0076",start ,_dbf ,_age ,_ded ._bccg [0],_ded ._bccg [_age -1]);
return nil ,_cbbgg ;};_faeb :=_ef .Search (_age ,func (_eaccg int )bool {return _ded ._bccg [_eaccg ].Offset > end -1});if !(0<=_faeb &&_faeb < _age ){_geb :=_a .Errorf ("\u004f\u0075\u0074\u0020\u006f\u0066\u0020r\u0061\u006e\u0067e\u002e\u0020\u0065n\u0064\u003d%\u0064\u0020\u0069\u0045\u006e\u0064=\u0025d \u006c\u0065\u006e\u003d\u0025\u0064\u000a\u0009\u0066\u0069\u0072\u0073\u0074\u003d\u0025\u0076\u000a\u0009\u0020\u006c\u0061\u0073\u0074\u003d\u0025\u0076",end ,_faeb ,_age ,_ded ._bccg [0],_ded ._bccg [_age -1]);
return nil ,_geb ;};if _faeb <=_dbf {return nil ,_a .Errorf ("\u0069\u0045\u006e\u0064\u0020\u003c=\u0020\u0069\u0053\u0074\u0061\u0072\u0074\u003a\u0020\u0073\u0074\u0061\u0072\u0074\u003d\u0025\u0064\u0020\u0065\u006ed\u003d\u0025\u0064\u0020\u0069\u0053\u0074\u0061\u0072\u0074\u003d\u0025\u0064\u0020i\u0045n\u0064\u003d\u0025\u0064",start ,end ,_dbf ,_faeb );
};return &TextMarkArray {_bccg :_ded ._bccg [_dbf :_faeb ]},nil ;};func (_fdff paraList )findTables (_gdeff []gridTiling )[]*textTable {_fdff .addNeighbours ();_ef .Slice (_fdff ,func (_cdfb ,_agead int )bool {return _geefg (_fdff [_cdfb ],_fdff [_agead ])< 0});
var _dfff []*textTable ;if _gaeg {_edfab :=_fdff .findGridTables (_gdeff );_dfff =append (_dfff ,_edfab ...);};if _afa {_gegf :=_fdff .findTextTables ();_dfff =append (_dfff ,_gegf ...);};return _dfff ;};func (_cdaaf *textWord )addDiacritic (_eecg string ){_bfea :=_cdaaf ._baegf [len (_cdaaf ._baegf )-1];
_bfea ._fcbe +=_eecg ;_bfea ._fcbe =_fc .NFKC .String (_bfea ._fcbe );};func (_cbdee paraList )inTile (_eaag gridTile )paraList {var _dbfae paraList ;for _ ,_ggffe :=range _cbdee {if _eaag .contains (_ggffe .PdfRectangle ){_dbfae =append (_dbfae ,_ggffe );
};};if _gdbf {_a .Printf ("\u0020 \u0020\u0069\u006e\u0054i\u006c\u0065\u003a\u0020\u0020%\u0073 \u0069n\u0073\u0069\u0064\u0065\u003d\u0025\u0064\n",_eaag ,len (_dbfae ));for _ceegc ,_acfdg :=range _dbfae {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_ceegc ,_acfdg );
};_a .Println ("");};return _dbfae ;};func (_beff *textObject )setTextMatrix (_bbdf []float64 ){if len (_bbdf )!=6{_cc .Log .Debug ("\u0045\u0052\u0052OR\u003a\u0020\u006c\u0065\u006e\u0028\u0066\u0029\u0020\u0021\u003d\u0020\u0036\u0020\u0028\u0025\u0064\u0029",len (_bbdf ));
return ;};_fbe ,_aceg ,_cbb ,_acc ,_gdb ,_cbfd :=_bbdf [0],_bbdf [1],_bbdf [2],_bbdf [3],_bbdf [4],_bbdf [5];_beff ._aebf =_dg .NewMatrix (_fbe ,_aceg ,_cbb ,_acc ,_gdb ,_cbfd );_beff ._ade =_beff ._aebf ;};func (_ffdc rulingList )bbox ()_ec .PdfRectangle {var _efgc _ec .PdfRectangle ;
if len (_ffdc )==0{_cc .Log .Error ("r\u0075\u006c\u0069\u006e\u0067\u004ci\u0073\u0074\u002e\u0062\u0062\u006f\u0078\u003a\u0020n\u006f\u0020\u0072u\u006ci\u006e\u0067\u0073");return _ec .PdfRectangle {};};if _ffdc [0]._ecef ==_aagf {_efgc .Llx ,_efgc .Urx =_ffdc .secMinMax ();
_efgc .Lly ,_efgc .Ury =_ffdc .primMinMax ();}else {_efgc .Llx ,_efgc .Urx =_ffdc .primMinMax ();_efgc .Lly ,_efgc .Ury =_ffdc .secMinMax ();};return _efgc ;};func (_cgee *textPara )toCellTextMarks (_addd *int )[]TextMark {var _bcbd []TextMark ;for _cfd ,_edff :=range _cgee ._dagfb {_ccggf :=_edff .toTextMarks (_addd );
_gfdb :=_dbfa &&_edff .endsInHyphen ()&&_cfd !=len (_cgee ._dagfb )-1;if _gfdb {_ccggf =_bebff (_ccggf ,_addd );};_bcbd =append (_bcbd ,_ccggf ...);if !(_gfdb ||_cfd ==len (_cgee ._dagfb )-1){_bcbd =_babg (_bcbd ,_addd ,_eecb (_edff ._agfa ,_cgee ._dagfb [_cfd +1]._agfa ));
};};return _bcbd ;};func (_aed *wordBag )allWords ()[]*textWord {var _aacf []*textWord ;for _ ,_fbgge :=range _aed ._fbdb {_aacf =append (_aacf ,_fbgge ...);};return _aacf ;};func (_efbe *wordBag )highestWord (_faff int ,_daaf ,_gcacd float64 )*textWord {for _ ,_aafe :=range _efbe ._fbdb [_faff ]{if _daaf <=_aafe ._beef &&_aafe ._beef <=_gcacd {return _aafe ;
};};return nil ;};func _adec (_efc _dg .Point )_dg .Matrix {return _dg .TranslationMatrix (_efc .X ,_efc .Y )};func (_cffe rulingList )log (_cebdc string ){if !_ccde {return ;};_cc .Log .Info ("\u0023\u0023\u0023\u0020\u0025\u0031\u0030\u0073\u003a\u0020\u0076\u0065c\u0073\u003d\u0025\u0073",_cebdc ,_cffe .String ());
for _fbedf ,_cgga :=range _cffe {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_fbedf ,_cgga .String ());};};func (_afdf paraList )computeEBBoxes (){if _dbegf {_cc .Log .Info ("\u0063o\u006dp\u0075\u0074\u0065\u0045\u0042\u0042\u006f\u0078\u0065\u0073\u003a");
};for _ ,_abgg :=range _afdf {_abgg ._abcge =_abgg .PdfRectangle ;};_agbc :=_afdf .yNeighbours (0);for _ecgd ,_ffgg :=range _afdf {_gcfg :=_ffgg ._abcge ;_gbfb ,_baabg :=-1.0e9,+1.0e9;for _ ,_ddfb :=range _agbc [_ffgg ]{_gfeff :=_afdf [_ddfb ]._abcge ;
if _gfeff .Urx < _gcfg .Llx {_gbfb =_fg .Max (_gbfb ,_gfeff .Urx );}else if _gcfg .Urx < _gfeff .Llx {_baabg =_fg .Min (_baabg ,_gfeff .Llx );};};for _caca ,_gfg :=range _afdf {_cgbc :=_gfg ._abcge ;if _ecgd ==_caca ||_cgbc .Ury > _gcfg .Lly {continue ;
};if _gbfb <=_cgbc .Llx &&_cgbc .Llx < _gcfg .Llx {_gcfg .Llx =_cgbc .Llx ;}else if _cgbc .Urx <=_baabg &&_gcfg .Urx < _cgbc .Urx {_gcfg .Urx =_cgbc .Urx ;};};if _dbegf {_a .Printf ("\u0025\u0034\u0064\u003a %\u0036\u002e\u0032\u0066\u2192\u0025\u0036\u002e\u0032\u0066\u0020\u0025\u0071\u000a",_ecgd ,_ffgg ._abcge ,_gcfg ,_fdba (_ffgg .text (),50));
};_ffgg ._abcge =_gcfg ;};if _gddg {for _ ,_gfgg :=range _afdf {_gfgg .PdfRectangle =_gfgg ._abcge ;};};};func _gfefg (_beba int ,_gccab map[int ][]float64 )([]int ,int ){_dfgege :=make ([]int ,_beba );_fdcf :=0;for _begg :=0;_begg < _beba ;_begg ++{_dfgege [_begg ]=_fdcf ;
_fdcf +=len (_gccab [_begg ])+1;};return _dfgege ,_fdcf ;};func (_egae rulingList )comp (_cbagd ,_cbegd int )bool {_aacfc ,_efac :=_egae [_cbagd ],_egae [_cbegd ];_bcdc ,_ebgb :=_aacfc ._ecef ,_efac ._ecef ;if _bcdc !=_ebgb {return _bcdc > _ebgb ;};if _bcdc ==_ggad {return false ;
};_dfcc :=func (_fgdeb bool )bool {if _bcdc ==_aagf {return _fgdeb ;};return !_fgdeb ;};_agdfe ,_gbfe :=_aacfc ._dedc ,_efac ._dedc ;if _agdfe !=_gbfe {return _dfcc (_agdfe > _gbfe );};_agdfe ,_gbfe =_aacfc ._debg ,_efac ._debg ;if _agdfe !=_gbfe {return _dfcc (_agdfe < _gbfe );
};return _dfcc (_aacfc ._abfa < _efac ._abfa );};func (_fcace *wordBag )empty (_afe int )bool {_ ,_afbd :=_fcace ._fbdb [_afe ];return !_afbd };func (_fcgf *subpath )last ()_dg .Point {return _fcgf ._bgga [len (_fcgf ._bgga )-1]};func _fdba (_facad string ,_bdgaa int )string {if len (_facad )< _bdgaa {return _facad ;
};return _facad [:_bdgaa ];};func (_gbaac paraList )extractTables (_cebcb []gridTiling )paraList {if _gdbf {_cc .Log .Debug ("\u0065\u0078\u0074r\u0061\u0063\u0074\u0054\u0061\u0062\u006c\u0065\u0073\u003d\u0025\u0064\u0020\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u0078\u003d\u003d\u003d\u003d=\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d",len (_gbaac ));
};if len (_gbaac )< _dgeb {return _gbaac ;};_babgc :=_gbaac .findTables (_cebcb );if _gdbf {_cc .Log .Info ("c\u006f\u006d\u0062\u0069\u006e\u0065d\u0020\u0074\u0061\u0062\u006c\u0065s\u0020\u0025\u0064\u0020\u003d\u003d\u003d=\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d=\u003d",len (_babgc ));
for _afcdg ,_gaebe :=range _babgc {_gaebe .log (_a .Sprintf ("c\u006f\u006d\u0062\u0069\u006e\u0065\u0064\u0020\u0025\u0064",_afcdg ));};};return _gbaac .applyTables (_babgc );};func _efee (_dcdb map[int ][]float64 ){if len (_dcdb )<=1{return ;};_fdcb :=_cbcfa (_dcdb );
if _gdbf {_cc .Log .Info ("\u0066i\u0078C\u0065\u006c\u006c\u0073\u003a \u006b\u0065y\u0073\u003d\u0025\u002b\u0076",_fdcb );};var _ffbcg ,_bgab int ;for _ffbcg ,_bgab =range _fdcb {if _dcdb [_bgab ]!=nil {break ;};};for _fbca ,_gbaf :=range _fdcb [_ffbcg :]{_cagg :=_dcdb [_gbaf ];
if _cagg ==nil {continue ;};if _gdbf {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u006b\u0030\u003d\u0025\u0064\u0020\u006b1\u003d\u0025\u0064\u000a",_ffbcg +_fbca ,_bgab ,_gbaf );};_ggff :=_dcdb [_gbaf ];if _ggff [len (_ggff )-1]> _cagg [0]{_ggff [len (_ggff )-1]=_cagg [0];
_dcdb [_bgab ]=_ggff ;};_bgab =_gbaf ;};};func (_fcac *textObject )moveText (_gee ,_eeb float64 ){_fcac .moveLP (_gee ,_eeb )};func _gded (_cbdg _dg .Point )*subpath {return &subpath {_bgga :[]_dg .Point {_cbdg }}};func (_dbgg rulingList )intersections ()map[int ]intSet {var _aeag ,_ccca []int ;
for _fbabb ,_efcg :=range _dbgg {switch _efcg ._ecef {case _bcgg :_aeag =append (_aeag ,_fbabb );case _aagf :_ccca =append (_ccca ,_fbabb );};};if len (_aeag )< _babfg +1||len (_ccca )< _ceafg +1{return nil ;};if len (_aeag )+len (_ccca )> _ebabe {_cc .Log .Debug ("\u0069\u006e\u0074\u0065\u0072\u0073e\u0063\u0074\u0069\u006f\u006e\u0073\u003a\u0020\u0054\u004f\u004f\u0020\u004d\u0041\u004e\u0059\u0020\u0072\u0075\u006ci\u006e\u0067\u0073\u0020\u0076\u0065\u0063\u0073\u003d\u0025\u0064\u0020\u003d\u0020%\u0064 \u0078\u0020\u0025\u0064",len (_dbgg ),len (_aeag ),len (_ccca ));
return nil ;};_agga :=make (map[int ]intSet ,len (_aeag )+len (_ccca ));for _ ,_gccg :=range _aeag {for _ ,_afcaf :=range _ccca {if _dbgg [_gccg ].intersects (_dbgg [_afcaf ]){if _ ,_cbab :=_agga [_gccg ];!_cbab {_agga [_gccg ]=make (intSet );};if _ ,_bede :=_agga [_afcaf ];
!_bede {_agga [_afcaf ]=make (intSet );};_agga [_gccg ].add (_afcaf );_agga [_afcaf ].add (_gccg );};};};return _agga ;};func (_bfgd rulingList )connections (_ecdef map[int ]intSet ,_ffgdc int )intSet {_ffgbg :=make (intSet );_adde :=make (intSet );var _efdg func (int );
_efdg =func (_cfdd int ){if !_adde .has (_cfdd ){_adde .add (_cfdd );for _ffea :=range _bfgd {if _ecdef [_ffea ].has (_cfdd ){_ffgbg .add (_ffea );};};for _bceg :=range _bfgd {if _ffgbg .has (_bceg ){_efdg (_bceg );};};};};_efdg (_ffgdc );return _ffgbg ;
};
// ExtractPageImages returns the image contents of the page extractor, including data
// and position, size information for each image.
// A set of options to control page image extraction can be passed in. The options
// parameter can be nil for the default options. By default, inline stencil masks
// are not extracted.
func (_fbf *Extractor )ExtractPageImages (options *ImageExtractOptions )(*PageImages ,error ){_dge :=&imageExtractContext {_ab :options };_ffd :=_dge .extractContentStreamImages (_fbf ._fbg ,_fbf ._fcf );if _ffd !=nil {return nil ,_ffd ;};return &PageImages {Images :_dge ._gde },nil ;
};const _bade =10;func (_gcdg *textTable )reduce ()*textTable {_ccdb :=make ([]int ,0,_gcdg ._bbgb );_dfdd :=make ([]int ,0,_gcdg ._ecfcf );for _gcdfd :=0;_gcdfd < _gcdg ._bbgb ;_gcdfd ++{if !_gcdg .emptyRow (_gcdfd ){_ccdb =append (_ccdb ,_gcdfd );};};
for _becb :=0;_becb < _gcdg ._ecfcf ;_becb ++{if !_gcdg .emptyColumn (_becb ){_dfdd =append (_dfdd ,_becb );};};if len (_ccdb )==_gcdg ._bbgb &&len (_dfdd )==_gcdg ._ecfcf {return _gcdg ;};_gfeb :=textTable {_bgdge :_gcdg ._bgdge ,_ecfcf :len (_dfdd ),_bbgb :len (_ccdb ),_fdbdg :make (map[uint64 ]*textPara ,len (_dfdd )*len (_ccdb ))};
if _gdbf {_cc .Log .Info ("\u0072\u0065\u0064\u0075ce\u003a\u0020\u0025\u0064\u0078\u0025\u0064\u0020\u002d\u003e\u0020\u0025\u0064\u0078%\u0064",_gcdg ._ecfcf ,_gcdg ._bbgb ,len (_dfdd ),len (_ccdb ));_cc .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0043\u006f\u006c\u0073\u003a\u0020\u0025\u002b\u0076",_dfdd );
_cc .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0052\u006f\u0077\u0073\u003a\u0020\u0025\u002b\u0076",_ccdb );};for _fbgdf ,_fgbde :=range _ccdb {for _fegae ,_face :=range _dfdd {_bdga :=_gcdg .get (_face ,_fgbde );if _bdga ==nil {continue ;};if _gdbf {_a .Printf ("\u0020 \u0025\u0032\u0064\u002c \u0025\u0032\u0064\u0020\u0028%\u0032d\u002c \u0025\u0032\u0064\u0029\u0020\u0025\u0071\n",_fegae ,_fbgdf ,_face ,_fgbde ,_fdba (_bdga .text (),50));
};_gfeb .put (_fegae ,_fbgdf ,_bdga );};};return &_gfeb ;};
// String returns a description of `state`.
func (_fge *textState )String ()string {_dgg :="\u005bN\u004f\u0054\u0020\u0053\u0045\u0054]";if _fge ._fgd !=nil {_dgg =_fge ._fgd .BaseFont ();};return _a .Sprintf ("\u0074\u0063\u003d\u0025\u002e\u0032\u0066\u0020\u0074\u0077\u003d\u0025\u002e\u0032\u0066 \u0074f\u0073\u003d\u0025\u002e\u0032\u0066\u0020\u0066\u006f\u006e\u0074\u003d\u0025\u0071",_fge ._faea ,_fge ._bca ,_fge ._eab ,_dgg );
};func _cabf (_bggb *Extractor ,_abf *_ec .PdfPageResources ,_ecd _af .GraphicsState ,_fdge *textState ,_cdef *stateStack )*textObject {return &textObject {_faa :_bggb ,_bed :_abf ,_abc :_ecd ,_deac :_cdef ,_gbad :_fdge ,_aebf :_dg .IdentityMatrix (),_ade :_dg .IdentityMatrix ()};
};func (_efcd *shapesState )devicePoint (_aacb ,_fbaa float64 )_dg .Point {_abff :=_efcd ._ccgg .Mult (_efcd ._dfaa );_aacb ,_fbaa =_abff .Transform (_aacb ,_fbaa );return _dg .NewPoint (_aacb ,_fbaa );};
// ImageExtractOptions contains options for controlling image extraction from
// PDF pages.
type ImageExtractOptions struct{IncludeInlineStencilMasks bool ;};
// PageText represents the layout of text on a device page.
type PageText struct{_dggc []*textMark ;_ddab string ;_dgaa []TextMark ;_efd []TextTable ;_gef _ec .PdfRectangle ;_bdea []pathSection ;_fda []pathSection ;};
// String returns a human readable description of `vecs`.
func (_cbccd rulingList )String ()string {if len (_cbccd )==0{return "\u007b \u0045\u004d\u0050\u0054\u0059\u0020}";};_bgbdf ,_ecgdc :=_cbccd .vertsHorzs ();_cffeg :=len (_bgbdf );_ffbb :=len (_ecgdc );if _cffeg ==0||_ffbb ==0{return _a .Sprintf ("\u007b%\u0064\u0020\u0078\u0020\u0025\u0064}",_cffeg ,_ffbb );
};_ecdb :=_ec .PdfRectangle {Llx :_bgbdf [0]._dedc ,Urx :_bgbdf [_cffeg -1]._dedc ,Lly :_ecgdc [_ffbb -1]._dedc ,Ury :_ecgdc [0]._dedc };return _a .Sprintf ("\u007b\u0025d\u0020\u0078\u0020%\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u007d",_cffeg ,_ffbb ,_ecdb );
};func _adceb (_bdad *PageText )error {_bdbd :=_ba .GetLicenseKey ();if _bdbd !=nil &&_bdbd .IsLicensed ()||_efg {return nil ;};_a .Printf ("\u0055\u006e\u006c\u0069\u0063\u0065\u006e\u0073\u0065\u0064\u0020c\u006f\u0070\u0079\u0020\u006f\u0066\u0020\u0055\u006e\u0069P\u0044\u0046\u000a");
_a .Println ("-\u0020\u0047\u0065\u0074\u0020\u0061\u0020\u0066\u0072e\u0065\u0020\u0074\u0072\u0069\u0061\u006c l\u0069\u0063\u0065\u006es\u0065\u0020\u006f\u006e\u0020\u0068\u0074\u0074\u0070s:\u002f\u002fu\u006e\u0069\u0064\u006f\u0063\u002e\u0069\u006f");
return _b .New ("\u0075\u006e\u0069\u0070d\u0066\u0020\u006c\u0069\u0063\u0065\u006e\u0073\u0065\u0020c\u006fd\u0065\u0020\u0072\u0065\u0071\u0075\u0069r\u0065\u0064");};func (_eaab *textTable )get (_cdbe ,_ccfg int )*textPara {return _eaab ._fdbdg [_aabdc (_cdbe ,_ccfg )]};
func _egfc (_acca ,_afef _ec .PdfRectangle )_ec .PdfRectangle {return _ec .PdfRectangle {Llx :_fg .Min (_acca .Llx ,_afef .Llx ),Lly :_fg .Min (_acca .Lly ,_afef .Lly ),Urx :_fg .Max (_acca .Urx ,_afef .Urx ),Ury :_fg .Max (_acca .Ury ,_afef .Ury )};};
func _ecbf (_fccf []rulingList )(rulingList ,rulingList ){var _abbd rulingList ;for _ ,_aefa :=range _fccf {_abbd =append (_abbd ,_aefa ...);};return _abbd .vertsHorzs ();};type rectRuling struct{_dffbd rulingKind ;_egcc markKind ;_g .Color ;_ec .PdfRectangle ;
};func (_beec *textObject )setCharSpacing (_eac float64 ){if _beec ==nil {return ;};_beec ._gbad ._faea =_eac ;if _ffda {_cc .Log .Info ("\u0073\u0065t\u0043\u0068\u0061\u0072\u0053\u0070\u0061\u0063\u0069\u006e\u0067\u003a\u0020\u0025\u002e\u0032\u0066\u0020\u0073\u0074\u0061\u0074e=\u0025\u0073",_eac ,_beec ._gbad .String ());
};};func (_afbdg *textTable )compositeRowCorridors ()map[int ][]float64 {_agba :=make (map[int ][]float64 ,_afbdg ._bbgb );if _gdbf {_cc .Log .Info ("c\u006f\u006d\u0070\u006f\u0073\u0069t\u0065\u0052\u006f\u0077\u0043\u006f\u0072\u0072\u0069d\u006f\u0072\u0073:\u0020h\u003d\u0025\u0064",_afbdg ._bbgb );
};for _faebc :=1;_faebc < _afbdg ._bbgb ;_faebc ++{var _eade []compositeCell ;for _cggec :=0;_cggec < _afbdg ._ecfcf ;_cggec ++{if _fccdg ,_abag :=_afbdg ._gdag [_aabdc (_cggec ,_faebc )];_abag {_eade =append (_eade ,_fccdg );};};if len (_eade )==0{continue ;
};_gbeac :=_efcbfaf (_eade );_agba [_faebc ]=_gbeac ;if _gdbf {_a .Printf ("\u0020\u0020\u0020\u0025\u0032\u0064\u003a\u0020\u00256\u002e\u0032\u0066\u000a",_faebc ,_gbeac );};};return _agba ;};func (_cbed *shapesState )addPoint (_acff ,_cafb float64 ){_aacc :=_cbed .establishSubpath ();
_ffdf :=_cbed .devicePoint (_acff ,_cafb );if _aacc ==nil {_cbed ._eecc =true ;_cbed ._cgd =_ffdf ;}else {_aacc .add (_ffdf );};};func (_eccc *wordBag )removeDuplicates (){if _bcf {_cc .Log .Info ("r\u0065m\u006f\u0076\u0065\u0044\u0075\u0070\u006c\u0069c\u0061\u0074\u0065\u0073: \u0025\u0071",_eccc .text ());
};for _ ,_beeb :=range _eccc .depthIndexes (){if len (_eccc ._fbdb [_beeb ])==0{continue ;};_gebe :=_eccc ._fbdb [_beeb ][0];_gddbg :=_edcg *_gebe ._cgba ;_cefc :=_gebe ._beef ;for _ ,_bafe :=range _eccc .depthBand (_cefc ,_cefc +_gddbg ){_ddgg :=map[*textWord ]struct{}{};
_bcef :=_eccc ._fbdb [_bafe ];for _ ,_ddfde :=range _bcef {if _ ,_bdfe :=_ddgg [_ddfde ];_bdfe {continue ;};for _ ,_eaaf :=range _bcef {if _ ,_ffgd :=_ddgg [_eaaf ];_ffgd {continue ;};if _eaaf !=_ddfde &&_eaaf ._aaaf ==_ddfde ._aaaf &&_fg .Abs (_eaaf .Llx -_ddfde .Llx )< _gddbg &&_fg .Abs (_eaaf .Urx -_ddfde .Urx )< _gddbg &&_fg .Abs (_eaaf .Lly -_ddfde .Lly )< _gddbg &&_fg .Abs (_eaaf .Ury -_ddfde .Ury )< _gddbg {_ddgg [_eaaf ]=struct{}{};
};};};if len (_ddgg )> 0{_egaff :=0;for _ ,_fcfbf :=range _bcef {if _ ,_ebecc :=_ddgg [_fcfbf ];!_ebecc {_bcef [_egaff ]=_fcfbf ;_egaff ++;};};_eccc ._fbdb [_bafe ]=_bcef [:len (_bcef )-len (_ddgg )];if len (_eccc ._fbdb [_bafe ])==0{delete (_eccc ._fbdb ,_bafe );
};};};};};func _fffeg (_dfcf ,_dbcg bounded )float64 {_dgga :=_acbd (_dfcf ,_dbcg );if !_bdbcg (_dgga ){return _dgga ;};return _cggc (_dfcf ,_dbcg );};func _cbcfa (_gadg map[int ][]float64 )[]int {_dage :=make ([]int ,len (_gadg ));_eddd :=0;for _ebgc :=range _gadg {_dage [_eddd ]=_ebgc ;
_eddd ++;};_ef .Ints (_dage );return _dage ;};func (_aacd rulingList )tidied (_cbaa string )rulingList {_bcff :=_aacd .removeDuplicates ();_bcff .log ("\u0075n\u0069\u0071\u0075\u0065\u0073");_adgg :=_bcff .snapToGroups ();if _adgg ==nil {return nil ;};
_adgg .sort ();if _ccde {_cc .Log .Info ("\u0074\u0069\u0064i\u0065\u0064\u003a\u0020\u0025\u0071\u0020\u0076\u0065\u0063\u0073\u003d\u0025\u0064\u0020\u0075\u006e\u0069\u0071\u0075\u0065\u0073\u003d\u0025\u0064\u0020\u0063\u006f\u0061l\u0065\u0073\u0063\u0065\u0064\u003d\u0025\u0064",_cbaa ,len (_aacd ),len (_bcff ),len (_adgg ));
};_adgg .log ("\u0063o\u0061\u006c\u0065\u0073\u0063\u0065d");return _adgg ;};func (_eede *shapesState )establishSubpath ()*subpath {_gdcf ,_gggc :=_eede .lastpointEstablished ();if !_gggc {_eede ._ecdd =append (_eede ._ecdd ,_gded (_gdcf ));};if len (_eede ._ecdd )==0{return nil ;
};_eede ._eecc =false ;return _eede ._ecdd [len (_eede ._ecdd )-1];};func _geef (_cbff []*wordBag )[]*wordBag {if len (_cbff )<=1{return _cbff ;};if _bdcb {_cc .Log .Info ("\u006d\u0065\u0072\u0067\u0065\u0057\u006f\u0072\u0064B\u0061\u0067\u0073\u003a");
};_ef .Slice (_cbff ,func (_gbe ,_adee int )bool {_dgaaf ,_fbfd :=_cbff [_gbe ],_cbff [_adee ];_agfd :=_dgaaf .Width ()*_dgaaf .Height ();_acea :=_fbfd .Width ()*_fbfd .Height ();if _agfd !=_acea {return _agfd > _acea ;};if _dgaaf .Height ()!=_fbfd .Height (){return _dgaaf .Height ()> _fbfd .Height ();
};return _gbe < _adee ;});var _dbae []*wordBag ;_cbef :=make (intSet );for _fgce :=0;_fgce < len (_cbff );_fgce ++{if _cbef .has (_fgce ){continue ;};_ffae :=_cbff [_fgce ];for _ddb :=_fgce +1;_ddb < len (_cbff );_ddb ++{if _cbef .has (_fgce ){continue ;
};_aagad :=_cbff [_ddb ];_debaf :=_ffae .PdfRectangle ;_debaf .Llx -=_ffae ._dde ;if _eadg (_debaf ,_aagad .PdfRectangle ){_ffae .absorb (_aagad );_cbef .add (_ddb );};};_dbae =append (_dbae ,_ffae );};if len (_cbff )!=len (_dbae )+len (_cbef ){_cc .Log .Error ("\u006d\u0065\u0072ge\u0057\u006f\u0072\u0064\u0042\u0061\u0067\u0073\u003a \u0025d\u2192%\u0064 \u0061\u0062\u0073\u006f\u0072\u0062\u0065\u0064\u003d\u0025\u0064",len (_cbff ),len (_dbae ),len (_cbef ));
};return _dbae ;};type bounded interface{bbox ()_ec .PdfRectangle };type fontEntry struct{_abb *_ec .PdfFont ;_dedda int64 ;};const _fbeg =1.0/1000.0;func _adbg (_ceaf bounded )float64 {return -_ceaf .bbox ().Lly };func (_ggda *subpath )isQuadrilateral ()bool {if len (_ggda ._bgga )< 4||len (_ggda ._bgga )> 5{return false ;
};if len (_ggda ._bgga )==5{_dcbg :=_ggda ._bgga [0];_gcecc :=_ggda ._bgga [4];if _dcbg .X !=_gcecc .X ||_dcbg .Y !=_gcecc .Y {return false ;};};return true ;};func (_acab rulingList )merge ()*ruling {_beage :=_acab [0]._dedc ;_egaca :=_acab [0]._debg ;
_dgcdc :=_acab [0]._abfa ;for _ ,_edcf :=range _acab [1:]{_beage +=_edcf ._dedc ;if _edcf ._debg < _egaca {_egaca =_edcf ._debg ;};if _edcf ._abfa > _dgcdc {_dgcdc =_edcf ._abfa ;};};_baggf :=&ruling {_ecef :_acab [0]._ecef ,_dcfg :_acab [0]._dcfg ,Color :_acab [0].Color ,_dedc :_beage /float64 (len (_acab )),_debg :_egaca ,_abfa :_dgcdc };
if _fgba {_cc .Log .Info ("\u006de\u0072g\u0065\u003a\u0020\u0025\u0032d\u0020\u0076e\u0063\u0073\u0020\u0025\u0073",len (_acab ),_baggf );for _gdfac ,_fede :=range _acab {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_gdfac ,_fede );};
};return _baggf ;};
// Extractor stores and offers functionality for extracting content from PDF pages.
type Extractor struct{_fbg string ;_fcf *_ec .PdfPageResources ;_ca _ec .PdfRectangle ;_cd map[string ]fontEntry ;_cb map[string ]textResult ;_fbgg int64 ;_bf int ;};func (_aagbf *textPara )text ()string {_ffbe :=new (_fb .Buffer );_aagbf .writeText (_ffbe );
return _ffbe .String ();};func (_bge *wordBag )depthBand (_bbbc ,_bda float64 )[]int {if len (_bge ._fbdb )==0{return nil ;};return _bge .depthRange (_bge .getDepthIdx (_bbbc ),_bge .getDepthIdx (_bda ));};type paraList []*textPara ;
// String returns a description of `tm`.
func (_ebegg *textMark )String ()string {return _a .Sprintf ("\u0025\u002e\u0032f \u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065\u003d\u0025\u002e\u0032\u0066\u0020\u0022\u0025\u0073\u0022",_ebegg .PdfRectangle ,_ebegg ._dbce ,_ebegg ._fcbe );};func (_bggg *textObject )checkOp (_dbc *_af .ContentStreamOperation ,_gff int ,_gbgb bool )(_baec bool ,_efeg error ){if _bggg ==nil {var _fbcg []_fd .PdfObject ;
if _gff > 0{_fbcg =_dbc .Params ;if len (_fbcg )> _gff {_fbcg =_fbcg [:_gff ];};};_cc .Log .Debug ("\u0025\u0023q \u006f\u0070\u0065r\u0061\u006e\u0064\u0020out\u0073id\u0065\u0020\u0074\u0065\u0078\u0074\u002e p\u0061\u0072\u0061\u006d\u0073\u003d\u0025+\u0076",_dbc .Operand ,_fbcg );
};if _gff >=0{if len (_dbc .Params )!=_gff {if _gbgb {_efeg =_b .New ("\u0069n\u0063\u006f\u0072\u0072e\u0063\u0074\u0020\u0070\u0061r\u0061m\u0065t\u0065\u0072\u0020\u0063\u006f\u0075\u006et");};_cc .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0025\u0023\u0071\u0020\u0073\u0068\u006f\u0075\u006c\u0064\u0020h\u0061\u0076\u0065\u0020\u0025\u0064\u0020i\u006e\u0070\u0075\u0074\u0020\u0070\u0061\u0072\u0061\u006d\u0073,\u0020\u0067\u006f\u0074\u0020\u0025\u0064\u0020\u0025\u002b\u0076",_dbc .Operand ,_gff ,len (_dbc .Params ),_dbc .Params );
return false ,_efeg ;};};return true ,nil ;};type textMark struct{_ec .PdfRectangle ;_ddcb int ;_fcbe string ;_fbfbe string ;_cccg *_ec .PdfFont ;_dbce float64 ;_efaa float64 ;_feea _dg .Matrix ;_afg _dg .Point ;_adbb _ec .PdfRectangle ;_cdg _g .Color ;
_adgc _g .Color ;};func (_cbabb *textPara )taken ()bool {return _cbabb ==nil ||_cbabb ._ebgd };func _efafa (_cbg *textWord ,_dffb float64 ,_faag ,_eecf rulingList )*wordBag {_edbab :=_aecf (_cbg ._beef );_egf :=[]*textWord {_cbg };_gega :=wordBag {_fbdb :map[int ][]*textWord {_edbab :_egf },PdfRectangle :_cbg .PdfRectangle ,_dde :_cbg ._cgba ,_ccaae :_dffb ,_ddaa :_faag ,_efb :_eecf };
return &_gega ;};var _ged =TextMark {Text :"\u005b\u0058\u005d",Original :"\u0020",Meta :true ,FillColor :_g .White ,StrokeColor :_g .White };func (_fgfb *wordBag )getDepthIdx (_badd float64 )int {_adg :=_fgfb .depthIndexes ();_ccbd :=_aecf (_badd );if _ccbd < _adg [0]{return _adg [0];
};if _ccbd > _adg [len (_adg )-1]{return _adg [len (_adg )-1];};return _ccbd ;};func (_aef *imageExtractContext )processOperand (_cf *_af .ContentStreamOperation ,_da _af .GraphicsState ,_aa *_ec .PdfPageResources )error {if _cf .Operand =="\u0042\u0049"&&len (_cf .Params )==1{_dd ,_cg :=_cf .Params [0].(*_af .ContentStreamInlineImage );
if !_cg {return nil ;};if _eff ,_bd :=_fd .GetBoolVal (_dd .ImageMask );_bd {if _eff &&!_aef ._ab .IncludeInlineStencilMasks {return nil ;};};return _aef .extractInlineImage (_dd ,_da ,_aa );}else if _cf .Operand =="\u0044\u006f"&&len (_cf .Params )==1{_gf ,_fe :=_fd .GetName (_cf .Params [0]);
if !_fe {_cc .Log .Debug ("E\u0052\u0052\u004f\u0052\u003a\u0020\u0054\u0079\u0070\u0065");return _ac ;};_ ,_bcc :=_aa .GetXObjectByName (*_gf );switch _bcc {case _ec .XObjectTypeImage :return _aef .extractXObjectImage (_gf ,_da ,_aa );case _ec .XObjectTypeForm :return _aef .extractFormImages (_gf ,_da ,_aa );
};};return nil ;};type textLine struct{_ec .PdfRectangle ;_agfa float64 ;_aece []*textWord ;_deab float64 ;};type gridTile struct{_ec .PdfRectangle ;_bggdg ,_gdad ,_ebabg ,_abfb bool ;};func _eadg (_dbca ,_gfcg _ec .PdfRectangle )bool {return _dbca .Llx <=_gfcg .Llx &&_gfcg .Urx <=_dbca .Urx &&_dbca .Lly <=_gfcg .Lly &&_gfcg .Ury <=_dbca .Ury ;
};func (_fgfg *stateStack )top ()*textState {if _fgfg .empty (){return nil ;};return (*_fgfg )[_fgfg .size ()-1];};var _afdg =map[markKind ]string {_gdeg :"\u0073\u0074\u0072\u006f\u006b\u0065",_fbac :"\u0066\u0069\u006c\u006c",_afec :"\u0061u\u0067\u006d\u0065\u006e\u0074"};
func (_eecd rulingList )secMinMax ()(float64 ,float64 ){_afddg ,_geab :=_eecd [0]._debg ,_eecd [0]._abfa ;for _ ,_bgdd :=range _eecd [1:]{if _bgdd ._debg < _afddg {_afddg =_bgdd ._debg ;};if _bgdd ._abfa > _geab {_geab =_bgdd ._abfa ;};};return _afddg ,_geab ;
};func _ffdfd (_addg []*textMark ,_fbaf _ec .PdfRectangle ,_bec rulingList ,_ebf []gridTiling )paraList {_cc .Log .Trace ("\u006d\u0061\u006b\u0065\u0054\u0065\u0078\u0074\u0050\u0061\u0067\u0065\u003a \u0025\u0064\u0020\u0065\u006c\u0065m\u0065\u006e\u0074\u0073\u0020\u0070\u0061\u0067\u0065\u0053\u0069\u007a\u0065=\u0025\u002e\u0032\u0066",len (_addg ),_fbaf );
if len (_addg )==0{return nil ;};_bfaf :=_eaaff (_addg ,_fbaf );if len (_bfaf )==0{return nil ;};_bec .log ("\u006d\u0061\u006be\u0054\u0065\u0078\u0074\u0050\u0061\u0067\u0065");_baabb ,_bbgca :=_bec .vertsHorzs ();_cefb :=_adf (_bfaf ,_fbaf .Ury ,_baabb ,_bbgca );
_gccc :=_eeeec (_cefb ,_fbaf .Ury ,_baabb ,_bbgca );_gccc =_geef (_gccc );_gege :=make (paraList ,0,len (_gccc ));for _ ,_cecc :=range _gccc {_fcd :=_cecc .arrangeText ();if _fcd !=nil {_gege =append (_gege ,_fcd );};};if len (_gege )>=_dgeb {_gege =_gege .extractTables (_ebf );
};_gege .sortReadingOrder ();_gege .log ("\u0073\u006f\u0072te\u0064\u0020\u0069\u006e\u0020\u0072\u0065\u0061\u0064\u0069\u006e\u0067\u0020\u006f\u0072\u0064\u0065\u0072");return _gege ;};
// Tables returns the tables extracted from the page.
func (_dac PageText )Tables ()[]TextTable {if _gdbf {_cc .Log .Info ("\u0054\u0061\u0062\u006c\u0065\u0073\u003a\u0020\u0025\u0064",len (_dac ._efd ));};return _dac ._efd ;};func (_caee gridTile )contains (_babec _ec .PdfRectangle )bool {if _caee .numBorders ()< 3{return false ;
};if _caee ._gdad &&_babec .Llx < _caee .Llx -_gfce {return false ;};if _caee ._abfb &&_babec .Urx > _caee .Urx +_gfce {return false ;};if _caee ._ebabg &&_babec .Lly < _caee .Lly -_gfce {return false ;};if _caee ._bggdg &&_babec .Ury > _caee .Ury +_gfce {return false ;
};return true ;};func _gdee (_cbcaf ,_cbac *textPara )bool {if _cbcaf ._dcdd ||_cbac ._dcdd {return true ;};return _bdbcg (_cbcaf .depth ()-_cbac .depth ());};type imageExtractContext struct{_gde []ImageMark ;_gcf int ;_de int ;_bc int ;_cbe map[*_fd .PdfObjectStream ]*cachedImage ;
_ab *ImageExtractOptions ;};func _bdbcg (_dcaf float64 )bool {return _fg .Abs (_dcaf )< _gccfc };type textResult struct{_eda PageText ;_cgad int ;_cbfc int ;};func (_eeeb paraList )findGridTables (_baed []gridTiling )[]*textTable {if _gdbf {_cc .Log .Info ("\u0066i\u006e\u0064\u0047\u0072\u0069\u0064\u0054\u0061\u0062\u006c\u0065s\u003a\u0020\u0025\u0064\u0020\u0070\u0061\u0072\u0061\u0073",len (_eeeb ));
for _gfdgc ,_ebcd :=range _eeeb {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_gfdgc ,_ebcd );};};var _gbec []*textTable ;for _ededf ,_dbad :=range _baed {_cdaaa ,_cbgdc :=_eeeb .findTableGrid (_dbad );if _cdaaa !=nil {_cdaaa .log (_a .Sprintf ("\u0066\u0069\u006e\u0064Ta\u0062\u006c\u0065\u0057\u0069\u0074\u0068\u0047\u0072\u0069\u0064\u0073\u003a\u0020%\u0064",_ededf ));
_gbec =append (_gbec ,_cdaaa );_cdaaa .markCells ();};for _abcb :=range _cbgdc {_abcb ._ebgd =true ;};};if _gdbf {_cc .Log .Info ("\u0066i\u006e\u0064\u0047\u0072i\u0064\u0054\u0061\u0062\u006ce\u0073:\u0020%\u0064\u0020\u0074\u0061\u0062\u006c\u0065s",len (_gbec ));
};return _gbec ;};func (_adbba *textTable )subdivide ()*textTable {_adbba .logComposite ("\u0073u\u0062\u0064\u0069\u0076\u0069\u0064e");_afcfg :=_adbba .compositeRowCorridors ();_daea :=_adbba .compositeColCorridors ();if _gdbf {_cc .Log .Info ("\u0073u\u0062\u0064i\u0076\u0069\u0064\u0065:\u000a\u0009\u0072o\u0077\u0043\u006f\u0072\u0072\u0069\u0064\u006f\u0072s=\u0025\u0073\u000a\t\u0063\u006fl\u0043\u006f\u0072\u0072\u0069\u0064o\u0072\u0073=\u0025\u0073",_degbf (_afcfg ),_degbf (_daea ));
};if len (_afcfg )==0||len (_daea )==0{return _adbba ;};_efee (_afcfg );_efee (_daea );if _gdbf {_cc .Log .Info ("\u0073\u0075\u0062\u0064\u0069\u0076\u0069\u0064\u0065\u0020\u0066\u0069\u0078\u0065\u0064\u003a\u000a\u0009r\u006f\u0077\u0043\u006f\u0072\u0072\u0069d\u006f\u0072\u0073\u003d\u0025\u0073\u000a\u0009\u0063\u006f\u006cC\u006f\u0072\u0072\u0069\u0064\u006f\u0072\u0073\u003d\u0025\u0073",_degbf (_afcfg ),_degbf (_daea ));
};_bdfbg ,_cece :=_gfefg (_adbba ._bbgb ,_afcfg );_efcbfa ,_feebg :=_gfefg (_adbba ._ecfcf ,_daea );_degdg :=make (map[uint64 ]*textPara ,_feebg *_cece );_eefb :=&textTable {PdfRectangle :_adbba .PdfRectangle ,_bgdge :_adbba ._bgdge ,_bbgb :_cece ,_ecfcf :_feebg ,_fdbdg :_degdg };
if _gdbf {_cc .Log .Info ("\u0073\u0075b\u0064\u0069\u0076\u0069\u0064\u0065\u003a\u0020\u0063\u006f\u006d\u0070\u006f\u0073\u0069\u0074\u0065\u0020\u003d\u0020\u0025\u0064\u0020\u0078\u0020\u0025\u0064\u0020\u0063\u0065\u006c\u006c\u0073\u003d\u0020\u0025\u0064\u0020\u0078\u0020\u0025\u0064\u000a"+"\u0009\u0072\u006f\u0077\u0043\u006f\u0072\u0072\u0069\u0064\u006f\u0072s\u003d\u0025\u0073\u000a"+"\u0009\u0063\u006f\u006c\u0043\u006f\u0072\u0072\u0069\u0064\u006f\u0072s\u003d\u0025\u0073\u000a"+"\u0009\u0079\u004f\u0066\u0066\u0073\u0065\u0074\u0073=\u0025\u002b\u0076\u000a"+"\u0009\u0078\u004f\u0066\u0066\u0073\u0065\u0074\u0073\u003d\u0025\u002b\u0076",_adbba ._ecfcf ,_adbba ._bbgb ,_feebg ,_cece ,_degbf (_afcfg ),_degbf (_daea ),_bdfbg ,_efcbfa );
};for _accg :=0;_accg < _adbba ._bbgb ;_accg ++{_bcdf :=_bdfbg [_accg ];for _agbcg :=0;_agbcg < _adbba ._ecfcf ;_agbcg ++{_ffcdf :=_efcbfa [_agbcg ];if _gdbf {_a .Printf ("\u0025\u0036\u0064\u002c %\u0032\u0064\u003a\u0020\u0078\u0030\u003d\u0025\u0064\u0020\u0079\u0030\u003d\u0025d\u000a",_agbcg ,_accg ,_ffcdf ,_bcdf );
};_aada ,_ecgge :=_adbba ._gdag [_aabdc (_agbcg ,_accg )];if !_ecgge {continue ;};_ggeb :=_aada .split (_afcfg [_accg ],_daea [_agbcg ]);for _ecab :=0;_ecab < _ggeb ._bbgb ;_ecab ++{for _bedcb :=0;_bedcb < _ggeb ._ecfcf ;_bedcb ++{_dgggf :=_ggeb .get (_bedcb ,_ecab );
_eefb .put (_ffcdf +_bedcb ,_bcdf +_ecab ,_dgggf );if _gdbf {_a .Printf ("\u0025\u0038\u0064\u002c\u0020\u0025\u0032\u0064\u003a\u0020\u0025\u0073\u000a",_ffcdf +_bedcb ,_bcdf +_ecab ,_dgggf );};};};};};return _eefb ;};func (_eaca *ruling )gridIntersecting (_dbccg *ruling )bool {return _ggab (_eaca ._debg ,_dbccg ._debg )&&_ggab (_eaca ._abfa ,_dbccg ._abfa );
};func (_aaga *shapesState )newSubPath (){_aaga .clearPath ();if _bgec {_cc .Log .Info ("\u006e\u0065\u0077\u0053\u0075\u0062\u0050\u0061\u0074h\u003a\u0020\u0025\u0073",_aaga );};};func (_bdef *shapesState )lastpointEstablished ()(_dg .Point ,bool ){if _bdef ._eecc {return _bdef ._cgd ,false ;
};_bgcg :=len (_bdef ._ecdd );if _bgcg > 0&&_bdef ._ecdd [_bgcg -1]._dgb {return _bdef ._ecdd [_bgcg -1].last (),false ;};return _dg .Point {},true ;};func (_ecgg rulingList )toGrids ()[]rulingList {if _ccde {_cc .Log .Info ("t\u006f\u0047\u0072\u0069\u0064\u0073\u003a\u0020\u0025\u0073",_ecgg );
};_ceeg :=_ecgg .intersections ();if _ccde {_cc .Log .Info ("\u0074\u006f\u0047r\u0069\u0064\u0073\u003a \u0076\u0065\u0063\u0073\u003d\u0025\u0064 \u0069\u006e\u0074\u0065\u0072\u0073\u0065\u0063\u0074\u0073\u003d\u0025\u0064\u0020",len (_ecgg ),len (_ceeg ));
for _ ,_dgbe :=range _bgbcd (_ceeg ){_a .Printf ("\u00254\u0064\u003a\u0020\u0025\u002b\u0076\n",_dgbe ,_ceeg [_dgbe ]);};};_deaa :=make (map[int ]intSet ,len (_ecgg ));for _ccdgb :=range _ecgg {_fdab :=_ecgg .connections (_ceeg ,_ccdgb );if len (_fdab )> 0{_deaa [_ccdgb ]=_fdab ;
};};if _ccde {_cc .Log .Info ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u0063\u006fn\u006e\u0065\u0063\u0074s=\u0025\u0064",len (_deaa ));for _ ,_cdga :=range _bgbcd (_deaa ){_a .Printf ("\u00254\u0064\u003a\u0020\u0025\u002b\u0076\n",_cdga ,_deaa [_cdga ]);
};};_adcc :=_dccda (len (_ecgg ),func (_gggafd ,_bgde int )bool {_ceac ,_feedf :=len (_deaa [_gggafd ]),len (_deaa [_bgde ]);if _ceac !=_feedf {return _ceac > _feedf ;};return _ecgg .comp (_gggafd ,_bgde );});if _ccde {_cc .Log .Info ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u006f\u0072d\u0065\u0072\u0069\u006eg=\u0025\u0076",_adcc );
};_abge :=[][]int {{_adcc [0]}};_gcfa :for _ ,_cfgg :=range _adcc [1:]{for _adce ,_aceec :=range _abge {for _ ,_egag :=range _aceec {if _deaa [_egag ].has (_cfgg ){_abge [_adce ]=append (_aceec ,_cfgg );continue _gcfa ;};};};_abge =append (_abge ,[]int {_cfgg });
};if _ccde {_cc .Log .Info ("\u0074o\u0047r\u0069\u0064\u0073\u003a\u0020i\u0067\u0072i\u0064\u0073\u003d\u0025\u0076",_abge );};_ef .SliceStable (_abge ,func (_aafc ,_afae int )bool {return len (_abge [_aafc ])> len (_abge [_afae ])});for _ ,_cbceg :=range _abge {_ef .Slice (_cbceg ,func (_bfff ,_gdgac int )bool {return _ecgg .comp (_cbceg [_bfff ],_cbceg [_gdgac ])});
};_cegg :=make ([]rulingList ,len (_abge ));for _cggf ,_bbgde :=range _abge {_fcgde :=make (rulingList ,len (_bbgde ));for _afcfd ,_eeadf :=range _bbgde {_fcgde [_afcfd ]=_ecgg [_eeadf ];};_cegg [_cggf ]=_fcgde ;};if _ccde {_cc .Log .Info ("\u0074o\u0047r\u0069\u0064\u0073\u003a\u0020g\u0072\u0069d\u0073\u003d\u0025\u002b\u0076",_cegg );
};var _adbc []rulingList ;for _ ,_fcabgb :=range _cegg {if _cadea ,_efbf :=_fcabgb .isActualGrid ();_efbf {_fcabgb =_cadea ;_fcabgb =_fcabgb .snapToGroups ();_adbc =append (_adbc ,_fcabgb );};};if _ccde {_gccge ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u0061\u0063t\u0075\u0061\u006c\u0047ri\u0064\u0073",_adbc );
_cc .Log .Info ("\u0074\u006f\u0047\u0072\u0069\u0064\u0073\u003a\u0020\u0067\u0072\u0069\u0064\u0073\u003d%\u0064 \u0061\u0063\u0074\u0075\u0061\u006c\u0047\u0072\u0069\u0064\u0073\u003d\u0025\u0064",len (_cegg ),len (_adbc ));};return _adbc ;};const (_ggad rulingKind =iota ;
_aagf ;_bcgg ;);const _eg =20;func (_gea *stateStack )empty ()bool {return len (*_gea )==0};
// RenderMode specifies the text rendering mode (Tmode), which determines whether showing text shall cause
// glyph outlines to be stroked, filled, used as a clipping boundary, or some combination of the three.
// Stroking, filling, and clipping shall have the same effects for a text object as they do for a path object
// (see 8.5.3, "Path-Painting Operators" and 8.5.4, "Clipping Path Operators").
type RenderMode int ;func _fbae (_aefcd []_fd .PdfObject )(_ccfff ,_aecbd float64 ,_cdfcdb error ){if len (_aefcd )!=2{return 0,0,_a .Errorf ("\u0069\u006e\u0076\u0061l\u0069\u0064\u0020\u006e\u0075\u006d\u0062\u0065\u0072\u0020o\u0066 \u0070\u0061\u0072\u0061\u006d\u0073\u003a \u0025\u0064",len (_aefcd ));
};_dcdbf ,_cdfcdb :=_fd .GetNumbersAsFloat (_aefcd );if _cdfcdb !=nil {return 0,0,_cdfcdb ;};return _dcdbf [0],_dcdbf [1],nil ;};func (_dedg *wordBag )firstWord (_edcd int )*textWord {return _dedg ._fbdb [_edcd ][0]};var _efg =false ;func (_bgb *shapesState )drawRectangle (_ggfe ,_gab ,_ebeb ,_eead float64 ){if _bgec {_cafa :=_bgb .devicePoint (_ggfe ,_gab );
_dfc :=_bgb .devicePoint (_ggfe +_ebeb ,_gab +_eead );_fdfa :=_ec .PdfRectangle {Llx :_cafa .X ,Lly :_cafa .Y ,Urx :_dfc .X ,Ury :_dfc .Y };_cc .Log .Info ("d\u0072a\u0077\u0052\u0065\u0063\u0074\u0061\u006e\u0067l\u0065\u003a\u0020\u00256.\u0032\u0066",_fdfa );
};_bgb .newSubPath ();_bgb .moveTo (_ggfe ,_gab );_bgb .lineTo (_ggfe +_ebeb ,_gab );_bgb .lineTo (_ggfe +_ebeb ,_gab +_eead );_bgb .lineTo (_ggfe ,_gab +_eead );_bgb .closePath ();};
// String returns a string descibing `i`.
func (_fbdc gridTile )String ()string {_fbeb :=func (_deded bool ,_ebce string )string {if _deded {return _ebce ;};return "\u005f";};return _a .Sprintf ("\u00256\u002e2\u0066\u0020\u0025\u0031\u0073%\u0031\u0073%\u0031\u0073\u0025\u0031\u0073",_fbdc .PdfRectangle ,_fbeb (_fbdc ._gdad ,"\u004c"),_fbeb (_fbdc ._abfb ,"\u0052"),_fbeb (_fbdc ._ebabg ,"\u0042"),_fbeb (_fbdc ._bggdg ,"\u0054"));
};func _bedc (_eaee ,_dcfb ,_bbfg ,_fcagc *textPara )*textTable {_bcceg :=&textTable {_ecfcf :2,_bbgb :2,_fdbdg :make (map[uint64 ]*textPara ,4)};_bcceg .put (0,0,_eaee );_bcceg .put (1,0,_dcfb );_bcceg .put (0,1,_bbfg );_bcceg .put (1,1,_fcagc );return _bcceg ;
};func (_dbcc *textObject )getFont (_gdcb string )(*_ec .PdfFont ,error ){if _dbcc ._faa ._cd !=nil {_dbcc ._faa ._fbgg ++;_fccd ,_accbe :=_dbcc ._faa ._cd [_gdcb ];if _accbe {_fccd ._dedda =_dbcc ._faa ._fbgg ;return _fccd ._abb ,nil ;};};_bffc ,_bbga :=_dbcc .getFontDirect (_gdcb );
if _bbga !=nil {return nil ,_bbga ;};if _dbcc ._faa ._cd !=nil {_fga :=fontEntry {_bffc ,_dbcc ._faa ._fbgg };if len (_dbcc ._faa ._cd )>=_bade {var _ecb []string ;for _dedd :=range _dbcc ._faa ._cd {_ecb =append (_ecb ,_dedd );};_ef .Slice (_ecb ,func (_ecde ,_ccfb int )bool {return _dbcc ._faa ._cd [_ecb [_ecde ]]._dedda < _dbcc ._faa ._cd [_ecb [_ccfb ]]._dedda ;
});delete (_dbcc ._faa ._cd ,_ecb [0]);};_dbcc ._faa ._cd [_gdcb ]=_fga ;};return _bffc ,nil ;};func _bafd (_dcba map[float64 ]map[float64 ]gridTile )[]float64 {_adbe :=make ([]float64 ,0,len (_dcba ));_fgbc :=make (map[float64 ]struct{},len (_dcba ));
for _ ,_afabf :=range _dcba {for _ggedg :=range _afabf {if _ ,_gcecf :=_fgbc [_ggedg ];_gcecf {continue ;};_adbe =append (_adbe ,_ggedg );_fgbc [_ggedg ]=struct{}{};};};_ef .Float64s (_adbe );return _adbe ;};
// ExtractTextWithStats works like ExtractText but returns the number of characters in the output
// (`numChars`) and the number of characters that were not decoded (`numMisses`).
func (_cga *Extractor )ExtractTextWithStats ()(_fa string ,_dae int ,_ee int ,_fef error ){_ffa ,_dae ,_ee ,_fef :=_cga .ExtractPageText ();if _fef !=nil {return "",_dae ,_ee ,_fef ;};return _ffa .Text (),_dae ,_ee ,nil ;};func (_fgde *wordBag )depthIndexes ()[]int {if len (_fgde ._fbdb )==0{return nil ;
};_egfe :=make ([]int ,len (_fgde ._fbdb ));_bba :=0;for _dfee :=range _fgde ._fbdb {_egfe [_bba ]=_dfee ;_bba ++;};_ef .Ints (_egfe );return _egfe ;};type wordBag struct{_ec .PdfRectangle ;_dde float64 ;_ddaa ,_efb rulingList ;_ccaae float64 ;_fbdb map[int ][]*textWord ;
};func _gafa (_gabb func (*wordBag ,*textWord ,float64 )bool ,_bgfbd float64 )func (*wordBag ,*textWord )bool {return func (_feb *wordBag ,_dfcfa *textWord )bool {return _gabb (_feb ,_dfcfa ,_bgfbd )};};func _babg (_ceaa []TextMark ,_bfee *int ,_bcg string )[]TextMark {_deda :=_ged ;
_deda .Text =_bcg ;return _dgfb (_ceaa ,_bfee ,_deda );};func (_aeg *textObject )setHorizScaling (_fcc float64 ){if _aeg ==nil {return ;};_aeg ._gbad ._daf =_fcc ;};func (_ddee gridTiling )complete ()bool {for _ ,_ebabgc :=range _ddee ._bcdb {for _ ,_agefb :=range _ebabgc {if !_agefb .complete (){return false ;
};};};return true ;};func (_dffg rulingList )asTiling ()gridTiling {if _badda {_cc .Log .Info ("r\u0075\u006ci\u006e\u0067\u004c\u0069\u0073\u0074\u002e\u0061\u0073\u0054\u0069\u006c\u0069\u006e\u0067\u003a\u0020\u0076\u0065\u0063s\u003d\u0025\u0064\u0020\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d=\u003d\u003d\u003d\u003d\u003d\u002b\u002b\u002b\u0020\u003d\u003d\u003d\u003d=\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d=\u003d",len (_dffg ));
};for _gabfb ,_ddaab :=range _dffg [1:]{_bbfbb :=_dffg [_gabfb ];if _bbfbb .alignsPrimary (_ddaab )&&_bbfbb .alignsSec (_ddaab ){_cc .Log .Error ("a\u0073\u0054\u0069\u006c\u0069\u006e\u0067\u003a\u0020\u0044\u0075\u0070\u006c\u0069\u0063\u0061\u0074\u0065 \u0072\u0075\u006c\u0069\u006e\u0067\u0073\u002e\u000a\u0009v=\u0025\u0073\u000a\t\u0077=\u0025\u0073",_ddaab ,_bbfbb );
};};_dffg .sortStrict ();_dffg .log ("\u0073n\u0061\u0070\u0070\u0065\u0064");_dbac ,_gefd :=_dffg .vertsHorzs ();_facf :=_dbac .primaries ();_fabfg :=_gefd .primaries ();_dgfd :=len (_facf )-1;_faad :=len (_fabfg )-1;if _dgfd ==0||_faad ==0{return gridTiling {};
};_acfg :=_ec .PdfRectangle {Llx :_facf [0],Urx :_facf [_dgfd ],Lly :_fabfg [0],Ury :_fabfg [_faad ]};if _badda {_cc .Log .Info ("\u0072\u0075l\u0069\u006e\u0067\u004c\u0069\u0073\u0074\u002e\u0061\u0073\u0054\u0069\u006c\u0069\u006e\u0067\u003a\u0020\u0076\u0065\u0072\u0074s=\u0025\u0064",len (_dbac ));
for _fegac ,_fgfbc :=range _dbac {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_fegac ,_fgfbc );};_cc .Log .Info ("\u0072\u0075l\u0069\u006e\u0067\u004c\u0069\u0073\u0074\u002e\u0061\u0073\u0054\u0069\u006c\u0069\u006e\u0067\u003a\u0020\u0068\u006f\u0072\u007as=\u0025\u0064",len (_gefd ));
for _cgef ,_defeg :=range _gefd {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_cgef ,_defeg );};_cc .Log .Info ("\u0072\u0075\u006c\u0069\u006eg\u004c\u0069\u0073\u0074\u002e\u0061\u0073\u0054\u0069\u006c\u0069\u006e\u0067:\u0020\u0020\u0077\u0078\u0068\u003d\u0025\u0064\u0078\u0025\u0064\u000a\u0009\u006c\u006c\u0078\u003d\u0025\u002e\u0032\u0066\u000a\u0009\u006c\u006c\u0079\u003d\u0025\u002e\u0032f",_dgfd ,_faad ,_facf ,_fabfg );
};_gbbdg :=make ([]gridTile ,_dgfd *_faad );for _aagba :=_faad -1;_aagba >=0;_aagba --{_acge :=_fabfg [_aagba ];_beece :=_fabfg [_aagba +1];for _gdgae :=0;_gdgae < _dgfd ;_gdgae ++{_cafg :=_facf [_gdgae ];_fffa :=_facf [_gdgae +1];_ebad :=_dbac .findPrimSec (_cafg ,_acge );
_babff :=_dbac .findPrimSec (_fffa ,_acge );_abaa :=_gefd .findPrimSec (_acge ,_cafg );_gfed :=_gefd .findPrimSec (_beece ,_cafg );_bdbc :=_ec .PdfRectangle {Llx :_cafg ,Urx :_fffa ,Lly :_acge ,Ury :_beece };_adga :=_eggcd (_bdbc ,_ebad ,_babff ,_abaa ,_gfed );
_gbbdg [_aagba *_dgfd +_gdgae ]=_adga ;if _badda {_a .Printf ("\u0020\u0020\u0078\u003d\u0025\u0032\u0064\u0020\u0079\u003d\u0025\u0032\u0064\u003a\u0020%\u0073 \u0025\u0036\u002e\u0032\u0066\u0020\u0078\u0020\u0025\u0036\u002e\u0032\u0066\u000a",_gdgae ,_aagba ,_adga .String (),_adga .Width (),_adga .Height ());
};};};if _badda {_cc .Log .Info ("r\u0075\u006c\u0069\u006e\u0067\u004c\u0069\u0073\u0074.\u0061\u0073\u0054\u0069\u006c\u0069\u006eg:\u0020\u0063\u006f\u0061l\u0065\u0073\u0063\u0065\u0020\u0068\u006f\u0072\u0069zo\u006e\u0074a\u006c\u002e\u0020\u0025\u0036\u002e\u0032\u0066",_acfg );
};_edfb :=make ([]map[float64 ]gridTile ,_faad );for _adeb :=_faad -1;_adeb >=0;_adeb --{if _badda {_a .Printf ("\u0020\u0020\u0079\u003d\u0025\u0032\u0064\u000a",_adeb );};_edfb [_adeb ]=make (map[float64 ]gridTile ,_dgfd );for _ddcab :=0;_ddcab < _dgfd ;
_ddcab ++{_ebggbc :=_gbbdg [_adeb *_dgfd +_ddcab ];if _badda {_a .Printf ("\u0020\u0020\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_ddcab ,_ebggbc );};if !_ebggbc ._gdad {continue ;};_cbgg :=_ddcab ;for _cagf :=_ddcab +1;!_ebggbc ._abfb &&_cagf < _dgfd ;
_cagf ++{_gbbaa :=_gbbdg [_adeb *_dgfd +_cagf ];_ebggbc .Urx =_gbbaa .Urx ;_ebggbc ._bggdg =_ebggbc ._bggdg ||_gbbaa ._bggdg ;_ebggbc ._ebabg =_ebggbc ._ebabg ||_gbbaa ._ebabg ;_ebggbc ._abfb =_gbbaa ._abfb ;if _badda {_a .Printf ("\u0020 \u0020%\u0034\u0064\u003a\u0020\u0025s\u0020\u2192 \u0025\u0073\u000a",_cagf ,_gbbaa ,_ebggbc );
};_cbgg =_cagf ;};if _badda {_a .Printf (" \u0020 \u0025\u0032\u0064\u0020\u002d\u0020\u0025\u0032d\u0020\u2192\u0020\u0025s\n",_ddcab ,_cbgg ,_ebggbc );};_ddcab =_cbgg ;_edfb [_adeb ][_ebggbc .Llx ]=_ebggbc ;};};_cged :=make (map[float64 ]map[float64 ]gridTile ,_faad );
_cagcc :=make (map[float64 ]map[float64 ]struct{},_faad );for _aaedb :=_faad -1;_aaedb >=0;_aaedb --{_cabd :=_gbbdg [_aaedb *_dgfd ].Lly ;_cged [_cabd ]=make (map[float64 ]gridTile ,_dgfd );_cagcc [_cabd ]=make (map[float64 ]struct{},_dgfd );};if _badda {_cc .Log .Info ("\u0072u\u006c\u0069n\u0067\u004c\u0069s\u0074\u002e\u0061\u0073\u0054\u0069\u006ci\u006e\u0067\u003a\u0020\u0063\u006fa\u006c\u0065\u0073\u0063\u0065\u0020\u0076\u0065\u0072\u0074\u0069c\u0061\u006c\u002e\u0020\u0025\u0036\u002e\u0032\u0066",_acfg );
};for _gece :=_faad -1;_gece >=0;_gece --{_efea :=_gbbdg [_gece *_dgfd ].Lly ;_dfab :=_edfb [_gece ];if _badda {_a .Printf ("\u0020\u0020\u0079\u003d\u0025\u0032\u0064\u000a",_gece );};for _ ,_dccdd :=range _eeef (_dfab ){if _ ,_bcgc :=_cagcc [_efea ][_dccdd ];
_bcgc {continue ;};_eggg :=_dfab [_dccdd ];if _badda {_a .Printf (" \u0020\u0020\u0020\u0020\u0076\u0030\u003d\u0025\u0073\u000a",_eggg .String ());};for _dbee :=_gece -1;_dbee >=0;_dbee --{if _eggg ._ebabg {break ;};_egagb :=_edfb [_dbee ];_bgcd ,_cdac :=_egagb [_dccdd ];
if !_cdac {break ;};if _bgcd .Urx !=_eggg .Urx {break ;};_eggg ._ebabg =_bgcd ._ebabg ;_eggg .Lly =_bgcd .Lly ;if _badda {_a .Printf ("\u0020\u0020\u0020\u0020 \u0020\u0020\u0076\u003d\u0025\u0073\u0020\u0076\u0030\u003d\u0025\u0073\u000a",_bgcd .String (),_eggg .String ());
};_cagcc [_bgcd .Lly ][_bgcd .Llx ]=struct{}{};};if _gece ==0{_eggg ._ebabg =true ;};if _eggg .complete (){_cged [_efea ][_dccdd ]=_eggg ;};};};_ddcae :=gridTiling {PdfRectangle :_acfg ,_cdcdg :_bafd (_cged ),_bfag :_ddfdg (_cged ),_bcdb :_cged };_ddcae .log ("\u0043r\u0065\u0061\u0074\u0065\u0064");
return _ddcae ;};
// ToTextMark returns the public view of `tm`.
func (_dcga *textMark )ToTextMark ()TextMark {return TextMark {Text :_dcga ._fcbe ,Original :_dcga ._fbfbe ,BBox :_dcga ._adbb ,Font :_dcga ._cccg ,FontSize :_dcga ._dbce ,FillColor :_dcga ._cdg ,StrokeColor :_dcga ._adgc ,Orientation :_dcga ._ddcb };};
func (_eee *subpath )removeDuplicates (){if len (_eee ._bgga )==0{return ;};_fafe :=[]_dg .Point {_eee ._bgga [0]};for _ ,_daa :=range _eee ._bgga [1:]{if !_cccd (_daa ,_fafe [len (_fafe )-1]){_fafe =append (_fafe ,_daa );};};_eee ._bgga =_fafe ;};func _dccda (_bccf int ,_gbge func (int ,int )bool )[]int {_agadf :=make ([]int ,_bccf );
for _eddcg :=range _agadf {_agadf [_eddcg ]=_eddcg ;};_ef .Slice (_agadf ,func (_gacg ,_egad int )bool {return _gbge (_agadf [_gacg ],_agadf [_egad ])});return _agadf ;};func (_aagg *textTable )getDown ()paraList {_bfaeg :=make (paraList ,_aagg ._ecfcf );
for _accda :=0;_accda < _aagg ._ecfcf ;_accda ++{_egfcg :=_aagg .get (_accda ,_aagg ._bbgb -1)._bfaef ;if _egfcg ==nil ||_egfcg ._ebgd {return nil ;};_bfaeg [_accda ]=_egfcg ;};for _cefca :=0;_cefca < _aagg ._ecfcf -1;_cefca ++{if _bfaeg [_cefca ]._cdbf !=_bfaeg [_cefca +1]{return nil ;
};};return _bfaeg ;};func (_efebd rulingList )sortStrict (){_ef .Slice (_efebd ,func (_efcbf ,_eggbf int )bool {_ggbgc ,_fedf :=_efebd [_efcbf ],_efebd [_eggbf ];_bgaa ,_adefc :=_ggbgc ._ecef ,_fedf ._ecef ;if _bgaa !=_adefc {return _bgaa > _adefc ;};_eacg ,_bgdcf :=_ggbgc ._dedc ,_fedf ._dedc ;
if !_bdbcg (_eacg -_bgdcf ){return _eacg < _bgdcf ;};_eacg ,_bgdcf =_ggbgc ._debg ,_fedf ._debg ;if _eacg !=_bgdcf {return _eacg < _bgdcf ;};return _ggbgc ._abfa < _fedf ._abfa ;});};func (_dagg compositeCell )hasLines (_eada []*textLine )bool {for _aeac ,_gabc :=range _eada {_deag :=_ffbg (_dagg .PdfRectangle ,_gabc .PdfRectangle );
if _gdbf {_a .Printf ("\u0020\u0020\u0020\u0020\u0020\u0020\u005e\u005e\u005e\u0069\u006e\u0074\u0065\u0072\u0073e\u0063t\u0073\u003d\u0025\u0074\u0020\u0025\u0064\u0020\u006f\u0066\u0020\u0025\u0064\u000a",_deag ,_aeac ,len (_eada ));_a .Printf ("\u0020\u0020\u0020\u0020 \u005e\u005e\u005e\u0063\u006f\u006d\u0070\u006f\u0073\u0069\u0074\u0065\u003d\u0025s\u000a",_dagg );
_a .Printf ("\u0020 \u0020 \u0020\u0020\u0020\u006c\u0069\u006e\u0065\u003d\u0025\u0073\u000a",_gabc );};if _deag {return true ;};};return false ;};func (_fcgfe *textPara )bbox ()_ec .PdfRectangle {return _fcgfe .PdfRectangle };func _degbf (_bebga map[int ][]float64 )string {_edac :=_cbcfa (_bebga );
_dbdb :=make ([]string ,len (_bebga ));for _aagbe ,_fcgfg :=range _edac {_dbdb [_aagbe ]=_a .Sprintf ("\u0025\u0064\u003a\u0020\u0025\u002e\u0032\u0066",_fcgfg ,_bebga [_fcgfg ]);};return _a .Sprintf ("\u007b\u0025\u0073\u007d",_bg .Join (_dbdb ,"\u002c\u0020"));
};func (_gdae *textTable )growTable (){_dedb :=func (_dffeb paraList ){_gdae ._bbgb ++;for _adgb :=0;_adgb < _gdae ._ecfcf ;_adgb ++{_agee :=_dffeb [_adgb ];_gdae .put (_adgb ,_gdae ._bbgb -1,_agee );};};_bgecf :=func (_gdagb paraList ){_gdae ._ecfcf ++;
for _abgf :=0;_abgf < _gdae ._bbgb ;_abgf ++{_ecdeb :=_gdagb [_abgf ];_gdae .put (_gdae ._ecfcf -1,_abgf ,_ecdeb );};};if _fgfd {_gdae .log ("\u0067r\u006f\u0077\u0054\u0061\u0062\u006ce");};for _cgeg :=0;;_cgeg ++{_dcdc :=false ;_caccf :=_gdae .getDown ();
_gdeffd :=_gdae .getRight ();if _fgfd {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_cgeg ,_gdae );_a .Printf ("\u0020\u0020 \u0020\u0020\u0020 \u0020\u0064\u006f\u0077\u006e\u003d\u0025\u0073\u000a",_caccf );_a .Printf ("\u0020\u0020 \u0020\u0020\u0020 \u0072\u0069\u0067\u0068\u0074\u003d\u0025\u0073\u000a",_gdeffd );
};if _caccf !=nil &&_gdeffd !=nil {_eace :=_caccf [len (_caccf )-1];if _eace !=nil &&!_eace ._ebgd &&_eace ==_gdeffd [len (_gdeffd )-1]{_dedb (_caccf );if _gdeffd =_gdae .getRight ();_gdeffd !=nil {_bgecf (_gdeffd );_gdae .put (_gdae ._ecfcf -1,_gdae ._bbgb -1,_eace );
};_dcdc =true ;};};if !_dcdc &&_caccf !=nil {_dedb (_caccf );_dcdc =true ;};if !_dcdc &&_gdeffd !=nil {_bgecf (_gdeffd );_dcdc =true ;};if !_dcdc {break ;};};};func (_dbbee *textPara )toTextMarks (_cagc *int )[]TextMark {if _dbbee ._ecfce ==nil {return _dbbee .toCellTextMarks (_cagc );
};var _fec []TextMark ;for _cega :=0;_cega < _dbbee ._ecfce ._bbgb ;_cega ++{for _fffc :=0;_fffc < _dbbee ._ecfce ._ecfcf ;_fffc ++{_ccbag :=_dbbee ._ecfce .get (_fffc ,_cega );if _ccbag ==nil {_fec =_babg (_fec ,_cagc ,"\u0009");}else {_bgad :=_ccbag .toCellTextMarks (_cagc );
_fec =append (_fec ,_bgad ...);};_fec =_babg (_fec ,_cagc ,"\u0020");};if _cega < _dbbee ._ecfce ._bbgb -1{_fec =_babg (_fec ,_cagc ,"\u000a");};};return _fec ;};func (_cgbcb compositeCell )parasBBox ()(paraList ,_ec .PdfRectangle ){return _cgbcb .paraList ,_cgbcb .PdfRectangle ;
};func (_gedf *textPara )isAtom ()*textTable {_egbf :=_gedf ;_bgddc :=_gedf ._cdbf ;_bdgb :=_gedf ._bfaef ;if !(_bgddc !=nil &&!_bgddc ._ebgd &&_bdgb !=nil &&!_bdgb ._ebgd ){return nil ;};_dcac :=_bgddc ._bfaef ;if !(_dcac !=nil &&!_dcac ._ebgd &&_dcac ==_bdgb ._cdbf ){return nil ;
};return _bedc (_egbf ,_bgddc ,_bdgb ,_dcac );};func (_agdf *textLine )text ()string {var _aecc []string ;for _ ,_cbfa :=range _agdf ._aece {if _cbfa ._afea {_aecc =append (_aecc ,"\u0020");};_aecc =append (_aecc ,_cbfa ._aaaf );};return _bg .Join (_aecc ,"");
};func (_ecg *textLine )toTextMarks (_abg *int )[]TextMark {var _dafb []TextMark ;for _ ,_cddg :=range _ecg ._aece {if _cddg ._afea {_dafb =_babg (_dafb ,_abg ,"\u0020");};_gffa :=_cddg .toTextMarks (_abg );_dafb =append (_dafb ,_gffa ...);};return _dafb ;
};func (_dggdd *ruling )encloses (_dgaf ,_decgf float64 )bool {return _dggdd ._debg -_bccea <=_dgaf &&_decgf <=_dggdd ._abfa +_bccea ;};func _dgfb (_aefc []TextMark ,_gddc *int ,_gdg TextMark )[]TextMark {_gdg .Offset =*_gddc ;_aefc =append (_aefc ,_gdg );
*_gddc +=len (_gdg .Text );return _aefc ;};func (_efcb paraList )llyOrdering ()[]int {_ebfdg :=make ([]int ,len (_efcb ));for _dcb :=range _efcb {_ebfdg [_dcb ]=_dcb ;};_ef .SliceStable (_ebfdg ,func (_ddabd ,_acfff int )bool {_caaae ,_badec :=_ebfdg [_ddabd ],_ebfdg [_acfff ];
return _efcb [_caaae ].Lly < _efcb [_badec ].Lly ;});return _ebfdg ;};
// TableCell is a cell in a TextTable.
type TableCell struct{
// Text is the extracted text.
Text string ;
// Marks returns the TextMarks corresponding to the text in Text.
Marks TextMarkArray ;};func (_aaf *stateStack )size ()int {return len (*_aaf )};func (_dbdf lineRuling )yMean ()float64 {return 0.5*(_dbdf ._dacb .Y +_dbdf ._dfgec .Y )};
// String returns a description of `k`.
func (_begf rulingKind )String ()string {_beag ,_gefa :=_gccdc [_begf ];if !_gefa {return _a .Sprintf ("\u004e\u006ft\u0020\u0061\u0020r\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0025\u0064",_begf );};return _beag ;};func _aggga (_dfegg _ec .PdfColorspace ,_cced _ec .PdfColor )_g .Color {if _dfegg ==nil ||_cced ==nil {return _g .Black ;
};_aecbf ,_eebc :=_dfegg .ColorToRGB (_cced );if _eebc !=nil {_cc .Log .Debug ("\u0057\u0041\u0052\u004e\u003a\u0020\u0063\u006fu\u006c\u0064\u0020no\u0074\u0020\u0063\u006f\u006e\u0076e\u0072\u0074\u0020\u0063\u006f\u006c\u006f\u0072\u0020\u0025\u0076\u0020\u0028\u0025\u0076)\u0020\u0074\u006f\u0020\u0052\u0047\u0042\u003a \u0025\u0073",_cced ,_dfegg ,_eebc );
return _g .Black ;};_adbf ,_dddff :=_aecbf .(*_ec .PdfColorDeviceRGB );if !_dddff {_cc .Log .Debug ("\u0057\u0041\u0052\u004e\u003a\u0020\u0063\u006f\u006e\u0076\u0065\u0072\u0074\u0065\u0064 \u0063\u006f\u006c\u006f\u0072\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020i\u006e\u0020\u0074\u0068\u0065\u0020\u0052\u0047\u0042\u0020\u0063\u006flo\u0072\u0073\u0070\u0061\u0063\u0065\u003a\u0020\u0025\u0076",_aecbf );
return _g .Black ;};return _g .NRGBA {R :uint8 (_adbf .R ()*255),G :uint8 (_adbf .G ()*255),B :uint8 (_adbf .B ()*255),A :uint8 (255)};};func (_bafg *textTable )compositeColCorridors ()map[int ][]float64 {_fgbag :=make (map[int ][]float64 ,_bafg ._ecfcf );
if _gdbf {_cc .Log .Info ("\u0063\u006f\u006d\u0070o\u0073\u0069\u0074\u0065\u0043\u006f\u006c\u0043\u006f\u0072r\u0069d\u006f\u0072\u0073\u003a\u0020\u0077\u003d%\u0064\u0020",_bafg ._ecfcf );};for _agda :=0;_agda < _bafg ._ecfcf ;_agda ++{_fgbag [_agda ]=nil ;
};return _fgbag ;};func (_bbgdb compositeCell )split (_bfbfb ,_febd []float64 )*textTable {_feff :=len (_bfbfb )+1;_bgdg :=len (_febd )+1;if _gdbf {_cc .Log .Info ("\u0063\u006f\u006d\u0070\u006f\u0073\u0069t\u0065\u0043\u0065l\u006c\u002e\u0073\u0070l\u0069\u0074\u003a\u0020\u0025\u0064\u0020\u0078\u0020\u0025\u0064\u000a\u0009\u0063\u006f\u006d\u0070\u006f\u0073\u0069\u0074\u0065\u003d\u0025\u0073\u000a"+"\u0009\u0072\u006f\u0077\u0043\u006f\u0072\u0072\u0069\u0064\u006f\u0072\u0073=\u0025\u0036\u002e\u0032\u0066\u000a\t\u0063\u006f\u006c\u0043\u006f\u0072\u0072\u0069\u0064\u006f\u0072\u0073\u003d%\u0036\u002e\u0032\u0066",_bgdg ,_feff ,_bbgdb ,_bfbfb ,_febd );
_a .Printf ("\u0020\u0020\u0020\u0020\u0025\u0064\u0020\u0070\u0061\u0072\u0061\u0073\u000a",len (_bbgdb .paraList ));for _gfda ,_afbf :=range _bbgdb .paraList {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_gfda ,_afbf .String ());};_a .Printf ("\u0020\u0020\u0020\u0020\u0025\u0064\u0020\u006c\u0069\u006e\u0065\u0073\u000a",len (_bbgdb .lines ()));
for _edaa ,_aeccf :=range _bbgdb .lines (){_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_edaa ,_aeccf );};};_bfbfb =_febdc (_bfbfb ,_bbgdb .Ury ,_bbgdb .Lly );_febd =_febdc (_febd ,_bbgdb .Llx ,_bbgdb .Urx );_agge :=make (map[uint64 ]*textPara ,_bgdg *_feff );
_fcgb :=textTable {_ecfcf :_bgdg ,_bbgb :_feff ,_fdbdg :_agge };_ebfe :=_bbgdb .paraList ;_ef .Slice (_ebfe ,func (_gaa ,_ecga int )bool {_gbbde ,_gbd :=_ebfe [_gaa ],_ebfe [_ecga ];_defe ,_ggefa :=_gbbde .Lly ,_gbd .Lly ;if _defe !=_ggefa {return _defe < _ggefa ;
};return _gbbde .Llx < _gbd .Llx ;});_gdacf :=make (map[uint64 ]_ec .PdfRectangle ,_bgdg *_feff );for _gccd ,_fdgd :=range _bfbfb [1:]{_bbge :=_bfbfb [_gccd ];for _fgegd ,_dcgf :=range _febd [1:]{_adeea :=_febd [_fgegd ];_gdacf [_aabdc (_fgegd ,_gccd )]=_ec .PdfRectangle {Llx :_adeea ,Urx :_dcgf ,Lly :_fdgd ,Ury :_bbge };
};};if _gdbf {_cc .Log .Info ("\u0063\u006f\u006d\u0070\u006f\u0073\u0069\u0074\u0065\u0043\u0065l\u006c\u002e\u0073\u0070\u006c\u0069\u0074\u003a\u0020\u0072e\u0063\u0074\u0073");_a .Printf ("\u0020\u0020\u0020\u0020");for _dfgb :=0;_dfgb < _bgdg ;_dfgb ++{_a .Printf ("\u0025\u0033\u0030\u0064\u002c\u0020",_dfgb );
};_a .Println ();for _cecg :=0;_cecg < _feff ;_cecg ++{_a .Printf ("\u0020\u0020\u0025\u0032\u0064\u003a",_cecg );for _cdfd :=0;_cdfd < _bgdg ;_cdfd ++{_a .Printf ("\u00256\u002e\u0032\u0066\u002c\u0020",_gdacf [_aabdc (_cdfd ,_cecg )]);};_a .Println ();
};};_fdea :=func (_abdf *textLine )(int ,int ){for _bgggb :=0;_bgggb < _feff ;_bgggb ++{for _gdbd :=0;_gdbd < _bgdg ;_gdbd ++{if _eadg (_gdacf [_aabdc (_gdbd ,_bgggb )],_abdf .PdfRectangle ){return _gdbd ,_bgggb ;};};};return -1,-1;};_cbcg :=make (map[uint64 ][]*textLine ,_bgdg *_feff );
for _ ,_eggf :=range _ebfe .lines (){_gebc ,_ccdf :=_fdea (_eggf );if _gebc < 0{continue ;};_cbcg [_aabdc (_gebc ,_ccdf )]=append (_cbcg [_aabdc (_gebc ,_ccdf )],_eggf );};for _fafg :=0;_fafg < len (_bfbfb )-1;_fafg ++{_ffgdf :=_bfbfb [_fafg ];_dafe :=_bfbfb [_fafg +1];
for _eeag :=0;_eeag < len (_febd )-1;_eeag ++{_aeba :=_febd [_eeag ];_abga :=_febd [_eeag +1];_eaaa :=_ec .PdfRectangle {Llx :_aeba ,Urx :_abga ,Lly :_dafe ,Ury :_ffgdf };_cacc :=_cbcg [_aabdc (_eeag ,_fafg )];if len (_cacc )==0{continue ;};_eegc :=_eegg (_eaaa ,_cacc );
_fcgb .put (_eeag ,_fafg ,_eegc );};};return &_fcgb ;};func (_acee *textObject )getFontDirect (_geg string )(*_ec .PdfFont ,error ){_gcdf ,_fbed :=_acee .getFontDict (_geg );if _fbed !=nil {return nil ,_fbed ;};_dgge ,_fbed :=_ec .NewPdfFontFromPdfObject (_gcdf );
if _fbed !=nil {_cc .Log .Debug ("\u0067\u0065\u0074\u0046\u006f\u006e\u0074\u0044\u0069\u0072\u0065\u0063\u0074\u003a\u0020\u004e\u0065\u0077Pd\u0066F\u006f\u006e\u0074\u0046\u0072\u006f\u006d\u0050\u0064\u0066\u004f\u0062j\u0065\u0063\u0074\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u002e\u0020\u006e\u0061\u006d\u0065\u003d%\u0023\u0071\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_geg ,_fbed );
};return _dgge ,_fbed ;};func (_cae paraList )tables ()[]TextTable {var _dffa []TextTable ;if _gdbf {_cc .Log .Info ("\u0070\u0061\u0072\u0061\u0073\u002e\u0074\u0061\u0062\u006c\u0065\u0073\u003a");};for _ ,_gagc :=range _cae {_dgaae :=_gagc ._ecfce ;
if _dgaae !=nil &&_dgaae .isExportable (){_dffa =append (_dffa ,_dgaae .toTextTable ());};};return _dffa ;};type textObject struct{_faa *Extractor ;_bed *_ec .PdfPageResources ;_abc _af .GraphicsState ;_gbad *textState ;_deac *stateStack ;_aebf _dg .Matrix ;
_ade _dg .Matrix ;_gda []*textMark ;_fcag bool ;};type textTable struct{_ec .PdfRectangle ;_ecfcf ,_bbgb int ;_bgdge bool ;_fdbdg map[uint64 ]*textPara ;_gdag map[uint64 ]compositeCell ;};func (_bcfd *textTable )isExportable ()bool {if _bcfd ._bgdge {return true ;
};_cbccg :=func (_efaab int )bool {_agefc :=_bcfd .get (0,_efaab );if _agefc ==nil {return false ;};_gefe :=_agefc .text ();_ddedc :=_eb .RuneCountInString (_gefe );_dafef :=_efgf .MatchString (_gefe );return _ddedc <=1||_dafef ;};for _beafb :=0;_beafb < _bcfd ._bbgb ;
_beafb ++{if !_cbccg (_beafb ){return true ;};};return false ;};func (_aae *textObject )getCurrentFont ()*_ec .PdfFont {var _edgg *_ec .PdfFont ;if !_aae ._deac .empty (){_edgg =_aae ._deac .top ()._fgd ;};if _edgg ==nil {_cc .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u004e\u006f\u0020\u0066\u006f\u006e\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064\u002e\u0020U\u0073\u0069\u006e\u0067\u0020d\u0065\u0066a\u0075\u006c\u0074\u002e");
return _ec .DefaultFont ();};return _edgg ;};func (_fabb *subpath )clear (){*_fabb =subpath {}};func _fag (_gcagg ,_ggeda ,_fcbgg float64 )rulingKind {if _gcagg >=_fcbgg &&_dccd (_ggeda ,_gcagg ){return _aagf ;};if _ggeda >=_fcbgg &&_dccd (_gcagg ,_ggeda ){return _bcgg ;
};return _ggad ;};func (_eaed *textWord )toTextMarks (_fadg *int )[]TextMark {var _ffed []TextMark ;for _ ,_cfeef :=range _eaed ._baegf {_ffed =_dgfb (_ffed ,_fadg ,_cfeef .ToTextMark ());};return _ffed ;};func (_dbd *textObject )reset (){_dbd ._aebf =_dg .IdentityMatrix ();
_dbd ._ade =_dg .IdentityMatrix ();_dbd ._gda =nil ;};type compositeCell struct{_ec .PdfRectangle ;paraList ;};func _cage (_ccad []int )[]int {_faeg :=make ([]int ,len (_ccad ));for _baeb ,_fegg :=range _ccad {_faeg [len (_ccad )-1-_baeb ]=_fegg ;};return _faeg ;
};func (_ggf *textObject )renderText (_egeg []byte )error {if _ggf ._fcag {_cc .Log .Debug ("\u0072\u0065\u006e\u0064\u0065r\u0054\u0065\u0078\u0074\u003a\u0020\u0049\u006e\u0076\u0061\u006c\u0069\u0064 \u0066\u006f\u006e\u0074\u002e\u0020\u004e\u006f\u0074\u0020\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067\u002e");
return nil ;};_efeb :=_ggf .getCurrentFont ();_bbg :=_efeb .BytesToCharcodes (_egeg );_agf ,_cad ,_dbec :=_efeb .CharcodesToStrings (_bbg );if _dbec > 0{_cc .Log .Debug ("\u0072\u0065nd\u0065\u0072\u0054e\u0078\u0074\u003a\u0020num\u0043ha\u0072\u0073\u003d\u0025\u0064\u0020\u006eum\u004d\u0069\u0073\u0073\u0065\u0073\u003d%\u0064",_cad ,_dbec );
};_ggf ._gbad ._efef +=_cad ;_ggf ._gbad ._gdfg +=_dbec ;_afb :=_ggf ._gbad ;_dab :=_afb ._eab ;_gcg :=_afb ._daf /100.0;_cbbg ,_fff :=_efeb .GetRuneMetrics (' ');if !_fff {_cbbg ,_fff =_efeb .GetCharMetrics (32);};if !_fff {_cbbg ,_ =_ec .DefaultFont ().GetRuneMetrics (' ');
};_fbfb :=_cbbg .Wx *_fbeg ;_cc .Log .Trace ("\u0073p\u0061\u0063e\u0057\u0069\u0064t\u0068\u003d\u0025\u002e\u0032\u0066\u0020t\u0065\u0078\u0074\u003d\u0025\u0071 \u0066\u006f\u006e\u0074\u003d\u0025\u0073\u0020\u0066\u006f\u006et\u0053\u0069\u007a\u0065\u003d\u0025\u002e\u0032\u0066",_fbfb ,_agf ,_efeb ,_dab );
_eabf :=_dg .NewMatrix (_dab *_gcg ,0,0,_dab ,0,_afb ._bbb );if _ffda {_cc .Log .Info ("\u0072\u0065\u006e\u0064\u0065\u0072T\u0065\u0078\u0074\u003a\u0020\u0025\u0064\u0020\u0063\u006f\u0064\u0065\u0073=\u0025\u002b\u0076\u0020\u0074\u0065\u0078t\u0073\u003d\u0025\u0071",len (_bbg ),_bbg ,_agf );
};_cc .Log .Trace ("\u0072\u0065\u006e\u0064\u0065\u0072T\u0065\u0078\u0074\u003a\u0020\u0025\u0064\u0020\u0063\u006f\u0064\u0065\u0073=\u0025\u002b\u0076\u0020\u0072\u0075\u006ee\u0073\u003d\u0025\u0071",len (_bbg ),_bbg ,len (_agf ));_gccf :=_ggf .getFillColor ();
_dba :=_ggf .getStrokeColor ();for _faae ,_gdc :=range _agf {_gffb :=[]rune (_gdc );if len (_gffb )==1&&_gffb [0]=='\x00'{continue ;};_gaeb :=_bbg [_faae ];_fgg :=_ggf ._abc .CTM .Mult (_ggf ._aebf ).Mult (_eabf );_ggga :=0.0;if len (_gffb )==1&&_gffb [0]==32{_ggga =_afb ._bca ;
};_gaebb ,_cggg :=_efeb .GetCharMetrics (_gaeb );if !_cggg {_cc .Log .Debug ("\u0045R\u0052\u004fR\u003a\u0020\u004e\u006f \u006d\u0065\u0074r\u0069\u0063\u0020\u0066\u006f\u0072\u0020\u0063\u006fde\u003d\u0025\u0064 \u0072\u003d0\u0078\u0025\u0030\u0034\u0078\u003d%\u002b\u0071 \u0025\u0073",_gaeb ,_gffb ,_gffb ,_efeb );
return _a .Errorf ("\u006e\u006f\u0020\u0063\u0068\u0061\u0072\u0020\u006d\u0065\u0074\u0072\u0069\u0063\u0073:\u0020f\u006f\u006e\u0074\u003d\u0025\u0073\u0020\u0063\u006f\u0064\u0065\u003d\u0025\u0064",_efeb .String (),_gaeb );};_ffb :=_dg .Point {X :_gaebb .Wx *_fbeg ,Y :_gaebb .Wy *_fbeg };
_gbbb :=_dg .Point {X :(_ffb .X *_dab +_ggga )*_gcg };_cge :=_dg .Point {X :(_ffb .X *_dab +_afb ._faea +_ggga )*_gcg };if _ffda {_cc .Log .Info ("\u0074\u0066\u0073\u003d\u0025\u002e\u0032\u0066\u0020\u0074\u0063\u003d\u0025\u002e\u0032f\u0020t\u0077\u003d\u0025\u002e\u0032\u0066\u0020\u0074\u0068\u003d\u0025\u002e\u0032\u0066",_dab ,_afb ._faea ,_afb ._bca ,_gcg );
_cc .Log .Info ("\u0064x\u002c\u0064\u0079\u003d%\u002e\u0033\u0066\u0020\u00740\u003d%\u002e3\u0066\u0020\u0074\u003d\u0025\u002e\u0033f",_ffb ,_gbbb ,_cge );};_ecfc :=_adec (_gbbb );_dgd :=_adec (_cge );_afcb :=_ggf ._abc .CTM .Mult (_ggf ._aebf ).Mult (_ecfc );
if _fbgd {_cc .Log .Info ("e\u006e\u0064\u003a\u000a\tC\u0054M\u003d\u0025\u0073\u000a\u0009 \u0074\u006d\u003d\u0025\u0073\u000a"+"\u0009\u0020t\u0064\u003d\u0025s\u0020\u0078\u006c\u0061\u0074\u003d\u0025\u0073\u000a"+"\u0009t\u0064\u0030\u003d\u0025s\u000a\u0009\u0020\u0020\u2192 \u0025s\u0020x\u006c\u0061\u0074\u003d\u0025\u0073",_ggf ._abc .CTM ,_ggf ._aebf ,_dgd ,_aebb (_ggf ._abc .CTM .Mult (_ggf ._aebf ).Mult (_dgd )),_ecfc ,_afcb ,_aebb (_afcb ));
};_fab ,_edga :=_ggf .newTextMark (_gc .ExpandLigatures (_gffb ),_fgg ,_aebb (_afcb ),_fg .Abs (_fbfb *_fgg .ScalingFactorX ()),_efeb ,_ggf ._gbad ._faea ,_gccf ,_dba );if !_edga {_cc .Log .Debug ("\u0054\u0065\u0078\u0074\u0020\u006d\u0061\u0072\u006b\u0020\u006f\u0075\u0074\u0073\u0069d\u0065 \u0070\u0061\u0067\u0065\u002e\u0020\u0053\u006b\u0069\u0070\u0070\u0069\u006e\u0067");
continue ;};if _efeb ==nil {_cc .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u004e\u006f\u0020\u0066\u006f\u006e\u0074\u002e");}else if _efeb .Encoder ()==nil {_cc .Log .Debug ("E\u0052\u0052\u004f\u0052\u003a\u0020N\u006f\u0020\u0065\u006e\u0063\u006f\u0064\u0069\u006eg\u002e\u0020\u0066o\u006et\u003d\u0025\u0073",_efeb );
}else {if _bfed ,_bbc :=_efeb .Encoder ().CharcodeToRune (_gaeb );_bbc {_fab ._fbfbe =string (_bfed );};};_cc .Log .Trace ("i\u003d\u0025\u0064\u0020\u0063\u006fd\u0065\u003d\u0025\u0064\u0020\u006d\u0061\u0072\u006b=\u0025\u0073\u0020t\u0072m\u003d\u0025\u0073",_faae ,_gaeb ,_fab ,_fgg );
_ggf ._gda =append (_ggf ._gda ,&_fab );_ggf ._aebf .Concat (_dgd );};return nil ;};func _gdbc (_dgfg _ec .PdfRectangle )*ruling {return &ruling {_ecef :_bcgg ,_dedc :_dgfg .Llx ,_debg :_dgfg .Lly ,_abfa :_dgfg .Ury };};func (_ccga *textObject )setTextRenderMode (_edcc int ){if _ccga ==nil {return ;
};_ccga ._gbad ._cfb =RenderMode (_edcc );};func _cdff (_afeb string )string {_ggdb :=[]rune (_afeb );return string (_ggdb [:len (_ggdb )-1])};func (_dgcd *textPara )depth ()float64 {if _dgcd ._dcdd {return -1.0;};if len (_dgcd ._dagfb )> 0{return _dgcd ._dagfb [0]._agfa ;
};return _dgcd ._ecfce .depth ();};func (_cdfc *textObject )setTextRise (_gdf float64 ){if _cdfc ==nil {return ;};_cdfc ._gbad ._bbb =_gdf ;};
// String returns a human readable description of `path`.
func (_baab *subpath )String ()string {_ebcc :=_baab ._bgga ;_ccba :=len (_ebcc );if _ccba <=5{return _a .Sprintf ("\u0025d\u003a\u0020\u0025\u0036\u002e\u0032f",_ccba ,_ebcc );};return _a .Sprintf ("\u0025d\u003a\u0020\u0025\u0036.\u0032\u0066\u0020\u0025\u0036.\u0032f\u0020.\u002e\u002e\u0020\u0025\u0036\u002e\u0032f",_ccba ,_ebcc [0],_ebcc [1],_ebcc [_ccba -1]);
};func (_baf *textObject )getStrokeColor ()_g .Color {return _aggga (_baf ._abc .ColorspaceStroking ,_baf ._abc .ColorStroking );};var (_ac =_b .New ("\u0074\u0079p\u0065\u0020\u0063h\u0065\u0063\u006b\u0020\u0065\u0072\u0072\u006f\u0072");_fgf =_b .New ("\u0072\u0061\u006e\u0067\u0065\u0020\u0063\u0068\u0065\u0063\u006b\u0020e\u0072\u0072\u006f\u0072");
);func (_aagadb *textLine )endsInHyphen ()bool {_bfae :=_aagadb ._aece [len (_aagadb ._aece )-1];_agbe :=_bfae ._aaaf ;_egfg ,_ddgf :=_eb .DecodeLastRuneInString (_agbe );if _ddgf <=0||!_f .Is (_f .Hyphen ,_egfg ){return false ;};if _bfae ._afea &&_gbcg (_agbe ){return true ;
};return _gbcg (_aagadb .text ());};func _gdbaa (_fgea ,_dfce int )int {if _fgea < _dfce {return _fgea ;};return _dfce ;};func _egaf (_dfgg ,_aaca bounded )float64 {return _dfgg .bbox ().Llx -_aaca .bbox ().Urx };func (_gbgbc rulingList )sort (){_ef .Slice (_gbgbc ,_gbgbc .comp )};
const (_gccfc =1.0e-6;_febb =1.0e-4;_fcabg =10;_eeee =6;_egega =0.5;_fgeg =0.12;_abcgg =0.19;_gcae =0.04;_fgaa =0.04;_bfccc =1.0;_cgac =0.04;_bgfd =0.4;_beaf =0.7;_eef =1.0;_abcc =0.1;_fggc =1.4;_abfd =0.46;_bfbg =0.02;_edcg =0.2;_gddb =0.5;_gcbe =4;_baga =4.0;
_dgeb =6;_gfac =0.3;_bfef =0.01;_acbf =0.02;_babfg =2;_ceafg =2;_ebabe =500;_cbgb =4.0;_ccbf =4.0;_dgf =0.05;_feed =0.1;_bccea =2.0;_dfbb =2.0;_gfce =1.5;_eca =3.0;_gfdc =0.25;);func _eecb (_afff ,_cbcec float64 )string {_dbea :=!_bdbcg (_afff -_cbcec );
if _dbea {return "\u000a";};return "\u0020";};func _cdecd (_defd []*textMark ,_bdefd _ec .PdfRectangle )*textWord {_ccffg :=_defd [0].PdfRectangle ;_cabbc :=_defd [0]._dbce ;for _ ,_eeda :=range _defd [1:]{_ccffg =_egfc (_ccffg ,_eeda .PdfRectangle );if _eeda ._dbce > _cabbc {_cabbc =_eeda ._dbce ;
};};return &textWord {PdfRectangle :_ccffg ,_baegf :_defd ,_beef :_bdefd .Ury -_ccffg .Lly ,_cgba :_cabbc };};func (_cdgb paraList )findTextTables ()[]*textTable {var _edcce []*textTable ;for _ ,_gdaf :=range _cdgb {if _gdaf .taken ()||_gdaf .Width ()==0{continue ;
};_ggec :=_gdaf .isAtom ();if _ggec ==nil {continue ;};_ggec .growTable ();if _ggec ._ecfcf *_ggec ._bbgb < _dgeb {continue ;};_ggec .markCells ();_ggec .log ("\u0067\u0072\u006fw\u006e");_edcce =append (_edcce ,_ggec );};return _edcce ;};func (_bggf *shapesState )closePath (){if _bggf ._eecc {_bggf ._ecdd =append (_bggf ._ecdd ,_gded (_bggf ._cgd ));
_bggf ._eecc =false ;}else if len (_bggf ._ecdd )==0{if _bgec {_cc .Log .Debug ("\u0063\u006c\u006f\u0073eP\u0061\u0074\u0068\u0020\u0077\u0069\u0074\u0068\u0020\u006e\u006f\u0020\u0070\u0061t\u0068");};_bggf ._eecc =false ;return ;};_bggf ._ecdd [len (_bggf ._ecdd )-1].close ();
if _bgec {_cc .Log .Info ("\u0063\u006c\u006f\u0073\u0065\u0050\u0061\u0074\u0068\u003a\u0020\u0025\u0073",_bggf );};};func (_gage intSet )add (_efad int ){_gage [_efad ]=struct{}{}};func _ddad (_agefd float64 )float64 {return _febb *_fg .Round (_agefd /_febb )};
func (_dgcc *shapesState )cubicTo (_deddae ,_fdbd ,_bbf ,_gaec ,_fce ,_gggac float64 ){if _bgec {_cc .Log .Info ("\u0063\u0075\u0062\u0069\u0063\u0054\u006f\u003a");};_dgcc .addPoint (_fce ,_gggac );};func (_ecbc *textTable )bbox ()_ec .PdfRectangle {return _ecbc .PdfRectangle };
// ToText returns the page text as a single string.
// Deprecated: This function is deprecated and will be removed in a future major version. Please use
// Text() instead.
func (_cef PageText )ToText ()string {return _cef .Text ()};func _bgbcd (_aeecd map[int ]intSet )[]int {_cbgc :=make ([]int ,0,len (_aeecd ));for _gbade :=range _aeecd {_cbgc =append (_cbgc ,_gbade );};_ef .Ints (_cbgc );return _cbgc ;};func (_bdfag *ruling )alignsSec (_ddcc *ruling )bool {const _dafd =_dfbb +1.0;
return _bdfag ._debg -_dafd <=_ddcc ._abfa &&_ddcc ._debg -_dafd <=_bdfag ._abfa ;};func _dbfd (_eagb *wordBag ,_ggfed *textWord ,_gdea float64 )bool {return _ggfed .Llx < _eagb .Urx +_gdea &&_eagb .Llx -_gdea < _ggfed .Urx ;};
// PageImages represents extracted images on a PDF page with spatial information:
// display position and size.
type PageImages struct{Images []ImageMark ;};func (_daaa *wordBag )blocked (_ecdg *textWord )bool {if _ecdg .Urx < _daaa .Llx {_fccc :=_dfgbc (_ecdg .PdfRectangle );_fbab :=_gdbc (_daaa .PdfRectangle );if _daaa ._ddaa .blocks (_fccc ,_fbab ){if _cbec {_cc .Log .Info ("\u0062\u006c\u006f\u0063ke\u0064\u0020\u2190\u0078\u003a\u0020\u0025\u0073\u0020\u0025\u0073",_ecdg ,_daaa );
};return true ;};}else if _daaa .Urx < _ecdg .Llx {_ffe :=_dfgbc (_daaa .PdfRectangle );_eagc :=_gdbc (_ecdg .PdfRectangle );if _daaa ._ddaa .blocks (_ffe ,_eagc ){if _cbec {_cc .Log .Info ("b\u006co\u0063\u006b\u0065\u0064\u0020\u0078\u2192\u0020:\u0020\u0025\u0073\u0020%s",_ecdg ,_daaa );
};return true ;};};if _ecdg .Ury < _daaa .Lly {_gfea :=_ddbf (_ecdg .PdfRectangle );_gfd :=_bbe (_daaa .PdfRectangle );if _daaa ._efb .blocks (_gfea ,_gfd ){if _cbec {_cc .Log .Info ("\u0062\u006c\u006f\u0063ke\u0064\u0020\u2190\u0079\u003a\u0020\u0025\u0073\u0020\u0025\u0073",_ecdg ,_daaa );
};return true ;};}else if _daaa .Ury < _ecdg .Lly {_eafd :=_ddbf (_daaa .PdfRectangle );_cgb :=_bbe (_ecdg .PdfRectangle );if _daaa ._efb .blocks (_eafd ,_cgb ){if _cbec {_cc .Log .Info ("b\u006co\u0063\u006b\u0065\u0064\u0020\u0079\u2192\u0020:\u0020\u0025\u0073\u0020%s",_ecdg ,_daaa );
};return true ;};};return false ;};func (_bgbeg *textTable )putComposite (_eceg ,_bdba int ,_eacd paraList ,_bafa _ec .PdfRectangle ){if len (_eacd )==0{_cc .Log .Error ("\u0074\u0065xt\u0054\u0061\u0062l\u0065\u0029\u0020\u0070utC\u006fmp\u006f\u0073\u0069\u0074\u0065\u003a\u0020em\u0070\u0074\u0079\u0020\u0070\u0061\u0072a\u0073");
return ;};_daggf :=compositeCell {_bafa ,_eacd };if _gdbf {_a .Printf ("\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0070\u0075\u0074\u0043\u006f\u006d\u0070o\u0073i\u0074\u0065\u0028\u0025\u0064\u002c\u0025\u0064\u0029\u003c\u002d\u0025\u0073\u000a",_eceg ,_bdba ,_daggf .String ());
};_daggf .updateBBox ();_bgbeg ._gdag [_aabdc (_eceg ,_bdba )]=_daggf ;};
// TextMark represents extracted text on a page with information regarding both textual content,
// formatting (font and size) and positioning.
// It is the smallest unit of text on a PDF page, typically a single character.
//
// getBBox() in test_text.go shows how to compute bounding boxes of substrings of extracted text.
// The following code extracts the text on PDF page `page` into `text` then finds the bounding box
// `bbox` of substring `term` in `text`.
//
// ex, _ := New(page)
// // handle errors
// pageText, _, _, err := ex.ExtractPageText()
// // handle errors
// text := pageText.Text()
// textMarks := pageText.Marks()
//
// start := strings.Index(text, term)
// end := start + len(term)
// spanMarks, err := textMarks.RangeOffset(start, end)
// // handle errors
// bbox, ok := spanMarks.BBox()
// // handle errors
type TextMark struct{
// Text is the extracted text.
Text string ;
// Original is the text in the PDF. It has not been decoded like `Text`.
Original string ;
// BBox is the bounding box of the text.
BBox _ec .PdfRectangle ;
// Font is the font the text was drawn with.
Font *_ec .PdfFont ;
// FontSize is the font size the text was drawn with.
FontSize float64 ;
// Offset is the offset of the start of TextMark.Text in the extracted text. If you do this
// text, textMarks := pageText.Text(), pageText.Marks()
// marks := textMarks.Elements()
// then marks[i].Offset is the offset of marks[i].Text in text.
Offset int ;
// Meta is set true for spaces and line breaks that we insert in the extracted text. We insert
// spaces (line breaks) when we see characters that are over a threshold horizontal (vertical)
// distance apart. See wordJoiner (lineJoiner) in PageText.computeViews().
Meta bool ;
// FillColor is the fill color of the text.
// The color is nil for spaces and line breaks (i.e. the Meta field is true).
FillColor _g .Color ;
// StrokeColor is the stroke color of the text.
// The color is nil for spaces and line breaks (i.e. the Meta field is true).
StrokeColor _g .Color ;
// Orientation is the text orientation
Orientation int ;};func (_gbff *textTable )emptyColumn (_cfca int )bool {for _dbafb :=0;_dbafb < _gbff ._bbgb ;_dbafb ++{_adfgb :=_gbff .get (_cfca ,_dbafb );if _adfgb !=nil &&_adfgb .text ()!=""{return false ;};};return true ;};func _bebff (_fcgd []TextMark ,_eaae *int )[]TextMark {_cabfg :=_fcgd [len (_fcgd )-1];
_cade :=[]rune (_cabfg .Text );if len (_cade )==1{_fcgd =_fcgd [:len (_fcgd )-1];_edeb :=_fcgd [len (_fcgd )-1];*_eaae =_edeb .Offset +len (_edeb .Text );}else {_bgff :=_cdff (_cabfg .Text );*_eaae +=len (_bgff )-len (_cabfg .Text );_cabfg .Text =_bgff ;
};return _fcgd ;};type rulingKind int ;func (_geba intSet )del (_ddcgf int ){delete (_geba ,_ddcgf )};func (_eeec rectRuling )asRuling ()(*ruling ,bool ){_cacab :=ruling {_ecef :_eeec ._dffbd ,Color :_eeec .Color ,_dcfg :_fbac };switch _eeec ._dffbd {case _bcgg :_cacab ._dedc =0.5*(_eeec .Llx +_eeec .Urx );
_cacab ._debg =_eeec .Lly ;_cacab ._abfa =_eeec .Ury ;_ggfg ,_bcd :=_eeec .checkWidth (_eeec .Llx ,_eeec .Urx );if !_bcd {if _gbce {_cc .Log .Error ("\u0072\u0065\u0063\u0074\u0052\u0075l\u0069\u006e\u0067\u002e\u0061\u0073\u0052\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0072\u0075\u006c\u0069\u006e\u0067V\u0065\u0072\u0074\u0020\u0021\u0063\u0068\u0065\u0063\u006b\u0057\u0069\u0064\u0074h\u0020v\u003d\u0025\u002b\u0076",_eeec );
};return nil ,false ;};_cacab ._bafc =_ggfg ;case _aagf :_cacab ._dedc =0.5*(_eeec .Lly +_eeec .Ury );_cacab ._debg =_eeec .Llx ;_cacab ._abfa =_eeec .Urx ;_ccfd ,_gaac :=_eeec .checkWidth (_eeec .Lly ,_eeec .Ury );if !_gaac {if _gbce {_cc .Log .Error ("\u0072\u0065\u0063\u0074\u0052\u0075l\u0069\u006e\u0067\u002e\u0061\u0073\u0052\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0072\u0075\u006c\u0069\u006e\u0067H\u006f\u0072\u007a\u0020\u0021\u0063\u0068\u0065\u0063\u006b\u0057\u0069\u0064\u0074h\u0020v\u003d\u0025\u002b\u0076",_eeec );
};return nil ,false ;};_cacab ._bafc =_ccfd ;default:_cc .Log .Error ("\u0062\u0061\u0064\u0020pr\u0069\u006d\u0061\u0072\u0079\u0020\u006b\u0069\u006e\u0064\u003d\u0025\u0064",_eeec ._dffbd );return nil ,false ;};return &_cacab ,true ;};type lineRuling struct{_degd rulingKind ;
_dffe markKind ;_g .Color ;_dacb ,_dfgec _dg .Point ;};const (RenderModeStroke RenderMode =1<<iota ;RenderModeFill ;RenderModeClip ;);func (_afcf *wordBag )maxDepth ()float64 {return _afcf ._ccaae -_afcf .Lly };func (_dbdee *textWord )absorb (_dacdg *textWord ){_dbdee .PdfRectangle =_egfc (_dbdee .PdfRectangle ,_dacdg .PdfRectangle );
_dbdee ._baegf =append (_dbdee ._baegf ,_dacdg ._baegf ...);};
// ImageMark represents an image drawn on a page and its position in device coordinates.
// All coordinates are in device coordinates.
type ImageMark struct{Image *_ec .Image ;
// Dimensions of the image as displayed in the PDF.
Width float64 ;Height float64 ;
// Position of the image in PDF coordinates (lower left corner).
X float64 ;Y float64 ;
// Angle in degrees, if rotated.
Angle float64 ;};func _defa (_dfga ,_bbfb _dg .Point ,_ecbg _g .Color )(*ruling ,bool ){_bdgg :=lineRuling {_dacb :_dfga ,_dfgec :_bbfb ,_degd :_daae (_dfga ,_bbfb ),Color :_ecbg };if _bdgg ._degd ==_ggad {return nil ,false ;};return _bdgg .asRuling ();
};
// String returns a description of `b`.
func (_gcad *wordBag )String ()string {var _fddb []string ;for _ ,_bgfe :=range _gcad .depthIndexes (){_bfdb :=_gcad ._fbdb [_bgfe ];for _ ,_fbcd :=range _bfdb {_fddb =append (_fddb ,_fbcd ._aaaf );};};return _a .Sprintf ("\u0025.\u0032\u0066\u0020\u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065=\u0025\u002e\u0032\u0066\u0020\u0025\u0064\u0020\u0025\u0071",_gcad .PdfRectangle ,_gcad ._dde ,len (_fddb ),_fddb );
};func (_cafgb intSet )has (_gacc int )bool {_ ,_eafc :=_cafgb [_gacc ];return _eafc };func _ddbf (_gcag _ec .PdfRectangle )*ruling {return &ruling {_ecef :_aagf ,_dedc :_gcag .Ury ,_debg :_gcag .Llx ,_abfa :_gcag .Urx };};func _adf (_egd []*textWord ,_bac float64 ,_bgcgb ,_ecdc rulingList )*wordBag {_cagbc :=_efafa (_egd [0],_bac ,_bgcgb ,_ecdc );
for _ ,_fced :=range _egd [1:]{_agff :=_aecf (_fced ._beef );_cagbc ._fbdb [_agff ]=append (_cagbc ._fbdb [_agff ],_fced );_cagbc .PdfRectangle =_egfc (_cagbc .PdfRectangle ,_fced .PdfRectangle );};_cagbc .sort ();return _cagbc ;};func _degb (_afab ,_ceec *textPara )bool {return _dbfb (_afab ._abcge ,_ceec ._abcge )};
func (_ccfbg paraList )topoOrder ()[]int {if _ggee {_cc .Log .Info ("\u0074\u006f\u0070\u006f\u004f\u0072\u0064\u0065\u0072\u003a");};_bbbe :=len (_ccfbg );_fabg :=make ([]bool ,_bbbe );_edgb :=make ([]int ,0,_bbbe );_gbca :=_ccfbg .llyOrdering ();var _bdde func (_ggggf int );
_bdde =func (_aegc int ){_fabg [_aegc ]=true ;for _bfec :=0;_bfec < _bbbe ;_bfec ++{if !_fabg [_bfec ]{if _ccfbg .readBefore (_gbca ,_aegc ,_bfec ){_bdde (_bfec );};};};_edgb =append (_edgb ,_aegc );};for _dfdg :=0;_dfdg < _bbbe ;_dfdg ++{if !_fabg [_dfdg ]{_bdde (_dfdg );
};};return _cage (_edgb );};
// String returns a human readable description of `ss`.
func (_egg *shapesState )String ()string {return _a .Sprintf ("\u007b\u0025\u0064\u0020su\u0062\u0070\u0061\u0074\u0068\u0073\u0020\u0066\u0072\u0065\u0073\u0068\u003d\u0025t\u007d",len (_egg ._ecdd ),_egg ._eecc );};func (_affe *textTable )log (_acdbb string ){if !_gdbf {return ;
};_cc .Log .Info ("~\u007e\u007e\u0020\u0025\u0073\u003a \u0025\u0064\u0020\u0078\u0020\u0025d\u0020\u0067\u0072\u0069\u0064\u003d\u0025t\u000a\u0020\u0020\u0020\u0020\u0020\u0020\u0025\u0036\u002e2\u0066",_acdbb ,_affe ._ecfcf ,_affe ._bbgb ,_affe ._bgdge ,_affe .PdfRectangle );
for _abdg :=0;_abdg < _affe ._bbgb ;_abdg ++{for _bbdga :=0;_bbdga < _affe ._ecfcf ;_bbdga ++{_ecfcd :=_affe .get (_bbdga ,_abdg );if _ecfcd ==nil {continue ;};_a .Printf ("%\u0034\u0064\u0020\u00252d\u003a \u0025\u0036\u002e\u0032\u0066 \u0025\u0071\u0020\u0025\u0064\u000a",_bbdga ,_abdg ,_ecfcd .PdfRectangle ,_fdba (_ecfcd .text (),50),_eb .RuneCountInString (_ecfcd .text ()));
};};};
// ExtractText processes and extracts all text data in content streams and returns as a string.
// It takes into account character encodings in the PDF file, which are decoded by
// CharcodeBytesToUnicode.
// Characters that can't be decoded are replaced with MissingCodeRune ('\ufffd' = <20>).
func (_cdc *Extractor )ExtractText ()(string ,error ){_cgf ,_ ,_ ,_aac :=_cdc .ExtractTextWithStats ();return _cgf ,_aac ;};func (_fega *wordBag )sort (){for _ ,_fabe :=range _fega ._fbdb {_ef .Slice (_fabe ,func (_gbae ,_cbaf int )bool {return _cggc (_fabe [_gbae ],_fabe [_cbaf ])< 0});
};};type rulingList []*ruling ;
// String returns a string describing `ma`.
func (_bag TextMarkArray )String ()string {_aadf :=len (_bag ._bccg );if _aadf ==0{return "\u0045\u004d\u0050T\u0059";};_eacc :=_bag ._bccg [0];_ccbe :=_bag ._bccg [_aadf -1];return _a .Sprintf ("\u007b\u0054\u0045\u0058\u0054\u004d\u0041\u0052K\u0041\u0052\u0052AY\u003a\u0020\u0025\u0064\u0020\u0065l\u0065\u006d\u0065\u006e\u0074\u0073\u000a\u0009\u0066\u0069\u0072\u0073\u0074\u003d\u0025s\u000a\u0009\u0020\u006c\u0061\u0073\u0074\u003d%\u0073\u007d",_aadf ,_eacc ,_ccbe );
};func (_fgb pathSection )bbox ()_ec .PdfRectangle {_cfba :=_fgb ._gfcc [0]._bgga [0];_aegd :=_ec .PdfRectangle {Llx :_cfba .X ,Urx :_cfba .X ,Lly :_cfba .Y ,Ury :_cfba .Y };_bced :=func (_efaf _dg .Point ){if _efaf .X < _aegd .Llx {_aegd .Llx =_efaf .X ;
}else if _efaf .X > _aegd .Urx {_aegd .Urx =_efaf .X ;};if _efaf .Y < _aegd .Lly {_aegd .Lly =_efaf .Y ;}else if _efaf .Y > _aegd .Ury {_aegd .Ury =_efaf .Y ;};};for _ ,_ddcg :=range _fgb ._gfcc [0]._bgga [1:]{_bced (_ddcg );};for _ ,_adeg :=range _fgb ._gfcc [1:]{for _ ,_decf :=range _adeg ._bgga {_bced (_decf );
};};return _aegd ;};
// NewFromContents creates a new extractor from contents and page resources.
func NewFromContents (contents string ,resources *_ec .PdfPageResources )(*Extractor ,error ){const _gd ="\u0065x\u0074\u0072\u0061\u0063t\u006f\u0072\u002e\u004e\u0065w\u0046r\u006fm\u0043\u006f\u006e\u0074\u0065\u006e\u0074s";_ccg :=&Extractor {_fbg :contents ,_fcf :resources ,_cd :map[string ]fontEntry {},_cb :map[string ]textResult {}};
_ba .TrackUse (_gd );return _ccg ,nil ;};func _bggfg (_cbfg ,_bagd _dg .Point )bool {_aebac :=_fg .Abs (_cbfg .X -_bagd .X );_fcbgb :=_fg .Abs (_cbfg .Y -_bagd .Y );return _dccd (_fcbgb ,_aebac );};func (_cdaag rulingList )aligned ()bool {if len (_cdaag )< 2{return false ;
};_fecd :=make (map[*ruling ]int );_fecd [_cdaag [0]]=0;for _ ,_aaad :=range _cdaag [1:]{_edggg :=false ;for _bgbf :=range _fecd {if _aaad .gridIntersecting (_bgbf ){_fecd [_bgbf ]++;_edggg =true ;break ;};};if !_edggg {_fecd [_aaad ]=0;};};_adecc :=0;
for _ ,_dfde :=range _fecd {if _dfde ==0{_adecc ++;};};_effc :=float64 (_adecc )/float64 (len (_cdaag ));_edge :=_effc <=1.0-_gfdc ;if _ccde {_cc .Log .Info ("\u0061\u006c\u0069\u0067\u006e\u0065\u0064\u003d\u0025\u0074\u0020\u0075\u006em\u0061\u0074\u0063\u0068\u0065\u0064=\u0025\u002e\u0032\u0066\u003d\u0025\u0064\u002f\u0025\u0064\u0020\u0076\u0065c\u0073\u003d\u0025\u0073",_edge ,_effc ,_adecc ,len (_cdaag ),_cdaag .String ());
};return _edge ;};func _eeef (_aacdd map[float64 ]gridTile )[]float64 {_adbga :=make ([]float64 ,0,len (_aacdd ));for _cbgde :=range _aacdd {_adbga =append (_adbga ,_cbgde );};_ef .Float64s (_adbga );return _adbga ;};func (_gdef *wordBag )depthRange (_ccbg ,_eafa int )[]int {var _eeg []int ;
for _ccdg :=range _gdef ._fbdb {if _ccbg <=_ccdg &&_ccdg <=_eafa {_eeg =append (_eeg ,_ccdg );};};if len (_eeg )==0{return nil ;};_ef .Ints (_eeg );return _eeg ;};type textWord struct{_ec .PdfRectangle ;_beef float64 ;_aaaf string ;_baegf []*textMark ;
_cgba float64 ;_afea bool ;};func _febdc (_agcb []float64 ,_gaebc ,_aeeb float64 )[]float64 {_dfadb ,_gdbff :=_gaebc ,_aeeb ;if _gdbff < _dfadb {_dfadb ,_gdbff =_gdbff ,_dfadb ;};_bbbg :=make ([]float64 ,0,len (_agcb )+2);_bbbg =append (_bbbg ,_gaebc );
for _ ,_afbg :=range _agcb {if _afbg <=_dfadb {continue ;}else if _afbg >=_gdbff {break ;};_bbbg =append (_bbbg ,_afbg );};_bbbg =append (_bbbg ,_aeeb );return _bbbg ;};func (_cffa rulingList )removeDuplicates ()rulingList {if len (_cffa )==0{return nil ;
};_cffa .sort ();_accd :=rulingList {_cffa [0]};for _ ,_gbcb :=range _cffa [1:]{if _gbcb .equals (_accd [len (_accd )-1]){continue ;};_accd =append (_accd ,_gbcb );};return _accd ;};func (_aca *textObject )moveTextSetLeading (_defb ,_cacd float64 ){_aca ._gbad ._ffca =-_cacd ;
_aca .moveLP (_defb ,_cacd );};func (_fdfaf rulingList )isActualGrid ()(rulingList ,bool ){_acffd ,_gfdce :=_fdfaf .augmentGrid ();if !(len (_acffd )>=_babfg +1&&len (_gfdce )>=_ceafg +1){if _ccde {_cc .Log .Info ("\u0069s\u0041\u0063t\u0075\u0061\u006c\u0047r\u0069\u0064\u003a \u004e\u006f\u0074\u0020\u0061\u006c\u0069\u0067\u006eed\u002e\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u003c\u0020\u0025d\u0020\u0078 \u0025\u0064",len (_acffd ),len (_gfdce ),_babfg +1,_ceafg +1);
};return nil ,false ;};if _ccde {_cc .Log .Info ("\u0069\u0073\u0041\u0063\u0074\u0075a\u006c\u0047\u0072\u0069\u0064\u003a\u0020\u0025\u0073\u0020\u003a\u0020\u0025t\u0020\u0026\u0020\u0025\u0074\u0020\u2192 \u0025\u0074",_fdfaf ,len (_acffd )>=2,len (_gfdce )>=2,len (_acffd )>=2&&len (_gfdce )>=2);
for _ddfbe ,_gccfe :=range _fdfaf {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0076\u000a",_ddfbe ,_gccfe );};};if _agea {_bedef ,_ebggb :=_acffd [0],_acffd [len (_acffd )-1];_gegaf ,_gabg :=_gfdce [0],_gfdce [len (_gfdce )-1];if !(_dfbab (_bedef ._dedc -_gegaf ._debg )&&_dfbab (_ebggb ._dedc -_gegaf ._abfa )&&_dfbab (_gegaf ._dedc -_bedef ._abfa )&&_dfbab (_gabg ._dedc -_bedef ._debg )){if _ccde {_cc .Log .Info ("\u0069\u0073\u0041\u0063\u0074\u0075\u0061l\u0047\u0072\u0069d\u003a\u0020\u0020N\u006f\u0074 \u0061\u006c\u0069\u0067\u006e\u0065d\u002e\n\t\u0076\u0030\u003d\u0025\u0073\u000a\u0009\u0076\u0031\u003d\u0025\u0073\u000a\u0009\u0068\u0030\u003d\u0025\u0073\u000a\u0009\u0068\u0031\u003d\u0025\u0073",_bedef ,_ebggb ,_gegaf ,_gabg );
};return nil ,false ;};}else {if !_acffd .aligned (){if _fgba {_cc .Log .Info ("i\u0073\u0041\u0063\u0074\u0075\u0061l\u0047\u0072\u0069\u0064\u003a\u0020N\u006f\u0074\u0020\u0061\u006c\u0069\u0067n\u0065\u0064\u0020\u0076\u0065\u0072\u0074\u0073\u002e\u0020%\u0064",len (_acffd ));
};return nil ,false ;};if !_gfdce .aligned (){if _ccde {_cc .Log .Info ("i\u0073\u0041\u0063\u0074\u0075\u0061l\u0047\u0072\u0069\u0064\u003a\u0020N\u006f\u0074\u0020\u0061\u006c\u0069\u0067n\u0065\u0064\u0020\u0068\u006f\u0072\u007a\u0073\u002e\u0020%\u0064",len (_gfdce ));
};return nil ,false ;};};_cgae :=append (_acffd ,_gfdce ...);return _cgae ,true ;};
// String returns a description of `t`.
func (_fefbg *textTable )String ()string {return _a .Sprintf ("\u0025\u0064\u0020\u0078\u0020\u0025\u0064\u0020\u0025\u0074",_fefbg ._ecfcf ,_fefbg ._bbgb ,_fefbg ._bgdge );};func (_afad paraList )xNeighbours (_deecd float64 )map[*textPara ][]int {_ebdb :=make ([]event ,2*len (_afad ));
if _deecd ==0{for _bafb ,_eccg :=range _afad {_ebdb [2*_bafb ]=event {_eccg .Llx ,true ,_bafb };_ebdb [2*_bafb +1]=event {_eccg .Urx ,false ,_bafb };};}else {for _gagg ,_efegf :=range _afad {_ebdb [2*_gagg ]=event {_efegf .Llx -_deecd *_efegf .fontsize (),true ,_gagg };
_ebdb [2*_gagg +1]=event {_efegf .Urx +_deecd *_efegf .fontsize (),false ,_gagg };};};return _afad .eventNeighbours (_ebdb );};func (_faac *PageText )computeViews (){var _baaf rulingList ;if _fcfb {_dfge :=_efdc (_faac ._bdea );_baaf =append (_baaf ,_dfge ...);
};if _bedf {_adef :=_cccf (_faac ._fda );_baaf =append (_baaf ,_adef ...);};_baaf ,_cadb :=_baaf .toTilings ();var _dfb paraList ;_dbeca :=len (_faac ._dggc );for _gbbd :=0;_gbbd < 360&&_dbeca > 0;_gbbd +=90{_eaa :=make ([]*textMark ,0,len (_faac ._dggc )-_dbeca );
for _ ,_cdag :=range _faac ._dggc {if _cdag ._ddcb ==_gbbd {_eaa =append (_eaa ,_cdag );};};if len (_eaa )> 0{_gefb :=_ffdfd (_eaa ,_faac ._gef ,_baaf ,_cadb );_dfb =append (_dfb ,_gefb ...);_dbeca -=len (_eaa );};};_efa :=new (_fb .Buffer );_dfb .writeText (_efa );
_faac ._ddab =_efa .String ();_faac ._dgaa =_dfb .toTextMarks ();_faac ._efd =_dfb .tables ();if _gdbf {_cc .Log .Info ("\u0063\u006f\u006dpu\u0074\u0065\u0056\u0069\u0065\u0077\u0073\u003a\u0020\u0074\u0061\u0062\u006c\u0065\u0073\u003d\u0025\u0064",len (_faac ._efd ));
};};func (_bfba rulingList )snapToGroupsDirection ()rulingList {_bfba .sortStrict ();_edee :=make (map[*ruling ]rulingList ,len (_bfba ));_aafd :=_bfba [0];_bcbba :=func (_afbb *ruling ){_aafd =_afbb ;_edee [_aafd ]=rulingList {_afbb }};_bcbba (_bfba [0]);
for _ ,_gbfbf :=range _bfba [1:]{if _gbfbf ._dedc < _aafd ._dedc -_gccfc {_cc .Log .Error ("\u0073\u006e\u0061\u0070T\u006f\u0047\u0072\u006f\u0075\u0070\u0073\u0044\u0069r\u0065\u0063\u0074\u0069\u006f\u006e\u003a\u0020\u0057\u0072\u006f\u006e\u0067\u0020\u0070\u0072\u0069\u006da\u0072\u0079\u0020\u006f\u0072d\u0065\u0072\u002e\u000a\u0009\u0076\u0030\u003d\u0025\u0073\u000a\u0009\u0020\u0076\u003d\u0025\u0073",_aafd ,_gbfbf );
};if _gbfbf ._dedc > _aafd ._dedc +_dfbb {_bcbba (_gbfbf );}else {_edee [_aafd ]=append (_edee [_aafd ],_gbfbf );};};_begdg :=make (map[*ruling ]float64 ,len (_edee ));_bfeb :=make (map[*ruling ]*ruling ,len (_bfba ));for _beffe ,_gedc :=range _edee {_begdg [_beffe ]=_gedc .mergePrimary ();
for _ ,_bbcc :=range _gedc {_bfeb [_bbcc ]=_beffe ;};};for _ ,_fbfcb :=range _bfba {_fbfcb ._dedc =_begdg [_bfeb [_fbfcb ]];};_defca :=make (rulingList ,0,len (_bfba ));for _ ,_gead :=range _edee {_ffee :=_gead .splitSec ();for _defea ,_dgdae :=range _ffee {_gggcb :=_dgdae .merge ();
if len (_defca )> 0{_beeg :=_defca [len (_defca )-1];if _beeg .alignsPrimary (_gggcb )&&_beeg .alignsSec (_gggcb ){_cc .Log .Error ("\u0073\u006e\u0061\u0070\u0054\u006fG\u0072\u006f\u0075\u0070\u0073\u0044\u0069\u0072\u0065\u0063\u0074\u0069\u006f\u006e\u003a\u0020\u0044\u0075\u0070\u006ci\u0063\u0061\u0074\u0065\u0020\u0069\u003d\u0025\u0064\u000a\u0009\u0077\u003d\u0025s\u000a\t\u0076\u003d\u0025\u0073",_defea ,_beeg ,_gggcb );
continue ;};};_defca =append (_defca ,_gggcb );};};_defca .sortStrict ();return _defca ;};func (_acda *textMark )inDiacriticArea (_egdd *textMark )bool {_cgfd :=_acda .Llx -_egdd .Llx ;_debd :=_acda .Urx -_egdd .Urx ;_edbd :=_acda .Lly -_egdd .Lly ;return _fg .Abs (_cgfd +_debd )< _acda .Width ()*_gddb &&_fg .Abs (_edbd )< _acda .Height ()*_gddb ;
};func (_fbfcc *textObject )newTextMark (_efed string ,_cdefg _dg .Matrix ,_fdgba _dg .Point ,_gcca float64 ,_gbgf *_ec .PdfFont ,_dbff float64 ,_ccfbd ,_acaf _g .Color )(textMark ,bool ){_dbbc :=_cdefg .Angle ();_dfgf :=_agdd (_dbbc ,_fcabg );var _gccb float64 ;
if _dfgf %180!=90{_gccb =_cdefg .ScalingFactorY ();}else {_gccb =_cdefg .ScalingFactorX ();};_aabd :=_aebb (_cdefg );_dbbcc :=_ec .PdfRectangle {Llx :_aabd .X ,Lly :_aabd .Y ,Urx :_fdgba .X ,Ury :_fdgba .Y };switch _dfgf %360{case 90:_dbbcc .Urx -=_gccb ;
case 180:_dbbcc .Ury -=_gccb ;case 270:_dbbcc .Urx +=_gccb ;case 0:_dbbcc .Ury +=_gccb ;default:_dfgf =0;_dbbcc .Ury +=_gccb ;};if _dbbcc .Llx > _dbbcc .Urx {_dbbcc .Llx ,_dbbcc .Urx =_dbbcc .Urx ,_dbbcc .Llx ;};if _dbbcc .Lly > _dbbcc .Ury {_dbbcc .Lly ,_dbbcc .Ury =_dbbcc .Ury ,_dbbcc .Lly ;
};_dca ,_bfce :=_gebf (_dbbcc ,_fbfcc ._faa ._ca );if !_bfce {_cc .Log .Debug ("\u0054\u0065\u0078\u0074\u0020m\u0061\u0072\u006b\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0070a\u0067\u0065\u002e\u0020\u0062\u0062\u006f\u0078\u003d\u0025\u0067\u0020\u006d\u0065\u0064\u0069\u0061\u0042\u006f\u0078\u003d\u0025\u0067\u0020\u0074\u0065\u0078\u0074\u003d\u0025q",_dbbcc ,_fbfcc ._faa ._ca ,_efed );
};_dbbcc =_dca ;_dege :=_dbbcc ;_ece :=_fbfcc ._faa ._ca ;switch _dfgf %360{case 90:_ece .Urx ,_ece .Ury =_ece .Ury ,_ece .Urx ;_dege =_ec .PdfRectangle {Llx :_ece .Urx -_dbbcc .Ury ,Urx :_ece .Urx -_dbbcc .Lly ,Lly :_dbbcc .Llx ,Ury :_dbbcc .Urx };case 180:_dege =_ec .PdfRectangle {Llx :_ece .Urx -_dbbcc .Llx ,Urx :_ece .Urx -_dbbcc .Urx ,Lly :_ece .Ury -_dbbcc .Lly ,Ury :_ece .Ury -_dbbcc .Ury };
case 270:_ece .Urx ,_ece .Ury =_ece .Ury ,_ece .Urx ;_dege =_ec .PdfRectangle {Llx :_dbbcc .Ury ,Urx :_dbbcc .Lly ,Lly :_ece .Ury -_dbbcc .Llx ,Ury :_ece .Ury -_dbbcc .Urx };};if _dege .Llx > _dege .Urx {_dege .Llx ,_dege .Urx =_dege .Urx ,_dege .Llx ;
};if _dege .Lly > _dege .Ury {_dege .Lly ,_dege .Ury =_dege .Ury ,_dege .Lly ;};_ebde :=textMark {_fcbe :_efed ,PdfRectangle :_dege ,_adbb :_dbbcc ,_cccg :_gbgf ,_dbce :_gccb ,_efaa :_dbff ,_feea :_cdefg ,_afg :_fdgba ,_ddcb :_dfgf ,_cdg :_ccfbd ,_adgc :_acaf };
if _fdgbg {_cc .Log .Info ("n\u0065\u0077\u0054\u0065\u0078\u0074M\u0061\u0072\u006b\u003a\u0020\u0073t\u0061\u0072\u0074\u003d\u0025\u002e\u0032f\u0020\u0065\u006e\u0064\u003d\u0025\u002e\u0032\u0066\u0020%\u0073",_aabd ,_fdgba ,_ebde .String ());};return _ebde ,_bfce ;
};func _gbcg (_dafa string )bool {if _eb .RuneCountInString (_dafa )< _gcbe {return false ;};_bfcd ,_ceg :=_eb .DecodeLastRuneInString (_dafa );if _ceg <=0||!_f .Is (_f .Hyphen ,_bfcd ){return false ;};_bfcd ,_ceg =_eb .DecodeLastRuneInString (_dafa [:len (_dafa )-_ceg ]);
return _ceg > 0&&!_f .IsSpace (_bfcd );};func (_dgcdb *textWord )appendMark (_agdb *textMark ,_dccde _ec .PdfRectangle ){_dgcdb ._baegf =append (_dgcdb ._baegf ,_agdb );_dgcdb .PdfRectangle =_egfc (_dgcdb .PdfRectangle ,_agdb .PdfRectangle );if _agdb ._dbce > _dgcdb ._cgba {_dgcdb ._cgba =_agdb ._dbce ;
};_dgcdb ._beef =_dccde .Ury -_dgcdb .PdfRectangle .Lly ;};
// String returns a string describing `tm`.
func (_ebac TextMark )String ()string {_fgc :=_ebac .BBox ;var _eec string ;if _ebac .Font !=nil {_eec =_ebac .Font .String ();if len (_eec )> 50{_eec =_eec [:50]+"\u002e\u002e\u002e";};};var _ebgg string ;if _ebac .Meta {_ebgg ="\u0020\u002a\u004d\u002a";
};return _a .Sprintf ("\u007b\u0054\u0065\u0078t\u004d\u0061\u0072\u006b\u003a\u0020\u0025\u0064\u0020%\u0071\u003d\u0025\u0030\u0032\u0078\u0020\u0028\u0025\u0036\u002e\u0032\u0066\u002c\u0020\u0025\u0036\u002e2\u0066\u0029\u0020\u0028\u00256\u002e\u0032\u0066\u002c\u0020\u0025\u0036\u002e\u0032\u0066\u0029\u0020\u0025\u0073\u0025\u0073\u007d",_ebac .Offset ,_ebac .Text ,[]rune (_ebac .Text ),_fgc .Llx ,_fgc .Lly ,_fgc .Urx ,_fgc .Ury ,_eec ,_ebgg );
};func (_addb *textObject )showText (_fac []byte )error {return _addb .renderText (_fac )};func _bfeg (_baef _ec .PdfRectangle )rulingKind {_gbee :=_baef .Width ();_eddea :=_baef .Height ();if _gbee > _eddea {if _gbee >=_cbgb {return _aagf ;};}else {if _eddea >=_cbgb {return _bcgg ;
};};return _ggad ;};func (_eag *textObject )getFontDict (_bggd string )(_fbb _fd .PdfObject ,_abe error ){_fffe :=_eag ._bed ;if _fffe ==nil {_cc .Log .Debug ("g\u0065\u0074\u0046\u006f\u006e\u0074D\u0069\u0063\u0074\u002e\u0020\u004eo\u0020\u0072\u0065\u0073\u006f\u0075\u0072c\u0065\u0073\u002e\u0020\u006e\u0061\u006d\u0065\u003d\u0025#\u0071",_bggd );
return nil ,nil ;};_fbb ,_abca :=_fffe .GetFontByName (_fd .PdfObjectName (_bggd ));if !_abca {_cc .Log .Debug ("\u0045R\u0052\u004fR\u003a\u0020\u0067\u0065t\u0046\u006f\u006et\u0044\u0069\u0063\u0074\u003a\u0020\u0046\u006f\u006et \u006e\u006f\u0074 \u0066\u006fu\u006e\u0064\u003a\u0020\u006e\u0061m\u0065\u003d%\u0023\u0071",_bggd );
return nil ,_b .New ("f\u006f\u006e\u0074\u0020no\u0074 \u0069\u006e\u0020\u0072\u0065s\u006f\u0075\u0072\u0063\u0065\u0073");};return _fbb ,nil ;};const (_dbegf =false ;_fdgbg =false ;_eded =false ;_fbgd =false ;_bgec =false ;_ffda =false ;_ebdf =false ;
_ggee =false ;_bdcb =false ;_afcdc =_bdcb &&true ;_fdc =_afcdc &&false ;_bcf =_bdcb &&true ;_gdbf =false ;_fgfd =_gdbf &&false ;_fad =_gdbf &&true ;_ccde =false ;_baaff =_ccde &&false ;_fgba =_ccde &&false ;_badda =_ccde &&true ;_gbce =_ccde &&false ;_cbec =_ccde &&false ;
);func _efdc (_fded []pathSection )rulingList {_cbcb (_fded );if _ccde {_cc .Log .Info ("\u006d\u0061k\u0065\u0053\u0074\u0072\u006f\u006b\u0065\u0052\u0075\u006c\u0069\u006e\u0067\u0073\u003a\u0020\u0025\u0064\u0020\u0073\u0074\u0072ok\u0065\u0073",len (_fded ));
};var _adgd rulingList ;for _ ,_dgebf :=range _fded {for _ ,_bbcb :=range _dgebf ._gfcc {if len (_bbcb ._bgga )< 2{continue ;};_adcg :=_bbcb ._bgga [0];for _ ,_afefa :=range _bbcb ._bgga [1:]{if _gebcf ,_ebabec :=_defa (_adcg ,_afefa ,_dgebf .Color );_ebabec {_adgd =append (_adgd ,_gebcf );
};_adcg =_afefa ;};};};if _ccde {_cc .Log .Info ("m\u0061\u006b\u0065\u0053tr\u006fk\u0065\u0052\u0075\u006c\u0069n\u0067\u0073\u003a\u0020\u0025\u0073",_adgd );};return _adgd ;};func (_eaba *textLine )bbox ()_ec .PdfRectangle {return _eaba .PdfRectangle };
func (_gca *imageExtractContext )extractContentStreamImages (_fba string ,_gg *_ec .PdfPageResources )error {_ga :=_af .NewContentStreamParser (_fba );_ag ,_be :=_ga .Parse ();if _be !=nil {return _be ;};if _gca ._cbe ==nil {_gca ._cbe =map[*_fd .PdfObjectStream ]*cachedImage {};
};if _gca ._ab ==nil {_gca ._ab =&ImageExtractOptions {};};_fdb :=_af .NewContentStreamProcessor (*_ag );_fdb .AddHandler (_af .HandlerConditionEnumAllOperands ,"",_gca .processOperand );return _fdb .Process (_gg );};
// BBox returns the smallest axis-aligned rectangle that encloses all the TextMarks in `ma`.
func (_gaf *TextMarkArray )BBox ()(_ec .PdfRectangle ,bool ){var _ggaa _ec .PdfRectangle ;_faf :=false ;for _ ,_affc :=range _gaf ._bccg {if _affc .Meta ||_gdfge (_affc .Text ){continue ;};if _faf {_ggaa =_egfc (_ggaa ,_affc .BBox );}else {_ggaa =_affc .BBox ;
_faf =true ;};};return _ggaa ,_faf ;};func (_gcge paraList )log (_dagb string ){if !_ggee {return ;};_cc .Log .Info ("%\u0038\u0073\u003a\u0020\u0025\u0064 \u0070\u0061\u0072\u0061\u0073\u0020=\u003d\u003d\u003d\u003d\u003d\u003d\u002d-\u002d\u002d\u002d\u002d\u002d\u003d\u003d\u003d\u003d\u003d=\u003d",_dagb ,len (_gcge ));
for _fgad ,_gbac :=range _gcge {if _gbac ==nil {continue ;};_fcbg :=_gbac .text ();_babfc :="\u0020\u0020";if _gbac ._ecfce !=nil {_babfc =_a .Sprintf ("\u005b%\u0064\u0078\u0025\u0064\u005d",_gbac ._ecfce ._ecfcf ,_gbac ._ecfce ._bbgb );};_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u0025s\u0020\u0025\u0071\u000a",_fgad ,_gbac .PdfRectangle ,_babfc ,_fdba (_fcbg ,50));
};};func (_fdcg paraList )applyTables (_bdfbd []*textTable )paraList {var _cgedg paraList ;for _ ,_gcbdf :=range _bdfbd {_cgedg =append (_cgedg ,_gcbdf .newTablePara ());};for _ ,_bfbb :=range _fdcg {if _bfbb ._ebgd {continue ;};_cgedg =append (_cgedg ,_bfbb );
};return _cgedg ;};func _eddcc (_cfed []*textWord ,_eeaee *textWord )[]*textWord {for _ebbd ,_bdbg :=range _cfed {if _bdbg ==_eeaee {return _bdgaf (_cfed ,_ebbd );};};_cc .Log .Error ("\u0072\u0065\u006d\u006f\u0076e\u0057\u006f\u0072\u0064\u003a\u0020\u0077\u006f\u0072\u0064\u0073\u0020\u0064o\u0065\u0073\u006e\u0027\u0074\u0020\u0063\u006f\u006e\u0074\u0061\u0069\u006e\u0020\u0077\u006f\u0072\u0064\u003d\u0025\u0073",_eeaee );
return nil ;};func (_ffba paraList )lines ()[]*textLine {var _fgbe []*textLine ;for _ ,_babdc :=range _ffba {_fgbe =append (_fgbe ,_babdc ._dagfb ...);};return _fgbe ;};
// String returns a description of `w`.
func (_cfbf *textWord )String ()string {return _a .Sprintf ("\u0025\u002e2\u0066\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065\u003d\u0025\u002e\u0032\u0066\u0020\"%\u0073\u0022",_cfbf ._beef ,_cfbf .PdfRectangle ,_cfbf ._cgba ,_cfbf ._aaaf );
};func _cggc (_dfba ,_aead bounded )float64 {return _dfba .bbox ().Llx -_aead .bbox ().Llx };func _efcbfaf (_cedc []compositeCell )[]float64 {var _effa []*textLine ;_cfegc :=0;for _ ,_gcea :=range _cedc {_cfegc +=len (_gcea .paraList );_effa =append (_effa ,_gcea .lines ()...);
};_ef .Slice (_effa ,func (_bcad ,_bagdf int )bool {_baafeb ,_edfg :=_effa [_bcad ],_effa [_bagdf ];_fafd ,_baeg :=_baafeb ._agfa ,_edfg ._agfa ;if !_bdbcg (_fafd -_baeg ){return _fafd < _baeg ;};return _baafeb .Llx < _edfg .Llx ;});if _gdbf {_a .Printf ("\u0020\u0020\u0020 r\u006f\u0077\u0042\u006f\u0072\u0064\u0065\u0072\u0073:\u0020%\u0064 \u0070a\u0072\u0061\u0073\u0020\u0025\u0064\u0020\u006c\u0069\u006e\u0065\u0073\u000a",_cfegc ,len (_effa ));
for _ggfc ,_cddb :=range _effa {_a .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_ggfc ,_cddb );};};var _gecea []float64 ;_eeae :=_effa [0];var _cffd [][]*textLine ;_daeec :=[]*textLine {_eeae };for _eebb ,_ecdgd :=range _effa [1:]{if _ecdgd .Ury < _eeae .Lly {_bbfc :=0.5*(_ecdgd .Ury +_eeae .Lly );
if _gdbf {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u003c\u0020\u0025\u0036.\u0032f\u0020\u0062\u006f\u0072\u0064\u0065\u0072\u003d\u0025\u0036\u002e\u0032\u0066\u000a"+"\u0009\u0020\u0071\u003d\u0025\u0073\u000a\u0009\u0020p\u003d\u0025\u0073\u000a",_eebb ,_ecdgd .Ury ,_eeae .Lly ,_bbfc ,_eeae ,_ecdgd );
};_gecea =append (_gecea ,_bbfc );_cffd =append (_cffd ,_daeec );_daeec =nil ;};_daeec =append (_daeec ,_ecdgd );if _ecdgd .Lly < _eeae .Lly {_eeae =_ecdgd ;};};if len (_daeec )> 0{_cffd =append (_cffd ,_daeec );};if _gdbf {_a .Printf (" \u0020\u0020\u0020\u0020\u0020\u0020 \u0072\u006f\u0077\u0043\u006f\u0072\u0072\u0069\u0064o\u0072\u0073\u003d%\u0036.\u0032\u0066\u000a",_gecea );
};if _gdbf {_cc .Log .Info ("\u0072\u006f\u0077\u003d\u0025\u0064",len (_cedc ));for _eafe ,_ccbeb :=range _cedc {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_eafe ,_ccbeb );};_cc .Log .Info ("\u0067r\u006f\u0075\u0070\u0073\u003d\u0025d",len (_cffd ));
for _bdfea ,_cefg :=range _cffd {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0064\u000a",_bdfea ,len (_cefg ));for _ceba ,_bcbdc :=range _cefg {_a .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_ceba ,_bcbdc );};};};_bdce :=true ;for _dgfda ,_gcbgc :=range _cffd {_egcg :=true ;
for _cfab ,_edaga :=range _cedc {if _gdbf {_a .Printf ("\u0020\u0020\u0020\u007e\u007e\u007e\u0067\u0072\u006f\u0075\u0070\u0020\u0025\u0064\u0020\u006f\u0066\u0020\u0025\u0064\u0020\u0063\u0065\u006cl\u0020\u0025\u0064\u0020\u006ff\u0020\u0025d\u0020\u0025\u0073\u000a",_dgfda ,len (_cffd ),_cfab ,len (_cedc ),_edaga );
};if !_edaga .hasLines (_gcbgc ){if _gdbf {_a .Printf ("\u0020\u0020\u0020\u0021\u0021\u0021\u0067\u0072\u006f\u0075\u0070\u0020\u0025d\u0020\u006f\u0066\u0020\u0025\u0064 \u0063\u0065\u006c\u006c\u0020\u0025\u0064\u0020\u006f\u0066\u0020\u0025\u0064 \u004f\u0055\u0054\u000a",_dgfda ,len (_cffd ),_cfab ,len (_cedc ));
};_egcg =false ;break ;};};if !_egcg {_bdce =false ;break ;};};if !_bdce {if _gdbf {_cc .Log .Info ("\u0072\u006f\u0077\u0020\u0063o\u0072\u0072\u0069\u0064\u006f\u0072\u0073\u0020\u0064\u006f\u006e\u0027\u0074 \u0073\u0070\u0061\u006e\u0020\u0061\u006c\u006c\u0020\u0063\u0065\u006c\u006c\u0073\u0020\u0069\u006e\u0020\u0072\u006f\u0077\u002e\u0020\u0069\u0067\u006e\u006f\u0072\u0069\u006eg");
};_gecea =nil ;};if _gdbf &&_gecea !=nil {_a .Printf ("\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u002a\u002a*\u0072\u006f\u0077\u0043\u006f\u0072\u0072i\u0064\u006f\u0072\u0073\u003d\u0025\u0036\u002e\u0032\u0066\u000a",_gecea );};return _gecea ;
};func (_ceed *textMark )bbox ()_ec .PdfRectangle {return _ceed .PdfRectangle };func (_bga *textObject )setWordSpacing (_gdbb float64 ){if _bga ==nil {return ;};_bga ._gbad ._bca =_gdbb ;};
// Append appends `mark` to the mark array.
func (_feeb *TextMarkArray )Append (mark TextMark ){_feeb ._bccg =append (_feeb ._bccg ,mark )};func (_bfcca *textPara )writeText (_dffcb _d .Writer ){if _bfcca ._ecfce ==nil {_bfcca .writeCellText (_dffcb );return ;};for _bcga :=0;_bcga < _bfcca ._ecfce ._bbgb ;
_bcga ++{for _gfdg :=0;_gfdg < _bfcca ._ecfce ._ecfcf ;_gfdg ++{_aadg :=_bfcca ._ecfce .get (_gfdg ,_bcga );if _aadg ==nil {_dffcb .Write ([]byte ("\u0009"));}else {_aadg .writeCellText (_dffcb );};_dffcb .Write ([]byte ("\u0020"));};if _bcga < _bfcca ._ecfce ._bbgb -1{_dffcb .Write ([]byte ("\u000a"));
};};};func (_gcbf *textTable )toTextTable ()TextTable {if _gdbf {_cc .Log .Info ("t\u006fT\u0065\u0078\u0074\u0054\u0061\u0062\u006c\u0065:\u0020\u0025\u0064\u0020x \u0025\u0064",_gcbf ._ecfcf ,_gcbf ._bbgb );};_gfage :=make ([][]TableCell ,_gcbf ._bbgb );
for _efde :=0;_efde < _gcbf ._bbgb ;_efde ++{_gfage [_efde ]=make ([]TableCell ,_gcbf ._ecfcf );for _baba :=0;_baba < _gcbf ._ecfcf ;_baba ++{_cgbd :=_gcbf .get (_baba ,_efde );if _cgbd ==nil {continue ;};if _gdbf {_a .Printf ("\u0025\u0034\u0064 \u0025\u0032\u0064\u003a\u0020\u0025\u0073\u000a",_baba ,_efde ,_cgbd );
};_gfage [_efde ][_baba ].Text =_cgbd .text ();_cbbgd :=0;_gfage [_efde ][_baba ].Marks ._bccg =_cgbd .toTextMarks (&_cbbgd );};};return TextTable {W :_gcbf ._ecfcf ,H :_gcbf ._bbgb ,Cells :_gfage };};func _bdgaf (_deae []*textWord ,_adaf int )[]*textWord {_acfb :=len (_deae );
copy (_deae [_adaf :],_deae [_adaf +1:]);return _deae [:_acfb -1];};func _eggcd (_bgbe _ec .PdfRectangle ,_egcb ,_cbga ,_dece ,_fcfbg *ruling )gridTile {_accdg :=_bgbe .Llx ;_badfa :=_bgbe .Urx ;_fdga :=_bgbe .Lly ;_decfc :=_bgbe .Ury ;return gridTile {PdfRectangle :_bgbe ,_gdad :_egcb !=nil &&_egcb .encloses (_fdga ,_decfc ),_abfb :_cbga !=nil &&_cbga .encloses (_fdga ,_decfc ),_ebabg :_dece !=nil &&_dece .encloses (_accdg ,_badfa ),_bggdg :_fcfbg !=nil &&_fcfbg .encloses (_accdg ,_badfa )};
};func (_agfe *wordBag )arrangeText ()*textPara {_agfe .sort ();if _aege {_agfe .removeDuplicates ();};var _fdcd []*textLine ;for _ ,_bbdea :=range _agfe .depthIndexes (){for !_agfe .empty (_bbdea ){_gabf :=_agfe .firstReadingIndex (_bbdea );_cdcdc :=_agfe .firstWord (_gabf );
_abbg :=_edbg (_agfe ,_gabf );_beab :=_cdcdc ._cgba ;_cggga :=_cdcdc ._beef -_egega *_beab ;_bgbb :=_cdcdc ._beef +_egega *_beab ;_badc :=_fggc *_beab ;_bcbb :=_abfd *_beab ;_gcec :for {var _fdbde *textWord ;_ageab :=0;for _ ,_agaa :=range _agfe .depthBand (_cggga ,_bgbb ){_gdeb :=_agfe .highestWord (_agaa ,_cggga ,_bgbb );
if _gdeb ==nil {continue ;};_fffcg :=_egaf (_gdeb ,_abbg ._aece [len (_abbg ._aece )-1]);if _fffcg < -_bcbb {break _gcec ;};if _fffcg > _badc {continue ;};if _fdbde !=nil &&_cggc (_gdeb ,_fdbde )>=0{continue ;};_fdbde =_gdeb ;_ageab =_agaa ;};if _fdbde ==nil {break ;
};_abbg .pullWord (_agfe ,_fdbde ,_ageab );};_abbg .markWordBoundaries ();_fdcd =append (_fdcd ,_abbg );};};if len (_fdcd )==0{return nil ;};_ef .Slice (_fdcd ,func (_abcgb ,_bfbd int )bool {return _fffeg (_fdcd [_abcgb ],_fdcd [_bfbd ])< 0});_gbfg :=_eegg (_agfe .PdfRectangle ,_fdcd );
if _bdcb {_cc .Log .Info ("\u0061\u0072\u0072an\u0067\u0065\u0054\u0065\u0078\u0074\u0020\u0021\u0021\u0021\u0020\u0070\u0061\u0072\u0061\u003d\u0025\u0073",_gbfg .String ());if _afcdc {for _afabg ,_cgbg :=range _gbfg ._dagfb {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_afabg ,_cgbg .String ());
if _fdc {for _egebe ,_dgca :=range _cgbg ._aece {_a .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_egebe ,_dgca .String ());for _ddde ,_degc :=range _dgca ._baegf {_a .Printf ("\u00251\u0032\u0064\u003a\u0020\u0025\u0073\n",_ddde ,_degc .String ());
};};};};};};return _gbfg ;};func (_gbcdd *textLine )appendWord (_fbfc *textWord ){_gbcdd ._aece =append (_gbcdd ._aece ,_fbfc );_gbcdd .PdfRectangle =_egfc (_gbcdd .PdfRectangle ,_fbfc .PdfRectangle );if _fbfc ._cgba > _gbcdd ._deab {_gbcdd ._deab =_fbfc ._cgba ;
};if _fbfc ._beef > _gbcdd ._agfa {_gbcdd ._agfa =_fbfc ._beef ;};};const (_dbfa =true ;_aege =true ;_gfec =true ;_gddg =false ;_gfef =false ;_ebec =6;_fbfbg =3.0;_bcaf =200;_gaeg =true ;_afa =true ;_fcfb =true ;_bedf =true ;_agea =false ;);func _cccf (_dagbd []pathSection )rulingList {_cbcb (_dagbd );
if _ccde {_cc .Log .Info ("\u006da\u006b\u0065\u0046\u0069l\u006c\u0052\u0075\u006c\u0069n\u0067s\u003a \u0025\u0064\u0020\u0066\u0069\u006c\u006cs",len (_dagbd ));};var _fdfe rulingList ;for _ ,_bdcd :=range _dagbd {for _ ,_ceeaa :=range _bdcd ._gfcc {if !_ceeaa .isQuadrilateral (){if _ccde {_cc .Log .Error ("!\u0069s\u0051\u0075\u0061\u0064\u0072\u0069\u006c\u0061t\u0065\u0072\u0061\u006c: \u0025\u0073",_ceeaa );
};continue ;};if _dgba ,_dgag :=_ceeaa .makeRectRuling (_bdcd .Color );_dgag {_fdfe =append (_fdfe ,_dgba );}else {if _gbce {_cc .Log .Error ("\u0021\u006d\u0061\u006beR\u0065\u0063\u0074\u0052\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0025\u0073",_ceeaa );
};};};};if _ccde {_cc .Log .Info ("\u006d\u0061\u006b\u0065Fi\u006c\u006c\u0052\u0075\u006c\u0069\u006e\u0067\u0073\u003a\u0020\u0025\u0073",_fdfe .String ());};return _fdfe ;};func (_bfc *textObject )setFont (_abae string ,_cdb float64 )error {if _bfc ==nil {return nil ;
};_bfc ._gbad ._eab =_cdb ;_baa ,_bae :=_bfc .getFont (_abae );if _bae !=nil {return _bae ;};_bfc ._gbad ._fgd =_baa ;if _bfc ._deac .empty (){_bfc ._deac .push (_bfc ._gbad );}else {_bfc ._deac .top ()._fgd =_bfc ._gbad ._fgd ;};return nil ;};func _ggab (_baafe ,_cedfc float64 )bool {return _fg .Abs (_baafe -_cedfc )<=_bccea };
func (_eedec *ruling )alignsPrimary (_gccgf *ruling )bool {return _eedec ._ecef ==_gccgf ._ecef &&_fg .Abs (_eedec ._dedc -_gccgf ._dedc )< _dfbb *0.5;};
// TextMarkArray is a collection of TextMarks.
type TextMarkArray struct{_bccg []TextMark };func (_fdfb *subpath )close (){if !_cccd (_fdfb ._bgga [0],_fdfb .last ()){_fdfb .add (_fdfb ._bgga [0]);};_fdfb ._dgb =true ;_fdfb .removeDuplicates ();};func (_gaag lineRuling )xMean ()float64 {return 0.5*(_gaag ._dacb .X +_gaag ._dfgec .X )};
func (_afbfa rulingList )findPrimSec (_agde ,_facc float64 )*ruling {for _ ,_gddeb :=range _afbfa {if _bdbcg (_gddeb ._dedc -_agde )&&_gddeb ._debg -_bccea <=_facc &&_facc <=_gddeb ._abfa +_bccea {return _gddeb ;};};return nil ;};
// String returns a string describing the current state of the textState stack.
func (_bgf *stateStack )String ()string {_dcgd :=[]string {_a .Sprintf ("\u002d\u002d\u002d\u002d f\u006f\u006e\u0074\u0020\u0073\u0074\u0061\u0063\u006b\u003a\u0020\u0025\u0064",len (*_bgf ))};for _fde ,_ccf :=range *_bgf {_ced :="\u003c\u006e\u0069l\u003e";
if _ccf !=nil {_ced =_ccf .String ();};_dcgd =append (_dcgd ,_a .Sprintf ("\u0009\u0025\u0032\u0064\u003a\u0020\u0025\u0073",_fde ,_ced ));};return _bg .Join (_dcgd ,"\u000a");};func (_ebee *wordBag )removeWord (_eae *textWord ,_gbcd int ){_dgee :=_ebee ._fbdb [_gbcd ];
_dgee =_eddcc (_dgee ,_eae );if len (_dgee )==0{delete (_ebee ._fbdb ,_gbcd );}else {_ebee ._fbdb [_gbcd ]=_dgee ;};};func _gcb (_aecb _ec .PdfRectangle ,_cbcc bounded )float64 {return _aecb .Ury -_cbcc .bbox ().Lly };func (_gdde lineRuling )asRuling ()(*ruling ,bool ){_dccb :=ruling {_ecef :_gdde ._degd ,Color :_gdde .Color ,_dcfg :_gdeg };
switch _gdde ._degd {case _bcgg :_dccb ._dedc =_gdde .xMean ();_dccb ._debg =_fg .Min (_gdde ._dacb .Y ,_gdde ._dfgec .Y );_dccb ._abfa =_fg .Max (_gdde ._dacb .Y ,_gdde ._dfgec .Y );case _aagf :_dccb ._dedc =_gdde .yMean ();_dccb ._debg =_fg .Min (_gdde ._dacb .X ,_gdde ._dfgec .X );
_dccb ._abfa =_fg .Max (_gdde ._dacb .X ,_gdde ._dfgec .X );default:_cc .Log .Error ("\u0062\u0061\u0064\u0020pr\u0069\u006d\u0061\u0072\u0079\u0020\u006b\u0069\u006e\u0064\u003d\u0025\u0064",_gdde ._degd );return nil ,false ;};return &_dccb ,true ;};func _gebf (_cec ,_adfd _ec .PdfRectangle )(_ec .PdfRectangle ,bool ){if !_ffbg (_cec ,_adfd ){return _ec .PdfRectangle {},false ;
};return _ec .PdfRectangle {Llx :_fg .Max (_cec .Llx ,_adfd .Llx ),Urx :_fg .Min (_cec .Urx ,_adfd .Urx ),Lly :_fg .Max (_cec .Lly ,_adfd .Lly ),Ury :_fg .Min (_cec .Ury ,_adfd .Ury )},true ;};func (_efga *imageExtractContext )extractInlineImage (_cba *_af .ContentStreamInlineImage ,_aee _af .GraphicsState ,_dc *_ec .PdfPageResources )error {_bce ,_ad :=_cba .ToImage (_dc );
if _ad !=nil {return _ad ;};_fbc ,_ad :=_cba .GetColorSpace (_dc );if _ad !=nil {return _ad ;};if _fbc ==nil {_fbc =_ec .NewPdfColorspaceDeviceGray ();};_fbgb ,_ad :=_fbc .ImageToRGB (*_bce );if _ad !=nil {return _ad ;};_gdd :=ImageMark {Image :&_fbgb ,Width :_aee .CTM .ScalingFactorX (),Height :_aee .CTM .ScalingFactorY (),Angle :_aee .CTM .Angle ()};
_gdd .X ,_gdd .Y =_aee .CTM .Translation ();_efga ._gde =append (_efga ._gde ,_gdd );_efga ._gcf ++;return nil ;};func (_bfgc *textWord )computeText ()string {_eabaf :=make ([]string ,len (_bfgc ._baegf ));for _eacfg ,_ebgad :=range _bfgc ._baegf {_eabaf [_eacfg ]=_ebgad ._fcbe ;
};return _bg .Join (_eabaf ,"");};func (_eaf *subpath )add (_bfbf ..._dg .Point ){_eaf ._bgga =append (_eaf ._bgga ,_bfbf ...)};func _acbd (_gfcb ,_dbbe bounded )float64 {return _adbg (_gfcb )-_adbg (_dbbe )};func (_efbdf *textWord )bbox ()_ec .PdfRectangle {return _efbdf .PdfRectangle };
// String returns a description of `v`.
func (_ffefa *ruling )String ()string {if _ffefa ._ecef ==_ggad {return "\u004e\u004f\u0054\u0020\u0052\u0055\u004c\u0049\u004e\u0047";};_gfb ,_facaf :="\u0078","\u0079";if _ffefa ._ecef ==_aagf {_gfb ,_facaf ="\u0079","\u0078";};_fabgb :="";if _ffefa ._bafc !=0.0{_fabgb =_a .Sprintf (" \u0077\u0069\u0064\u0074\u0068\u003d\u0025\u002e\u0032\u0066",_ffefa ._bafc );
};return _a .Sprintf ("\u0025\u00310\u0073\u0020\u0025\u0073\u003d\u0025\u0036\u002e\u0032\u0066\u0020\u0025\u0073\u003d\u0025\u0036\u002e\u0032\u0066\u0020\u002d\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u0028\u0025\u0036\u002e\u0032\u0066\u0029\u0020\u0025\u0073\u0020\u0025\u0076\u0025\u0073",_ffefa ._ecef ,_gfb ,_ffefa ._dedc ,_facaf ,_ffefa ._debg ,_ffefa ._abfa ,_ffefa ._abfa -_ffefa ._debg ,_ffefa ._dcfg ,_ffefa .Color ,_fabgb );
};func (_eea *textObject )setTextLeading (_dec float64 ){if _eea ==nil {return ;};_eea ._gbad ._ffca =_dec ;};type event struct{_dcbac float64 ;_abdfe bool ;_cafac int ;};func (_feded rulingList )mergePrimary ()float64 {_dffeg :=_feded [0]._dedc ;for _ ,_abee :=range _feded [1:]{_dffeg +=_abee ._dedc ;
};return _dffeg /float64 (len (_feded ));};func _aebb (_dfg _dg .Matrix )_dg .Point {_aaff ,_fefa :=_dfg .Translation ();return _dg .Point {X :_aaff ,Y :_fefa };};func (_bbef rulingList )vertsHorzs ()(rulingList ,rulingList ){var _ggbg ,_eaaaf rulingList ;
for _ ,_ecbd :=range _bbef {switch _ecbd ._ecef {case _bcgg :_ggbg =append (_ggbg ,_ecbd );case _aagf :_eaaaf =append (_eaaaf ,_ecbd );};};return _ggbg ,_eaaaf ;};
// String returns a description of `p`.
func (_degg *textPara )String ()string {if _degg ._dcdd {return _a .Sprintf ("\u0025\u0036\u002e\u0032\u0066\u0020\u005b\u0045\u004d\u0050\u0054\u0059\u005d",_degg .PdfRectangle );};_cbcafb :="";if _degg ._ecfce !=nil {_cbcafb =_a .Sprintf ("\u005b\u0025\u0064\u0078\u0025\u0064\u005d\u0020",_degg ._ecfce ._ecfcf ,_degg ._ecfce ._bbgb );
};return _a .Sprintf ("\u0025\u0036\u002e\u0032f \u0025\u0073\u0025\u0064\u0020\u006c\u0069\u006e\u0065\u0073\u0020\u0025\u0071",_degg .PdfRectangle ,_cbcafb ,len (_degg ._dagfb ),_fdba (_degg .text (),50));};func (_bbda *textTable )emptyRow (_cfga int )bool {for _ecfb :=0;
_ecfb < _bbda ._ecfcf ;_ecfb ++{_edae :=_bbda .get (_ecfb ,_cfga );if _edae !=nil &&_edae .text ()!=""{return false ;};};return true ;};func _afc (_cfe _ec .PdfRectangle )textState {return textState {_daf :100,_cfb :RenderModeFill ,_bbdd :_cfe };};func (_gcbd rulingList )toTilings ()(rulingList ,[]gridTiling ){_gcbd .log ("\u0074o\u0054\u0069\u006c\u0069\u006e\u0067s");
if len (_gcbd )==0{return nil ,nil ;};_gcbd =_gcbd .tidied ("\u0061\u006c\u006c");_gcbd .log ("\u0074\u0069\u0064\u0069\u0065\u0064");_ecgb :=_gcbd .toGrids ();_eeaf :=make ([]gridTiling ,len (_ecgb ));for _dfeea ,_ggcbd :=range _ecgb {_eeaf [_dfeea ]=_ggcbd .asTiling ();
};return _gcbd ,_eeaf ;};func (_edcfa *textTable )newTablePara ()*textPara {_eegd :=_edcfa .computeBbox ();_gbcgb :=&textPara {PdfRectangle :_eegd ,_abcge :_eegd ,_ecfce :_edcfa };if _gdbf {_cc .Log .Info ("\u006e\u0065w\u0054\u0061\u0062l\u0065\u0050\u0061\u0072\u0061\u003a\u0020\u0025\u0073",_gbcgb );
};return _gbcgb ;};func _daec (_geee ,_bfcec _dg .Point )bool {_cfcd :=_fg .Abs (_geee .X -_bfcec .X );_fdbf :=_fg .Abs (_geee .Y -_bfcec .Y );return _dccd (_cfcd ,_fdbf );};func (_ada *textLine )markWordBoundaries (){_dfbg :=_bfbg *_ada ._deab ;for _aefb ,_cggea :=range _ada ._aece [1:]{if _egaf (_cggea ,_ada ._aece [_aefb ])>=_dfbg {_cggea ._afea =true ;
};};};func (_dddg rulingList )augmentGrid ()(rulingList ,rulingList ){_gebg ,_ddfa :=_dddg .vertsHorzs ();if len (_gebg )==0||len (_ddfa )==0{return _gebg ,_ddfa ;};_cedf ,_gbbe :=_gebg ,_ddfa ;_egec :=_gebg .bbox ();_dbaf :=_ddfa .bbox ();if _ccde {_cc .Log .Info ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0047\u0072\u0069\u0064\u003a\u0020b\u0062\u006f\u0078\u0056\u003d\u0025\u0036\u002e\u0032\u0066",_egec );
_cc .Log .Info ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0047\u0072\u0069\u0064\u003a\u0020b\u0062\u006f\u0078\u0048\u003d\u0025\u0036\u002e\u0032\u0066",_dbaf );};var _cfeg ,_debgb ,_gegd ,_aacaf *ruling ;if _dbaf .Llx < _egec .Llx -_bccea {_cfeg =&ruling {_dcfg :_afec ,_ecef :_bcgg ,_dedc :_dbaf .Llx ,_debg :_egec .Lly ,_abfa :_egec .Ury };
_gebg =append (rulingList {_cfeg },_gebg ...);};if _dbaf .Urx > _egec .Urx +_bccea {_debgb =&ruling {_dcfg :_afec ,_ecef :_bcgg ,_dedc :_dbaf .Urx ,_debg :_egec .Lly ,_abfa :_egec .Ury };_gebg =append (_gebg ,_debgb );};if _egec .Lly < _dbaf .Lly -_bccea {_gegd =&ruling {_dcfg :_afec ,_ecef :_aagf ,_dedc :_egec .Lly ,_debg :_dbaf .Llx ,_abfa :_dbaf .Urx };
_ddfa =append (rulingList {_gegd },_ddfa ...);};if _egec .Ury > _dbaf .Ury +_bccea {_aacaf =&ruling {_dcfg :_afec ,_ecef :_aagf ,_dedc :_egec .Ury ,_debg :_dbaf .Llx ,_abfa :_dbaf .Urx };_ddfa =append (_ddfa ,_aacaf );};if len (_gebg )+len (_ddfa )==len (_dddg ){return _cedf ,_gbbe ;
};_dbgge :=append (_gebg ,_ddfa ...);_dddg .log ("u\u006e\u0061\u0075\u0067\u006d\u0065\u006e\u0074\u0065\u0064");_dbgge .log ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0065d");return _gebg ,_ddfa ;};func (_fgga *textTable )put (_cfaf ,_bcffe int ,_efbd *textPara ){_fgga ._fdbdg [_aabdc (_cfaf ,_bcffe )]=_efbd ;
};func (_cagb *textObject )getFillColor ()_g .Color {return _aggga (_cagb ._abc .ColorspaceNonStroking ,_cagb ._abc .ColorNonStroking );};func _dfbab (_dffbg float64 )bool {return _fg .Abs (_dffbg )< _dfbb };func (_becc *textTable )computeBbox ()_ec .PdfRectangle {var _fdag _ec .PdfRectangle ;
_dgde :=false ;for _dgeg :=0;_dgeg < _becc ._bbgb ;_dgeg ++{for _dbffe :=0;_dbffe < _becc ._ecfcf ;_dbffe ++{_fdfc :=_becc .get (_dbffe ,_dgeg );if _fdfc ==nil {continue ;};if !_dgde {_fdag =_fdfc .PdfRectangle ;_dgde =true ;}else {_fdag =_egfc (_fdag ,_fdfc .PdfRectangle );
};};};return _fdag ;};func _fedeg (_gfdf string )(string ,bool ){_egcbe :=[]rune (_gfdf );if len (_egcbe )!=1{return "",false ;};_gebfd ,_gbcdf :=_edcdb [_egcbe [0]];return _gebfd ,_gbcdf ;};func (_edfdf *textTable )reduceTiling (_ecbdc gridTiling ,_agbf float64 )*textTable {_acfd :=make ([]int ,0,_edfdf ._bbgb );
_fbec :=make ([]int ,0,_edfdf ._ecfcf );_cafgc :=_ecbdc ._cdcdg ;_gaef :=_ecbdc ._bfag ;for _abdd :=0;_abdd < _edfdf ._bbgb ;_abdd ++{_cdbfd :=_abdd > 0&&_fg .Abs (_gaef [_abdd -1]-_gaef [_abdd ])< _agbf &&_edfdf .emptyRow (_abdd );if !_cdbfd {_acfd =append (_acfd ,_abdd );
};};for _dfeg :=0;_dfeg < _edfdf ._ecfcf ;_dfeg ++{_edeg :=_dfeg < _edfdf ._ecfcf -1&&_fg .Abs (_cafgc [_dfeg +1]-_cafgc [_dfeg ])< _agbf &&_edfdf .emptyColumn (_dfeg );if !_edeg {_fbec =append (_fbec ,_dfeg );};};if len (_acfd )==_edfdf ._bbgb &&len (_fbec )==_edfdf ._ecfcf {return _edfdf ;
};_bebgf :=textTable {_bgdge :_edfdf ._bgdge ,_ecfcf :len (_fbec ),_bbgb :len (_acfd ),_gdag :make (map[uint64 ]compositeCell ,len (_fbec )*len (_acfd ))};if _gdbf {_cc .Log .Info ("\u0072\u0065\u0064\u0075c\u0065\u0054\u0069\u006c\u0069\u006e\u0067\u003a\u0020\u0025d\u0078%\u0064\u0020\u002d\u003e\u0020\u0025\u0064x\u0025\u0064",_edfdf ._ecfcf ,_edfdf ._bbgb ,len (_fbec ),len (_acfd ));
_cc .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0043\u006f\u006c\u0073\u003a\u0020\u0025\u002b\u0076",_fbec );_cc .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0052\u006f\u0077\u0073\u003a\u0020\u0025\u002b\u0076",_acfd );};for _gffe ,_ffbf :=range _acfd {for _ffcaa ,_dedcb :=range _fbec {_dbccb ,_fefc :=_edfdf .getComposite (_dedcb ,_ffbf );
if len (_dbccb )==0{continue ;};if _gdbf {_a .Printf ("\u0020 \u0025\u0032\u0064\u002c \u0025\u0032\u0064\u0020\u0028%\u0032d\u002c \u0025\u0032\u0064\u0029\u0020\u0025\u0071\n",_ffcaa ,_gffe ,_dedcb ,_ffbf ,_fdba (_dbccb .merge ().text (),50));};_bebgf .putComposite (_ffcaa ,_gffe ,_dbccb ,_fefc );
};};return &_bebgf ;};type shapesState struct{_dfaa _dg .Matrix ;_ccgg _dg .Matrix ;_ecdd []*subpath ;_eecc bool ;_cgd _dg .Point ;_cfg *textObject ;};type intSet map[int ]struct{};func (_cbbf *textTable )getComposite (_dggca ,_cgfe int )(paraList ,_ec .PdfRectangle ){_gfbf ,_debb :=_cbbf ._gdag [_aabdc (_dggca ,_cgfe )];
if _gdbf {_a .Printf ("\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0067\u0065\u0074\u0043\u006f\u006d\u0070o\u0073i\u0074\u0065\u0028\u0025\u0064\u002c\u0025\u0064\u0029\u002d\u003e\u0025\u0073\u000a",_dggca ,_cgfe ,_gfbf .String ());};if !_debb {return nil ,_ec .PdfRectangle {};
};return _gfbf .parasBBox ();};func (_fcga *Extractor )extractPageText (_dce string ,_efgb *_ec .PdfPageResources ,_edb _dg .Matrix ,_dcf int )(*PageText ,int ,int ,error ){_cc .Log .Trace ("\u0065x\u0074\u0072\u0061\u0063t\u0050\u0061\u0067\u0065\u0054e\u0078t\u003a \u006c\u0065\u0076\u0065\u006c\u003d\u0025d",_dcf );
_eba :=&PageText {_gef :_fcga ._ca };_cbc :=_afc (_fcga ._ca );_caf :=stateStack {&_cbc };_aga :=_cabf (_fcga ,_efgb ,_af .GraphicsState {},&_cbc ,&_caf );_adb :=shapesState {_ccgg :_edb ,_dfaa :_dg .IdentityMatrix (),_cfg :_aga };var _ffc bool ;if _dcf > _eg {_cff :=_b .New ("\u0066\u006f\u0072\u006d s\u0074\u0061\u0063\u006b\u0020\u006f\u0076\u0065\u0072\u0066\u006c\u006f\u0077");
_cc .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a \u0065\u0078\u0074\u0072\u0061\u0063\u0074\u0050\u0061\u0067\u0065\u0054\u0065\u0078\u0074\u002e\u0020\u0072\u0065\u0063u\u0072\u0073\u0069\u006f\u006e\u0020\u006c\u0065\u0076\u0065\u006c\u003d\u0025\u0064 \u0065r\u0072\u003d\u0025\u0076",_dcf ,_cff );
return _eba ,_cbc ._efef ,_cbc ._gdfg ,_cff ;};_begd :=_af .NewContentStreamParser (_dce );_bfd ,_aab :=_begd .Parse ();if _aab !=nil {_cc .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020e\u0078\u0074\u0072a\u0063\u0074\u0050\u0061g\u0065\u0054\u0065\u0078\u0074\u0020\u0070\u0061\u0072\u0073\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u002e\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_aab );
return _eba ,_cbc ._efef ,_cbc ._gdfg ,_aab ;};_gcc :=_af .NewContentStreamProcessor (*_bfd );_gcc .AddHandler (_af .HandlerConditionEnumAllOperands ,"",func (_afd *_af .ContentStreamOperation ,_ecf _af .GraphicsState ,_ebag *_ec .PdfPageResources )error {_bef :=_afd .Operand ;
if _eded {_cc .Log .Info ("\u0026&\u0026\u0020\u006f\u0070\u003d\u0025s",_afd );};switch _bef {case "\u0071":if _bgec {_cc .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_adb ._dfaa );};_caf .push (&_cbc );case "\u0051":if !_caf .empty (){if len (_caf )>=2{_caf .pop ();
};_cbc =*_caf .top ();};_adb ._dfaa =_ecf .CTM ;if _bgec {_cc .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_adb ._dfaa );};case "\u0042\u0054":if _ffc {_cc .Log .Debug ("\u0042\u0054\u0020\u0063\u0061\u006c\u006c\u0065\u0064\u0020\u0077\u0068\u0069\u006c\u0065 \u0069n\u0020\u0061\u0020\u0074\u0065\u0078\u0074\u0020\u006f\u0062\u006a\u0065\u0063\u0074");
_eba ._dggc =append (_eba ._dggc ,_aga ._gda ...);};_ffc =true ;_gge :=_ecf ;_gge .CTM =_edb .Mult (_gge .CTM );_aga =_cabf (_fcga ,_ebag ,_gge ,&_cbc ,&_caf );_adb ._cfg =_aga ;case "\u0045\u0054":if !_ffc {_cc .Log .Debug ("\u0045\u0054\u0020ca\u006c\u006c\u0065\u0064\u0020\u006f\u0075\u0074\u0073i\u0064e\u0020o\u0066 \u0061\u0020\u0074\u0065\u0078\u0074\u0020\u006f\u0062\u006a\u0065\u0063\u0074");
};_ffc =false ;_eba ._dggc =append (_eba ._dggc ,_aga ._gda ...);_aga .reset ();case "\u0054\u002a":_aga .nextLine ();case "\u0054\u0064":if _fea ,_aeb :=_aga .checkOp (_afd ,2,true );!_fea {_cc .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_aeb );
return _aeb ;};_cgg ,_bb ,_cffb :=_fbae (_afd .Params );if _cffb !=nil {return _cffb ;};_aga .moveText (_cgg ,_bb );case "\u0054\u0044":if _egc ,_ffce :=_aga .checkOp (_afd ,2,true );!_egc {_cc .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_ffce );
return _ffce ;};_dea ,_cdcg ,_bea :=_fbae (_afd .Params );if _bea !=nil {_cc .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_bea );return _bea ;};_aga .moveTextSetLeading (_dea ,_cdcg );case "\u0054\u006a":if _aba ,_fdgc :=_aga .checkOp (_afd ,1,true );
!_aba {_cc .Log .Debug ("\u0045\u0052\u0052\u004fR:\u0020\u0054\u006a\u0020\u006f\u0070\u003d\u0025\u0073\u0020\u0065\u0072\u0072\u003d%\u0076",_afd ,_fdgc );return _fdgc ;};_dcfc ,_cgge :=_fd .GetStringBytes (_afd .Params [0]);if !_cgge {_cc .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a\u0020T\u006a\u0020o\u0070\u003d\u0025\u0073\u0020\u0047\u0065\u0074S\u0074\u0072\u0069\u006e\u0067\u0042\u0079\u0074\u0065\u0073\u0020\u0066a\u0069\u006c\u0065\u0064",_afd );
return _fd .ErrTypeError ;};return _aga .showText (_dcfc );case "\u0054\u004a":if _aag ,_ddg :=_aga .checkOp (_afd ,1,true );!_aag {_cc .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u004a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_ddg );return _ddg ;
};_dad ,_gfe :=_fd .GetArray (_afd .Params [0]);if !_gfe {_cc .Log .Debug ("\u0045\u0052\u0052OR\u003a\u0020\u0054\u004a\u0020\u006f\u0070\u003d\u0025s\u0020G\u0065t\u0041r\u0072\u0061\u0079\u0056\u0061\u006c\u0020\u0066\u0061\u0069\u006c\u0065\u0064",_afd );
return _aab ;};return _aga .showTextAdjusted (_dad );case "\u0027":if _ace ,_gbc :=_aga .checkOp (_afd ,1,true );!_ace {_cc .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u0027\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_gbc );return _gbc ;};_def ,_ege :=_fd .GetStringBytes (_afd .Params [0]);
if !_ege {_cc .Log .Debug ("\u0045\u0052RO\u0052\u003a\u0020'\u0020\u006f\u0070\u003d%s \u0047et\u0053\u0074\u0072\u0069\u006e\u0067\u0042yt\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064",_afd );return _fd .ErrTypeError ;};_aga .nextLine ();return _aga .showText (_def );
case "\u0022":if _gbg ,_gba :=_aga .checkOp (_afd ,3,true );!_gbg {_cc .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u0022\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_gba );return _gba ;};_ebd ,_gae ,_eed :=_fbae (_afd .Params [:2]);if _eed !=nil {return _eed ;
};_bee ,_fdf :=_fd .GetStringBytes (_afd .Params [2]);if !_fdf {_cc .Log .Debug ("\u0045\u0052RO\u0052\u003a\u0020\"\u0020\u006f\u0070\u003d%s \u0047et\u0053\u0074\u0072\u0069\u006e\u0067\u0042yt\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064",_afd );
return _fd .ErrTypeError ;};_aga .setCharSpacing (_ebd );_aga .setWordSpacing (_gae );_aga .nextLine ();return _aga .showText (_bee );case "\u0054\u004c":_aad ,_cda :=_cab (_afd );if _cda !=nil {_cc .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u004c\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_cda );
return _cda ;};_aga .setTextLeading (_aad );case "\u0054\u0063":_fbd ,_cbee :=_cab (_afd );if _cbee !=nil {_cc .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0063\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_cbee );return _cbee ;};_aga .setCharSpacing (_fbd );
case "\u0054\u0066":if _cdaa ,_bgd :=_aga .checkOp (_afd ,2,true );!_cdaa {_cc .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0066\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_bgd );return _bgd ;};_bdc ,_cdcf :=_fd .GetNameVal (_afd .Params [0]);
if !_cdcf {_cc .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a \u0054\u0066\u0020\u006f\u0070\u003d\u0025\u0073\u0020\u0047\u0065\u0074\u004ea\u006d\u0065\u0056\u0061\u006c\u0020\u0066a\u0069\u006c\u0065\u0064",_afd );return _fd .ErrTypeError ;};_bde ,_beb :=_fd .GetNumberAsFloat (_afd .Params [1]);
if !_cdcf {_cc .Log .Debug ("\u0045\u0052\u0052O\u0052\u003a\u0020\u0054\u0066\u0020\u006f\u0070\u003d\u0025\u0073\u0020\u0047\u0065\u0074\u0046\u006c\u006f\u0061\u0074\u0056\u0061\u006c\u0020\u0066\u0061\u0069\u006c\u0065d\u002e\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_afd ,_beb );
return _beb ;};_beb =_aga .setFont (_bdc ,_bde );_aga ._fcag =_gb .Is (_beb ,_fd .ErrNotSupported );if _beb !=nil &&!_aga ._fcag {return _beb ;};case "\u0054\u006d":if _cdf ,_bbd :=_aga .checkOp (_afd ,6,true );!_cdf {_cc .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u006d\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_bbd );
return _bbd ;};_bebd ,_dbe :=_fd .GetNumbersAsFloat (_afd .Params );if _dbe !=nil {_cc .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_dbe );return _dbe ;};_aga .setTextMatrix (_bebd );case "\u0054\u0072":if _edg ,_aagb :=_aga .checkOp (_afd ,1,true );
!_edg {_cc .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0072\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_aagb );return _aagb ;};_cbag ,_agg :=_fd .GetIntVal (_afd .Params [0]);if !_agg {_cc .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0054\u0072\u0020\u006f\u0070\u003d\u0025\u0073 \u0047e\u0074\u0049\u006e\u0074\u0056\u0061\u006c\u0020\u0066\u0061\u0069\u006c\u0065\u0064",_afd );
return _fd .ErrTypeError ;};_aga .setTextRenderMode (_cbag );case "\u0054\u0073":if _bbdg ,_cca :=_aga .checkOp (_afd ,1,true );!_bbdg {_cc .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0073\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_cca );return _cca ;
};_agac ,_bab :=_fd .GetNumberAsFloat (_afd .Params [0]);if _bab !=nil {_cc .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_bab );return _bab ;};_aga .setTextRise (_agac );case "\u0054\u0077":if _cbf ,_gce :=_aga .checkOp (_afd ,1,true );
!_cbf {_cc .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_gce );return _gce ;};_acb ,_daee :=_fd .GetNumberAsFloat (_afd .Params [0]);if _daee !=nil {_cc .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_daee );
return _daee ;};_aga .setWordSpacing (_acb );case "\u0054\u007a":if _cde ,_df :=_aga .checkOp (_afd ,1,true );!_cde {_cc .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_df );return _df ;};_deba ,_dee :=_fd .GetNumberAsFloat (_afd .Params [0]);
if _dee !=nil {_cc .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_dee );return _dee ;};_aga .setHorizScaling (_deba );case "\u0063\u006d":_adb ._dfaa =_ecf .CTM ;if _adb ._dfaa .Singular (){_aec :=_dg .IdentityMatrix ().Translate (_adb ._dfaa .Translation ());
_cc .Log .Debug ("S\u0069n\u0067\u0075\u006c\u0061\u0072\u0020\u0063\u0074m\u003d\u0025\u0073\u2192%s",_adb ._dfaa ,_aec );_adb ._dfaa =_aec ;};if _bgec {_cc .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_adb ._dfaa );};case "\u006d":if len (_afd .Params )!=2{_cc .Log .Debug ("\u0057\u0041\u0052\u004e\u003a\u0020\u0065\u0072\u0072o\u0072\u0020\u0077\u0068\u0069\u006c\u0065\u0020\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067\u0020\u0060\u006d\u0060\u0020o\u0070\u0065r\u0061\u0074o\u0072\u003a\u0020\u0025\u0076\u002e\u0020\u004f\u0075\u0074\u0070\u0075\u0074 m\u0061\u0079\u0020\u0062\u0065\u0020\u0069\u006e\u0063o\u0072\u0072\u0065\u0063\u0074\u002e",_fgf );
return nil ;};_efe ,_aea :=_fd .GetNumbersAsFloat (_afd .Params );if _aea !=nil {return _aea ;};_cc .Log .Debug ("\u004d\u006f\u0076\u0065\u0020\u0074\u006f\u003a\u0020\u0025\u002e\u0032\u0066",_efe );_adb .moveTo (_efe [0],_efe [1]);case "\u006c":if len (_afd .Params )!=2{_cc .Log .Debug ("\u0057\u0041\u0052\u004e\u003a\u0020\u0065\u0072\u0072o\u0072\u0020\u0077\u0068\u0069\u006c\u0065\u0020\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067\u0020\u0060\u006c\u0060\u0020o\u0070\u0065r\u0061\u0074o\u0072\u003a\u0020\u0025\u0076\u002e\u0020\u004f\u0075\u0074\u0070\u0075\u0074 m\u0061\u0079\u0020\u0062\u0065\u0020\u0069\u006e\u0063o\u0072\u0072\u0065\u0063\u0074\u002e",_fgf );
return nil ;};_caab ,_ffad :=_fd .GetNumbersAsFloat (_afd .Params );if _ffad !=nil {return _ffad ;};_adb .lineTo (_caab [0],_caab [1]);case "\u0063":if len (_afd .Params )!=6{return _fgf ;};_fae ,_edc :=_fd .GetNumbersAsFloat (_afd .Params );if _edc !=nil {return _edc ;
};_cc .Log .Debug ("\u0043u\u0062\u0069\u0063\u0020b\u0065\u007a\u0069\u0065\u0072 \u0070a\u0072a\u006d\u0073\u003a\u0020\u0025\u002e\u0032f",_fae );_adb .cubicTo (_fae [0],_fae [1],_fae [2],_fae [3],_fae [4],_fae [5]);case "\u0076","\u0079":if len (_afd .Params )!=4{return _fgf ;
};_gfc ,_bdcg :=_fd .GetNumbersAsFloat (_afd .Params );if _bdcg !=nil {return _bdcg ;};_cc .Log .Debug ("\u0043u\u0062\u0069\u0063\u0020b\u0065\u007a\u0069\u0065\u0072 \u0070a\u0072a\u006d\u0073\u003a\u0020\u0025\u002e\u0032f",_gfc );_adb .quadraticTo (_gfc [0],_gfc [1],_gfc [2],_gfc [3]);
case "\u0068":_adb .closePath ();case "\u0072\u0065":if len (_afd .Params )!=4{return _fgf ;};_ddc ,_fbge :=_fd .GetNumbersAsFloat (_afd .Params );if _fbge !=nil {return _fbge ;};_adb .drawRectangle (_ddc [0],_ddc [1],_ddc [2],_ddc [3]);_adb .closePath ();
case "\u0053":_adb .stroke (&_eba ._bdea );_adb .clearPath ();case "\u0073":_adb .closePath ();_adb .stroke (&_eba ._bdea );_adb .clearPath ();case "\u0046":_adb .fill (&_eba ._fda );_adb .clearPath ();case "\u0066","\u0066\u002a":_adb .closePath ();_adb .fill (&_eba ._fda );
_adb .clearPath ();case "\u0042","\u0042\u002a":_adb .fill (&_eba ._fda );_adb .stroke (&_eba ._bdea );_adb .clearPath ();case "\u0062","\u0062\u002a":_adb .closePath ();_adb .fill (&_eba ._fda );_adb .stroke (&_eba ._bdea );_adb .clearPath ();case "\u006e":_adb .clearPath ();
case "\u0044\u006f":if len (_afd .Params )==0{_cc .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0078\u0070\u0065\u0063\u0074\u0065\u0064\u0020\u0058\u004fbj\u0065c\u0074\u0020\u006e\u0061\u006d\u0065\u0020\u006f\u0070\u0065\u0072\u0061n\u0064\u0020\u0066\u006f\u0072\u0020\u0044\u006f\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072.\u0020\u0047\u006f\u0074\u0020\u0025\u002b\u0076\u002e",_afd .Params );
return _fd .ErrRangeError ;};_bgc ,_cbd :=_fd .GetName (_afd .Params [0]);if !_cbd {_cc .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0069\u006e\u0076\u0061l\u0069\u0064\u0020\u0044\u006f\u0020\u006f\u0070e\u0072a\u0074\u006f\u0072\u0020\u0058\u004f\u0062\u006a\u0065\u0063\u0074\u0020\u006e\u0061\u006d\u0065\u0020\u006fp\u0065\u0072\u0061\u006e\u0064\u003a\u0020\u0025\u002b\u0076\u002e",_afd .Params [0]);
return _fd .ErrTypeError ;};_ ,_babd :=_ebag .GetXObjectByName (*_bgc );if _babd !=_ec .XObjectTypeForm {break ;};_aadd ,_cbd :=_fcga ._cb [_bgc .String ()];if !_cbd {_acf ,_dbeg :=_ebag .GetXObjectFormByName (*_bgc );if _dbeg !=nil {_cc .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_dbeg );
return _dbeg ;};_ebc ,_dbeg :=_acf .GetContentStream ();if _dbeg !=nil {_cc .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_dbeg );return _dbeg ;};_ebe :=_acf .Resources ;if _ebe ==nil {_ebe =_ebag ;};_cac ,_cbad ,_cbeed ,_dbeg :=_fcga .extractPageText (string (_ebc ),_ebe ,_edb .Mult (_ecf .CTM ),_dcf +1);
if _dbeg !=nil {_cc .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_dbeg );return _dbeg ;};_aadd =textResult {*_cac ,_cbad ,_cbeed };_fcga ._cb [_bgc .String ()]=_aadd ;};_adb ._dfaa =_ecf .CTM ;if _bgec {_cc .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_adb ._dfaa );
};_eba ._dggc =append (_eba ._dggc ,_aadd ._eda ._dggc ...);_eba ._bdea =append (_eba ._bdea ,_aadd ._eda ._bdea ...);_eba ._fda =append (_eba ._fda ,_aadd ._eda ._fda ...);_cbc ._efef +=_aadd ._cgad ;_cbc ._gdfg +=_aadd ._cbfc ;case "\u0072\u0067","\u0067","\u006b","\u0063\u0073","\u0073\u0063","\u0073\u0063\u006e":_aga ._abc .ColorspaceNonStroking =_ecf .ColorspaceNonStroking ;
_aga ._abc .ColorNonStroking =_ecf .ColorNonStroking ;case "\u0052\u0047","\u0047","\u004b","\u0043\u0053","\u0053\u0043","\u0053\u0043\u004e":_aga ._abc .ColorspaceStroking =_ecf .ColorspaceStroking ;_aga ._abc .ColorStroking =_ecf .ColorStroking ;};return nil ;
});_aab =_gcc .Process (_efgb );return _eba ,_cbc ._efef ,_cbc ._gdfg ,_aab ;};
// Len returns the number of TextMarks in `ma`.
func (_fgdd *TextMarkArray )Len ()int {if _fgdd ==nil {return 0;};return len (_fgdd ._bccg );};func (_ffac *compositeCell )updateBBox (){for _ ,_babe :=range _ffac .paraList {_ffac .PdfRectangle =_egfc (_ffac .PdfRectangle ,_babe .PdfRectangle );};};
// New returns an Extractor instance for extracting content from the input PDF page.
func New (page *_ec .PdfPage )(*Extractor ,error ){const _ge ="\u0065\u0078\u0074\u0072\u0061\u0063\u0074\u006f\u0072\u002e\u004e\u0065\u0077";_db ,_fca :=page .GetAllContentStreams ();if _fca !=nil {return nil ,_fca ;};_bfe ,_fca :=page .GetMediaBox ();
if _fca !=nil {return nil ,_a .Errorf ("\u0065\u0078\u0074r\u0061\u0063\u0074\u006fr\u0020\u0072\u0065\u0071\u0075\u0069\u0072e\u0073\u0020\u006d\u0065\u0064\u0069\u0061\u0042\u006f\u0078\u002e\u0020\u0025\u0076",_fca );};_ff :=&Extractor {_fbg :_db ,_fcf :page .Resources ,_ca :*_bfe ,_cd :map[string ]fontEntry {},_cb :map[string ]textResult {}};
if _ff ._ca .Llx > _ff ._ca .Urx {_cc .Log .Info ("\u004d\u0065\u0064\u0069\u0061\u0042o\u0078\u0020\u0068\u0061\u0073\u0020\u0058\u0020\u0063\u006f\u006f\u0072\u0064\u0069\u006e\u0061\u0074\u0065\u0073\u0020r\u0065\u0076\u0065\u0072\u0073\u0065\u0064\u002e\u0020\u0025\u002e\u0032\u0066\u0020F\u0069x\u0069\u006e\u0067\u002e",_ff ._ca );
_ff ._ca .Llx ,_ff ._ca .Urx =_ff ._ca .Urx ,_ff ._ca .Llx ;};if _ff ._ca .Lly > _ff ._ca .Ury {_cc .Log .Info ("\u004d\u0065\u0064\u0069\u0061\u0042o\u0078\u0020\u0068\u0061\u0073\u0020\u0059\u0020\u0063\u006f\u006f\u0072\u0064\u0069\u006e\u0061\u0074\u0065\u0073\u0020r\u0065\u0076\u0065\u0072\u0073\u0065\u0064\u002e\u0020\u0025\u002e\u0032\u0066\u0020F\u0069x\u0069\u006e\u0067\u002e",_ff ._ca );
_ff ._ca .Lly ,_ff ._ca .Ury =_ff ._ca .Ury ,_ff ._ca .Lly ;};_ba .TrackUse (_ge );return _ff ,nil ;};type ruling struct{_ecef rulingKind ;_dcfg markKind ;_g .Color ;_dedc float64 ;_debg float64 ;_abfa float64 ;_bafc float64 ;};func (_ggef *shapesState )fill (_cdab *[]pathSection ){_dbed :=pathSection {_gfcc :_ggef ._ecdd ,Color :_ggef ._cfg .getFillColor ()};
*_cdab =append (*_cdab ,_dbed );if _ccde {_cfaa :=_dbed .bbox ();_a .Printf ("\u0020 \u0020\u0020\u0046\u0049\u004c\u004c\u003a %\u0032\u0064\u0020\u0066\u0069\u006c\u006c\u0073\u0020\u0028\u0025\u0064\u0020\u006ee\u0077\u0029 \u0073\u0073\u003d%\u0073\u0020\u0063\u006f\u006c\u006f\u0072\u003d\u0025\u0033\u0076\u0020\u0025\u0036\u002e\u0032f\u003d\u00256.\u0032\u0066\u0078%\u0036\u002e\u0032\u0066\u000a",len (*_cdab ),len (_dbed ._gfcc ),_ggef ,_dbed .Color ,_cfaa ,_cfaa .Width (),_cfaa .Height ());
if _baaff {for _geag ,_dbb :=range _dbed ._gfcc {_a .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_geag ,_dbb );if _geag ==10{break ;};};};};};func (_cegb *textTable )getRight ()paraList {_bfgdb :=make (paraList ,_cegb ._bbgb );for _aagbag :=0;
_aagbag < _cegb ._bbgb ;_aagbag ++{_cbbb :=_cegb .get (_cegb ._ecfcf -1,_aagbag )._cdbf ;if _cbbb ==nil ||_cbbb ._ebgd {return nil ;};_bfgdb [_aagbag ]=_cbbb ;};for _cce :=0;_cce < _cegb ._bbgb -1;_cce ++{if _bfgdb [_cce ]._bfaef !=_bfgdb [_cce +1]{return nil ;
};};return _bfgdb ;};func (_aggg paraList )reorder (_bbgg []int ){_dfgc :=make (paraList ,len (_aggg ));for _abfe ,_acbg :=range _bbgg {_dfgc [_abfe ]=_aggg [_acbg ];};copy (_aggg ,_dfgc );};func _defc (_gada ,_aaae _dg .Point )rulingKind {_fgdb :=_fg .Abs (_gada .X -_aaae .X );
_dceb :=_fg .Abs (_gada .Y -_aaae .Y );return _fag (_fgdb ,_dceb ,_dgf );};func (_abcg *textObject )moveLP (_dgc ,_bfcc float64 ){_abcg ._ade .Concat (_dg .NewMatrix (1,0,0,1,_dgc ,_bfcc ));_abcg ._aebf =_abcg ._ade ;};func (_cffg *wordBag )scanBand (_dede string ,_fcab *wordBag ,_ddgd func (_daff *wordBag ,_feab *textWord )bool ,_dfe ,_dabg ,_ffcd float64 ,_ede ,_bbdge bool )int {_cfef :=_fcab ._dde ;
var _dbdg map[int ]map[*textWord ]struct{};if !_ede {_dbdg =_cffg .makeRemovals ();};_baad :=_egega *_cfef ;_babdd :=0;for _ ,_ebabb :=range _cffg .depthBand (_dfe -_baad ,_dabg +_baad ){if len (_cffg ._fbdb [_ebabb ])==0{continue ;};for _ ,_dag :=range _cffg ._fbdb [_ebabb ]{if !(_dfe -_baad <=_dag ._beef &&_dag ._beef <=_dabg +_baad ){continue ;
};if !_ddgd (_fcab ,_dag ){continue ;};_ccd :=2.0*_fg .Abs (_dag ._cgba -_fcab ._dde )/(_dag ._cgba +_fcab ._dde );_bagg :=_fg .Max (_dag ._cgba /_fcab ._dde ,_fcab ._dde /_dag ._cgba );_aagae :=_fg .Min (_ccd ,_bagg );if _ffcd > 0&&_aagae > _ffcd {continue ;
};if _fcab .blocked (_dag ){continue ;};if !_ede {_fcab .pullWord (_dag ,_ebabb ,_dbdg );};_babdd ++;if !_bbdge {if _dag ._beef < _dfe {_dfe =_dag ._beef ;};if _dag ._beef > _dabg {_dabg =_dag ._beef ;};};if _ede {break ;};};};if !_ede {_cffg .applyRemovals (_dbdg );
};return _babdd ;};func _eaaff (_abec []*textMark ,_eegbg _ec .PdfRectangle )[]*textWord {var _ddfbd []*textWord ;var _fcccb *textWord ;if _fdgbg {_cc .Log .Info ("\u006d\u0061\u006beT\u0065\u0078\u0074\u0057\u006f\u0072\u0064\u0073\u003a\u0020\u0025\u0064\u0020\u006d\u0061\u0072\u006b\u0073",len (_abec ));
};_ddfe :=func (){if _fcccb !=nil {_aabf :=_fcccb .computeText ();if !_gdfge (_aabf ){_fcccb ._aaaf =_aabf ;_ddfbd =append (_ddfbd ,_fcccb );if _fdgbg {_cc .Log .Info ("\u0061\u0064\u0064Ne\u0077\u0057\u006f\u0072\u0064\u003a\u0020\u0025\u0064\u003a\u0020\u0077\u006f\u0072\u0064\u003d\u0025\u0073",len (_ddfbd )-1,_fcccb .String ());
for _abggb ,_gaecd :=range _fcccb ._baegf {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_abggb ,_gaecd .String ());};};};_fcccb =nil ;};};for _ ,_gbcee :=range _abec {if _gfec &&_fcccb !=nil &&len (_fcccb ._baegf )> 0{_eadad :=_fcccb ._baegf [len (_fcccb ._baegf )-1];
_dedf ,_bfgb :=_fedeg (_gbcee ._fcbe );_aedb ,_ffbea :=_fedeg (_eadad ._fcbe );if _bfgb &&!_ffbea &&_eadad .inDiacriticArea (_gbcee ){_fcccb .addDiacritic (_dedf );continue ;};if _ffbea &&!_bfgb &&_gbcee .inDiacriticArea (_eadad ){_fcccb ._baegf =_fcccb ._baegf [:len (_fcccb ._baegf )-1];
_fcccb .appendMark (_gbcee ,_eegbg );_fcccb .addDiacritic (_aedb );continue ;};};_cggef :=_gdfge (_gbcee ._fcbe );if _cggef {_ddfe ();continue ;};if _fcccb ==nil &&!_cggef {_fcccb =_cdecd ([]*textMark {_gbcee },_eegbg );continue ;};_fcgc :=_fcccb ._cgba ;
_gcfga :=_fg .Abs (_gcb (_eegbg ,_gbcee )-_fcccb ._beef )/_fcgc ;_ceff :=_egaf (_gbcee ,_fcccb )/_fcgc ;if _ceff >=_fgeg ||!(-_abcgg <=_ceff &&_gcfga <=_gcae ){_ddfe ();_fcccb =_cdecd ([]*textMark {_gbcee },_eegbg );continue ;};_fcccb .appendMark (_gbcee ,_eegbg );
};_ddfe ();return _ddfbd ;};func _gccge (_fbaaa string ,_cgc []rulingList ){_cc .Log .Info ("\u0024\u0024 \u0025\u0064\u0020g\u0072\u0069\u0064\u0073\u0020\u002d\u0020\u0025\u0073",len (_cgc ),_fbaaa );for _gegg ,_cbceb :=range _cgc {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_gegg ,_cbceb .String ());
};};func (_cgbe paraList )findTableGrid (_cafaa gridTiling )(*textTable ,map[*textPara ]struct{}){_acfea :=len (_cafaa ._cdcdg );_gebb :=len (_cafaa ._bfag );_bfebd :=textTable {_bgdge :true ,_ecfcf :_acfea ,_bbgb :_gebb ,_fdbdg :make (map[uint64 ]*textPara ,_acfea *_gebb ),_gdag :make (map[uint64 ]compositeCell ,_acfea *_gebb )};
_abce :=make (map[*textPara ]struct{});_edffg :=int ((1.0-_gfac )*float64 (_acfea *_gebb ));_ffbfb :=0;if _badda {_cc .Log .Info ("\u0066\u0069\u006e\u0064Ta\u0062\u006c\u0065\u0047\u0072\u0069\u0064\u003a\u0020\u0025\u0064\u0020\u0078\u0020%\u0064",_acfea ,_gebb );
};for _egef ,_cbffb :=range _cafaa ._bfag {_ccea ,_edeae :=_cafaa ._bcdb [_cbffb ];if !_edeae {continue ;};for _bdbf ,_dgccg :=range _cafaa ._cdcdg {_bbea ,_ggde :=_ccea [_dgccg ];if !_ggde {continue ;};_fcec :=_cgbe .inTile (_bbea );if len (_fcec )==0{_ffbfb ++;
if _ffbfb > _edffg {if _badda {_cc .Log .Info ("\u0021\u006e\u0075m\u0045\u006d\u0070\u0074\u0079\u003d\u0025\u0064",_ffbfb );};return nil ,nil ;};}else {_bfebd .putComposite (_bdbf ,_egef ,_fcec ,_bbea .PdfRectangle );for _ ,_edce :=range _fcec {_abce [_edce ]=struct{}{};
};};};};_afcg :=0;for _decd :=0;_decd < _acfea ;_decd ++{_fbfe :=_bfebd .get (_decd ,0);if _fbfe ==nil ||!_fbfe ._dcdd {_afcg ++;};};if _afcg ==0{if _badda {_cc .Log .Info ("\u0021\u006e\u0075m\u0048\u0065\u0061\u0064\u0065\u0072\u003d\u0030");};return nil ,nil ;
};_egbg :=_bfebd .reduceTiling (_cafaa ,_eca );_egbg =_egbg .subdivide ();return _egbg ,_abce ;};type stateStack []*textState ;
// ApplyArea processes the page text only within the specified area `bbox`.
// Each time ApplyArea is called, it updates the result set in `pt`.
// Can be called multiple times in a row with different bounding boxes.
func (_dfa *PageText )ApplyArea (bbox _ec .PdfRectangle ){_ebab :=make ([]*textMark ,0,len (_dfa ._dggc ));for _ ,_fcb :=range _dfa ._dggc {if _ffbg (_fcb .bbox (),bbox ){_ebab =append (_ebab ,_fcb );};};var _ccb paraList ;_ddfd :=len (_ebab );for _fffg :=0;
_fffg < 360&&_ddfd > 0;_fffg +=90{_cdd :=make ([]*textMark ,0,len (_ebab )-_ddfd );for _ ,_ddd :=range _ebab {if _ddd ._ddcb ==_fffg {_cdd =append (_cdd ,_ddd );};};if len (_cdd )> 0{_gcgc :=_ffdfd (_cdd ,_dfa ._gef ,nil ,nil );_ccb =append (_ccb ,_gcgc ...);
_ddfd -=len (_cdd );};};_ggcb :=new (_fb .Buffer );_ccb .writeText (_ggcb );_dfa ._ddab =_ggcb .String ();_dfa ._dgaa =_ccb .toTextMarks ();_dfa ._efd =_ccb .tables ();};func (_gdga rectRuling )checkWidth (_facg ,_edag float64 )(float64 ,bool ){_faagc :=_edag -_facg ;
_agef :=_faagc <=_dfbb ;return _faagc ,_agef ;};func _cccd (_efgcg ,_fdda _dg .Point )bool {return _efgcg .X ==_fdda .X &&_efgcg .Y ==_fdda .Y };func (_efgae *shapesState )lineTo (_egeb ,_bgge float64 ){if _bgec {_cc .Log .Info ("\u006c\u0069\u006eeT\u006f\u0028\u0025\u002e\u0032\u0066\u002c\u0025\u002e\u0032\u0066\u0020\u0070\u003d\u0025\u002e\u0032\u0066",_egeb ,_bgge ,_efgae .devicePoint (_egeb ,_bgge ));
};_efgae .addPoint (_egeb ,_bgge );};func (_gdff *textLine )pullWord (_fcce *wordBag ,_caaa *textWord ,_agace int ){_gdff .appendWord (_caaa );_fcce .removeWord (_caaa ,_agace );};
// Marks returns the TextMark collection for a page. It represents all the text on the page.
func (_caac PageText )Marks ()*TextMarkArray {return &TextMarkArray {_bccg :_caac ._dgaa }};func (_ddca paraList )merge ()*textPara {_cc .Log .Trace ("\u006d\u0065\u0072\u0067\u0065:\u0020\u0070\u0061\u0072\u0061\u0073\u003d\u0025\u0064\u0020\u003d\u003d\u003d=\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u0078\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d",len (_ddca ));
if len (_ddca )==0{return nil ;};_ddca .sortReadingOrder ();_dcd :=_ddca [0].PdfRectangle ;_abbfb :=_ddca [0]._dagfb ;for _ ,_cdbc :=range _ddca [1:]{_dcd =_egfc (_dcd ,_cdbc .PdfRectangle );_abbfb =append (_abbfb ,_cdbc ._dagfb ...);};return _eegg (_dcd ,_abbfb );
};func (_eecbf *subpath )makeRectRuling (_eaafg _g .Color )(*ruling ,bool ){if _gbce {_cc .Log .Info ("\u006d\u0061\u006beR\u0065\u0063\u0074\u0052\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0070\u0061\u0074\u0068\u003d\u0025\u0076",_eecbf );};_ccce :=_eecbf ._bgga [:4];
_gcbg :=make (map[int ]rulingKind ,len (_ccce ));for _cccc ,_eeagd :=range _ccce {_gcfe :=_eecbf ._bgga [(_cccc +1)%4];_gcbg [_cccc ]=_defc (_eeagd ,_gcfe );if _gbce {_a .Printf ("\u0025\u0034\u0064: \u0025\u0073\u0020\u003d\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u002d\u0020\u0025\u0036\u002e\u0032\u0066",_cccc ,_gcbg [_cccc ],_eeagd ,_gcfe );
};};if _gbce {_a .Printf ("\u0020\u0020\u0020\u006b\u0069\u006e\u0064\u0073\u003d\u0025\u002b\u0076\u000a",_gcbg );};var _fcfe ,_edea []int ;for _cdca ,_edcge :=range _gcbg {switch _edcge {case _aagf :_edea =append (_edea ,_cdca );case _bcgg :_fcfe =append (_fcfe ,_cdca );
};};if _gbce {_a .Printf ("\u0020\u0020 \u0068\u006f\u0072z\u0073\u003d\u0025\u0064\u0020\u0025\u002b\u0076\u000a",len (_edea ),_edea );_a .Printf ("\u0020\u0020 \u0076\u0065\u0072t\u0073\u003d\u0025\u0064\u0020\u0025\u002b\u0076\u000a",len (_fcfe ),_fcfe );
};_dbcdb :=(len (_edea )==2&&len (_fcfe )==2)||(len (_edea )==2&&len (_fcfe )==0&&_bggfg (_ccce [_edea [0]],_ccce [_edea [1]]))||(len (_fcfe )==2&&len (_edea )==0&&_daec (_ccce [_fcfe [0]],_ccce [_fcfe [1]]));if _gbce {_a .Printf (" \u0020\u0020\u0068\u006f\u0072\u007as\u003d\u0025\u0064\u0020\u0076\u0065\u0072\u0074\u0073=\u0025\u0064\u0020o\u006b=\u0025\u0074\u000a",len (_edea ),len (_fcfe ),_dbcdb );
};if !_dbcdb {if _gbce {_cc .Log .Error ("\u0021!\u006d\u0061\u006b\u0065R\u0065\u0063\u0074\u0052\u0075l\u0069n\u0067:\u0020\u0070\u0061\u0074\u0068\u003d\u0025v",_eecbf );_a .Printf (" \u0020\u0020\u0068\u006f\u0072\u007as\u003d\u0025\u0064\u0020\u0076\u0065\u0072\u0074\u0073=\u0025\u0064\u0020o\u006b=\u0025\u0074\u000a",len (_edea ),len (_fcfe ),_dbcdb );
};return &ruling {},false ;};if len (_fcfe )==0{for _ffgb ,_afabd :=range _gcbg {if _afabd !=_aagf {_fcfe =append (_fcfe ,_ffgb );};};};if len (_edea )==0{for _cbge ,_fgbeg :=range _gcbg {if _fgbeg !=_bcgg {_edea =append (_edea ,_cbge );};};};if _gbce {_cc .Log .Info ("\u006da\u006b\u0065R\u0065\u0063\u0074\u0052u\u006c\u0069\u006eg\u003a\u0020\u0068\u006f\u0072\u007a\u0073\u003d\u0025d \u0076\u0065\u0072t\u0073\u003d%\u0064\u0020\u0070\u006f\u0069\u006et\u0073\u003d%\u0064\u000a"+"\u0009\u0020\u0068o\u0072\u007a\u0073\u003d\u0025\u002b\u0076\u000a"+"\u0009\u0020\u0076e\u0072\u0074\u0073\u003d\u0025\u002b\u0076\u000a"+"\t\u0070\u006f\u0069\u006e\u0074\u0073\u003d\u0025\u002b\u0076",len (_edea ),len (_fcfe ),len (_ccce ),_edea ,_fcfe ,_ccce );
};var _ffbgc ,_eggc ,_gebcff ,_fdde _dg .Point ;if _ccce [_edea [0]].Y > _ccce [_edea [1]].Y {_gebcff ,_fdde =_ccce [_edea [0]],_ccce [_edea [1]];}else {_gebcff ,_fdde =_ccce [_edea [1]],_ccce [_edea [0]];};if _ccce [_fcfe [0]].X > _ccce [_fcfe [1]].X {_ffbgc ,_eggc =_ccce [_fcfe [0]],_ccce [_fcfe [1]];
}else {_ffbgc ,_eggc =_ccce [_fcfe [1]],_ccce [_fcfe [0]];};_ggfd :=_ec .PdfRectangle {Llx :_ffbgc .X ,Urx :_eggc .X ,Lly :_fdde .Y ,Ury :_gebcff .Y };if _ggfd .Llx > _ggfd .Urx {_ggfd .Llx ,_ggfd .Urx =_ggfd .Urx ,_ggfd .Llx ;};if _ggfd .Lly > _ggfd .Ury {_ggfd .Lly ,_ggfd .Ury =_ggfd .Ury ,_ggfd .Lly ;
};_aeaf :=rectRuling {PdfRectangle :_ggfd ,_dffbd :_bfeg (_ggfd ),Color :_eaafg };if _aeaf ._dffbd ==_ggad {if _gbce {_cc .Log .Error ("\u006da\u006b\u0065\u0052\u0065\u0063\u0074\u0052\u0075\u006c\u0069\u006eg\u003a\u0020\u006b\u0069\u006e\u0064\u003d\u006e\u0069\u006c");
};return nil ,false ;};_ddbfe ,_ffaf :=_aeaf .asRuling ();if !_ffaf {if _gbce {_cc .Log .Error ("\u006da\u006b\u0065\u0052\u0065c\u0074\u0052\u0075\u006c\u0069n\u0067:\u0020!\u0069\u0073\u0052\u0075\u006c\u0069\u006eg");};return nil ,false ;};if _ccde {_a .Printf ("\u0020\u0020\u0020\u0072\u003d\u0025\u0073\u000a",_ddbfe .String ());
};return _ddbfe ,true ;};func _eeeec (_dcea *wordBag ,_cfc float64 ,_fbcb ,_aaed rulingList )[]*wordBag {var _dgdf []*wordBag ;for _ ,_dgda :=range _dcea .depthIndexes (){_dfgeg :=false ;for !_dcea .empty (_dgda ){_fbdf :=_dcea .firstReadingIndex (_dgda );
_fefb :=_dcea .firstWord (_fbdf );_edfa :=_efafa (_fefb ,_cfc ,_fbcb ,_aaed );_dcea .removeWord (_fefb ,_fbdf );if _ebdf {_cc .Log .Info ("\u0066\u0069\u0072\u0073\u0074\u0057\u006f\u0072\u0064\u0020\u005e\u005e^\u005e\u0020\u0025\u0073",_fefb .String ());
};for _bfdc :=true ;_bfdc ;_bfdc =_dfgeg {_dfgeg =false ;_bdg :=_eef *_edfa ._dde ;_ecee :=_bgfd *_edfa ._dde ;_ceea :=_bfccc *_edfa ._dde ;if _ebdf {_cc .Log .Info ("\u0070a\u0072a\u0057\u006f\u0072\u0064\u0073\u0020\u0064\u0065\u0070\u0074\u0068 \u0025\u002e\u0032\u0066 \u002d\u0020\u0025\u002e\u0032f\u0020\u006d\u0061\u0078\u0049\u006e\u0074\u0072\u0061\u0044\u0065\u0070\u0074\u0068\u0047\u0061\u0070\u003d\u0025\u002e\u0032\u0066\u0020\u006d\u0061\u0078\u0049\u006e\u0074\u0072\u0061R\u0065\u0061\u0064\u0069\u006e\u0067\u0047\u0061p\u003d\u0025\u002e\u0032\u0066",_edfa .minDepth (),_edfa .maxDepth (),_ceea ,_ecee );
};if _dcea .scanBand ("\u0076\u0065\u0072\u0074\u0069\u0063\u0061\u006c",_edfa ,_gafa (_dbfd ,0),_edfa .minDepth ()-_ceea ,_edfa .maxDepth ()+_ceea ,_cgac ,false ,false )> 0{_dfgeg =true ;};if _dcea .scanBand ("\u0068\u006f\u0072\u0069\u007a\u006f\u006e\u0074\u0061\u006c",_edfa ,_gafa (_dbfd ,_ecee ),_edfa .minDepth (),_edfa .maxDepth (),_beaf ,false ,false )> 0{_dfgeg =true ;
};if _dfgeg {continue ;};_badf :=_dcea .scanBand ("",_edfa ,_gafa (_gggaf ,_bdg ),_edfa .minDepth (),_edfa .maxDepth (),_abcc ,true ,false );if _badf > 0{_dded :=(_edfa .maxDepth ()-_edfa .minDepth ())/_edfa ._dde ;if (_badf > 1&&float64 (_badf )> 0.3*_dded )||_badf <=10{if _dcea .scanBand ("\u006f\u0074\u0068e\u0072",_edfa ,_gafa (_gggaf ,_bdg ),_edfa .minDepth (),_edfa .maxDepth (),_abcc ,false ,true )> 0{_dfgeg =true ;
};};};};_dgdf =append (_dgdf ,_edfa );};};return _dgdf ;};type cachedImage struct{_ed *_ec .Image ;_ae _ec .PdfColorspace ;};func (_bdd *wordBag )pullWord (_agc *textWord ,_ega int ,_baadg map[int ]map[*textWord ]struct{}){_bdd .PdfRectangle =_egfc (_bdd .PdfRectangle ,_agc .PdfRectangle );
if _agc ._cgba > _bdd ._dde {_bdd ._dde =_agc ._cgba ;};_bdd ._fbdb [_ega ]=append (_bdd ._fbdb [_ega ],_agc );_baadg [_ega ][_agc ]=struct{}{};};func (_fbff compositeCell )String ()string {_afgc :="";if len (_fbff .paraList )> 0{_afgc =_fdba (_fbff .paraList .merge ().text (),50);
};return _a .Sprintf ("\u0025\u0036\u002e\u0032\u0066\u0020\u0025\u0064\u0020\u0070\u0061\u0072a\u0073\u0020\u0025\u0071",_fbff .PdfRectangle ,len (_fbff .paraList ),_afgc );};func (_agfg gridTiling )log (_cfge string ){if !_badda {return ;};_cc .Log .Info ("\u0074i\u006ci\u006e\u0067\u003a\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0071",len (_agfg ._cdcdg ),len (_agfg ._bfag ),_cfge );
_a .Printf ("\u0020\u0020\u0020l\u006c\u0078\u003d\u0025\u002e\u0032\u0066\u000a",_agfg ._cdcdg );_a .Printf ("\u0020\u0020\u0020l\u006c\u0079\u003d\u0025\u002e\u0032\u0066\u000a",_agfg ._bfag );for _adge ,_bedeg :=range _agfg ._bfag {_aegde ,_agag :=_agfg ._bcdb [_bedeg ];
if !_agag {continue ;};_a .Printf ("%\u0034\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u000a",_adge ,_bedeg );for _geed ,_ffdfa :=range _agfg ._cdcdg {_eaff ,_cgcf :=_aegde [_ffdfa ];if !_cgcf {continue ;};_a .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_geed ,_eaff .String ());
};};};const (_fabf markKind =iota ;_gdeg ;_fbac ;_afec ;);
// String returns a human readable description of `s`.
func (_gfagg intSet )String ()string {var _fdgfe []int ;for _egge :=range _gfagg {if _gfagg .has (_egge ){_fdgfe =append (_fdgfe ,_egge );};};_ef .Ints (_fdgfe );return _a .Sprintf ("\u0025\u002b\u0076",_fdgfe );};func (_gaed rulingList )primMinMax ()(float64 ,float64 ){_cfde ,_cafag :=_gaed [0]._dedc ,_gaed [0]._dedc ;
for _ ,_ceca :=range _gaed [1:]{if _ceca ._dedc < _cfde {_cfde =_ceca ._dedc ;}else if _ceca ._dedc > _cafag {_cafag =_ceca ._dedc ;};};return _cfde ,_cafag ;};func (_deec *textTable )logComposite (_afaf string ){if !_gdbf {return ;};_cc .Log .Info ("\u007e~\u007eP\u0061\u0072\u0061\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0073",_deec ._ecfcf ,_deec ._bbgb ,_afaf );
_a .Printf ("\u0025\u0035\u0073 \u007c","");for _bagdd :=0;_bagdd < _deec ._ecfcf ;_bagdd ++{_a .Printf ("\u0025\u0033\u0064 \u007c",_bagdd );};_a .Println ("");_a .Printf ("\u0025\u0035\u0073 \u002b","");for _eacfd :=0;_eacfd < _deec ._ecfcf ;_eacfd ++{_a .Printf ("\u0025\u0033\u0073 \u002b","\u002d\u002d\u002d");
};_a .Println ("");for _aecg :=0;_aecg < _deec ._bbgb ;_aecg ++{_a .Printf ("\u0025\u0035\u0064 \u007c",_aecg );for _fbafb :=0;_fbafb < _deec ._ecfcf ;_fbafb ++{_aagbff ,_ :=_deec ._gdag [_aabdc (_fbafb ,_aecg )].parasBBox ();_a .Printf ("\u0025\u0033\u0064 \u007c",len (_aagbff ));
};_a .Println ("");};_cc .Log .Info ("\u007e~\u007eT\u0065\u0078\u0074\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0073",_deec ._ecfcf ,_deec ._bbgb ,_afaf );_a .Printf ("\u0025\u0035\u0073 \u007c","");for _eegf :=0;_eegf < _deec ._ecfcf ;_eegf ++{_a .Printf ("\u0025\u0031\u0032\u0064\u0020\u007c",_eegf );
};_a .Println ("");_a .Printf ("\u0025\u0035\u0073 \u002b","");for _fdef :=0;_fdef < _deec ._ecfcf ;_fdef ++{_a .Print ("\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d-\u002d\u002d\u002d\u002b");};_a .Println ("");for _cgcd :=0;_cgcd < _deec ._bbgb ;
_cgcd ++{_a .Printf ("\u0025\u0035\u0064 \u007c",_cgcd );for _ggbb :=0;_ggbb < _deec ._ecfcf ;_ggbb ++{_bebag ,_ :=_deec ._gdag [_aabdc (_ggbb ,_cgcd )].parasBBox ();_dead :="";_cdbd :=_bebag .merge ();if _cdbd !=nil {_dead =_cdbd .text ();};_dead =_a .Sprintf ("\u0025\u0071",_fdba (_dead ,12));
_dead =_dead [1:len (_dead )-1];_a .Printf ("\u0025\u0031\u0032\u0073\u0020\u007c",_dead );};_a .Println ("");};};func _edbg (_cfac *wordBag ,_aggfb int )*textLine {_cacb :=_cfac .firstWord (_aggfb );_gdba :=textLine {PdfRectangle :_cacb .PdfRectangle ,_deab :_cacb ._cgba ,_agfa :_cacb ._beef };
_gdba .pullWord (_cfac ,_cacb ,_aggfb );return &_gdba ;};func _gdfge (_gdeae string )bool {for _ ,_fcdb :=range _gdeae {if !_f .IsSpace (_fcdb ){return false ;};};return true ;};func (_dcdf *textPara )writeCellText (_ddgde _d .Writer ){for _ddbc ,_faef :=range _dcdf ._dagfb {_aedf :=_faef .text ();
_dbdd :=_dbfa &&_faef .endsInHyphen ()&&_ddbc !=len (_dcdf ._dagfb )-1;if _dbdd {_aedf =_cdff (_aedf );};_ddgde .Write ([]byte (_aedf ));if !(_dbdd ||_ddbc ==len (_dcdf ._dagfb )-1){_ddgde .Write ([]byte (_eecb (_faef ._agfa ,_dcdf ._dagfb [_ddbc +1]._agfa )));
};};};func (_gged *wordBag )text ()string {_bbgd :=_gged .allWords ();_dccc :=make ([]string ,len (_bbgd ));for _dabe ,_cbeb :=range _bbgd {_dccc [_dabe ]=_cbeb ._aaaf ;};return _bg .Join (_dccc ,"\u0020");};
// String returns a description of `l`.
func (_gbab *textLine )String ()string {return _a .Sprintf ("\u0025\u002e2\u0066\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065\u003d\u0025\u002e\u0032\u0066\u0020\"%\u0073\u0022",_gbab ._agfa ,_gbab .PdfRectangle ,_gbab ._deab ,_gbab .text ());
};
// ExtractPageText returns the text contents of `e` (an Extractor for a page) as a PageText.
// TODO(peterwilliams97): The stats complicate this function signature and aren't very useful.
// Replace with a function like Extract() (*PageText, error)
func (_dcg *Extractor )ExtractPageText ()(*PageText ,int ,int ,error ){_cag ,_cfa ,_bcb ,_deb :=_dcg .extractPageText (_dcg ._fbg ,_dcg ._fcf ,_dg .IdentityMatrix (),0);if _deb !=nil {return nil ,0,0,_deb ;};_cag .computeViews ();_deb =_adceb (_cag );if _deb !=nil {return nil ,0,0,_deb ;
};return _cag ,_cfa ,_bcb ,nil ;};func _bbe (_cacbg _ec .PdfRectangle )*ruling {return &ruling {_ecef :_aagf ,_dedc :_cacbg .Lly ,_debg :_cacbg .Llx ,_abfa :_cacbg .Urx };};type subpath struct{_bgga []_dg .Point ;_dgb bool ;};func (_bffe *shapesState )moveTo (_ggbe ,_babf float64 ){_bffe ._eecc =true ;
_bffe ._cgd =_bffe .devicePoint (_ggbe ,_babf );if _bgec {_cc .Log .Info ("\u006d\u006fv\u0065\u0054\u006f\u003a\u0020\u0025\u002e\u0032\u0066\u002c\u0025\u002e\u0032\u0066\u0020\u0064\u0065\u0076\u0069\u0063\u0065\u003d%.\u0032\u0066",_ggbe ,_babf ,_bffe ._cgd );
};};func (_aaa *wordBag )minDepth ()float64 {return _aaa ._ccaae -(_aaa .Ury -_aaa ._dde )};func (_dff *shapesState )stroke (_cebd *[]pathSection ){_agb :=pathSection {_gfcc :_dff ._ecdd ,Color :_dff ._cfg .getStrokeColor ()};*_cebd =append (*_cebd ,_agb );
if _ccde {_a .Printf ("\u0020 \u0020\u0020S\u0054\u0052\u004fK\u0045\u003a\u0020\u0025\u0064\u0020\u0073t\u0072\u006f\u006b\u0065\u0073\u0020s\u0073\u003d\u0025\u0073\u0020\u0063\u006f\u006c\u006f\u0072\u003d%\u002b\u0076\u0020\u0025\u0036\u002e\u0032\u0066\u000a",len (*_cebd ),_dff ,_dff ._cfg .getStrokeColor (),_agb .bbox ());
if _baaff {for _bgfb ,_afdd :=range _dff ._ecdd {_a .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_bgfb ,_afdd );if _bgfb ==10{break ;};};};};};func (_dbfe *wordBag )applyRemovals (_fcagf map[int ]map[*textWord ]struct{}){for _cgeb ,_aaba :=range _fcagf {if len (_aaba )==0{continue ;
};_cee :=_dbfe ._fbdb [_cgeb ];_gggg :=len (_cee )-len (_aaba );if _gggg ==0{delete (_dbfe ._fbdb ,_cgeb );continue ;};_dgeaf :=make ([]*textWord ,_gggg );_cdfg :=0;for _ ,_cfbd :=range _cee {if _ ,_edde :=_aaba [_cfbd ];!_edde {_dgeaf [_cdfg ]=_cfbd ;
_cdfg ++;};};_dbfe ._fbdb [_cgeb ]=_dgeaf ;};};func (_cdec paraList )addNeighbours (){_dcaaa :=func (_gbdc []int ,_afcga *textPara )([]*textPara ,[]*textPara ){_gaaa :=make ([]*textPara ,0,len (_gbdc )-1);_bgbc :=make ([]*textPara ,0,len (_gbdc )-1);for _ ,_daeb :=range _gbdc {_dbdba :=_cdec [_daeb ];
if _dbdba .Urx <=_afcga .Llx {_gaaa =append (_gaaa ,_dbdba );}else if _dbdba .Llx >=_afcga .Urx {_bgbc =append (_bgbc ,_dbdba );};};return _gaaa ,_bgbc ;};_adcbd :=func (_feeda []int ,_aaddf *textPara )([]*textPara ,[]*textPara ){_dgdfb :=make ([]*textPara ,0,len (_feeda )-1);
_defg :=make ([]*textPara ,0,len (_feeda )-1);for _ ,_feebc :=range _feeda {_dgeab :=_cdec [_feebc ];if _dgeab .Ury <=_aaddf .Lly {_defg =append (_defg ,_dgeab );}else if _dgeab .Lly >=_aaddf .Ury {_dgdfb =append (_dgdfb ,_dgeab );};};return _dgdfb ,_defg ;
};_bgac :=_cdec .yNeighbours (_acbf );for _ ,_gdcd :=range _cdec {_ggdf :=_bgac [_gdcd ];if len (_ggdf )==0{continue ;};_egeff ,_babge :=_dcaaa (_ggdf ,_gdcd );if len (_egeff )==0&&len (_babge )==0{continue ;};if len (_egeff )> 0{_ebgce :=_egeff [0];for _ ,_bdcc :=range _egeff [1:]{if _bdcc .Urx >=_ebgce .Urx {_ebgce =_bdcc ;
};};for _ ,_fcagg :=range _egeff {if _fcagg !=_ebgce &&_fcagg .Urx > _ebgce .Llx {_ebgce =nil ;break ;};};if _ebgce !=nil &&_fdgb (_gdcd .PdfRectangle ,_ebgce .PdfRectangle ){_gdcd ._gdfa =_ebgce ;};};if len (_babge )> 0{_cfce :=_babge [0];for _ ,_gcdgc :=range _babge [1:]{if _gcdgc .Llx <=_cfce .Llx {_cfce =_gcdgc ;
};};for _ ,_fcfa :=range _babge {if _fcfa !=_cfce &&_fcfa .Llx < _cfce .Urx {_cfce =nil ;break ;};};if _cfce !=nil &&_fdgb (_gdcd .PdfRectangle ,_cfce .PdfRectangle ){_gdcd ._cdbf =_cfce ;};};};_bgac =_cdec .xNeighbours (_bfef );for _ ,_cfec :=range _cdec {_ageg :=_bgac [_cfec ];
if len (_ageg )==0{continue ;};_dcfa ,_gfde :=_adcbd (_ageg ,_cfec );if len (_dcfa )==0&&len (_gfde )==0{continue ;};if len (_gfde )> 0{_cabb :=_gfde [0];for _ ,_cbbbb :=range _gfde [1:]{if _cbbbb .Ury >=_cabb .Ury {_cabb =_cbbbb ;};};for _ ,_cgce :=range _gfde {if _cgce !=_cabb &&_cgce .Ury > _cabb .Lly {_cabb =nil ;
break ;};};if _cabb !=nil &&_dbfb (_cfec .PdfRectangle ,_cabb .PdfRectangle ){_cfec ._bfaef =_cabb ;};};if len (_dcfa )> 0{_acafg :=_dcfa [0];for _ ,_ecce :=range _dcfa [1:]{if _ecce .Lly <=_acafg .Lly {_acafg =_ecce ;};};for _ ,_agfff :=range _dcfa {if _agfff !=_acafg &&_agfff .Lly < _acafg .Ury {_acafg =nil ;
break ;};};if _acafg !=nil &&_dbfb (_cfec .PdfRectangle ,_acafg .PdfRectangle ){_cfec ._ffef =_acafg ;};};};for _ ,_abgab :=range _cdec {if _abgab ._gdfa !=nil &&_abgab ._gdfa ._cdbf !=_abgab {_abgab ._gdfa =nil ;};if _abgab ._ffef !=nil &&_abgab ._ffef ._bfaef !=_abgab {_abgab ._ffef =nil ;
};if _abgab ._cdbf !=nil &&_abgab ._cdbf ._gdfa !=_abgab {_abgab ._cdbf =nil ;};if _abgab ._bfaef !=nil &&_abgab ._bfaef ._ffef !=_abgab {_abgab ._bfaef =nil ;};};};func (_fbefg *textTable )markCells (){for _dagd :=0;_dagd < _fbefg ._bbgb ;_dagd ++{for _bceb :=0;
_bceb < _fbefg ._ecfcf ;_bceb ++{_ffcf :=_fbefg .get (_bceb ,_dagd );if _ffcf !=nil {_ffcf ._ebgd =true ;};};};};func (_add *imageExtractContext )extractXObjectImage (_adc *_fd .PdfObjectName ,_ggc _af .GraphicsState ,_ebg *_ec .PdfPageResources )error {_dda ,_ :=_ebg .GetXObjectByName (*_adc );
if _dda ==nil {return nil ;};_gec ,_bff :=_add ._cbe [_dda ];if !_bff {_ce ,_bfb :=_ebg .GetXObjectImageByName (*_adc );if _bfb !=nil {return _bfb ;};if _ce ==nil {return nil ;};_beg ,_bfb :=_ce .ToImage ();if _bfb !=nil {return _bfb ;};_gec =&cachedImage {_ed :_beg ,_ae :_ce .ColorSpace };
_add ._cbe [_dda ]=_gec ;};_cea :=_gec ._ed ;_gac :=_gec ._ae ;_ceb ,_caa :=_gac .ImageToRGB (*_cea );if _caa !=nil {return _caa ;};_cc .Log .Debug ("@\u0044\u006f\u0020\u0043\u0054\u004d\u003a\u0020\u0025\u0073",_ggc .CTM .String ());_fdd :=ImageMark {Image :&_ceb ,Width :_ggc .CTM .ScalingFactorX (),Height :_ggc .CTM .ScalingFactorY (),Angle :_ggc .CTM .Angle ()};
_fdd .X ,_fdd .Y =_ggc .CTM .Translation ();_add ._gde =append (_add ._gde ,_fdd );_add ._de ++;return nil ;};var _gccdc =map[rulingKind ]string {_ggad :"\u006e\u006f\u006e\u0065",_aagf :"\u0068\u006f\u0072\u0069\u007a\u006f\u006e\u0074\u0061\u006c",_bcgg :"\u0076\u0065\u0072\u0074\u0069\u0063\u0061\u006c"};
func (_accgb paraList )yNeighbours (_ffgf float64 )map[*textPara ][]int {_dcaaf :=make ([]event ,2*len (_accgb ));if _ffgf ==0{for _becg ,_ccff :=range _accgb {_dcaaf [2*_becg ]=event {_ccff .Lly ,true ,_becg };_dcaaf [2*_becg +1]=event {_ccff .Ury ,false ,_becg };
};}else {for _cdea ,_aabb :=range _accgb {_dcaaf [2*_cdea ]=event {_aabb .Lly -_ffgf *_aabb .fontsize (),true ,_cdea };_dcaaf [2*_cdea +1]=event {_aabb .Ury +_ffgf *_aabb .fontsize (),false ,_cdea };};};return _accgb .eventNeighbours (_dcaaf );};func (_efge paraList )eventNeighbours (_fdgcb []event )map[*textPara ][]int {_ef .Slice (_fdgcb ,func (_eegfa ,_eaccf int )bool {_bdee ,_gcaf :=_fdgcb [_eegfa ],_fdgcb [_eaccf ];
_dgef ,_bgfa :=_bdee ._dcbac ,_gcaf ._dcbac ;if _dgef !=_bgfa {return _dgef < _bgfa ;};if _bdee ._abdfe !=_gcaf ._abdfe {return _bdee ._abdfe ;};return _eegfa < _eaccf ;});_bfda :=make (map[int ]intSet );_edfe :=make (intSet );for _ ,_bcgaf :=range _fdgcb {if _bcgaf ._abdfe {_bfda [_bcgaf ._cafac ]=make (intSet );
for _fgff :=range _edfe {if _fgff !=_bcgaf ._cafac {_bfda [_bcgaf ._cafac ].add (_fgff );_bfda [_fgff ].add (_bcgaf ._cafac );};};_edfe .add (_bcgaf ._cafac );}else {_edfe .del (_bcgaf ._cafac );};};_cceaa :=map[*textPara ][]int {};for _bfbda ,_cbbc :=range _bfda {_fccdd :=_efge [_bfbda ];
if len (_cbbc )==0{_cceaa [_fccdd ]=nil ;continue ;};_gbdb :=make ([]int ,len (_cbbc ));_gggbb :=0;for _eceb :=range _cbbc {_gbdb [_gggbb ]=_eceb ;_gggbb ++;};_cceaa [_fccdd ]=_gbdb ;};return _cceaa ;};func (_edab *textObject )nextLine (){_edab .moveLP (0,-_edab ._gbad ._ffca )};
func (_becf paraList )llyRange (_dagf []int ,_gcdd ,_cdfcd float64 )[]int {_eacf :=len (_becf );if _cdfcd < _becf [_dagf [0]].Lly ||_gcdd > _becf [_dagf [_eacf -1]].Lly {return nil ;};_gfcgg :=_ef .Search (_eacf ,func (_fbgc int )bool {return _becf [_dagf [_fbgc ]].Lly >=_gcdd });
_ggca :=_ef .Search (_eacf ,func (_gffg int )bool {return _becf [_dagf [_gffg ]].Lly > _cdfcd });return _dagf [_gfcgg :_ggca ];};func (_eggb *wordBag )firstReadingIndex (_ebeg int )int {_ggaf :=_eggb .firstWord (_ebeg )._cgba ;_ead :=float64 (_ebeg +1)*_eeee ;
_fdgf :=_ead +_baga *_ggaf ;_cbde :=_ebeg ;for _ ,_edgd :=range _eggb .depthBand (_ead ,_fdgf ){if _cggc (_eggb .firstWord (_edgd ),_eggb .firstWord (_cbde ))< 0{_cbde =_edgd ;};};return _cbde ;};func (_gacf gridTile )complete ()bool {return _gacf .numBorders ()==4};
func _ddfdg (_agdfd map[float64 ]map[float64 ]gridTile )[]float64 {_dccbg :=make ([]float64 ,0,len (_agdfd ));for _egege :=range _agdfd {_dccbg =append (_dccbg ,_egege );};_ef .Float64s (_dccbg );_bdab :=len (_dccbg );for _dcec :=0;_dcec < _bdab /2;_dcec ++{_dccbg [_dcec ],_dccbg [_bdab -1-_dcec ]=_dccbg [_bdab -1-_dcec ],_dccbg [_dcec ];
};return _dccbg ;};
// String returns a description of `k`.
func (_fffcd markKind )String ()string {_aaee ,_dabc :=_afdg [_fffcd ];if !_dabc {return _a .Sprintf ("\u004e\u006f\u0074\u0020\u0061\u0020\u006d\u0061\u0072k\u003a\u0020\u0025\u0064",_fffcd );};return _aaee ;};var (_edcdb =map[rune ]string {0x0060:"\u0300",0x02CB:"\u0300",0x0027:"\u0301",0x00B4:"\u0301",0x02B9:"\u0301",0x02CA:"\u0301",0x005E:"\u0302",0x02C6:"\u0302",0x007E:"\u0303",0x02DC:"\u0303",0x00AF:"\u0304",0x02C9:"\u0304",0x02D8:"\u0306",0x02D9:"\u0307",0x00A8:"\u0308",0x00B0:"\u030a",0x02DA:"\u030a",0x02BA:"\u030b",0x02DD:"\u030b",0x02C7:"\u030c",0x02C8:"\u030d",0x0022:"\u030e",0x02BB:"\u0312",0x02BC:"\u0313",0x0486:"\u0313",0x055A:"\u0313",0x02BD:"\u0314",0x0485:"\u0314",0x0559:"\u0314",0x02D4:"\u031d",0x02D5:"\u031e",0x02D6:"\u031f",0x02D7:"\u0320",0x02B2:"\u0321",0x00B8:"\u0327",0x02CC:"\u0329",0x02B7:"\u032b",0x02CD:"\u0331",0x005F:"\u0332",0x204E:"\u0359"};
);func (_ggd paraList )readBefore (_cgda []int ,_dfgea ,_faaef int )bool {_effb ,_eabb :=_ggd [_dfgea ],_ggd [_faaef ];if _degb (_effb ,_eabb )&&_effb .Lly > _eabb .Lly {return true ;};if !(_effb ._abcge .Urx < _eabb ._abcge .Llx ){return false ;};_feda ,_gdac :=_effb .Lly ,_eabb .Lly ;
if _feda > _gdac {_gdac ,_feda =_feda ,_gdac ;};_afcc :=_fg .Max (_effb ._abcge .Llx ,_eabb ._abcge .Llx );_bege :=_fg .Min (_effb ._abcge .Urx ,_eabb ._abcge .Urx );_baac :=_ggd .llyRange (_cgda ,_feda ,_gdac );for _ ,_caec :=range _baac {if _caec ==_dfgea ||_caec ==_faaef {continue ;
};_bgdc :=_ggd [_caec ];if _bgdc ._abcge .Llx <=_bege &&_afcc <=_bgdc ._abcge .Urx {return false ;};};return true ;};type textPara struct{_ec .PdfRectangle ;_abcge _ec .PdfRectangle ;_dagfb []*textLine ;_ecfce *textTable ;_ebgd bool ;_dcdd bool ;_gdfa *textPara ;
_cdbf *textPara ;_ffef *textPara ;_bfaef *textPara ;};func (_ecggd rulingList )blocks (_dcaa ,_gdebe *ruling )bool {if _dcaa ._debg > _gdebe ._abfa ||_gdebe ._debg > _dcaa ._abfa {return false ;};_eefg :=_fg .Max (_dcaa ._debg ,_gdebe ._debg );_gbaa :=_fg .Min (_dcaa ._abfa ,_gdebe ._abfa );
if _dcaa ._dedc > _gdebe ._dedc {_dcaa ,_gdebe =_gdebe ,_dcaa ;};for _ ,_cggd :=range _ecggd {if _dcaa ._dedc <=_cggd ._dedc +_dfbb &&_cggd ._dedc <=_gdebe ._dedc +_dfbb &&_cggd ._debg <=_gbaa &&_eefg <=_cggd ._abfa {return true ;};};return false ;};func (_cbbd rulingList )primaries ()[]float64 {_cebc :=make (map[float64 ]struct{},len (_cbbd ));
for _ ,_agaab :=range _cbbd {_cebc [_agaab ._dedc ]=struct{}{};};_egac :=make ([]float64 ,len (_cebc ));_dabeg :=0;for _ggdc :=range _cebc {_egac [_dabeg ]=_ggdc ;_dabeg ++;};_ef .Float64s (_egac );return _egac ;};func (_aade rulingList )snapToGroups ()rulingList {_fdbec ,_dacd :=_aade .vertsHorzs ();
if len (_fdbec )> 0{_fdbec =_fdbec .snapToGroupsDirection ();};if len (_dacd )> 0{_dacd =_dacd .snapToGroupsDirection ();};_bcfe :=append (_fdbec ,_dacd ...);_bcfe .log ("\u0073\u006e\u0061p\u0054\u006f\u0047\u0072\u006f\u0075\u0070\u0073");return _bcfe ;
};func _cccfc (_cadge ,_ebbe int )int {if _cadge > _ebbe {return _cadge ;};return _ebbe ;};func (_bebg *shapesState )quadraticTo (_bgce ,_ebef ,_bfa ,_decg float64 ){if _bgec {_cc .Log .Info ("\u0071\u0075\u0061d\u0072\u0061\u0074\u0069\u0063\u0054\u006f\u003a");
};_bebg .addPoint (_bfa ,_decg );};func (_accb *textObject )showTextAdjusted (_gga *_fd .PdfObjectArray )error {_gfa :=false ;for _ ,_fee :=range _gga .Elements (){switch _fee .(type ){case *_fd .PdfObjectFloat ,*_fd .PdfObjectInteger :_bebf ,_ggb :=_fd .GetNumberAsFloat (_fee );
if _ggb !=nil {_cc .Log .Debug ("\u0045\u0052\u0052\u004fR\u003a\u0020\u0073\u0068\u006f\u0077\u0054\u0065\u0078t\u0041\u0064\u006a\u0075\u0073\u0074\u0065\u0064\u002e\u0020\u0042\u0061\u0064\u0020\u006e\u0075\u006d\u0065r\u0069\u0063\u0061\u006c\u0020a\u0072\u0067\u002e\u0020\u006f\u003d\u0025\u0073\u0020\u0061\u0072\u0067\u0073\u003d\u0025\u002b\u0076",_fee ,_gga );
return _ggb ;};_agad ,_cfad :=-_bebf *0.001*_accb ._gbad ._eab ,0.0;if _gfa {_cfad ,_agad =_agad ,_cfad ;};_ea :=_adec (_dg .Point {X :_agad ,Y :_cfad });_accb ._aebf .Concat (_ea );case *_fd .PdfObjectString :_edcb ,_ffg :=_fd .GetStringBytes (_fee );
if !_ffg {_cc .Log .Trace ("s\u0068\u006f\u0077\u0054\u0065\u0078\u0074\u0041\u0064j\u0075\u0073\u0074\u0065\u0064\u003a\u0020Ba\u0064\u0020\u0073\u0074r\u0069\u006e\u0067\u0020\u0061\u0072\u0067\u002e\u0020o=\u0025\u0073 \u0061\u0072\u0067\u0073\u003d\u0025\u002b\u0076",_fee ,_gga );
return _fd .ErrTypeError ;};_accb .renderText (_edcb );default:_cc .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0073\u0068\u006f\u0077\u0054\u0065\u0078\u0074A\u0064\u006a\u0075\u0073\u0074\u0065\u0064\u002e\u0020\u0055\u006e\u0065\u0078p\u0065\u0063\u0074\u0065\u0064\u0020\u0074\u0079\u0070\u0065\u0020\u0028%T\u0029\u0020\u0061\u0072\u0067\u0073\u003d\u0025\u002b\u0076",_fee ,_gga );
return _fd .ErrTypeError ;};};return nil ;};func _dfgbc (_gfag _ec .PdfRectangle )*ruling {return &ruling {_ecef :_bcgg ,_dedc :_gfag .Urx ,_debg :_gfag .Lly ,_abfa :_gfag .Ury };};