unipdf/extractor/extractor.go
2024-09-14 00:10:30 +00:00

1031 lines
232 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 (_dd "bytes";_fe "errors";_cg "fmt";_cf "github.com/unidoc/unipdf/v3/common";_ag "github.com/unidoc/unipdf/v3/contentstream";_ec "github.com/unidoc/unipdf/v3/core";_ab "github.com/unidoc/unipdf/v3/internal/license";_bg "github.com/unidoc/unipdf/v3/internal/textencoding";
_b "github.com/unidoc/unipdf/v3/internal/transform";_gcb "github.com/unidoc/unipdf/v3/model";_fg "golang.org/x/image/draw";_gg "golang.org/x/text/unicode/norm";_a "image";_ca "image/color";_d "io";_g "log";_gc "math";_f "reflect";_e "regexp";_eb "sort";
_cgb "strings";_ef "unicode";_cc "unicode/utf8";);type textPara struct{_gcb .PdfRectangle ;_febg _gcb .PdfRectangle ;_ecbe []*textLine ;_gegf *textTable ;_acffe bool ;_fbfg bool ;_fagc *textPara ;_dffg *textPara ;_cgaa *textPara ;_fgbdg *textPara ;_cabf []list ;
};func _efab (_eacbb map[float64 ]gridTile )[]float64 {_fcbfb :=make ([]float64 ,0,len (_eacbb ));for _cfggg :=range _eacbb {_fcbfb =append (_fcbfb ,_cfggg );};_eb .Float64s (_fcbfb );return _fcbfb ;};func (_cgga lineRuling )asRuling ()(*ruling ,bool ){_dedb :=ruling {_cfgc :_cgga ._egab ,Color :_cgga .Color ,_baea :_aeec };
switch _cgga ._egab {case _gcaf :_dedb ._ccgff =_cgga .xMean ();_dedb ._bggg =_gc .Min (_cgga ._efgf .Y ,_cgga ._afdd .Y );_dedb ._dfadf =_gc .Max (_cgga ._efgf .Y ,_cgga ._afdd .Y );case _effb :_dedb ._ccgff =_cgga .yMean ();_dedb ._bggg =_gc .Min (_cgga ._efgf .X ,_cgga ._afdd .X );
_dedb ._dfadf =_gc .Max (_cgga ._efgf .X ,_cgga ._afdd .X );default:_cf .Log .Error ("\u0062\u0061\u0064\u0020pr\u0069\u006d\u0061\u0072\u0079\u0020\u006b\u0069\u006e\u0064\u003d\u0025\u0064",_cgga ._egab );return nil ,false ;};return &_dedb ,true ;};func (_dbdd compositeCell )hasLines (_gfag []*textLine )bool {for _fcfa ,_effge :=range _gfag {_febgb :=_cbcb (_dbdd .PdfRectangle ,_effge .PdfRectangle );
if _dcdb {_cg .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",_febgb ,_fcfa ,len (_gfag ));_cg .Printf ("\u0020\u0020\u0020\u0020 \u005e\u005e\u005e\u0063\u006f\u006d\u0070\u006f\u0073\u0069\u0074\u0065\u003d\u0025s\u000a",_dbdd );
_cg .Printf ("\u0020 \u0020 \u0020\u0020\u0020\u006c\u0069\u006e\u0065\u003d\u0025\u0073\u000a",_effge );};if _febgb {return true ;};};return false ;};func (_fbded paraList )eventNeighbours (_aedb []event )map[*textPara ][]int {_eb .Slice (_aedb ,func (_cbacc ,_daccc int )bool {_eadead ,_aafef :=_aedb [_cbacc ],_aedb [_daccc ];
_gbgdg ,_gfcgc :=_eadead ._dbge ,_aafef ._dbge ;if _gbgdg !=_gfcgc {return _gbgdg < _gfcgc ;};if _eadead ._edefc !=_aafef ._edefc {return _eadead ._edefc ;};return _cbacc < _daccc ;});_begba :=make (map[int ]intSet );_cbga :=make (intSet );for _ ,_ffca :=range _aedb {if _ffca ._edefc {_begba [_ffca ._cddgb ]=make (intSet );
for _fbfaf :=range _cbga {if _fbfaf !=_ffca ._cddgb {_begba [_ffca ._cddgb ].add (_fbfaf );_begba [_fbfaf ].add (_ffca ._cddgb );};};_cbga .add (_ffca ._cddgb );}else {_cbga .del (_ffca ._cddgb );};};_eddgc :=map[*textPara ][]int {};for _cagc ,_gdfbaa :=range _begba {_ecbfaa :=_fbded [_cagc ];
if len (_gdfbaa )==0{_eddgc [_ecbfaa ]=nil ;continue ;};_adgfb :=make ([]int ,len (_gdfbaa ));_cdcab :=0;for _fgcgg :=range _gdfbaa {_adgfb [_cdcab ]=_fgcgg ;_cdcab ++;};_eddgc [_ecbfaa ]=_adgfb ;};return _eddgc ;};var (_dcb =_fe .New ("\u0074\u0079p\u0065\u0020\u0063h\u0065\u0063\u006b\u0020\u0065\u0072\u0072\u006f\u0072");
_efb =_fe .New ("\u0072\u0061\u006e\u0067\u0065\u0020\u0063\u0068\u0065\u0063\u006b\u0020e\u0072\u0072\u006f\u0072"););func (_fce *shapesState )newSubPath (){_fce .clearPath ();if _efda {_cf .Log .Info ("\u006e\u0065\u0077\u0053\u0075\u0062\u0050\u0061\u0074h\u003a\u0020\u0025\u0073",_fce );
};};func (_bbdc *textObject )checkOp (_bbag *_ag .ContentStreamOperation ,_adb int ,_eggg bool )(_cbee bool ,_bdcgd error ){if _bbdc ==nil {var _ccgc []_ec .PdfObject ;if _adb > 0{_ccgc =_bbag .Params ;if len (_ccgc )> _adb {_ccgc =_ccgc [:_adb ];};};_cf .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",_bbag .Operand ,_ccgc );
};if _adb >=0{if len (_bbag .Params )!=_adb {if _eggg {_bdcgd =_fe .New ("\u0069n\u0063\u006f\u0072\u0072e\u0063\u0074\u0020\u0070\u0061r\u0061m\u0065t\u0065\u0072\u0020\u0063\u006f\u0075\u006et");};_cf .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",_bbag .Operand ,_adb ,len (_bbag .Params ),_bbag .Params );
return false ,_bdcgd ;};};return true ,nil ;};func (_bgaa *wordBag )allWords ()[]*textWord {var _eafd []*textWord ;for _ ,_baaa :=range _bgaa ._eafg {_eafd =append (_eafd ,_baaa ...);};return _eafd ;};func (_befc *ruling )alignsPrimary (_adadc *ruling )bool {return _befc ._cfgc ==_adadc ._cfgc &&_gc .Abs (_befc ._ccgff -_adadc ._ccgff )< _fcd *0.5;
};func (_cggg rulingList )sortStrict (){_eb .Slice (_cggg ,func (_gecgf ,_dfddg int )bool {_aafbb ,_efgg :=_cggg [_gecgf ],_cggg [_dfddg ];_abcdf ,_aaebe :=_aafbb ._cfgc ,_efgg ._cfgc ;if _abcdf !=_aaebe {return _abcdf > _aaebe ;};_baagg ,_gadf :=_aafbb ._ccgff ,_efgg ._ccgff ;
if !_eage (_baagg -_gadf ){return _baagg < _gadf ;};_baagg ,_gadf =_aafbb ._bggg ,_efgg ._bggg ;if _baagg !=_gadf {return _baagg < _gadf ;};return _aafbb ._dfadf < _efgg ._dfadf ;});};func _bddg (_dgbg *list ,_fgcf *_cgb .Builder ,_affg *string ){_bcca :=_cgaea (_dgbg ,_affg );
_fgcf .WriteString (_bcca );for _ ,_ccba :=range _dgbg ._dbece {_gfbb :=*_affg +"\u0020\u0020\u0020";_bddg (_ccba ,_fgcf ,&_gfbb );};};func _ccec (_eabc float64 )int {var _aaeg int ;if _eabc >=0{_aaeg =int (_eabc /_dbbb );}else {_aaeg =int (_eabc /_dbbb )-1;
};return _aaeg ;};
// PageTextOptions holds various options available in extraction process.
type PageTextOptions struct{_abcee bool ;_cfag bool ;};func (_bbdag pathSection )bbox ()_gcb .PdfRectangle {_bcfa :=_bbdag ._adbcg [0]._gfee [0];_acfec :=_gcb .PdfRectangle {Llx :_bcfa .X ,Urx :_bcfa .X ,Lly :_bcfa .Y ,Ury :_bcfa .Y };_ecga :=func (_bbca _b .Point ){if _bbca .X < _acfec .Llx {_acfec .Llx =_bbca .X ;
}else if _bbca .X > _acfec .Urx {_acfec .Urx =_bbca .X ;};if _bbca .Y < _acfec .Lly {_acfec .Lly =_bbca .Y ;}else if _bbca .Y > _acfec .Ury {_acfec .Ury =_bbca .Y ;};};for _ ,_ddaf :=range _bbdag ._adbcg [0]._gfee [1:]{_ecga (_ddaf );};for _ ,_dgcd :=range _bbdag ._adbcg [1:]{for _ ,_abbc :=range _dgcd ._gfee {_ecga (_abbc );
};};return _acfec ;};func (_gegd *stateStack )pop ()*textState {if _gegd .empty (){return nil ;};_fgd :=*(*_gegd )[len (*_gegd )-1];*_gegd =(*_gegd )[:len (*_gegd )-1];return &_fgd ;};func (_gca *shapesState )stroke (_ceab *[]pathSection ){_eggdg :=pathSection {_adbcg :_gca ._becf ,Color :_gca ._ebab .getStrokeColor ()};
*_ceab =append (*_ceab ,_eggdg );if _cgcb {_cg .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 (*_ceab ),_gca ,_gca ._ebab .getStrokeColor (),_eggdg .bbox ());
if _abbb {for _caea ,_ggb :=range _gca ._becf {_cg .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_caea ,_ggb );if _caea ==10{break ;};};};};};func (_gggdg paraList )findTableGrid (_cefgf gridTiling )(*textTable ,map[*textPara ]struct{}){_gabfd :=len (_cefgf ._bcfdd );
_fcadg :=len (_cefgf ._gdggf );_fdag :=textTable {_ceda :true ,_abeef :_gabfd ,_edaga :_fcadg ,_cfcac :make (map[uint64 ]*textPara ,_gabfd *_fcadg ),_agda :make (map[uint64 ]compositeCell ,_gabfd *_fcadg )};_fdag .PdfRectangle =_cefgf .PdfRectangle ;_ecdb :=make (map[*textPara ]struct{});
_deeeg :=int ((1.0-_bagd )*float64 (_gabfd *_fcadg ));_cbae :=0;if _fbfd {_cf .Log .Info ("\u0066\u0069\u006e\u0064Ta\u0062\u006c\u0065\u0047\u0072\u0069\u0064\u003a\u0020\u0025\u0064\u0020\u0078\u0020%\u0064",_gabfd ,_fcadg );};for _gecgc ,_cgce :=range _cefgf ._gdggf {_caddd ,_afec :=_cefgf ._caeg [_cgce ];
if !_afec {continue ;};for _bfde ,_gegff :=range _cefgf ._bcfdd {_fbee ,_efac :=_caddd [_gegff ];if !_efac {continue ;};_gfbc :=_gggdg .inTile (_fbee );if len (_gfbc )==0{_cbae ++;if _cbae > _deeeg {if _fbfd {_cf .Log .Info ("\u0021\u006e\u0075m\u0045\u006d\u0070\u0074\u0079\u003d\u0025\u0064",_cbae );
};return nil ,nil ;};}else {_fdag .putComposite (_bfde ,_gecgc ,_gfbc ,_fbee .PdfRectangle );for _ ,_faee :=range _gfbc {_ecdb [_faee ]=struct{}{};};};};};_dgdd :=0;for _cedg :=0;_cedg < _gabfd ;_cedg ++{_aafbd :=_fdag .get (_cedg ,0);if _aafbd ==nil ||!_aafbd ._fbfg {_dgdd ++;
};};if _dgdd ==0{if _fbfd {_cf .Log .Info ("\u0021\u006e\u0075m\u0048\u0065\u0061\u0064\u0065\u0072\u003d\u0030");};return nil ,nil ;};_acac :=_fdag .reduceTiling (_cefgf ,_afa );_acac =_acac .subdivide ();return _acac ,_ecdb ;};type list struct{_gcac []*textLine ;
_cdbe string ;_dbece []*list ;_daafgc string ;};func _aagg (_eadg *wordBag ,_gaec float64 ,_bdfcc ,_caba rulingList )[]*wordBag {var _dece []*wordBag ;for _ ,_ccag :=range _eadg .depthIndexes (){_ebeca :=false ;for !_eadg .empty (_ccag ){_ddca :=_eadg .firstReadingIndex (_ccag );
_gcgcg :=_eadg .firstWord (_ddca );_bgbe :=_ffcee (_gcgcg ,_gaec ,_bdfcc ,_caba );_eadg .removeWord (_gcgcg ,_ddca );if _bdafc {_cf .Log .Info ("\u0066\u0069\u0072\u0073\u0074\u0057\u006f\u0072\u0064\u0020\u005e\u005e^\u005e\u0020\u0025\u0073",_gcgcg .String ());
};for _gfgga :=true ;_gfgga ;_gfgga =_ebeca {_ebeca =false ;_ebfeg :=_degb *_bgbe ._cgaeg ;_ecgdc :=_gffe *_bgbe ._cgaeg ;_bbaag :=_eeae *_bgbe ._cgaeg ;if _bdafc {_cf .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",_bgbe .minDepth (),_bgbe .maxDepth (),_bbaag ,_ecgdc );
};if _eadg .scanBand ("\u0076\u0065\u0072\u0074\u0069\u0063\u0061\u006c",_bgbe ,_abdg (_adef ,0),_bgbe .minDepth ()-_bbaag ,_bgbe .maxDepth ()+_bbaag ,_edfce ,false ,false )> 0{_ebeca =true ;};if _eadg .scanBand ("\u0068\u006f\u0072\u0069\u007a\u006f\u006e\u0074\u0061\u006c",_bgbe ,_abdg (_adef ,_ecgdc ),_bgbe .minDepth (),_bgbe .maxDepth (),_gaad ,false ,false )> 0{_ebeca =true ;
};if _ebeca {continue ;};_bgegd :=_eadg .scanBand ("",_bgbe ,_abdg (_aebf ,_ebfeg ),_bgbe .minDepth (),_bgbe .maxDepth (),_bgac ,true ,false );if _bgegd > 0{_edca :=(_bgbe .maxDepth ()-_bgbe .minDepth ())/_bgbe ._cgaeg ;if (_bgegd > 1&&float64 (_bgegd )> 0.3*_edca )||_bgegd <=10{if _eadg .scanBand ("\u006f\u0074\u0068e\u0072",_bgbe ,_abdg (_aebf ,_ebfeg ),_bgbe .minDepth (),_bgbe .maxDepth (),_bgac ,false ,true )> 0{_ebeca =true ;
};};};};_dece =append (_dece ,_bgbe );};};return _dece ;};func (_bbaf *imageExtractContext )processOperand (_ebc *_ag .ContentStreamOperation ,_eaf _ag .GraphicsState ,_fcb *_gcb .PdfPageResources )error {if _ebc .Operand =="\u0042\u0049"&&len (_ebc .Params )==1{_gdge ,_gfce :=_ebc .Params [0].(*_ag .ContentStreamInlineImage );
if !_gfce {return nil ;};if _cda ,_fdf :=_ec .GetBoolVal (_gdge .ImageMask );_fdf {if _cda &&!_bbaf ._dfeb .IncludeInlineStencilMasks {return nil ;};};return _bbaf .extractInlineImage (_gdge ,_eaf ,_fcb );}else if _ebc .Operand =="\u0044\u006f"&&len (_ebc .Params )==1{_ddc ,_cbe :=_ec .GetName (_ebc .Params [0]);
if !_cbe {_cf .Log .Debug ("E\u0052\u0052\u004f\u0052\u003a\u0020\u0054\u0079\u0070\u0065");return _dcb ;};_ ,_aag :=_fcb .GetXObjectByName (*_ddc );switch _aag {case _gcb .XObjectTypeImage :return _bbaf .extractXObjectImage (_ddc ,_eaf ,_fcb );case _gcb .XObjectTypeForm :return _bbaf .extractFormImages (_ddc ,_eaf ,_fcb );
};}else if _bbaf ._ggf &&(_ebc .Operand =="\u0073\u0063\u006e"||_ebc .Operand =="\u0053\u0043\u004e")&&len (_ebc .Params )==1{_feb ,_agd :=_ec .GetName (_ebc .Params [0]);if !_agd {_cf .Log .Debug ("E\u0052\u0052\u004f\u0052\u003a\u0020\u0054\u0079\u0070\u0065");
return _dcb ;};_geg ,_agd :=_fcb .GetPatternByName (*_feb );if !_agd {_cf .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0050\u0061\u0074\u0074\u0065\u0072n\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064");return nil ;};if _geg .IsTiling (){_bcb :=_geg .GetAsTilingPattern ();
_faa ,_fddf :=_bcb .GetContentStream ();if _fddf !=nil {return _fddf ;};_fddf =_bbaf .extractContentStreamImages (string (_faa ),_bcb .Resources );if _fddf !=nil {return _fddf ;};};}else if (_ebc .Operand =="\u0063\u0073"||_ebc .Operand =="\u0043\u0053")&&len (_ebc .Params )>=1{_bbaf ._ggf =_ebc .Params [0].String ()=="\u0050a\u0074\u0074\u0065\u0072\u006e";
};return nil ;};
// String returns a description of `p`.
func (_dbeg *textPara )String ()string {if _dbeg ._fbfg {return _cg .Sprintf ("\u0025\u0036\u002e\u0032\u0066\u0020\u005b\u0045\u004d\u0050\u0054\u0059\u005d",_dbeg .PdfRectangle );};_dgfbe :="";if _dbeg ._gegf !=nil {_dgfbe =_cg .Sprintf ("\u005b\u0025\u0064\u0078\u0025\u0064\u005d\u0020",_dbeg ._gegf ._abeef ,_dbeg ._gegf ._edaga );
};return _cg .Sprintf ("\u0025\u0036\u002e\u0032f \u0025\u0073\u0025\u0064\u0020\u006c\u0069\u006e\u0065\u0073\u0020\u0025\u0071",_dbeg .PdfRectangle ,_dgfbe ,len (_dbeg ._ecbe ),_beaaf (_dbeg .text (),50));};
// ToTextMark returns the public view of `tm`.
func (_cecf *textMark )ToTextMark ()TextMark {return TextMark {Text :_cecf ._abac ,Original :_cecf ._bbbf ,BBox :_cecf ._baeb ,Font :_cecf ._cafa ,FontSize :_cecf ._cegg ,FillColor :_cecf ._abbf ,StrokeColor :_cecf ._fffc ,Orientation :_cecf ._edbb ,DirectObject :_cecf ._ddce ,ObjString :_cecf ._aafg ,Tw :_cecf .Tw ,Th :_cecf .Th ,Tc :_cecf ._fcbc ,Index :_cecf ._bbeg };
};func _ggaa (_ecffd ,_dgae *textPara )bool {if _ecffd ._fbfg ||_dgae ._fbfg {return true ;};return _eage (_ecffd .depth ()-_dgae .depth ());};func _aecff (_agea string ,_fccgb []rulingList ){_cf .Log .Info ("\u0024\u0024 \u0025\u0064\u0020g\u0072\u0069\u0064\u0073\u0020\u002d\u0020\u0025\u0073",len (_fccgb ),_agea );
for _cece ,_egffa :=range _fccgb {_cg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_cece ,_egffa .String ());};};
// ImageMark represents an image drawn on a page and its position in device coordinates.
// All coordinates are in device coordinates.
type ImageMark struct{Image *_gcb .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 (_babad *textPara )fontsize ()float64 {return _babad ._ecbe [0]._acgge };func _bbac (_ecdd ,_agfgb bounded )float64 {return _gaba (_ecdd )-_gaba (_agfgb )};func (_cbea *stateStack )top ()*textState {if _cbea .empty (){return nil ;
};return (*_cbea )[_cbea .size ()-1];};func (_adbd *textLine )bbox ()_gcb .PdfRectangle {return _adbd .PdfRectangle };func _gaba (_ggfd bounded )float64 {return -_ggfd .bbox ().Lly };func _fadgf (_cgaef []*textWord ,_fdae int )[]*textWord {_eabgg :=len (_cgaef );
copy (_cgaef [_fdae :],_cgaef [_fdae +1:]);return _cgaef [:_eabgg -1];};func _eefe (_ecfb []compositeCell )[]float64 {var _ebedd []*textLine ;_fae :=0;for _ ,_fbcaa :=range _ecfb {_fae +=len (_fbcaa .paraList );_ebedd =append (_ebedd ,_fbcaa .lines ()...);
};_eb .Slice (_ebedd ,func (_gaeaf ,_bfcge int )bool {_faed ,_cgbac :=_ebedd [_gaeaf ],_ebedd [_bfcge ];_abdgd ,_agdg :=_faed ._aabbc ,_cgbac ._aabbc ;if !_eage (_abdgd -_agdg ){return _abdgd < _agdg ;};return _faed .Llx < _cgbac .Llx ;});if _dcdb {_cg .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",_fae ,len (_ebedd ));
for _cefb ,_fdea :=range _ebedd {_cg .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_cefb ,_fdea );};};var _eefdb []float64 ;_bcccc :=_ebedd [0];var _fceef [][]*textLine ;_eeaa :=[]*textLine {_bcccc };for _bgcg ,_agcfe :=range _ebedd [1:]{if _agcfe .Ury < _bcccc .Lly {_aadeg :=0.5*(_agcfe .Ury +_bcccc .Lly );
if _dcdb {_cg .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",_bgcg ,_agcfe .Ury ,_bcccc .Lly ,_aadeg ,_bcccc ,_agcfe );
};_eefdb =append (_eefdb ,_aadeg );_fceef =append (_fceef ,_eeaa );_eeaa =nil ;};_eeaa =append (_eeaa ,_agcfe );if _agcfe .Lly < _bcccc .Lly {_bcccc =_agcfe ;};};if len (_eeaa )> 0{_fceef =append (_fceef ,_eeaa );};if _dcdb {_cg .Printf (" \u0020\u0020\u0020\u0020\u0020\u0020 \u0072\u006f\u0077\u0043\u006f\u0072\u0072\u0069\u0064o\u0072\u0073\u003d%\u0036.\u0032\u0066\u000a",_eefdb );
};if _dcdb {_cf .Log .Info ("\u0072\u006f\u0077\u003d\u0025\u0064",len (_ecfb ));for _ddadf ,_gcffg :=range _ecfb {_cg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_ddadf ,_gcffg );};_cf .Log .Info ("\u0067r\u006f\u0075\u0070\u0073\u003d\u0025d",len (_fceef ));
for _aeac ,_bebca :=range _fceef {_cg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0064\u000a",_aeac ,len (_bebca ));for _acffd ,_cfeea :=range _bebca {_cg .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_acffd ,_cfeea );};};};_efcg :=true ;
for _caeac ,_gceec :=range _fceef {_bgefab :=true ;for _cgfg ,_abdgdd :=range _ecfb {if _dcdb {_cg .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",_caeac ,len (_fceef ),_cgfg ,len (_ecfb ),_abdgdd );
};if !_abdgdd .hasLines (_gceec ){if _dcdb {_cg .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",_caeac ,len (_fceef ),_cgfg ,len (_ecfb ));
};_bgefab =false ;break ;};};if !_bgefab {_efcg =false ;break ;};};if !_efcg {if _dcdb {_cf .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");
};_eefdb =nil ;};if _dcdb &&_eefdb !=nil {_cg .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",_eefdb );};return _eefdb ;
};func (_gcfge *ruling )intersects (_cfgb *ruling )bool {_aecaf :=(_gcfge ._cfgc ==_gcaf &&_cfgb ._cfgc ==_effb )||(_cfgb ._cfgc ==_gcaf &&_gcfge ._cfgc ==_effb );_bfff :=func (_eabg ,_gddea *ruling )bool {return _eabg ._bggg -_cddf <=_gddea ._ccgff &&_gddea ._ccgff <=_eabg ._dfadf +_cddf ;
};_dabc :=_bfff (_gcfge ,_cfgb );_aggc :=_bfff (_cfgb ,_gcfge );if _cgcb {_cg .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",_aecaf ,_dabc ,_aggc ,_aecaf &&_dabc &&_aggc ,_gcfge ,_cfgb );
};return _aecaf &&_dabc &&_aggc ;};func (_bfed compositeCell )parasBBox ()(paraList ,_gcb .PdfRectangle ){return _bfed .paraList ,_bfed .PdfRectangle ;};
// Append appends `mark` to the mark array.
func (_egcg *TextMarkArray )Append (mark TextMark ){_egcg ._cea =append (_egcg ._cea ,mark )};func (_dccc *textTable )subdivide ()*textTable {_dccc .logComposite ("\u0073u\u0062\u0064\u0069\u0076\u0069\u0064e");_fbgg :=_dccc .compositeRowCorridors ();_gaag :=_dccc .compositeColCorridors ();
if _dcdb {_cf .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",_deaed (_fbgg ),_deaed (_gaag ));
};if len (_fbgg )==0||len (_gaag )==0{return _dccc ;};_gdec (_fbgg );_gdec (_gaag );if _dcdb {_cf .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",_deaed (_fbgg ),_deaed (_gaag ));
};_bdbe ,_dfgcc :=_ecaef (_dccc ._edaga ,_fbgg );_feaa ,_dgfff :=_ecaef (_dccc ._abeef ,_gaag );_bdacbg :=make (map[uint64 ]*textPara ,_dgfff *_dfgcc );_cgcbc :=&textTable {PdfRectangle :_dccc .PdfRectangle ,_ceda :_dccc ._ceda ,_edaga :_dfgcc ,_abeef :_dgfff ,_cfcac :_bdacbg };
if _dcdb {_cf .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",_dccc ._abeef ,_dccc ._edaga ,_dgfff ,_dfgcc ,_deaed (_fbgg ),_deaed (_gaag ),_bdbe ,_feaa );
};for _dffbcc :=0;_dffbcc < _dccc ._edaga ;_dffbcc ++{_ccge :=_bdbe [_dffbcc ];for _eeeb :=0;_eeeb < _dccc ._abeef ;_eeeb ++{_agbef :=_feaa [_eeeb ];if _dcdb {_cg .Printf ("\u0025\u0036\u0064\u002c %\u0032\u0064\u003a\u0020\u0078\u0030\u003d\u0025\u0064\u0020\u0079\u0030\u003d\u0025d\u000a",_eeeb ,_dffbcc ,_agbef ,_ccge );
};_gefa ,_bcdg :=_dccc ._agda [_fgfde (_eeeb ,_dffbcc )];if !_bcdg {continue ;};_fgebe :=_gefa .split (_fbgg [_dffbcc ],_gaag [_eeeb ]);for _aaef :=0;_aaef < _fgebe ._edaga ;_aaef ++{for _aafcc :=0;_aafcc < _fgebe ._abeef ;_aafcc ++{_fafdg :=_fgebe .get (_aafcc ,_aaef );
_cgcbc .put (_agbef +_aafcc ,_ccge +_aaef ,_fafdg );if _dcdb {_cg .Printf ("\u0025\u0038\u0064\u002c\u0020\u0025\u0032\u0064\u003a\u0020\u0025\u0073\u000a",_agbef +_aafcc ,_ccge +_aaef ,_fafdg );};};};};};return _cgcbc ;};
// ImageExtractOptions contains options for controlling image extraction from
// PDF pages.
type ImageExtractOptions struct{IncludeInlineStencilMasks bool ;};type ruling struct{_cfgc rulingKind ;_baea markKind ;_ca .Color ;_ccgff float64 ;_bggg float64 ;_dfadf float64 ;_fegdc float64 ;};func _becgf (_eacb *textLine ,_ceabd []*textLine ,_gbcdg []float64 ,_fdfgf ,_abbe float64 )[]*textLine {_daee :=[]*textLine {};
for _ ,_gcde :=range _ceabd {if _gcde ._aabbc >=_fdfgf {if _abbe !=-1&&_gcde ._aabbc < _abbe {if _gcde .text ()!=_eacb .text (){if _gc .Round (_gcde .Llx )< _gc .Round (_eacb .Llx ){break ;};_daee =append (_daee ,_gcde );};}else if _abbe ==-1{if _gcde ._aabbc ==_eacb ._aabbc {if _gcde .text ()!=_eacb .text (){_daee =append (_daee ,_gcde );
};continue ;};_aaccd :=_bcdf (_eacb ,_ceabd ,_gbcdg );if _aaccd !=-1&&_gcde ._aabbc <=_aaccd {_daee =append (_daee ,_gcde );};};};};return _daee ;};func (_abeb paraList )tables ()[]TextTable {var _dcdeda []TextTable ;if _dcdb {_cf .Log .Info ("\u0070\u0061\u0072\u0061\u0073\u002e\u0074\u0061\u0062\u006c\u0065\u0073\u003a");
};for _ ,_cgeb :=range _abeb {_ggcgb :=_cgeb ._gegf ;if _ggcgb !=nil &&_ggcgb .isExportable (){_dcdeda =append (_dcdeda ,_ggcgb .toTextTable ());};};return _dcdeda ;};func _gfaa (_fdcb string )bool {if _cc .RuneCountInString (_fdcb )< _faafd {return false ;
};_bceae ,_abaf :=_cc .DecodeLastRuneInString (_fdcb );if _abaf <=0||!_ef .Is (_ef .Hyphen ,_bceae ){return false ;};_bceae ,_abaf =_cc .DecodeLastRuneInString (_fdcb [:len (_fdcb )-_abaf ]);return _abaf > 0&&!_ef .IsSpace (_bceae );};
// String returns a description of `v`.
func (_fbafe *ruling )String ()string {if _fbafe ._cfgc ==_dbgc {return "\u004e\u004f\u0054\u0020\u0052\u0055\u004c\u0049\u004e\u0047";};_gcead ,_gecda :="\u0078","\u0079";if _fbafe ._cfgc ==_effb {_gcead ,_gecda ="\u0079","\u0078";};_ddfbb :="";if _fbafe ._fegdc !=0.0{_ddfbb =_cg .Sprintf (" \u0077\u0069\u0064\u0074\u0068\u003d\u0025\u002e\u0032\u0066",_fbafe ._fegdc );
};return _cg .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",_fbafe ._cfgc ,_gcead ,_fbafe ._ccgff ,_gecda ,_fbafe ._bggg ,_fbafe ._dfadf ,_fbafe ._dfadf -_fbafe ._bggg ,_fbafe ._baea ,_fbafe .Color ,_ddfbb );
};func (_bcfb *textLine )pullWord (_agcf *wordBag ,_bedd *textWord ,_feec int ){_bcfb .appendWord (_bedd );_agcf .removeWord (_bedd ,_feec );};func _eadd (_eeaf ,_aegb bounded )float64 {_aagde :=_bbac (_eeaf ,_aegb );if !_eage (_aagde ){return _aagde ;
};return _decg (_eeaf ,_aegb );};func (_bfdb *textPara )text ()string {_efcd :=new (_dd .Buffer );_bfdb .writeText (_efcd );return _efcd .String ();};func _abcf (_ecgb _gcb .PdfRectangle )*ruling {return &ruling {_cfgc :_effb ,_ccgff :_ecgb .Lly ,_bggg :_ecgb .Llx ,_dfadf :_ecgb .Urx };
};func (_edbca rulingList )removeDuplicates ()rulingList {if len (_edbca )==0{return nil ;};_edbca .sort ();_cdee :=rulingList {_edbca [0]};for _ ,_eeab :=range _edbca [1:]{if _eeab .equals (_cdee [len (_cdee )-1]){continue ;};_cdee =append (_cdee ,_eeab );
};return _cdee ;};func _gdaag (_aege _gcb .PdfRectangle )rulingKind {_cbeb :=_aege .Width ();_eaaf :=_aege .Height ();if _cbeb > _eaaf {if _cbeb >=_agba {return _effb ;};}else {if _eaaf >=_agba {return _gcaf ;};};return _dbgc ;};func (_ggfe *textObject )showText (_fgegd _ec .PdfObject ,_gfda []byte ,_bgce int ,_cfgg string )error {return _ggfe .renderText (_fgegd ,_gfda ,_bgce ,_cfgg );
};func _ceca (_fbcf *Extractor ,_ebcd *_gcb .PdfPageResources ,_gfcf _ag .GraphicsState ,_dbf *textState ,_def *stateStack )*textObject {return &textObject {_cbcg :_fbcf ,_bace :_ebcd ,_cef :_gfcf ,_ebdc :_def ,_cgge :_dbf ,_gfb :_b .IdentityMatrix (),_bfdf :_b .IdentityMatrix ()};
};func _cfedf (_egaged string )bool {for _ ,_bbegg :=range _egaged {if !_ef .IsSpace (_bbegg ){return false ;};};return true ;};
// String returns a string describing `pt`.
func (_dgcba PageText )String ()string {_gbfg :=_cg .Sprintf ("P\u0061\u0067\u0065\u0054ex\u0074:\u0020\u0025\u0064\u0020\u0065l\u0065\u006d\u0065\u006e\u0074\u0073",len (_dgcba ._cfcd ));_bgceg :=[]string {"\u002d"+_gbfg };for _ ,_fcad :=range _dgcba ._cfcd {_bgceg =append (_bgceg ,_fcad .String ());
};_bgceg =append (_bgceg ,"\u002b"+_gbfg );return _cgb .Join (_bgceg ,"\u000a");};func (_egbe *wordBag )maxDepth ()float64 {return _egbe ._dbfe -_egbe .Lly };func _fbcbc (_ffga ,_bbafc int )int {if _ffga < _bbafc {return _ffga ;};return _bbafc ;};func (_bgg *imageExtractContext )extractContentStreamImages (_bbb string ,_fdc *_gcb .PdfPageResources )error {_afb :=_ag .NewContentStreamParser (_bbb );
_dee ,_cbgd :=_afb .Parse ();if _cbgd !=nil {return _cbgd ;};if _bgg ._acb ==nil {_bgg ._acb =map[*_ec .PdfObjectStream ]*cachedImage {};};if _bgg ._dfeb ==nil {_bgg ._dfeb =&ImageExtractOptions {};};_ggee :=_ag .NewContentStreamProcessor (*_dee );_ggee .AddHandler (_ag .HandlerConditionEnumAllOperands ,"",_bgg .processOperand );
return _ggee .Process (_fdc );};func _addc (_bdgf string )(string ,bool ){_agfbc :=[]rune (_bdgf );if len (_agfbc )!=1{return "",false ;};_afgb ,_facdd :=_gefe [_agfbc [0]];return _afgb ,_facdd ;};func _dfgf (_afac _gcb .PdfRectangle ,_gede []*textLine )*textPara {return &textPara {PdfRectangle :_afac ,_ecbe :_gede };
};func _dafbd (_cedca []*textMark ,_bddee _gcb .PdfRectangle )[]*textWord {var _fbbef []*textWord ;var _bcbcf *textWord ;if _fcade {_cf .Log .Info ("\u006d\u0061\u006beT\u0065\u0078\u0074\u0057\u006f\u0072\u0064\u0073\u003a\u0020\u0025\u0064\u0020\u006d\u0061\u0072\u006b\u0073",len (_cedca ));
};_bafa :=func (){if _bcbcf !=nil {_cbad :=_bcbcf .computeText ();if !_cfedf (_cbad ){_bcbcf ._cfafbd =_cbad ;_fbbef =append (_fbbef ,_bcbcf );if _fcade {_cf .Log .Info ("\u0061\u0064\u0064Ne\u0077\u0057\u006f\u0072\u0064\u003a\u0020\u0025\u0064\u003a\u0020\u0077\u006f\u0072\u0064\u003d\u0025\u0073",len (_fbbef )-1,_bcbcf .String ());
for _daadf ,_gbfde :=range _bcbcf ._ebeb {_cg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_daadf ,_gbfde .String ());};};};_bcbcf =nil ;};};for _ ,_fbgdc :=range _cedca {if _cbgg &&_bcbcf !=nil &&len (_bcbcf ._ebeb )> 0{_fgbg :=_bcbcf ._ebeb [len (_bcbcf ._ebeb )-1];
_egde ,_bgfgg :=_addc (_fbgdc ._abac );_egdae ,_fgdga :=_addc (_fgbg ._abac );if _bgfgg &&!_fgdga &&_fgbg .inDiacriticArea (_fbgdc ){_bcbcf .addDiacritic (_egde );continue ;};if _fgdga &&!_bgfgg &&_fbgdc .inDiacriticArea (_fgbg ){_bcbcf ._ebeb =_bcbcf ._ebeb [:len (_bcbcf ._ebeb )-1];
_bcbcf .appendMark (_fbgdc ,_bddee );_bcbcf .addDiacritic (_egdae );continue ;};};_bgccf :=_cfedf (_fbgdc ._abac );if _bgccf {_bafa ();continue ;};if _bcbcf ==nil &&!_bgccf {_bcbcf =_cfddb ([]*textMark {_fbgdc },_bddee );continue ;};_aegf :=_bcbcf ._ffcg ;
_aadce :=_gc .Abs (_dgcc (_bddee ,_fbgdc )-_bcbcf ._aada )/_aegf ;_bgbae :=_egage (_fbgdc ,_bcbcf )/_aegf ;if _bgbae >=_ebfcg ||!(-_adce <=_bgbae &&_aadce <=_ffab ){_bafa ();_bcbcf =_cfddb ([]*textMark {_fbgdc },_bddee );continue ;};_bcbcf .appendMark (_fbgdc ,_bddee );
};_bafa ();return _fbbef ;};func _eade (_fbaf []*textLine ,_eeef string )string {var _cbfgc _cgb .Builder ;_cffb :=0.0;for _ebef ,_cfcf :=range _fbaf {_fcdbe :=_cfcf .text ();_cefa :=_cfcf ._aabbc ;if _ebef < len (_fbaf )-1{_cffb =_fbaf [_ebef +1]._aabbc ;
}else {_cffb =0.0;};_cbfgc .WriteString (_eeef );_cbfgc .WriteString (_fcdbe );if _cffb !=_cefa {_cbfgc .WriteString ("\u000a");}else {_cbfgc .WriteString ("\u0020");};};return _cbfgc .String ();};func _ffcee (_ccac *textWord ,_aceac float64 ,_daafg ,_ebfe rulingList )*wordBag {_cddd :=_ccec (_ccac ._aada );
_adbcf :=[]*textWord {_ccac };_gegg :=wordBag {_eafg :map[int ][]*textWord {_cddd :_adbcf },PdfRectangle :_ccac .PdfRectangle ,_cgaeg :_ccac ._ffcg ,_dbfe :_aceac ,_ffdee :_daafg ,_aabb :_ebfe };return &_gegg ;};
// String returns a description of `l`.
func (_fcca *textLine )String ()string {return _cg .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",_fcca ._aabbc ,_fcca .PdfRectangle ,_fcca ._acgge ,_fcca .text ());
};type rulingKind int ;func (_dfgfc paraList )lines ()[]*textLine {var _gfgb []*textLine ;for _ ,_cccg :=range _dfgfc {_gfgb =append (_gfgb ,_cccg ._ecbe ...);};return _gfgb ;};func _abdaa (_fdaad *_gcb .Image ,_gcafe _ca .Color )_a .Image {_eggdf ,_cbbb :=int (_fdaad .Width ),int (_fdaad .Height );
_cdcf :=_a .NewRGBA (_a .Rect (0,0,_eggdf ,_cbbb ));for _gefde :=0;_gefde < _cbbb ;_gefde ++{for _gceed :=0;_gceed < _eggdf ;_gceed ++{_ebcc ,_eaecd :=_fdaad .ColorAt (_gceed ,_gefde );if _eaecd !=nil {_cf .Log .Debug ("\u0057\u0041\u0052\u004e\u003a\u0020\u0063o\u0075\u006c\u0064\u0020\u006e\u006f\u0074\u0020\u0072\u0065\u0074\u0072\u0069\u0065v\u0065 \u0069\u006d\u0061\u0067\u0065\u0020m\u0061\u0073\u006b\u0020\u0076\u0061\u006cu\u0065\u0020\u0061\u0074\u0020\u0028\u0025\u0064\u002c\u0020\u0025\u0064\u0029\u002e\u0020\u004f\u0075\u0074\u0070\u0075\u0074\u0020\u006da\u0079\u0020\u0062\u0065\u0020\u0069\u006e\u0063\u006f\u0072\u0072\u0065\u0063t\u002e",_gceed ,_gefde );
continue ;};_dfabf ,_edbfd ,_fbbc ,_ :=_ebcc .RGBA ();var _eaacf _ca .Color ;if _dfabf +_edbfd +_fbbc ==0{_eaacf =_ca .Transparent ;}else {_eaacf =_gcafe ;};_cdcf .Set (_gceed ,_gefde ,_eaacf );};};return _cdcf ;};func (_acgf *textObject )renderText (_bdcf _ec .PdfObject ,_ggfb []byte ,_gfcg int ,_adfe string )error {if _acgf ._cdef {_cf .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 ;};_cac :=_acgf .getCurrentFont ();_bgba :=_cac .BytesToCharcodes (_ggfb );_bbcd ,_ead ,_aac :=_cac .CharcodesToStrings (_bgba ,_adfe );if _aac > 0{_cf .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",_ead ,_aac );
};_acgf ._cgge ._ecf +=_ead ;_acgf ._cgge ._eecc +=_aac ;_afd :=_acgf ._cgge ;_eadc :=_afd ._eccd ;_bgfa :=_afd ._fdg /100.0;_fea :=_ecff ;if _cac .Subtype ()=="\u0054\u0079\u0070e\u0033"{_fea =1;};_edad ,_abgc :=_cac .GetRuneMetrics (' ');if !_abgc {_edad ,_abgc =_cac .GetCharMetrics (32);
};if !_abgc {_edad ,_ =_gcb .DefaultFont ().GetRuneMetrics (' ');};_bdgd :=_edad .Wx *_fea ;_cf .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",_bdgd ,_bbcd ,_cac ,_eadc );
_adag :=_b .NewMatrix (_eadc *_bgfa ,0,0,_eadc ,0,_afd ._cgg );if _gdgec {_cf .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 (_bgba ),_bgba ,_bbcd );
};_cf .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 (_bgba ),_bgba ,len (_bbcd ));_baa :=_acgf .getFillColor ();
_dcde :=_acgf .getStrokeColor ();for _dabf ,_dgec :=range _bbcd {_geca :=[]rune (_dgec );if len (_geca )==1&&_geca [0]=='\x00'{continue ;};_fdge :=_bgba [_dabf ];_eccg :=_acgf ._cef .CTM .Mult (_acgf ._gfb ).Mult (_adag );_bfg :=0.0;if len (_geca )==1&&_geca [0]==32{_bfg =_afd ._bfbc ;
};_daf ,_bae :=_cac .GetCharMetrics (_fdge );if !_bae {_cf .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",_fdge ,_geca ,_geca ,_cac );
return _cg .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",_cac .String (),_fdge );};_bbbg :=_b .Point {X :_daf .Wx *_fea ,Y :_daf .Wy *_fea };
_abgd :=_b .Point {X :(_bbbg .X *_eadc +_bfg )*_bgfa };_addd :=_b .Point {X :(_bbbg .X *_eadc +_afd ._gbdb +_bfg )*_bgfa };if _gdgec {_cf .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",_eadc ,_afd ._gbdb ,_afd ._bfbc ,_bgfa );
_cf .Log .Info ("\u0064x\u002c\u0064\u0079\u003d%\u002e\u0033\u0066\u0020\u00740\u003d%\u002e3\u0066\u0020\u0074\u003d\u0025\u002e\u0033f",_bbbg ,_abgd ,_addd );};_eagd :=_gdeg (_abgd );_ebcba :=_gdeg (_addd );_dbd :=_acgf ._cef .CTM .Mult (_acgf ._gfb ).Mult (_eagd );
if _aece {_cf .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",_acgf ._cef .CTM ,_acgf ._gfb ,_ebcba ,_effc (_acgf ._cef .CTM .Mult (_acgf ._gfb ).Mult (_ebcba )),_eagd ,_dbd ,_effc (_dbd ));
};_eagdd ,_ceb :=_acgf .newTextMark (_bg .ExpandLigatures (_geca ),_eccg ,_effc (_dbd ),_gc .Abs (_bdgd *_eccg .ScalingFactorX ()),_cac ,_acgf ._cgge ._gbdb ,_baa ,_dcde ,_bdcf ,_bbcd ,_dabf ,_gfcg );if !_ceb {_cf .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 _cac ==nil {_cf .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u004e\u006f\u0020\u0066\u006f\u006e\u0074\u002e");}else if _cac .Encoder ()==nil {_cf .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",_cac );
}else {if _bfcg ,_cfbe :=_cac .Encoder ().CharcodeToRune (_fdge );_cfbe {_eagdd ._bbbf =string (_bfcg );};};_cf .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",_dabf ,_fdge ,_eagdd ,_eccg );
_acgf ._cbbc =append (_acgf ._cbbc ,&_eagdd );_acgf ._gfb .Concat (_ebcba );};return nil ;};func _gaea (_cafg ,_bcae ,_bggb ,_cbaca *textPara )*textTable {_eafdc :=&textTable {_abeef :2,_edaga :2,_cfcac :make (map[uint64 ]*textPara ,4)};_eafdc .put (0,0,_cafg );
_eafdc .put (1,0,_bcae );_eafdc .put (0,1,_bggb );_eafdc .put (1,1,_cbaca );return _eafdc ;};func (_fbcfc *TextMarkArray )exists (_cfae TextMark )bool {for _ ,_efge :=range _fbcfc .Elements (){if _f .DeepEqual (_cfae .DirectObject ,_efge .DirectObject )&&_f .DeepEqual (_cfae .BBox ,_efge .BBox )&&_efge .Text ==_cfae .Text {return true ;
};};return false ;};func (_dbec *subpath )last ()_b .Point {return _dbec ._gfee [len (_dbec ._gfee )-1]};func (_eacdb paraList )toTextMarks ()[]TextMark {_dbfc :=0;var _daed []TextMark ;for _fagb ,_gdgdd :=range _eacdb {if _gdgdd ._fbfg {continue ;};_ecaf :=_gdgdd .toTextMarks (&_dbfc );
_daed =append (_daed ,_ecaf ...);if _fagb !=len (_eacdb )-1{if _ggaa (_gdgdd ,_eacdb [_fagb +1]){_daed =_cecfe (_daed ,&_dbfc ,"\u0020");}else {_daed =_cecfe (_daed ,&_dbfc ,"\u000a");_daed =_cecfe (_daed ,&_dbfc ,"\u000a");};};};_daed =_cecfe (_daed ,&_dbfc ,"\u000a");
_daed =_cecfe (_daed ,&_dbfc ,"\u000a");return _daed ;};func _gggff (_efea ,_adbb _a .Image )_a .Image {_egdeg ,_ddgf :=_adbb .Bounds ().Size (),_efea .Bounds ().Size ();_ccafa ,_afecd :=_egdeg .X ,_egdeg .Y ;if _ddgf .X > _ccafa {_ccafa =_ddgf .X ;};if _ddgf .Y > _afecd {_afecd =_ddgf .Y ;
};_gdca :=_a .Rect (0,0,_ccafa ,_afecd );if _egdeg .X !=_ccafa ||_egdeg .Y !=_afecd {_eafe :=_a .NewRGBA (_gdca );_fg .BiLinear .Scale (_eafe ,_gdca ,_efea ,_adbb .Bounds (),_fg .Over ,nil );_adbb =_eafe ;};if _ddgf .X !=_ccafa ||_ddgf .Y !=_afecd {_dgfa :=_a .NewRGBA (_gdca );
_fg .BiLinear .Scale (_dgfa ,_gdca ,_efea ,_efea .Bounds (),_fg .Over ,nil );_efea =_dgfa ;};_cfea :=_a .NewRGBA (_gdca );_fg .DrawMask (_cfea ,_gdca ,_efea ,_a .Point {},_adbb ,_a .Point {},_fg .Over );return _cfea ;};func _df (_cb int )bool {return (_cb &1)==0};
func (_bgeede rulingList )connections (_fgab map[int ]intSet ,_baab int )intSet {_gceae :=make (intSet );_bbcdg :=make (intSet );var _afda func (int );_afda =func (_dbaf int ){if !_bbcdg .has (_dbaf ){_bbcdg .add (_dbaf );for _bdag :=range _bgeede {if _fgab [_bdag ].has (_dbaf ){_gceae .add (_bdag );
};};for _ceee :=range _bgeede {if _gceae .has (_ceee ){_afda (_ceee );};};};};_afda (_baab );return _gceae ;};func (_ebfc *shapesState )cubicTo (_bbf ,_daadd ,_ffeb ,_bbba ,_gdb ,_baad float64 ){if _efda {_cf .Log .Info ("\u0063\u0075\u0062\u0069\u0063\u0054\u006f\u003a");
};_ebfc .addPoint (_gdb ,_baad );};func (_ccdgg rulingList )tidied (_bbfg string )rulingList {_cfaef :=_ccdgg .removeDuplicates ();_cfaef .log ("\u0075n\u0069\u0071\u0075\u0065\u0073");_gfdae :=_cfaef .snapToGroups ();if _gfdae ==nil {return nil ;};_gfdae .sort ();
if _cgcb {_cf .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",_bbfg ,len (_ccdgg ),len (_cfaef ),len (_gfdae ));
};_gfdae .log ("\u0063o\u0061\u006c\u0065\u0073\u0063\u0065d");return _gfdae ;};type textObject struct{_cbcg *Extractor ;_bace *_gcb .PdfPageResources ;_cef _ag .GraphicsState ;_cgge *textState ;_ebdc *stateStack ;_gfb _b .Matrix ;_bfdf _b .Matrix ;_cbbc []*textMark ;
_cdef bool ;};func (_gffb *shapesState )establishSubpath ()*subpath {_ebaccc ,_egbb :=_gffb .lastpointEstablished ();if !_egbb {_gffb ._becf =append (_gffb ._becf ,_babg (_ebaccc ));};if len (_gffb ._becf )==0{return nil ;};_gffb ._agcg =false ;return _gffb ._becf [len (_gffb ._becf )-1];
};
// String returns a human readable description of `ss`.
func (_gbca *shapesState )String ()string {return _cg .Sprintf ("\u007b\u0025\u0064\u0020su\u0062\u0070\u0061\u0074\u0068\u0073\u0020\u0066\u0072\u0065\u0073\u0068\u003d\u0025t\u007d",len (_gbca ._becf ),_gbca ._agcg );};const _ecb =20;func (_gacd *textLine )appendWord (_bdca *textWord ){_gacd ._gaef =append (_gacd ._gaef ,_bdca );
_gacd .PdfRectangle =_edfc (_gacd .PdfRectangle ,_bdca .PdfRectangle );if _bdca ._ffcg > _gacd ._acgge {_gacd ._acgge =_bdca ._ffcg ;};if _bdca ._aada > _gacd ._aabbc {_gacd ._aabbc =_bdca ._aada ;};};func (_dddd *textWord )absorb (_becge *textWord ){_dddd .PdfRectangle =_edfc (_dddd .PdfRectangle ,_becge .PdfRectangle );
_dddd ._ebeb =append (_dddd ._ebeb ,_becge ._ebeb ...);};func (_eada *PageText )getParagraphs ()paraList {var _dcded rulingList ;if _ecbgaa {_cag :=_fdbb (_eada ._bddc );_dcded =append (_dcded ,_cag ...);};if _aadc {_acgfe :=_afcab (_eada ._adbc );_dcded =append (_dcded ,_acgfe ...);
};_dcded ,_dcbfa :=_dcded .toTilings ();var _bacg paraList ;_gcgb :=len (_eada ._cfcd );for _cge :=0;_cge < 360&&_gcgb > 0;_cge +=90{_efbe :=make ([]*textMark ,0,len (_eada ._cfcd )-_gcgb );for _ ,_ggdd :=range _eada ._cfcd {if _ggdd ._edbb ==_cge {_efbe =append (_efbe ,_ggdd );
};};if len (_efbe )> 0{_edcc :=_gged (_efbe ,_eada ._faae ,_dcded ,_dcbfa ,_eada ._gebg ._cfag );_bacg =append (_bacg ,_edcc ...);_gcgb -=len (_efbe );};};return _bacg ;};var _bdda =map[rulingKind ]string {_dbgc :"\u006e\u006f\u006e\u0065",_effb :"\u0068\u006f\u0072\u0069\u007a\u006f\u006e\u0074\u0061\u006c",_gcaf :"\u0076\u0065\u0072\u0074\u0069\u0063\u0061\u006c"};
func _fgdfb (_bbab []TextMark ,_cgea *TextTable )[]TextMark {var _defb []TextMark ;for _ ,_adcb :=range _bbab {_adcb ._fbd =true ;_adcb ._bdff =_cgea ;_defb =append (_defb ,_adcb );};return _defb ;};func (_bacbc paraList )findGridTables (_cgaaf []gridTiling )[]*textTable {if _dcdb {_cf .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 (_bacbc ));
for _dedd ,_aceb :=range _bacbc {_cg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_dedd ,_aceb );};};var _caag []*textTable ;for _gfagg ,_adcdfc :=range _cgaaf {_eced ,_efbg :=_bacbc .findTableGrid (_adcdfc );if _eced !=nil {_eced .log (_cg .Sprintf ("\u0066\u0069\u006e\u0064Ta\u0062\u006c\u0065\u0057\u0069\u0074\u0068\u0047\u0072\u0069\u0064\u0073\u003a\u0020%\u0064",_gfagg ));
_caag =append (_caag ,_eced );_eced .markCells ();};for _ecea :=range _efbg {_ecea ._acffe =true ;};};if _dcdb {_cf .Log .Info ("\u0066i\u006e\u0064\u0047\u0072i\u0064\u0054\u0061\u0062\u006ce\u0073:\u0020%\u0064\u0020\u0074\u0061\u0062\u006c\u0065s",len (_caag ));
};return _caag ;};func _fgff (_ddbb []*textLine ,_dacf string ,_eacd []*list )*list {return &list {_gcac :_ddbb ,_cdbe :_dacf ,_dbece :_eacd };};const _ecff =1.0/1000.0;func (_ebcbc rulingList )comp (_gegba ,_gfged int )bool {_babf ,_dgbea :=_ebcbc [_gegba ],_ebcbc [_gfged ];
_cecg ,_fcagg :=_babf ._cfgc ,_dgbea ._cfgc ;if _cecg !=_fcagg {return _cecg > _fcagg ;};if _cecg ==_dbgc {return false ;};_edgb :=func (_cecfa bool )bool {if _cecg ==_effb {return _cecfa ;};return !_cecfa ;};_ceef ,_bcceg :=_babf ._ccgff ,_dgbea ._ccgff ;
if _ceef !=_bcceg {return _edgb (_ceef > _bcceg );};_ceef ,_bcceg =_babf ._bggg ,_dgbea ._bggg ;if _ceef !=_bcceg {return _edgb (_ceef < _bcceg );};return _edgb (_babf ._dfadf < _dgbea ._dfadf );};func (_dfd *textObject )reset (){_dfd ._gfb =_b .IdentityMatrix ();
_dfd ._bfdf =_b .IdentityMatrix ();_dfd ._cbbc =nil ;};func (_degab rulingList )augmentGrid ()(rulingList ,rulingList ){_gdea ,_ebbae :=_degab .vertsHorzs ();if len (_gdea )==0||len (_ebbae )==0{return _gdea ,_ebbae ;};_bcccf ,_abdfb :=_gdea ,_ebbae ;_bcgee :=_gdea .bbox ();
_acad :=_ebbae .bbox ();if _cgcb {_cf .Log .Info ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0047\u0072\u0069\u0064\u003a\u0020b\u0062\u006f\u0078\u0056\u003d\u0025\u0036\u002e\u0032\u0066",_bcgee );_cf .Log .Info ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0047\u0072\u0069\u0064\u003a\u0020b\u0062\u006f\u0078\u0048\u003d\u0025\u0036\u002e\u0032\u0066",_acad );
};var _fgag ,_dggbg ,_fddcb ,_bbdcf *ruling ;if _acad .Llx < _bcgee .Llx -_cddf {_fgag =&ruling {_baea :_egabf ,_cfgc :_gcaf ,_ccgff :_acad .Llx ,_bggg :_bcgee .Lly ,_dfadf :_bcgee .Ury };_gdea =append (rulingList {_fgag },_gdea ...);};if _acad .Urx > _bcgee .Urx +_cddf {_dggbg =&ruling {_baea :_egabf ,_cfgc :_gcaf ,_ccgff :_acad .Urx ,_bggg :_bcgee .Lly ,_dfadf :_bcgee .Ury };
_gdea =append (_gdea ,_dggbg );};if _bcgee .Lly < _acad .Lly -_cddf {_fddcb =&ruling {_baea :_egabf ,_cfgc :_effb ,_ccgff :_bcgee .Lly ,_bggg :_acad .Llx ,_dfadf :_acad .Urx };_ebbae =append (rulingList {_fddcb },_ebbae ...);};if _bcgee .Ury > _acad .Ury +_cddf {_bbdcf =&ruling {_baea :_egabf ,_cfgc :_effb ,_ccgff :_bcgee .Ury ,_bggg :_acad .Llx ,_dfadf :_acad .Urx };
_ebbae =append (_ebbae ,_bbdcf );};if len (_gdea )+len (_ebbae )==len (_degab ){return _bcccf ,_abdfb ;};_ffee :=append (_gdea ,_ebbae ...);_degab .log ("u\u006e\u0061\u0075\u0067\u006d\u0065\u006e\u0074\u0065\u0064");_ffee .log ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0065d");
return _gdea ,_ebbae ;};
// Elements returns the TextMarks in `ma`.
func (_fcbf *TextMarkArray )Elements ()[]TextMark {return _fcbf ._cea };type subpath struct{_gfee []_b .Point ;_fgdf bool ;};var _ccg =[]string {"\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0053","\u0042","\u0053","\u0057\u0053","\u0042","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042","\u0042","\u0042","\u0053","\u0057\u0053","\u004f\u004e","\u004f\u004e","\u0045\u0054","\u0045\u0054","\u0045\u0054","\u004f\u004e","\u004f\u004e","\u004f\u004e","\u004f\u004e","\u004f\u004e","\u0045\u0053","\u0043\u0053","\u0045\u0053","\u0043\u0053","\u0043\u0053","\u0045\u004e","\u0045\u004e","\u0045\u004e","\u0045\u004e","\u0045\u004e","\u0045\u004e","\u0045\u004e","\u0045\u004e","\u0045\u004e","\u0045\u004e","\u0043\u0053","\u004f\u004e","\u004f\u004e","\u004f\u004e","\u004f\u004e","\u004f\u004e","\u004f\u004e","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004f\u004e","\u004f\u004e","\u004f\u004e","\u004f\u004e","\u004f\u004e","\u004f\u004e","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004f\u004e","\u004f\u004e","\u004f\u004e","\u004f\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0042\u004e","\u0043\u0053","\u004f\u004e","\u0045\u0054","\u0045\u0054","\u0045\u0054","\u0045\u0054","\u004f\u004e","\u004f\u004e","\u004f\u004e","\u004f\u004e","\u004c","\u004f\u004e","\u004f\u004e","\u0042\u004e","\u004f\u004e","\u004f\u004e","\u0045\u0054","\u0045\u0054","\u0045\u004e","\u0045\u004e","\u004f\u004e","\u004c","\u004f\u004e","\u004f\u004e","\u004f\u004e","\u0045\u004e","\u004c","\u004f\u004e","\u004f\u004e","\u004f\u004e","\u004f\u004e","\u004f\u004e","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004f\u004e","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004f\u004e","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c","\u004c"};
func (_ggfc *textPara )writeText (_dcdbf _d .Writer ){if _ggfc ._gegf ==nil {_ggfc .writeCellText (_dcdbf );return ;};for _afcf :=0;_afcf < _ggfc ._gegf ._edaga ;_afcf ++{for _ffbd :=0;_ffbd < _ggfc ._gegf ._abeef ;_ffbd ++{_adae :=_ggfc ._gegf .get (_ffbd ,_afcf );
if _adae ==nil {_dcdbf .Write ([]byte ("\u0009"));}else {_cagdb (_adae ._ecbe );_adae .writeCellText (_dcdbf );};_dcdbf .Write ([]byte ("\u0020"));};if _afcf < _ggfc ._gegf ._edaga -1{_dcdbf .Write ([]byte ("\u000a"));};};};func (_dddc *shapesState )lastpointEstablished ()(_b .Point ,bool ){if _dddc ._agcg {return _dddc ._dfa ,false ;
};_afca :=len (_dddc ._becf );if _afca > 0&&_dddc ._becf [_afca -1]._fgdf {return _dddc ._becf [_afca -1].last (),false ;};return _b .Point {},true ;};func (_ccbdf *textTable )getRight ()paraList {_cdde :=make (paraList ,_ccbdf ._edaga );for _bcbf :=0;
_bcbf < _ccbdf ._edaga ;_bcbf ++{_daebe :=_ccbdf .get (_ccbdf ._abeef -1,_bcbf )._dffg ;if _daebe .taken (){return nil ;};_cdde [_bcbf ]=_daebe ;};for _fefgd :=0;_fefgd < _ccbdf ._edaga -1;_fefgd ++{if _cdde [_fefgd ]._fgbdg !=_cdde [_fefgd +1]{return nil ;
};};return _cdde ;};func (_eecb *textObject )getFontDict (_acbg string )(_bfdc _ec .PdfObject ,_gbg error ){_cedf :=_eecb ._bace ;if _cedf ==nil {_cf .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",_acbg );
return nil ,nil ;};_bfdc ,_dggga :=_cedf .GetFontByName (_ec .PdfObjectName (_acbg ));if !_dggga {_cf .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",_acbg );
return nil ,_fe .New ("f\u006f\u006e\u0074\u0020no\u0074 \u0069\u006e\u0020\u0072\u0065s\u006f\u0075\u0072\u0063\u0065\u0073");};return _bfdc ,nil ;};func (_aecc *textTable )emptyCompositeRow (_fbag int )bool {for _adfa :=0;_adfa < _aecc ._abeef ;_adfa ++{if _dabad ,_fcggf :=_aecc ._agda [_fgfde (_adfa ,_fbag )];
_fcggf {if len (_dabad .paraList )> 0{return false ;};};};return true ;};func (_bbe *textObject )getFillColor ()_ca .Color {return _ebabd (_bbe ._cef .ColorspaceNonStroking ,_bbe ._cef .ColorNonStroking );};func (_ggdfe compositeCell )split (_adagc ,_bddeb []float64 )*textTable {_fcaec :=len (_adagc )+1;
_ffbfce :=len (_bddeb )+1;if _dcdb {_cf .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",_ffbfce ,_fcaec ,_ggdfe ,_adagc ,_bddeb );
_cg .Printf ("\u0020\u0020\u0020\u0020\u0025\u0064\u0020\u0070\u0061\u0072\u0061\u0073\u000a",len (_ggdfe .paraList ));for _badb ,_acdc :=range _ggdfe .paraList {_cg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_badb ,_acdc .String ());};
_cg .Printf ("\u0020\u0020\u0020\u0020\u0025\u0064\u0020\u006c\u0069\u006e\u0065\u0073\u000a",len (_ggdfe .lines ()));for _ccbb ,_ggcfd :=range _ggdfe .lines (){_cg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_ccbb ,_ggcfd );};};_adagc =_cdfe (_adagc ,_ggdfe .Ury ,_ggdfe .Lly );
_bddeb =_cdfe (_bddeb ,_ggdfe .Llx ,_ggdfe .Urx );_gdgaa :=make (map[uint64 ]*textPara ,_ffbfce *_fcaec );_gfeec :=textTable {_abeef :_ffbfce ,_edaga :_fcaec ,_cfcac :_gdgaa };_gacgf :=_ggdfe .paraList ;_eb .Slice (_gacgf ,func (_gfdd ,_agae int )bool {_dfece ,_ceega :=_gacgf [_gfdd ],_gacgf [_agae ];
_gegga ,_beaad :=_dfece .Lly ,_ceega .Lly ;if _gegga !=_beaad {return _gegga < _beaad ;};return _dfece .Llx < _ceega .Llx ;});_ecfga :=make (map[uint64 ]_gcb .PdfRectangle ,_ffbfce *_fcaec );for _gafa ,_gcdg :=range _adagc [1:]{_eeccg :=_adagc [_gafa ];
for _efddg ,_ccfea :=range _bddeb [1:]{_cacee :=_bddeb [_efddg ];_ecfga [_fgfde (_efddg ,_gafa )]=_gcb .PdfRectangle {Llx :_cacee ,Urx :_ccfea ,Lly :_gcdg ,Ury :_eeccg };};};if _dcdb {_cf .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");
_cg .Printf ("\u0020\u0020\u0020\u0020");for _egce :=0;_egce < _ffbfce ;_egce ++{_cg .Printf ("\u0025\u0033\u0030\u0064\u002c\u0020",_egce );};_cg .Println ();for _fgcfe :=0;_fgcfe < _fcaec ;_fgcfe ++{_cg .Printf ("\u0020\u0020\u0025\u0032\u0064\u003a",_fgcfe );
for _bffd :=0;_bffd < _ffbfce ;_bffd ++{_cg .Printf ("\u00256\u002e\u0032\u0066\u002c\u0020",_ecfga [_fgfde (_bffd ,_fgcfe )]);};_cg .Println ();};};_feae :=func (_cedfe *textLine )(int ,int ){for _ecgef :=0;_ecgef < _fcaec ;_ecgef ++{for _dadd :=0;_dadd < _ffbfce ;
_dadd ++{if _bgbb (_ecfga [_fgfde (_dadd ,_ecgef )],_cedfe .PdfRectangle ){return _dadd ,_ecgef ;};};};return -1,-1;};_ddabd :=make (map[uint64 ][]*textLine ,_ffbfce *_fcaec );for _ ,_bgefc :=range _gacgf .lines (){_badce ,_fefg :=_feae (_bgefc );if _badce < 0{continue ;
};_ddabd [_fgfde (_badce ,_fefg )]=append (_ddabd [_fgfde (_badce ,_fefg )],_bgefc );};for _geeg :=0;_geeg < len (_adagc )-1;_geeg ++{_afff :=_adagc [_geeg ];_dcdc :=_adagc [_geeg +1];for _fadf :=0;_fadf < len (_bddeb )-1;_fadf ++{_cbeec :=_bddeb [_fadf ];
_adaba :=_bddeb [_fadf +1];_gcag :=_gcb .PdfRectangle {Llx :_cbeec ,Urx :_adaba ,Lly :_dcdc ,Ury :_afff };_aefga :=_ddabd [_fgfde (_fadf ,_geeg )];if len (_aefga )==0{continue ;};_edefa :=_dfgf (_gcag ,_aefga );_gfeec .put (_fadf ,_geeg ,_edefa );};};return &_gfeec ;
};func _cab (_gage []TextMark ,_cfbce *int ,_egba TextMark )[]TextMark {_egba .Offset =*_cfbce ;_gage =append (_gage ,_egba );*_cfbce +=len (_egba .Text );return _gage ;};func (_deag rulingList )blocks (_fbfgg ,_feeddg *ruling )bool {if _fbfgg ._bggg > _feeddg ._dfadf ||_feeddg ._bggg > _fbfgg ._dfadf {return false ;
};_acbc :=_gc .Max (_fbfgg ._bggg ,_feeddg ._bggg );_bcbbf :=_gc .Min (_fbfgg ._dfadf ,_feeddg ._dfadf );if _fbfgg ._ccgff > _feeddg ._ccgff {_fbfgg ,_feeddg =_feeddg ,_fbfgg ;};for _ ,_ffdba :=range _deag {if _fbfgg ._ccgff <=_ffdba ._ccgff +_fcd &&_ffdba ._ccgff <=_feeddg ._ccgff +_fcd &&_ffdba ._bggg <=_bcbbf &&_acbc <=_ffdba ._dfadf {return true ;
};};return false ;};func _bgbb (_efaa ,_ccfd _gcb .PdfRectangle )bool {return _efaa .Llx <=_ccfd .Llx &&_ccfd .Urx <=_efaa .Urx &&_efaa .Lly <=_ccfd .Lly &&_ccfd .Ury <=_efaa .Ury ;};func (_abffd rulingList )aligned ()bool {if len (_abffd )< 2{return false ;
};_daeda :=make (map[*ruling ]int );_daeda [_abffd [0]]=0;for _ ,_cdff :=range _abffd [1:]{_bacgc :=false ;for _adac :=range _daeda {if _cdff .gridIntersecting (_adac ){_daeda [_adac ]++;_bacgc =true ;break ;};};if !_bacgc {_daeda [_cdff ]=0;};};_bgaba :=0;
for _ ,_ddcg :=range _daeda {if _ddcg ==0{_bgaba ++;};};_ffeg :=float64 (_bgaba )/float64 (len (_abffd ));_acddb :=_ffeg <=1.0-_bdfeg ;if _cgcb {_cf .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",_acddb ,_ffeg ,_bgaba ,len (_abffd ),_abffd .String ());
};return _acddb ;};func _effc (_ffb _b .Matrix )_b .Point {_egec ,_efd :=_ffb .Translation ();return _b .Point {X :_egec ,Y :_efd };};func _fdfca (_fefbd []rulingList )(rulingList ,rulingList ){var _fbca rulingList ;for _ ,_deee :=range _fefbd {_fbca =append (_fbca ,_deee ...);
};return _fbca .vertsHorzs ();};
// 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 (_cfceg *PageText )ApplyArea (bbox _gcb .PdfRectangle ){_gbe :=make ([]*textMark ,0,len (_cfceg ._cfcd ));for _ ,_ddfa :=range _cfceg ._cfcd {if _cbcb (_ddfa .bbox (),bbox ){_gbe =append (_gbe ,_ddfa );};};var _gdaf paraList ;_aecb :=len (_gbe );for _dfee :=0;
_dfee < 360&&_aecb > 0;_dfee +=90{_dgfd :=make ([]*textMark ,0,len (_gbe )-_aecb );for _ ,_bbda :=range _gbe {if _bbda ._edbb ==_dfee {_dgfd =append (_dgfd ,_bbda );};};if len (_dgfd )> 0{_bdeb :=_gged (_dgfd ,_cfceg ._faae ,nil ,nil ,_cfceg ._gebg ._cfag );
_gdaf =append (_gdaf ,_bdeb ...);_aecb -=len (_dgfd );};};_fbbb :=new (_dd .Buffer );_gdaf .writeText (_fbbb );_cfceg ._dae =_fbbb .String ();_cfceg ._fff =_gdaf .toTextMarks ();_cfceg ._egadg =_gdaf .tables ();};func (_gcbb *wordBag )blocked (_agab *textWord )bool {if _agab .Urx < _gcbb .Llx {_eafa :=_cbgdc (_agab .PdfRectangle );
_eaef :=_ecfff (_gcbb .PdfRectangle );if _gcbb ._ffdee .blocks (_eafa ,_eaef ){if _faged {_cf .Log .Info ("\u0062\u006c\u006f\u0063ke\u0064\u0020\u2190\u0078\u003a\u0020\u0025\u0073\u0020\u0025\u0073",_agab ,_gcbb );};return true ;};}else if _gcbb .Urx < _agab .Llx {_aeef :=_cbgdc (_gcbb .PdfRectangle );
_adcaa :=_ecfff (_agab .PdfRectangle );if _gcbb ._ffdee .blocks (_aeef ,_adcaa ){if _faged {_cf .Log .Info ("b\u006co\u0063\u006b\u0065\u0064\u0020\u0078\u2192\u0020:\u0020\u0025\u0073\u0020%s",_agab ,_gcbb );};return true ;};};if _agab .Ury < _gcbb .Lly {_bcg :=_bdcfb (_agab .PdfRectangle );
_bfdd :=_abcf (_gcbb .PdfRectangle );if _gcbb ._aabb .blocks (_bcg ,_bfdd ){if _faged {_cf .Log .Info ("\u0062\u006c\u006f\u0063ke\u0064\u0020\u2190\u0079\u003a\u0020\u0025\u0073\u0020\u0025\u0073",_agab ,_gcbb );};return true ;};}else if _gcbb .Ury < _agab .Lly {_bgag :=_bdcfb (_gcbb .PdfRectangle );
_ecgf :=_abcf (_agab .PdfRectangle );if _gcbb ._aabb .blocks (_bgag ,_ecgf ){if _faged {_cf .Log .Info ("b\u006co\u0063\u006b\u0065\u0064\u0020\u0079\u2192\u0020:\u0020\u0025\u0073\u0020%s",_agab ,_gcbb );};return true ;};};return false ;};func (_fedg *textTable )bbox ()_gcb .PdfRectangle {return _fedg .PdfRectangle };
func (_edbce *textLine )toTextMarks (_bebbc *int )[]TextMark {var _bced []TextMark ;for _ ,_gdad :=range _edbce ._gaef {if _gdad ._afeg {_bced =_cecfe (_bced ,_bebbc ,"\u0020");};_ecgd :=_gdad .toTextMarks (_bebbc );_bced =append (_bced ,_ecgd ...);};return _bced ;
};func (_ddaa *wordBag )absorb (_fedab *wordBag ){_cebe :=_fedab .makeRemovals ();for _cebg ,_fbbe :=range _fedab ._eafg {for _ ,_cbca :=range _fbbe {_ddaa .pullWord (_cbca ,_cebg ,_cebe );};};_fedab .applyRemovals (_cebe );};
// 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 (_aeg *Extractor )ExtractTextWithStats ()(_caae string ,_cfb int ,_beg int ,_abe error ){_gcd ,_cfb ,_beg ,_abe :=_aeg .ExtractPageText ();if _abe !=nil {return "",_cfb ,_beg ,_abe ;};return _gcd .Text (),_cfb ,_beg ,nil ;};func (_dfbc *structTreeRoot )parseStructTreeRoot (_edab _ec .PdfObject ){if _edab !=nil {_eacg ,_dcdbb :=_ec .GetDict (_edab );
if !_dcdbb {_cf .Log .Debug ("\u0070\u0061\u0072s\u0065\u0053\u0074\u0072\u0075\u0063\u0074\u0054\u0072\u0065\u0065\u0052\u006f\u006f\u0074\u003a\u0020\u0064\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079\u0020\u006eo\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u002e");
};K :=_eacg .Get ("\u004b");_afba :=_eacg .Get ("\u0054\u0079\u0070\u0065").String ();var _fcdb *_ec .PdfObjectArray ;switch _dfcb :=K .(type ){case *_ec .PdfObjectArray :_fcdb =_dfcb ;case *_ec .PdfObjectReference :_fcdb =_ec .MakeArray (K );};_gccb :=[]structElement {};
for _ ,_ged :=range _fcdb .Elements (){_gege :=&structElement {};_gege .parseStructElement (_ged );_gccb =append (_gccb ,*_gege );};_dfbc ._bgda =_gccb ;_dfbc ._fcfc =_afba ;};};func _bdcfb (_feeda _gcb .PdfRectangle )*ruling {return &ruling {_cfgc :_effb ,_ccgff :_feeda .Ury ,_bggg :_feeda .Llx ,_dfadf :_feeda .Urx };
};func (_caca gridTiling )complete ()bool {for _ ,_ffagb :=range _caca ._caeg {for _ ,_dfed :=range _ffagb {if !_dfed .complete (){return false ;};};};return true ;};func (_eagb *textObject )newTextMark (_efcb string ,_caef _b .Matrix ,_aafe _b .Point ,_gggc float64 ,_gfga *_gcb .PdfFont ,_beff float64 ,_dggb ,_ddgc _ca .Color ,_efddd _ec .PdfObject ,_fbff []string ,_gfae int ,_afae int )(textMark ,bool ){_babc :=_caef .Angle ();
_eef :=_aabe (_babc ,_ecbf );var _cdfa float64 ;if _eef %180!=90{_cdfa =_caef .ScalingFactorY ();}else {_cdfa =_caef .ScalingFactorX ();};_afgf :=_effc (_caef );_dcdbc :=_gcb .PdfRectangle {Llx :_afgf .X ,Lly :_afgf .Y ,Urx :_aafe .X ,Ury :_aafe .Y };switch _eef %360{case 90:_dcdbc .Urx -=_cdfa ;
case 180:_dcdbc .Ury -=_cdfa ;case 270:_dcdbc .Urx +=_cdfa ;case 0:_dcdbc .Ury +=_cdfa ;default:_eef =0;_dcdbc .Ury +=_cdfa ;};if _dcdbc .Llx > _dcdbc .Urx {_dcdbc .Llx ,_dcdbc .Urx =_dcdbc .Urx ,_dcdbc .Llx ;};if _dcdbc .Lly > _dcdbc .Ury {_dcdbc .Lly ,_dcdbc .Ury =_dcdbc .Ury ,_dcdbc .Lly ;
};_egbf :=true ;if _eagb ._cbcg ._efc .Width ()> 0{_edabc ,_aeff :=_bcgdg (_dcdbc ,_eagb ._cbcg ._efc );if !_aeff {_egbf =false ;_cf .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",_dcdbc ,_eagb ._cbcg ._efc ,_efcb );
};_dcdbc =_edabc ;};_bbgb :=_dcdbc ;_gadg :=_eagb ._cbcg ._efc ;switch _eef %360{case 90:_gadg .Urx ,_gadg .Ury =_gadg .Ury ,_gadg .Urx ;_bbgb =_gcb .PdfRectangle {Llx :_gadg .Urx -_dcdbc .Ury ,Urx :_gadg .Urx -_dcdbc .Lly ,Lly :_dcdbc .Llx ,Ury :_dcdbc .Urx };
case 180:_bbgb =_gcb .PdfRectangle {Llx :_gadg .Urx -_dcdbc .Llx ,Urx :_gadg .Urx -_dcdbc .Urx ,Lly :_gadg .Ury -_dcdbc .Lly ,Ury :_gadg .Ury -_dcdbc .Ury };case 270:_gadg .Urx ,_gadg .Ury =_gadg .Ury ,_gadg .Urx ;_bbgb =_gcb .PdfRectangle {Llx :_dcdbc .Ury ,Urx :_dcdbc .Lly ,Lly :_gadg .Ury -_dcdbc .Llx ,Ury :_gadg .Ury -_dcdbc .Urx };
};if _bbgb .Llx > _bbgb .Urx {_bbgb .Llx ,_bbgb .Urx =_bbgb .Urx ,_bbgb .Llx ;};if _bbgb .Lly > _bbgb .Ury {_bbgb .Lly ,_bbgb .Ury =_bbgb .Ury ,_bbgb .Lly ;};_bcad :=textMark {_abac :_efcb ,PdfRectangle :_bbgb ,_baeb :_dcdbc ,_cafa :_gfga ,_cegg :_cdfa ,_fcbc :_beff ,_dgbe :_caef ,_cfgae :_aafe ,_edbb :_eef ,_abbf :_dggb ,_fffc :_ddgc ,_ddce :_efddd ,_aafg :_fbff ,Th :_eagb ._cgge ._fdg ,Tw :_eagb ._cgge ._bfbc ,_faggb :_afae ,_bbeg :_gfae };
if _fcade {_cf .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",_afgf ,_aafe ,_bcad .String ());};return _bcad ,_egbf ;
};const (_ebaf ="\u0045\u0052R\u004f\u0052\u003a\u0020\u0043\u0061\u006e\u0027\u0074\u0020\u0063\u006f\u006e\u0076\u0065\u0072\u0074\u0020\u0066\u006f\u006e\u0074\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u002c\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0074\u0079\u0070\u0065";
_afg ="\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0043a\u006e\u0027\u0074 g\u0065\u0074\u0020\u0066\u006f\u006et\u0020\u0070\u0072\u006f\u0070\u0065\u0072\u0074\u0069\u0065\u0073\u002c\u0020\u0066\u006fn\u0074\u0020\u006e\u006f\u0074\u0020\u0066\u006fu\u006e\u0064";
_feeg ="\u0045\u0052\u0052O\u0052\u003a\u0020\u0043\u0061\u006e\u0027\u0074\u0020\u0067\u0065\u0074\u0020\u0066\u006f\u006e\u0074\u0020\u0073\u0074\u0072\u0065\u0061\u006d\u002c\u0020\u0069\u006e\u0076a\u006c\u0069\u0064\u0020\u0074\u0079\u0070\u0065";
_dda ="E\u0052R\u004f\u0052\u003a\u0020\u004e\u006f\u0020\u0066o\u006e\u0074\u0020\u0066ou\u006e\u0064";);func _bbec (_bfe []structElement ,_eggea map[int ][]*textLine ,_gdbf _ec .PdfObject )[]*list {_cgdb :=[]*list {};for _ ,_ddgg :=range _bfe {_fegf :=_ddgg ._gbee ;
_bdfgd :=int (_ddgg ._daaa );_cagf :=_ddgg ._fbbed ;_dfae :=[]*textLine {};_gcdc :=[]*list {};_cegc :=_ddgg ._ffcc ;_ffdc ,_cdba :=(_cegc .(*_ec .PdfObjectReference ));if !_cdba {_cf .Log .Debug ("\u0066\u0061\u0069l\u0065\u0064\u0020\u006f\u0074\u0020\u0063\u0061\u0073\u0074\u0020\u0074\u006f\u0020\u002a\u0063\u006f\u0072\u0065\u002e\u0050\u0064\u0066\u004f\u0062\u006a\u0065\u0063\u0074R\u0065\u0066\u0065\u0072\u0065\u006e\u0063\u0065");
};if _bdfgd !=-1&&_ffdc !=nil {if _ffbf ,_dfad :=_eggea [_bdfgd ];_dfad {if _dfef ,_ddfb :=_gdbf .(*_ec .PdfIndirectObject );_ddfb {_bgeg :=_dfef .PdfObjectReference ;if _f .DeepEqual (*_ffdc ,_bgeg ){_dfae =_ffbf ;};};};};if _fegf !=nil {_gcdc =_bbec (_fegf ,_eggea ,_gdbf );
};_ddbc :=_fgff (_dfae ,_cagf ,_gcdc );_cgdb =append (_cgdb ,_ddbc );};return _cgdb ;};func (_ffba *subpath )add (_fged ..._b .Point ){_ffba ._gfee =append (_ffba ._gfee ,_fged ...)};func (_gcdgc paraList )inTile (_beaca gridTile )paraList {var _cfcaf paraList ;
for _ ,_gddgg :=range _gcdgc {if _beaca .contains (_gddgg .PdfRectangle ){_cfcaf =append (_cfcaf ,_gddgg );};};if _dcdb {_cg .Printf ("\u0020 \u0020\u0069\u006e\u0054i\u006c\u0065\u003a\u0020\u0020%\u0073 \u0069n\u0073\u0069\u0064\u0065\u003d\u0025\u0064\n",_beaca ,len (_cfcaf ));
for _eggfb ,_faec :=range _cfcaf {_cg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_eggfb ,_faec );};_cg .Println ("");};return _cfcaf ;};func (_afeb *textLine )markWordBoundaries (){_bcga :=_cbgdd *_afeb ._acgge ;for _afga ,_defa :=range _afeb ._gaef [1:]{if _egage (_defa ,_afeb ._gaef [_afga ])>=_bcga {_defa ._afeg =true ;
};};};func (_dfge *structTreeRoot )buildList (_fcfb map[int ][]*textLine ,_gbgf _ec .PdfObject )[]*list {if _dfge ==nil {_cf .Log .Debug ("\u0062\u0075\u0069\u006c\u0064\u004c\u0069\u0073\u0074\u003a\u0020t\u0072\u0065\u0065\u0052\u006f\u006f\u0074\u0020\u0069\u0073 \u006e\u0069\u006c");
return nil ;};var _cgd *structElement ;_eaccf :=[]structElement {};if len (_dfge ._bgda )==1{_cbead :=_dfge ._bgda [0]._fbbed ;if _cbead =="\u0044\u006f\u0063\u0075\u006d\u0065\u006e\u0074"||_cbead =="\u0053\u0065\u0063\u0074"||_cbead =="\u0050\u0061\u0072\u0074"||_cbead =="\u0044\u0069\u0076"||_cbead =="\u0041\u0072\u0074"{_cgd =&_dfge ._bgda [0];
};}else {_cgd =&structElement {_gbee :_dfge ._bgda ,_fbbed :_dfge ._fcfc };};if _cgd ==nil {_cf .Log .Debug ("\u0062\u0075\u0069\u006cd\u004c\u0069\u0073\u0074\u003a\u0020\u0074\u006f\u0070\u0045l\u0065m\u0065\u006e\u0074\u0020\u0069\u0073\u0020n\u0069\u006c");
return nil ;};for _ ,_ebeee :=range _cgd ._gbee {if _ebeee ._fbbed =="\u004c"{_eaccf =append (_eaccf ,_ebeee );}else if _ebeee ._fbbed =="\u0054\u0061\u0062l\u0065"{_ggcb :=_fecdd (_ebeee );_eaccf =append (_eaccf ,_ggcb ...);};};_bacb :=_bbec (_eaccf ,_fcfb ,_gbgf );
var _bbfc []*list ;for _ ,_aeeaf :=range _bacb {_dgffd :=_baag (_aeeaf );_bbfc =append (_bbfc ,_dgffd ...);};return _bbfc ;};func _ggddf (_caaba float64 )bool {return _gc .Abs (_caaba )< _fcd };
// String returns a string describing `ma`.
func (_gfdac TextMarkArray )String ()string {_eac :=len (_gfdac ._cea );if _eac ==0{return "\u0045\u004d\u0050T\u0059";};_egdf :=_gfdac ._cea [0];_ced :=_gfdac ._cea [_eac -1];return _cg .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",_eac ,_egdf ,_ced );
};func (_dgcbe rulingList )log (_ceabf string ){if !_cgcb {return ;};_cf .Log .Info ("\u0023\u0023\u0023\u0020\u0025\u0031\u0030\u0073\u003a\u0020\u0076\u0065c\u0073\u003d\u0025\u0073",_ceabf ,_dgcbe .String ());for _cbac ,_caedd :=range _dgcbe {_cg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_cbac ,_caedd .String ());
};};var (_gefe =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 (_abbeg rulingList )intersections ()map[int ]intSet {var _cdace ,_fabg []int ;for _cdcc ,_aegc :=range _abbeg {switch _aegc ._cfgc {case _gcaf :_cdace =append (_cdace ,_cdcc );case _effb :_fabg =append (_fabg ,_cdcc );};};if len (_cdace )< _gdafg +1||len (_fabg )< _gbgb +1{return nil ;
};if len (_cdace )+len (_fabg )> _abbcb {_cf .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 (_abbeg ),len (_cdace ),len (_fabg ));
return nil ;};_fdcff :=make (map[int ]intSet ,len (_cdace )+len (_fabg ));for _ ,_fafd :=range _cdace {for _ ,_cfaf :=range _fabg {if _abbeg [_fafd ].intersects (_abbeg [_cfaf ]){if _ ,_gdc :=_fdcff [_fafd ];!_gdc {_fdcff [_fafd ]=make (intSet );};if _ ,_accg :=_fdcff [_cfaf ];
!_accg {_fdcff [_cfaf ]=make (intSet );};_fdcff [_fafd ].add (_cfaf );_fdcff [_cfaf ].add (_fafd );};};};return _fdcff ;};func _gafbc (_fdb _gcb .PdfRectangle )textState {return textState {_fdg :100,_ddg :RenderModeFill ,_bed :_fdb };};func (_bcfaf rulingList )sort (){_eb .Slice (_bcfaf ,_bcfaf .comp )};
func _baag (_cbfe *list )[]*list {var _eebf []*list ;for _ ,_bfbd :=range _cbfe ._dbece {switch _bfbd ._cdbe {case "\u004c\u0049":_fgcc :=_fgfd (_bfbd );_cdbbf :=_baag (_bfbd );_abcb :=_fgff (_fgcc ,"\u0062\u0075\u006c\u006c\u0065\u0074",_cdbbf );_edaf :=_eade (_fgcc ,"");
_abcb ._daafgc =_edaf ;_eebf =append (_eebf ,_abcb );case "\u004c\u0042\u006fd\u0079":return _baag (_bfbd );case "\u004c":_edaa :=_baag (_bfbd );_eebf =append (_eebf ,_edaa ...);return _eebf ;};};return _eebf ;};func _ecaaa (_ggac []TextMark ,_edea *int )[]TextMark {_gbddce :=_ggac [len (_ggac )-1];
_bbaae :=[]rune (_gbddce .Text );if len (_bbaae )==1{_ggac =_ggac [:len (_ggac )-1];_agdd :=_ggac [len (_ggac )-1];*_edea =_agdd .Offset +len (_agdd .Text );}else {_cbcda :=_bded (_gbddce .Text );*_edea +=len (_cbcda )-len (_gbddce .Text );_gbddce .Text =_cbcda ;
};return _ggac ;};func (_dafd *textTable )compositeRowCorridors ()map[int ][]float64 {_feggb :=make (map[int ][]float64 ,_dafd ._edaga );if _dcdb {_cf .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",_dafd ._edaga );
};for _aefe :=1;_aefe < _dafd ._edaga ;_aefe ++{var _dffd []compositeCell ;for _fgga :=0;_fgga < _dafd ._abeef ;_fgga ++{if _debd ,_acdfg :=_dafd ._agda [_fgfde (_fgga ,_aefe )];_acdfg {_dffd =append (_dffd ,_debd );};};if len (_dffd )==0{continue ;};_ffgd :=_eefe (_dffd );
_feggb [_aefe ]=_ffgd ;if _dcdb {_cg .Printf ("\u0020\u0020\u0020\u0025\u0032\u0064\u003a\u0020\u00256\u002e\u0032\u0066\u000a",_aefe ,_ffgd );};};return _feggb ;};func (_ffdeg *wordBag )applyRemovals (_addb map[int ]map[*textWord ]struct{}){for _dgfdc ,_eacc :=range _addb {if len (_eacc )==0{continue ;
};_eaea :=_ffdeg ._eafg [_dgfdc ];_ccde :=len (_eaea )-len (_eacc );if _ccde ==0{delete (_ffdeg ._eafg ,_dgfdc );continue ;};_afed :=make ([]*textWord ,_ccde );_gad :=0;for _ ,_fccg :=range _eaea {if _ ,_bgcegg :=_eacc [_fccg ];!_bgcegg {_afed [_gad ]=_fccg ;
_gad ++;};};_ffdeg ._eafg [_dgfdc ]=_afed ;};};func _bbgfd (_beddb []pathSection ){if _ggfda < 0.0{return ;};if _cgcb {_cf .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 (_beddb ));
};for _babbf ,_baef :=range _beddb {for _cgfdg ,_bfdg :=range _baef ._adbcg {for _dbca ,_dgfcf :=range _bfdg ._gfee {_bfdg ._gfee [_dbca ]=_b .Point {X :_fcgd (_dgfcf .X ),Y :_fcgd (_dgfcf .Y )};if _cgcb {_ggbgg :=_bfdg ._gfee [_dbca ];if !_eeefg (_dgfcf ,_ggbgg ){_egebg :=_b .Point {X :_ggbgg .X -_dgfcf .X ,Y :_ggbgg .Y -_dgfcf .Y };
_cg .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",_babbf ,_cgfdg ,_dbca ,_dgfcf ,_ggbgg ,_egebg );};};};};};};type compositeCell struct{_gcb .PdfRectangle ;
paraList ;};func (_feedde *compositeCell )updateBBox (){for _ ,_ebcdc :=range _feedde .paraList {_feedde .PdfRectangle =_edfc (_feedde .PdfRectangle ,_ebcdc .PdfRectangle );};};func (_beecf *textTable )put (_bcgdfe ,_aeaad int ,_gddf *textPara ){_beecf ._cfcac [_fgfde (_bcgdfe ,_aeaad )]=_gddf ;
};
// 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 _cdfe (_gffbg []float64 ,_afdb ,_eeaed float64 )[]float64 {_cafc ,_dafgb :=_afdb ,_eeaed ;if _dafgb < _cafc {_cafc ,_dafgb =_dafgb ,_cafc ;};_ddffb :=make ([]float64 ,0,len (_gffbg )+2);_ddffb =append (_ddffb ,_afdb );for _ ,_gebb :=range _gffbg {if _gebb <=_cafc {continue ;
}else if _gebb >=_dafgb {break ;};_ddffb =append (_ddffb ,_gebb );};_ddffb =append (_ddffb ,_eeaed );return _ddffb ;};const (_gaeg =1.0e-6;_ggfda =1.0e-4;_ecbf =10;_dbbb =6;_dcad =0.5;_ebfcg =0.12;_adce =0.19;_ffab =0.04;_acfg =0.04;_eeae =1.0;_edfce =0.04;
_gffe =0.4;_gaad =0.7;_degb =1.0;_bgac =0.1;_dcee =1.4;_adad =0.46;_cbgdd =0.02;_aegd =0.2;_cgbc =0.5;_faafd =4;_cdac =4.0;_cdcg =6;_bagd =0.3;_dfbe =0.01;_cfgf =0.02;_gdafg =2;_gbgb =2;_abbcb =500;_agba =4.0;_caf =4.0;_deaa =0.05;_aeda =0.1;_cddf =2.0;
_fcd =2.0;_cbed =1.5;_afa =3.0;_bdfeg =0.25;);func _fgfde (_bcgeec ,_bcgbd int )uint64 {return uint64 (_bcgeec )*0x1000000+uint64 (_bcgbd )};func _gfaad (_dfdc ,_geff _b .Point ,_edbbb _ca .Color )(*ruling ,bool ){_afdf :=lineRuling {_efgf :_dfdc ,_afdd :_geff ,_egab :_egdbg (_dfdc ,_geff ),Color :_edbbb };
if _afdf ._egab ==_dbgc {return nil ,false ;};return _afdf .asRuling ();};func _bded (_eddg string )string {_fdfc :=[]rune (_eddg );return string (_fdfc [:len (_fdfc )-1])};type textState struct{_gbdb float64 ;_bfbc float64 ;_fdg float64 ;_bccg float64 ;
_eccd float64 ;_ddg RenderMode ;_cgg float64 ;_aedfe *_gcb .PdfFont ;_bed _gcb .PdfRectangle ;_ecf int ;_eecc int ;};var _eeeg *_e .Regexp =_e .MustCompile (_gfaab +"\u007c"+_agfge );func (_agf *textObject )getCurrentFont ()*_gcb .PdfFont {_cfbg :=_agf ._cgge ._aedfe ;
if _cfbg ==nil {_cf .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 _gcb .DefaultFont ();
};return _cfbg ;};func (_fdec *wordBag )firstReadingIndex (_affc int )int {_cefg :=_fdec .firstWord (_affc )._ffcg ;_efeb :=float64 (_affc +1)*_dbbb ;_adgf :=_efeb +_cdac *_cefg ;_gbgea :=_affc ;for _ ,_egaa :=range _fdec .depthBand (_efeb ,_adgf ){if _decg (_fdec .firstWord (_egaa ),_fdec .firstWord (_gbgea ))< 0{_gbgea =_egaa ;
};};return _gbgea ;};func (_cbeeg *wordBag )text ()string {_bdfed :=_cbeeg .allWords ();_begd :=make ([]string ,len (_bdfed ));for _bcfd ,_bcfe :=range _bdfed {_begd [_bcfd ]=_bcfe ._cfafbd ;};return _cgb .Join (_begd ,"\u0020");};func _bgefa (_fedf []*textWord ,_fcga float64 ,_acea ,_afgd rulingList )*wordBag {_aebbf :=_ffcee (_fedf [0],_fcga ,_acea ,_afgd );
for _ ,_ebag :=range _fedf [1:]{_defg :=_ccec (_ebag ._aada );_aebbf ._eafg [_defg ]=append (_aebbf ._eafg [_defg ],_ebag );_aebbf .PdfRectangle =_edfc (_aebbf .PdfRectangle ,_ebag .PdfRectangle );};_aebbf .sort ();return _aebbf ;};
// String returns a human readable description of `vecs`.
func (_cdabf rulingList )String ()string {if len (_cdabf )==0{return "\u007b \u0045\u004d\u0050\u0054\u0059\u0020}";};_eeecd ,_cfed :=_cdabf .vertsHorzs ();_abffc :=len (_eeecd );_bebcf :=len (_cfed );if _abffc ==0||_bebcf ==0{return _cg .Sprintf ("\u007b%\u0064\u0020\u0078\u0020\u0025\u0064}",_abffc ,_bebcf );
};_agbd :=_gcb .PdfRectangle {Llx :_eeecd [0]._ccgff ,Urx :_eeecd [_abffc -1]._ccgff ,Lly :_cfed [_bebcf -1]._ccgff ,Ury :_cfed [0]._ccgff };return _cg .Sprintf ("\u007b\u0025d\u0020\u0078\u0020%\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u007d",_abffc ,_bebcf ,_agbd );
};
// BBox returns the smallest axis-aligned rectangle that encloses all the TextMarks in `ma`.
func (_daba *TextMarkArray )BBox ()(_gcb .PdfRectangle ,bool ){var _fddfc _gcb .PdfRectangle ;_ddcb :=false ;for _ ,_dbbf :=range _daba ._cea {if _dbbf .Meta ||_cfedf (_dbbf .Text ){continue ;};if _ddcb {_fddfc =_edfc (_fddfc ,_dbbf .BBox );}else {_fddfc =_dbbf .BBox ;
_ddcb =true ;};};return _fddfc ,_ddcb ;};func (_caefe *textTable )markCells (){for _bdga :=0;_bdga < _caefe ._edaga ;_bdga ++{for _geec :=0;_geec < _caefe ._abeef ;_geec ++{_ebfg :=_caefe .get (_geec ,_bdga );if _ebfg !=nil {_ebfg ._acffe =true ;};};};
};func (_ecbc *textWord )addDiacritic (_becgb string ){_bcdbb :=_ecbc ._ebeb [len (_ecbc ._ebeb )-1];_bcdbb ._abac +=_becgb ;_bcdbb ._abac =_gg .NFKC .String (_bcdbb ._abac );};func (_fgea paraList )topoOrder ()[]int {if _cecd {_cf .Log .Info ("\u0074\u006f\u0070\u006f\u004f\u0072\u0064\u0065\u0072\u003a");
};_aagbb :=len (_fgea );_effd :=make ([]bool ,_aagbb );_adee :=make ([]int ,0,_aagbb );_cfdcf :=_fgea .llyOrdering ();var _dgebd func (_eegd int );_dgebd =func (_ccda int ){_effd [_ccda ]=true ;for _gdgc :=0;_gdgc < _aagbb ;_gdgc ++{if !_effd [_gdgc ]{if _fgea .readBefore (_cfdcf ,_ccda ,_gdgc ){_dgebd (_gdgc );
};};};_adee =append (_adee ,_ccda );};for _gecb :=0;_gecb < _aagbb ;_gecb ++{if !_effd [_gecb ]{_dgebd (_gecb );};};return _fdaab (_adee );};func (_bb *PageFonts )extractPageResourcesToFont (_efg *_gcb .PdfPageResources )error {if _efg .Font ==nil {return _fe .New (_dda );
};_gge ,_fgcg :=_ec .GetDict (_efg .Font );if !_fgcg {return _fe .New (_ebaf );};for _ ,_eeg :=range _gge .Keys (){var (_ggd =true ;_aaf []byte ;_abf string ;);_gbc ,_ega :=_efg .GetFontByName (_eeg );if !_ega {return _fe .New (_afg );};_bba ,_fgeb :=_gcb .NewPdfFontFromPdfObject (_gbc );
if _fgeb !=nil {return _fgeb ;};_gde :=_bba .FontDescriptor ();_ebac :=_bba .FontDescriptor ().FontName .String ();_cgc :=_bba .Subtype ();if _agcd (_bb .Fonts ,_ebac ){continue ;};if len (_bba .ToUnicode ())==0{_ggd =false ;};if _gde .FontFile !=nil {if _adab ,_eeea :=_ec .GetStream (_gde .FontFile );
_eeea {_aaf ,_fgeb =_ec .DecodeStream (_adab );if _fgeb !=nil {return _fgeb ;};_abf =_ebac +"\u002e\u0070\u0066\u0062";};}else if _gde .FontFile2 !=nil {if _bbc ,_dfe :=_ec .GetStream (_gde .FontFile2 );_dfe {_aaf ,_fgeb =_ec .DecodeStream (_bbc );if _fgeb !=nil {return _fgeb ;
};_abf =_ebac +"\u002e\u0074\u0074\u0066";};}else if _gde .FontFile3 !=nil {if _fb ,_bca :=_ec .GetStream (_gde .FontFile3 );_bca {_aaf ,_fgeb =_ec .DecodeStream (_fb );if _fgeb !=nil {return _fgeb ;};_abf =_ebac +"\u002e\u0063\u0066\u0066";};};if len (_abf )< 1{_cf .Log .Debug (_feeg );
};_abc :=Font {FontName :_ebac ,PdfFont :_bba ,IsCID :_bba .IsCID (),IsSimple :_bba .IsSimple (),ToUnicode :_ggd ,FontType :_cgc ,FontData :_aaf ,FontFileName :_abf ,FontDescriptor :_gde };_bb .Fonts =append (_bb .Fonts ,_abc );};return nil ;};
// GetContentStreamOps returns the contentStreamOps field of `pt`.
func (_bccc *PageText )GetContentStreamOps ()*_ag .ContentStreamOperations {return _bccc ._cgfc };func (_ffef *wordBag )highestWord (_gega int ,_gecd ,_bcgd float64 )*textWord {for _ ,_fgdd :=range _ffef ._eafg [_gega ]{if _gecd <=_fgdd ._aada &&_fgdd ._aada <=_bcgd {return _fgdd ;
};};return nil ;};func (_cadf *wordBag )empty (_ebcg int )bool {_ ,_acdd :=_cadf ._eafg [_ebcg ];return !_acdd };var _afee =_e .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 (_fcde *textTable )depth ()float64 {_dfag :=1e10;for _fccdg :=0;_fccdg < _fcde ._abeef ;_fccdg ++{_dbdg :=_fcde .get (_fccdg ,0);if _dbdg ==nil ||_dbdg ._fbfg {continue ;};_dfag =_gc .Min (_dfag ,_dbdg .depth ());};return _dfag ;};func _bgdgc (_edef []*textLine ,_cagg map[float64 ][]*textLine )[]*list {_fcaed :=_dgecb (_cagg );
_ggdb :=[]*list {};if len (_fcaed )==0{return _ggdb ;};_adcdf :=_fcaed [0];_fdbd :=1;_bfee :=_cagg [_adcdf ];for _ecae ,_egcc :=range _bfee {var _edfcg float64 ;_caad :=[]*list {};_dcbff :=_egcc ._aabbc ;_efaeg :=-1.0;if _ecae < len (_bfee )-1{_efaeg =_bfee [_ecae +1]._aabbc ;
};if _fdbd < len (_fcaed ){_caad =_bcbb (_edef ,_cagg ,_fcaed ,_fdbd ,_dcbff ,_efaeg );};_edfcg =_efaeg ;if len (_caad )> 0{_ecad :=_caad [0];if len (_ecad ._gcac )> 0{_edfcg =_ecad ._gcac [0]._aabbc ;};};_facg :=[]*textLine {_egcc };_fedfc :=_becgf (_egcc ,_edef ,_fcaed ,_dcbff ,_edfcg );
_facg =append (_facg ,_fedfc ...);_baec :=_fgff (_facg ,"\u0062\u0075\u006c\u006c\u0065\u0074",_caad );_baec ._daafgc =_eade (_facg ,"");_ggdb =append (_ggdb ,_baec );};return _ggdb ;};
// String returns a human readable description of `s`.
func (_acaaf intSet )String ()string {var _bdae []int ;for _eebe :=range _acaaf {if _acaaf .has (_eebe ){_bdae =append (_bdae ,_eebe );};};_eb .Ints (_bdae );return _cg .Sprintf ("\u0025\u002b\u0076",_bdae );};const _bcf =10;func (_dedg paraList )merge ()*textPara {_cf .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 (_dedg ));
if len (_dedg )==0{return nil ;};_dedg .sortReadingOrder ();_gcga :=_dedg [0].PdfRectangle ;_ecfa :=_dedg [0]._ecbe ;for _ ,_dbadd :=range _dedg [1:]{_gcga =_edfc (_gcga ,_dbadd .PdfRectangle );_ecfa =append (_ecfa ,_dbadd ._ecbe ...);};return _dfgf (_gcga ,_ecfa );
};func (_gdgac *ruling )gridIntersecting (_fffd *ruling )bool {return _acbf (_gdgac ._bggg ,_fffd ._bggg )&&_acbf (_gdgac ._dfadf ,_fffd ._dfadf );};func _fef (_caa []rune )BidiText {_dc :=-1;_ac :=false ;_db :=true ;_gbab :=len (_caa );_dcg :=make ([]string ,_gbab );
_bf :=make ([]string ,_gbab );if _gbab ==0||_ac {return _feg (string (_caa ),_db ,_ac );};_ea :=0;for _bgee ,_fc :=range _caa {_dcg [_bgee ]=string (_fc );_ddd :="\u004c";if _fc <=0x00ff{_ddd =_ccg [_fc ];}else if 0x0590<=_fc &&_fc <=0x05f4{_ddd ="\u0052";
}else if 0x0600<=_fc &&_fc <=0x06ff{_ba :=_fc &0xff;if int (_ba )>=len (_de ){_g .Printf ("\u0042\u0069\u0064\u0069\u003a\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0055n\u0069c\u006f\u0064\u0065\u0020\u0063\u0068\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0020"+string (_fc ));
};_ddd =_de [_fc &0xff];}else if (0x0700<=_fc &&_fc <=0x08ac)||(0xfb50<=_fc &&_fc <=0xfdff)||(0xfe70<=_fc &&_fc <=0xfeff){_ddd ="\u0041\u004c";};if _ddd =="\u0052"||_ddd =="\u0041\u004c"||_ddd =="\u0041\u004e"{_ea ++;};_bf [_bgee ]=_ddd ;};if _ea ==0{_db =true ;
return _feg (string (_caa ),_db ,false );};if _dc ==-1{if float64 (_ea )/float64 (_gbab )< 0.3&&_gbab > 4{_db =true ;_dc =0;}else {_db =false ;_dc =1;};};var _cbb []int ;for range _caa {_cbb =append (_cbb ,_dc );};_ada :="\u004c";if _dg (_dc ){_ada ="\u0052";
};_egg :=_ada ;_bgf :=_egg ;_bac :=_egg ;for _ecg :=range _caa {if _bf [_ecg ]=="\u004e\u0053\u004d"{_bf [_ecg ]=_bac ;}else {_bac =_bf [_ecg ];};};_bac =_egg ;var _eee string ;for _cfa :=range _caa {_eee =_bf [_cfa ];if _eee =="\u0045\u004e"{if _bac =="\u0041\u004c"{_bf [_cfa ]="\u0041\u004e";
}else {_bf [_cfa ]="\u0045\u004e";};}else if _eee =="\u0052"||_eee =="\u004c"||_eee =="\u0041\u004c"{_bac =_eee ;};};for _agc :=range _caa {_dec :=_bf [_agc ];if _dec =="\u0041\u004c"{_bf [_agc ]="\u0052";};};for _gfc :=1;_gfc < (len (_caa )-1);_gfc ++{if _bf [_gfc ]=="\u0045\u0053"&&_bf [_gfc -1]=="\u0045\u004e"&&_bf [_gfc +1]=="\u0045\u004e"{_bf [_gfc ]="\u0045\u004e";
};if _bf [_gfc ]=="\u0043\u0053"&&(_bf [_gfc -1]=="\u0045\u004e"||_bf [_gfc -1]=="\u0041\u004e")&&_bf [_gfc +1]==_bf [_gfc -1]{_bf [_gfc ]=_bf [_gfc -1];};};for _cbg :=range _caa {if _bf [_cbg ]=="\u0045\u004e"{for _fa :=_cbg -1;_fa >=0;_fa --{if _bf [_fa ]!="\u0045\u0054"{break ;
};_bf [_fa ]="\u0045\u004e";};for _bcd :=_cbg +1;_bcd < _gbab ;_bcd ++{if _bf [_bcd ]!="\u0045\u0054"{break ;};_bf [_bcd ]="\u0045\u004e";};};};for _ffd :=range _caa {_ffdd :=_bf [_ffd ];if _ffdd =="\u0057\u0053"||_ffdd =="\u0045\u0053"||_ffdd =="\u0045\u0054"||_ffdd =="\u0043\u0053"{_bf [_ffd ]="\u004f\u004e";
};};_bac ="\u0073\u006f\u0072";for _gd :=range _caa {_beb :=_bf [_gd ];if _beb =="\u0045\u004e"{if _bac =="\u004c"{_bf [_gd ]="\u004c";}else {_bf [_gd ]="\u0045\u004e";};}else if _beb =="\u0052"||_beb =="\u004c"{_bac =_beb ;};};for _ccb :=0;_ccb < len (_caa );
_ccb ++{if _bf [_ccb ]=="\u004f\u004e"{_gda :=_bge (_bf ,_ccb +1,"\u004f\u004e");_fgc :=_bgf ;if _ccb > 0{_fgc =_bf [_ccb -1];};_aa :=_bgf ;if _gda +1< _gbab {_aa =_bf [_gda +1];};if _fgc !="\u004c"{_fgc ="\u0052";};if _aa !="\u004c"{_aa ="\u0052";};if _fgc ==_aa {_cd (_bf ,_ccb ,_gda ,_fgc );
};_ccb =_gda -1;};};for _eeb :=range _caa {if _bf [_eeb ]=="\u004f\u004e"{_bf [_eeb ]=_ada ;};};for _bgef :=range _caa {_dbg :=_bf [_bgef ];if _df (_cbb [_bgef ]){if _dbg =="\u0052"{_cbb [_bgef ]++;}else if _dbg =="\u0041\u004e"||_dbg =="\u0045\u004e"{_cbb [_bgef ]+=2;
};}else if _dbg =="\u004c"||_dbg =="\u0041\u004e"||_dbg =="\u0045\u004e"{_cbb [_bgef ]++;};};_fad :=-1;_egb :=99;var _fcf int ;for _bgb :=0;_bgb < len (_cbb );_bgb ++{_fcf =_cbb [_bgb ];if _fad < _fcf {_fad =_fcf ;};if _egb > _fcf &&_dg (_fcf ){_egb =_fcf ;
};};for _gdg :=_fad ;_gdg >=_egb ;_gdg --{_eea :=-1;for _ebg :=0;_ebg < len (_cbb );_ebg ++{if _cbb [_ebg ]< _gdg {if _eea >=0{_gba (_dcg ,_eea ,_ebg );_eea =-1;};}else if _eea < 0{_eea =_ebg ;};};if _eea >=0{_gba (_dcg ,_eea ,len (_cbb ));};};for _ge :=0;
_ge < len (_dcg );_ge ++{_ecge :=_dcg [_ge ];if _ecge =="\u003c"||_ecge =="\u003e"{_dcg [_ge ]="";};};return _feg (_cgb .Join (_dcg ,""),_db ,false );};
// 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 (_gcbc PageText )ToText ()string {return _gcbc .Text ()};func _ffbc (_fcag ,_acdb _gcb .PdfRectangle )bool {return _fcag .Lly <=_acdb .Ury &&_acdb .Lly <=_fcag .Ury ;};func (_bbabd *ruling )alignsSec (_abega *ruling )bool {const _gbeb =_fcd +1.0;return _bbabd ._bggg -_gbeb <=_abega ._dfadf &&_abega ._bggg -_gbeb <=_bbabd ._dfadf ;
};func (_cbccf *wordBag )arrangeText ()*textPara {_cbccf .sort ();if _defd {_cbccf .removeDuplicates ();};var _bbebc []*textLine ;for _ ,_fbda :=range _cbccf .depthIndexes (){for !_cbccf .empty (_fbda ){_abee :=_cbccf .firstReadingIndex (_fbda );_degf :=_cbccf .firstWord (_abee );
_bdcaf :=_gcfa (_cbccf ,_abee );_gadb :=_degf ._ffcg ;_fafb :=_degf ._aada -_dcad *_gadb ;_bbcg :=_degf ._aada +_dcad *_gadb ;_cgaf :=_dcee *_gadb ;_ceed :=_adad *_gadb ;_ccbfe :for {var _cfca *textWord ;_ebecb :=0;for _ ,_abcdb :=range _cbccf .depthBand (_fafb ,_bbcg ){_dggd :=_cbccf .highestWord (_abcdb ,_fafb ,_bbcg );
if _dggd ==nil {continue ;};_fbfdf :=_egage (_dggd ,_bdcaf ._gaef [len (_bdcaf ._gaef )-1]);if _fbfdf < -_ceed {break _ccbfe ;};if _fbfdf > _cgaf {continue ;};if _cfca !=nil &&_decg (_dggd ,_cfca )>=0{continue ;};_cfca =_dggd ;_ebecb =_abcdb ;};if _cfca ==nil {break ;
};_bdcaf .pullWord (_cbccf ,_cfca ,_ebecb );};_bdcaf .markWordBoundaries ();_bbebc =append (_bbebc ,_bdcaf );};};if len (_bbebc )==0{return nil ;};_eb .Slice (_bbebc ,func (_edbe ,_fdcfaa int )bool {return _eadd (_bbebc [_edbe ],_bbebc [_fdcfaa ])< 0});
_edgc :=_dfgf (_cbccf .PdfRectangle ,_bbebc );if _aade {_cf .Log .Info ("\u0061\u0072\u0072an\u0067\u0065\u0054\u0065\u0078\u0074\u0020\u0021\u0021\u0021\u0020\u0070\u0061\u0072\u0061\u003d\u0025\u0073",_edgc .String ());if _fdef {for _ggdf ,_eeefc :=range _edgc ._ecbe {_cg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_ggdf ,_eeefc .String ());
if _aeca {for _bgbee ,_geee :=range _eeefc ._gaef {_cg .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_bgbee ,_geee .String ());for _bdcd ,_cecc :=range _geee ._ebeb {_cg .Printf ("\u00251\u0032\u0064\u003a\u0020\u0025\u0073\n",_bdcd ,_cecc .String ());
};};};};};};return _edgc ;};func (_gfe *textObject )setFont (_cgca string ,_afc float64 )error {if _gfe ==nil {return nil ;};_gfe ._cgge ._eccd =_afc ;_cec ,_cgba :=_gfe .getFont (_cgca );if _cgba !=nil {return _cgba ;};_gfe ._cgge ._aedfe =_cec ;return nil ;
};
// PageText represents the layout of text on a device page.
type PageText struct{_cfcd []*textMark ;_dae string ;_fff []TextMark ;_egadg []TextTable ;_faae _gcb .PdfRectangle ;_bddc []pathSection ;_adbc []pathSection ;_bdcgc *_ec .PdfObject ;_fbf _ec .PdfObject ;_cgfc *_ag .ContentStreamOperations ;_gebg PageTextOptions ;
};func (_ebgf rulingList )primMinMax ()(float64 ,float64 ){_eeac ,_adfc :=_ebgf [0]._ccgff ,_ebgf [0]._ccgff ;for _ ,_fgba :=range _ebgf [1:]{if _fgba ._ccgff < _eeac {_eeac =_fgba ._ccgff ;}else if _fgba ._ccgff > _adfc {_adfc =_fgba ._ccgff ;};};return _eeac ,_adfc ;
};const (_gdfba markKind =iota ;_aeec ;_agedg ;_egabf ;);
// Options extractor options.
type Options struct{
// DisableDocumentTags specifies whether to use the document tags during list extraction.
DisableDocumentTags bool ;
// ApplyCropBox will extract page text based on page cropbox if set to `true`.
ApplyCropBox bool ;
// UseSimplerExtractionProcess will skip topological text ordering and table processing.
//
// NOTE: While normally the extra processing is beneficial, it can also lead to problems when it does not work.
// Thus it is a flag to allow the user to control this process.
//
// Skipping some extraction processes would also lead to the reduced processing time.
UseSimplerExtractionProcess bool ;
// IncludeAnnotations specifies whether to include annotations in the extraction process, default value is `false`.
IncludeAnnotations bool ;};
// String returns a description of `tm`.
func (_gdgbe *textMark )String ()string {return _cg .Sprintf ("\u0025\u002e\u0032f \u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065\u003d\u0025\u002e\u0032\u0066\u0020\u0022\u0025\u0073\u0022",_gdgbe .PdfRectangle ,_gdgbe ._cegg ,_gdgbe ._abac );};func (_dfbf *textObject )getStrokeColor ()_ca .Color {return _ebabd (_dfbf ._cef .ColorspaceStroking ,_dfbf ._cef .ColorStroking );
};func (_daaf *PageText )computeViews (){_dcbf :=_daaf .getParagraphs ();_gecae :=new (_dd .Buffer );_dcbf .writeText (_gecae );_daaf ._dae =_gecae .String ();_daaf ._fff =_dcbf .toTextMarks ();_daaf ._egadg =_dcbf .tables ();if _dcdb {_cf .Log .Info ("\u0063\u006f\u006dpu\u0074\u0065\u0056\u0069\u0065\u0077\u0073\u003a\u0020\u0074\u0061\u0062\u006c\u0065\u0073\u003d\u0025\u0064",len (_daaf ._egadg ));
};};
// 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 (_bdbf *Extractor )ExtractText ()(string ,error ){_eddf ,_ ,_ ,_bfc :=_bdbf .ExtractTextWithStats ();return _eddf ,_bfc ;};func (_dacaa *textLine )text ()string {var _eaed []string ;for _ ,_dbbc :=range _dacaa ._gaef {if _dbbc ._afeg {_eaed =append (_eaed ,"\u0020");
};_eaed =append (_eaed ,_dbbc ._cfafbd );};_cbeae :=_cgb .Join (_eaed ,"");_bcff :=_fef ([]rune (_cbeae ));return _bcff ._cad ;};type textLine struct{_gcb .PdfRectangle ;_aabbc float64 ;_gaef []*textWord ;_acgge float64 ;};
// 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 _gcb .PdfRectangle ;
// Font is the font the text was drawn with.
Font *_gcb .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 _ca .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 _ca .Color ;
// Orientation is the text orientation
Orientation int ;
// DirectObject is the underlying PdfObject (Text Object) that represents the visible texts. This is introduced to get
// a simple access to the TextObject in case editing or replacment of some text is needed. E.g during redaction.
DirectObject _ec .PdfObject ;
// ObjString is a decoded string operand of a text-showing operator. It has the same value as `Text` attribute except
// when many glyphs are represented with the same Text Object that contains multiple length string operand in which case
// ObjString spans more than one character string that falls in different TextMark objects.
ObjString []string ;Tw float64 ;Th float64 ;Tc float64 ;Index int ;_fbd bool ;_bdff *TextTable ;};func (_cbce *textObject )getFont (_gddd string )(*_gcb .PdfFont ,error ){if _cbce ._cbcg ._efa !=nil {_gfgd ,_cfbcc :=_cbce .getFontDict (_gddd );if _cfbcc !=nil {_cf .Log .Debug ("\u0045\u0052\u0052OR\u003a\u0020\u0067\u0065\u0074\u0046\u006f\u006e\u0074:\u0020n\u0061m\u0065=\u0025\u0073\u002c\u0020\u0065\u0072\u0072\u006f\u0072\u003a\u0020\u0025\u0073",_gddd ,_cfbcc .Error ());
return nil ,_cfbcc ;};_cbce ._cbcg ._dgf ++;_daad ,_edbc :=_cbce ._cbcg ._efa [_gfgd .String ()];if _edbc {_daad ._ecbg =_cbce ._cbcg ._dgf ;return _daad ._dagf ,nil ;};};_cegd ,_aba :=_cbce .getFontDict (_gddd );if _aba !=nil {return nil ,_aba ;};_edec ,_aba :=_cbce .getFontDirect (_gddd );
if _aba !=nil {return nil ,_aba ;};if _cbce ._cbcg ._efa !=nil {_acfe :=fontEntry {_edec ,_cbce ._cbcg ._dgf };if len (_cbce ._cbcg ._efa )>=_bcf {var _dace []string ;for _bgbd :=range _cbce ._cbcg ._efa {_dace =append (_dace ,_bgbd );};_eb .Slice (_dace ,func (_bcec ,_bfab int )bool {return _cbce ._cbcg ._efa [_dace [_bcec ]]._ecbg < _cbce ._cbcg ._efa [_dace [_bfab ]]._ecbg ;
});delete (_cbce ._cbcg ._efa ,_dace [0]);};_cbce ._cbcg ._efa [_cegd .String ()]=_acfe ;};return _edec ,nil ;};func (_cbc *Extractor )extractPageText (_dac string ,_abb *_gcb .PdfPageResources ,_egc _b .Matrix ,_ace int ,_ggcf bool )(*PageText ,int ,int ,error ){_cf .Log .Trace ("\u0065x\u0074\u0072\u0061\u0063t\u0050\u0061\u0067\u0065\u0054e\u0078t\u003a \u006c\u0065\u0076\u0065\u006c\u003d\u0025d",_ace );
_bdd :=&PageText {_faae :_cbc ._efc ,_bdcgc :_cbc ._ga ,_fbf :_cbc ._bda };_bad :=_gafbc (_cbc ._efc );var _aaa stateStack ;_aee :=_ceca (_cbc ,_abb ,_ag .GraphicsState {},&_bad ,&_aaa );_bee :=shapesState {_ebf :_egc ,_fegda :_b .IdentityMatrix (),_ebab :_aee };
var _fag bool ;_dge :=-1;_fece :="";if _ace > _ecb {_ffa :=_fe .New ("\u0066\u006f\u0072\u006d s\u0074\u0061\u0063\u006b\u0020\u006f\u0076\u0065\u0072\u0066\u006c\u006f\u0077");_cf .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",_ace ,_ffa );
return _bdd ,_bad ._ecf ,_bad ._eecc ,_ffa ;};_ecd :=_ag .NewContentStreamParser (_dac );_gbd ,_cbf :=_ecd .Parse ();if _cbf !=nil {_cf .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",_cbf );
return _bdd ,_bad ._ecf ,_bad ._eecc ,_cbf ;};_bdd ._cgfc =_gbd ;_cfc :=_ag .NewContentStreamProcessor (*_gbd );_cfc .AddHandler (_ag .HandlerConditionEnumAllOperands ,"",func (_eae *_ag .ContentStreamOperation ,_gfd _ag .GraphicsState ,_fcg *_gcb .PdfPageResources )error {_bgeb :=_eae .Operand ;
if _ebcbb {_cf .Log .Info ("\u0026&\u0026\u0020\u006f\u0070\u003d\u0025s",_eae );};switch _bgeb {case "\u0071":if _efda {_cf .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_bee ._fegda );};_aaa .push (&_bad );case "\u0051":if !_aaa .empty (){_bad =*_aaa .pop ();
};_bee ._fegda =_gfd .CTM ;if _efda {_cf .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_bee ._fegda );};case "\u0042\u0044\u0043":_cega ,_eggd :=_ec .GetDict (_eae .Params [1]);if !_eggd {_cf .Log .Debug ("\u0045\u0052\u0052O\u0052\u003a\u0020\u0042D\u0043\u0020\u006f\u0070\u003d\u0025\u0073 \u0047\u0065\u0074\u0044\u0069\u0063\u0074\u0020\u0066\u0061\u0069\u006c\u0065\u0064",_eae );
return _cbf ;};_fed :=_cega .Get ("\u004d\u0043\u0049\u0044");if _fed !=nil {_gfg ,_age :=_ec .GetIntVal (_fed );if !_age {_cf .Log .Debug ("\u0045R\u0052\u004fR\u003a\u0020\u0042\u0044C\u0020\u006f\u0070=\u0025\u0073\u002e\u0020\u0042\u0061\u0064\u0020\u006eum\u0065\u0072\u0069c\u0061\u006c \u006f\u0062\u006a\u0065\u0063\u0074.\u0020\u006f=\u0025\u0073",_eae ,_fed );
};_dge =_gfg ;}else {_dge =-1;};_cbd :=_cega .Get ("\u0041\u0063\u0074\u0075\u0061\u006c\u0054\u0065\u0078\u0074");if _cbd !=nil {_fece =_cbd .String ();};case "\u0045\u004d\u0043":_dge =-1;_fece ="";case "\u0042\u0054":if _fag {_cf .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");
_bdd ._cfcd =append (_bdd ._cfcd ,_aee ._cbbc ...);};_fag =true ;_bgd :=_gfd ;if _ggcf {_bgd =_ag .GraphicsState {};_bgd .CTM =_bee ._fegda ;};_bgd .CTM =_egc .Mult (_bgd .CTM );_aee =_ceca (_cbc ,_fcg ,_bgd ,&_bad ,&_aaa );_bee ._ebab =_aee ;case "\u0045\u0054":if !_fag {_cf .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");
};_fag =false ;_bdd ._cfcd =append (_bdd ._cfcd ,_aee ._cbbc ...);_aee .reset ();case "\u0054\u002a":_aee .nextLine ();case "\u0054\u0064":if _bea ,_gga :=_aee .checkOp (_eae ,2,true );!_bea {_cf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_gga );
return _gga ;};_dgfb ,_cfff ,_gbf :=_agfd (_eae .Params );if _gbf !=nil {return _gbf ;};_aee .moveText (_dgfb ,_cfff );case "\u0054\u0044":if _bdf ,_gaa :=_aee .checkOp (_eae ,2,true );!_bdf {_cf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_gaa );
return _gaa ;};_fca ,_aeb ,_ggg :=_agfd (_eae .Params );if _ggg !=nil {_cf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_ggg );return _ggg ;};_aee .moveTextSetLeading (_fca ,_aeb );case "\u0054\u006a":if _bdacb ,_cee :=_aee .checkOp (_eae ,1,true );
!_bdacb {_cf .Log .Debug ("\u0045\u0052\u0052\u004fR:\u0020\u0054\u006a\u0020\u006f\u0070\u003d\u0025\u0073\u0020\u0065\u0072\u0072\u003d%\u0076",_eae ,_cee );return _cee ;};_ffg :=_ec .TraceToDirectObject (_eae .Params [0]);_ebee ,_gdd :=_ec .GetStringBytes (_ffg );
if !_gdd {_cf .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",_eae );return _ec .ErrTypeError ;
};return _aee .showText (_ffg ,_ebee ,_dge ,_fece );case "\u0054\u004a":if _dbb ,_aged :=_aee .checkOp (_eae ,1,true );!_dbb {_cf .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u004a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_aged );return _aged ;
};_ecc ,_ccbe :=_ec .GetArray (_eae .Params [0]);if !_ccbe {_cf .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",_eae );
return _cbf ;};return _aee .showTextAdjusted (_ecc ,_dge ,_fece );case "\u0027":if _edf ,_ffaf :=_aee .checkOp (_eae ,1,true );!_edf {_cf .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u0027\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_ffaf );return _ffaf ;
};_dccf :=_ec .TraceToDirectObject (_eae .Params [0]);_dggg ,_dbab :=_ec .GetStringBytes (_dccf );if !_dbab {_cf .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",_eae );
return _ec .ErrTypeError ;};_aee .nextLine ();return _aee .showText (_dccf ,_dggg ,_dge ,_fece );case "\u0022":if _gec ,_eccc :=_aee .checkOp (_eae ,3,true );!_gec {_cf .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u0022\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_eccc );
return _eccc ;};_bebb ,_feed ,_gccd :=_agfd (_eae .Params [:2]);if _gccd !=nil {return _gccd ;};_fbe :=_ec .TraceToDirectObject (_eae .Params [2]);_ccf ,_eab :=_ec .GetStringBytes (_fbe );if !_eab {_cf .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",_eae );
return _ec .ErrTypeError ;};_aee .setCharSpacing (_bebb );_aee .setWordSpacing (_feed );_aee .nextLine ();return _aee .showText (_fbe ,_ccf ,_dge ,_fece );case "\u0054\u004c":_gac ,_bdbd :=_dgd (_eae );if _bdbd !=nil {_cf .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u004c\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_bdbd );
return _bdbd ;};_aee .setTextLeading (_gac );case "\u0054\u0063":_dgc ,_egf :=_dgd (_eae );if _egf !=nil {_cf .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0063\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_egf );return _egf ;};_aee .setCharSpacing (_dgc );
case "\u0054\u0066":if _egag ,_cdb :=_aee .checkOp (_eae ,2,true );!_egag {_cf .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0066\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_cdb );return _cdb ;};_ecgc ,_ddfe :=_ec .GetNameVal (_eae .Params [0]);
if !_ddfe {_cf .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",_eae );return _ec .ErrTypeError ;};_gff ,_bff :=_ec .GetNumberAsFloat (_eae .Params [1]);
if !_ddfe {_cf .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",_eae ,_bff );
return _bff ;};_bff =_aee .setFont (_ecgc ,_gff );_aee ._cdef =_fe .Is (_bff ,_ec .ErrNotSupported );if _bff !=nil &&!_aee ._cdef {return _bff ;};case "\u0054\u006d":if _dgeb ,_dggf :=_aee .checkOp (_eae ,6,true );!_dgeb {_cf .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u006d\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_dggf );
return _dggf ;};_egbc ,_cfac :=_ec .GetNumbersAsFloat (_eae .Params );if _cfac !=nil {_cf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_cfac );return _cfac ;};_aee .setTextMatrix (_egbc );case "\u0054\u0072":if _bdfb ,_fac :=_aee .checkOp (_eae ,1,true );
!_bdfb {_cf .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0072\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_fac );return _fac ;};_faf ,_fgaa :=_ec .GetIntVal (_eae .Params [0]);if !_fgaa {_cf .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",_eae );
return _ec .ErrTypeError ;};_aee .setTextRenderMode (_faf );case "\u0054\u0073":if _gegb ,_aed :=_aee .checkOp (_eae ,1,true );!_gegb {_cf .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0073\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_aed );return _aed ;
};_cada ,_cdc :=_ec .GetNumberAsFloat (_eae .Params [0]);if _cdc !=nil {_cf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_cdc );return _cdc ;};_aee .setTextRise (_cada );case "\u0054\u0077":if _babe ,_eddc :=_aee .checkOp (_eae ,1,true );
!_babe {_cf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_eddc );return _eddc ;};_dgb ,_fbg :=_ec .GetNumberAsFloat (_eae .Params [0]);if _fbg !=nil {_cf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_fbg );
return _fbg ;};_aee .setWordSpacing (_dgb );case "\u0054\u007a":if _cbfg ,_ecaa :=_aee .checkOp (_eae ,1,true );!_cbfg {_cf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_ecaa );return _ecaa ;};_dgbb ,_fegd :=_ec .GetNumberAsFloat (_eae .Params [0]);
if _fegd !=nil {_cf .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_fegd );return _fegd ;};_aee .setHorizScaling (_dgbb );case "\u0063\u006d":if !_ggcf {_bee ._fegda =_gfd .CTM ;};if _bee ._fegda .Singular (){_gdf :=_b .IdentityMatrix ().Translate (_bee ._fegda .Translation ());
_cf .Log .Debug ("S\u0069n\u0067\u0075\u006c\u0061\u0072\u0020\u0063\u0074m\u003d\u0025\u0073\u2192%s",_bee ._fegda ,_gdf );_bee ._fegda =_gdf ;};if _efda {_cf .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_bee ._fegda );};case "\u006d":if len (_eae .Params )!=2{_cf .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",_efb );
return nil ;};_acg ,_ede :=_ec .GetNumbersAsFloat (_eae .Params );if _ede !=nil {return _ede ;};_bee .moveTo (_acg [0],_acg [1]);case "\u006c":if len (_eae .Params )!=2{_cf .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",_efb );
return nil ;};_aab ,_bfcf :=_ec .GetNumbersAsFloat (_eae .Params );if _bfcf !=nil {return _bfcf ;};_bee .lineTo (_aab [0],_aab [1]);case "\u0063":if len (_eae .Params )!=6{return _efb ;};_efe ,_ccef :=_ec .GetNumbersAsFloat (_eae .Params );if _ccef !=nil {return _ccef ;
};_cf .Log .Debug ("\u0043u\u0062\u0069\u0063\u0020b\u0065\u007a\u0069\u0065\u0072 \u0070a\u0072a\u006d\u0073\u003a\u0020\u0025\u002e\u0032f",_efe );_bee .cubicTo (_efe [0],_efe [1],_efe [2],_efe [3],_efe [4],_efe [5]);case "\u0076","\u0079":if len (_eae .Params )!=4{return _efb ;
};_bcbg ,_eag :=_ec .GetNumbersAsFloat (_eae .Params );if _eag !=nil {return _eag ;};_cf .Log .Debug ("\u0043u\u0062\u0069\u0063\u0020b\u0065\u007a\u0069\u0065\u0072 \u0070a\u0072a\u006d\u0073\u003a\u0020\u0025\u002e\u0032f",_bcbg );_bee .quadraticTo (_bcbg [0],_bcbg [1],_bcbg [2],_bcbg [3]);
case "\u0068":_bee .closePath ();case "\u0072\u0065":if len (_eae .Params )!=4{return _efb ;};_geb ,_aad :=_ec .GetNumbersAsFloat (_eae .Params );if _aad !=nil {return _aad ;};_bee .drawRectangle (_geb [0],_geb [1],_geb [2],_geb [3]);_bee .closePath ();
case "\u0053":_bee .stroke (&_bdd ._bddc );_bee .clearPath ();case "\u0073":_bee .closePath ();_bee .stroke (&_bdd ._bddc );_bee .clearPath ();case "\u0046":_bee .fill (&_bdd ._adbc );_bee .clearPath ();case "\u0066","\u0066\u002a":_bee .closePath ();_bee .fill (&_bdd ._adbc );
_bee .clearPath ();case "\u0042","\u0042\u002a":_bee .fill (&_bdd ._adbc );_bee .stroke (&_bdd ._bddc );_bee .clearPath ();case "\u0062","\u0062\u002a":_bee .closePath ();_bee .fill (&_bdd ._adbc );_bee .stroke (&_bdd ._bddc );_bee .clearPath ();case "\u006e":_bee .clearPath ();
case "\u0044\u006f":if len (_eae .Params )==0{_cf .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",_eae .Params );
return _ec .ErrRangeError ;};_ffdb ,_fdab :=_ec .GetName (_eae .Params [0]);if !_fdab {_cf .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",_eae .Params [0]);
return _ec .ErrTypeError ;};_ ,_fdcc :=_fcg .GetXObjectByName (*_ffdb );if _fdcc !=_gcb .XObjectTypeForm {break ;};_ebea ,_fdab :=_cbc ._bdg [_ffdb .String ()];if !_fdab {_cbeg ,_fage :=_fcg .GetXObjectFormByName (*_ffdb );if _fage !=nil {_cf .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_fage );
return _fage ;};_cdca ,_fage :=_cbeg .GetContentStream ();if _fage !=nil {_cf .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_fage );return _fage ;};_faaf :=_cbeg .Resources ;if _faaf ==nil {_faaf =_fcg ;};_bce :=_gfd .CTM ;if _ccgf ,_aega :=_ec .GetArray (_cbeg .Matrix );
_aega {_dab ,_dde :=_ccgf .GetAsFloat64Slice ();if _dde !=nil {return _dde ;};if len (_dab )!=6{return _efb ;};_bfd :=_b .NewMatrix (_dab [0],_dab [1],_dab [2],_dab [3],_dab [4],_dab [5]);_bce =_gfd .CTM .Mult (_bfd );};_ffde ,_efae ,_aead ,_fage :=_cbc .extractPageText (string (_cdca ),_faaf ,_egc .Mult (_bce ),_ace +1,false );
if _fage !=nil {_cf .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_fage );return _fage ;};_ebea =textResult {*_ffde ,_efae ,_aead };_cbc ._bdg [_ffdb .String ()]=_ebea ;};_bee ._fegda =_gfd .CTM ;if _efda {_cf .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_bee ._fegda );
};_bdd ._cfcd =append (_bdd ._cfcd ,_ebea ._abff ._cfcd ...);_bdd ._bddc =append (_bdd ._bddc ,_ebea ._abff ._bddc ...);_bdd ._adbc =append (_bdd ._adbc ,_ebea ._abff ._adbc ...);_bad ._ecf +=_ebea ._fbea ;_bad ._eecc +=_ebea ._dbad ;case "\u0072\u0067","\u0067","\u006b","\u0063\u0073","\u0073\u0063","\u0073\u0063\u006e":_aee ._cef .ColorspaceNonStroking =_gfd .ColorspaceNonStroking ;
_aee ._cef .ColorNonStroking =_gfd .ColorNonStroking ;case "\u0052\u0047","\u0047","\u004b","\u0043\u0053","\u0053\u0043","\u0053\u0043\u004e":_aee ._cef .ColorspaceStroking =_gfd .ColorspaceStroking ;_aee ._cef .ColorStroking =_gfd .ColorStroking ;};return nil ;
});_cbf =_cfc .Process (_abb );if _cbc ._bec !=nil &&_cbc ._bec .IncludeAnnotations &&!_ggcf {for _ ,_dffb :=range _cbc ._ccd {_gea ,_gcg :=_ec .GetDict (_dffb .AP );if !_gcg {continue ;};_bgc ,_gcg :=_gea .Get ("\u004e").(*_ec .PdfObjectStream );if !_gcg {continue ;
};_dag ,_gcbd :=_ec .DecodeStream (_bgc );if _gcbd !=nil {_cf .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u0020\u006f\u006e\u0020\u0064\u0065c\u006f\u0064\u0065\u0020\u0073\u0074\u0072\u0065\u0061\u006d:\u0020\u0025\u0076",_gcbd );continue ;};_cae :=_bgc .PdfObjectDictionary .Get ("\u0052e\u0073\u006f\u0075\u0072\u0063\u0065s");
_bbce ,_gcbd :=_gcb .NewPdfPageResourcesFromDict (_cae .(*_ec .PdfObjectDictionary ));if _gcbd !=nil {_cf .Log .Debug ("\u0045\u0072\u0072\u006f\u0072 \u006f\u006e\u0020\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0061\u006en\u006f\u0074\u0061\u0074\u0069\u006f\u006e\u0020\u0072\u0065\u0073\u006f\u0075\u0072\u0063\u0065\u0073\u003a\u0020\u0025\u0076",_gcbd );
continue ;};_fcbg :=_b .IdentityMatrix ();_bdcg ,_gcg :=_bgc .PdfObjectDictionary .Get ("\u004d\u0061\u0074\u0072\u0069\u0078").(*_ec .PdfObjectArray );if _gcg {_dgcb ,_cgf :=_bdcg .GetAsFloat64Slice ();if _cgf !=nil {_cf .Log .Debug ("\u0045\u0072\u0072or\u0020\u006f\u006e\u0020\u0067\u0065\u0074\u0074\u0069n\u0067 \u0066l\u006fa\u0074\u0036\u0034\u0020\u0073\u006c\u0069\u0063\u0065\u003a\u0020\u0025\u0076",_cgf );
continue ;};if len (_dgcb )!=6{_cf .Log .Debug ("I\u006e\u0076\u0061\u006c\u0069\u0064 \u006d\u0061\u0074\u0072\u0069\u0078\u0020\u0073\u006ci\u0063\u0065\u0020l\u0065n\u0067\u0074\u0068");continue ;};_fcbg =_b .NewMatrix (_dgcb [0],_dgcb [1],_dgcb [2],_dgcb [3],_dgcb [4],_dgcb [5]);
};_bcea ,_gcg :=_cbc ._dfb [_bgc .String ()];if !_gcg {_fdfa ,_aff ,_cfba ,_dagb :=_cbc .extractPageText (string (_dag ),_bbce ,_fcbg ,_ace +1,true );if _dagb !=nil {_cf .Log .Debug ("\u0045\u0052R\u004f\u0052\u0020\u0065x\u0074\u0072a\u0063\u0074\u0069\u006e\u0067\u0020\u0061\u006en\u006f\u0074\u0061\u0074\u0069\u006f\u006e\u0020\u0074\u0065\u0078\u0074s\u003a\u0020\u0025\u0076",_dagb );
continue ;};_bcea =textResult {*_fdfa ,_aff ,_cfba };_cbc ._dfb [_bgc .String ()]=_bcea ;};_bdd ._cfcd =append (_bdd ._cfcd ,_bcea ._abff ._cfcd ...);_bdd ._bddc =append (_bdd ._bddc ,_bcea ._abff ._bddc ...);_bdd ._adbc =append (_bdd ._adbc ,_bcea ._abff ._adbc ...);
_bad ._ecf +=_bcea ._fbea ;_bad ._eecc +=_bcea ._dbad ;};};return _bdd ,_bad ._ecf ,_bad ._eecc ,_cbf ;};func (_acage *ruling )equals (_dfdb *ruling )bool {return _acage ._cfgc ==_dfdb ._cfgc &&_acbf (_acage ._ccgff ,_dfdb ._ccgff )&&_acbf (_acage ._bggg ,_dfdb ._bggg )&&_acbf (_acage ._dfadf ,_dfdb ._dfadf );
};func _beaaf (_gdgea string ,_cggd int )string {if len (_gdgea )< _cggd {return _gdgea ;};return _gdgea [:_cggd ];};func _fabe (_dagbca int ,_cacb func (int ,int )bool )[]int {_aefc :=make ([]int ,_dagbca );for _bbgad :=range _aefc {_aefc [_bbgad ]=_bbgad ;
};_eb .Slice (_aefc ,func (_defbd ,_cfgbe int )bool {return _cacb (_aefc [_defbd ],_aefc [_cfgbe ])});return _aefc ;};func _fbbee (_dfba *textLine )float64 {return _dfba ._gaef [0].Llx };func _fecdd (_caeb structElement )[]structElement {_ebdce :=[]structElement {};
for _ ,_facb :=range _caeb ._gbee {for _ ,_affe :=range _facb ._gbee {for _ ,_geda :=range _affe ._gbee {if _geda ._fbbed =="\u004c"{_ebdce =append (_ebdce ,_geda );};};};};return _ebdce ;};
// Text returns the text content of the `bulletLists`.
func (_aaea *lists )Text ()string {_bgae :=&_cgb .Builder {};for _ ,_aaba :=range *_aaea {_egecc :=_aaba .Text ();_bgae .WriteString (_egecc );};return _bgae .String ();};func _gcfa (_fceb *wordBag ,_fegc int )*textLine {_gcbbe :=_fceb .firstWord (_fegc );
_ggcg :=textLine {PdfRectangle :_gcbbe .PdfRectangle ,_acgge :_gcbbe ._ffcg ,_aabbc :_gcbbe ._aada };_ggcg .pullWord (_fceb ,_gcbbe ,_fegc );return &_ggcg ;};func (_baccf rulingList )snapToGroups ()rulingList {_dadcf ,_cebf :=_baccf .vertsHorzs ();if len (_dadcf )> 0{_dadcf =_dadcf .snapToGroupsDirection ();
};if len (_cebf )> 0{_cebf =_cebf .snapToGroupsDirection ();};_cbeaa :=append (_dadcf ,_cebf ...);_cbeaa .log ("\u0073\u006e\u0061p\u0054\u006f\u0047\u0072\u006f\u0075\u0070\u0073");return _cbeaa ;};func (_ecgfa *textPara )bbox ()_gcb .PdfRectangle {return _ecgfa .PdfRectangle };
func (_dcga TextTable )getCellInfo (_cfeb TextMark )[][]int {for _edb ,_dacb :=range _dcga .Cells {for _bbceg :=range _dacb {_fafg :=&_dacb [_bbceg ].Marks ;if _fafg .exists (_cfeb ){return [][]int {{_edb },{_bbceg }};};};};return nil ;};func _decg (_gcf ,_adcag bounded )float64 {return _gcf .bbox ().Llx -_adcag .bbox ().Llx };
// BidiText represents a bidi text organized in its visual order
// with base direction of the text.
type BidiText struct{_cad string ;_ccc string ;};func _egage (_cebc ,_ece bounded )float64 {return _cebc .bbox ().Llx -_ece .bbox ().Urx };func _gged (_eega []*textMark ,_bgecd _gcb .PdfRectangle ,_aca rulingList ,_cdcge []gridTiling ,_gaeb bool )paraList {_cf .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 (_eega ),_bgecd );
if len (_eega )==0{return nil ;};_dfde :=_dafbd (_eega ,_bgecd );if len (_dfde )==0{return nil ;};_aca .log ("\u006d\u0061\u006be\u0054\u0065\u0078\u0074\u0050\u0061\u0067\u0065");_dccaf ,_gcfg :=_aca .vertsHorzs ();_gdaa :=_bgefa (_dfde ,_bgecd .Ury ,_dccaf ,_gcfg );
_aaadd :=_aagg (_gdaa ,_bgecd .Ury ,_dccaf ,_gcfg );_aaadd =_agb (_aaadd );_bdfd :=make (paraList ,0,len (_aaadd ));for _ ,_ecbb :=range _aaadd {_affb :=_ecbb .arrangeText ();if _affb !=nil {_bdfd =append (_bdfd ,_affb );};};if !_gaeb &&len (_bdfd )>=_cdcg {_bdfd =_bdfd .extractTables (_cdcge );
};_bdfd .sortReadingOrder ();if !_gaeb {_bdfd .sortTopoOrder ();};_bdfd .log ("\u0073\u006f\u0072te\u0064\u0020\u0069\u006e\u0020\u0072\u0065\u0061\u0064\u0069\u006e\u0067\u0020\u006f\u0072\u0064\u0065\u0072");return _bdfd ;};func (_abeg *shapesState )moveTo (_ecfe ,_bfcb float64 ){_abeg ._agcg =true ;
_abeg ._dfa =_abeg .devicePoint (_ecfe ,_bfcb );if _efda {_cf .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",_ecfe ,_bfcb ,_abeg ._dfa );
};};func (_bdfg *wordBag )minDepth ()float64 {return _bdfg ._dbfe -(_bdfg .Ury -_bdfg ._cgaeg )};
// 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 (_dea *TextMarkArray )RangeOffset (start ,end int )(*TextMarkArray ,error ){if _dea ==nil {return nil ,_fe .New ("\u006da\u003d\u003d\u006e\u0069\u006c");};if end < start {return nil ,_cg .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 );
};_adc :=len (_dea ._cea );if _adc ==0{return _dea ,nil ;};if start < _dea ._cea [0].Offset {start =_dea ._cea [0].Offset ;};if end > _dea ._cea [_adc -1].Offset +1{end =_dea ._cea [_adc -1].Offset +1;};_ade :=_eb .Search (_adc ,func (_edeb int )bool {return _dea ._cea [_edeb ].Offset +len (_dea ._cea [_edeb ].Text )-1>=start });
if !(0<=_ade &&_ade < _adc ){_badc :=_cg .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 ,_ade ,_adc ,_dea ._cea [0],_dea ._cea [_adc -1]);
return nil ,_badc ;};_agcdc :=_eb .Search (_adc ,func (_gdeb int )bool {return _dea ._cea [_gdeb ].Offset > end -1});if !(0<=_agcdc &&_agcdc < _adc ){_bcdb :=_cg .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 ,_agcdc ,_adc ,_dea ._cea [0],_dea ._cea [_adc -1]);
return nil ,_bcdb ;};if _agcdc <=_ade {return nil ,_cg .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 ,_ade ,_agcdc );
};return &TextMarkArray {_cea :_dea ._cea [_ade :_agcdc ]},nil ;};func (_abag *textTable )toTextTable ()TextTable {if _dcdb {_cf .Log .Info ("t\u006fT\u0065\u0078\u0074\u0054\u0061\u0062\u006c\u0065:\u0020\u0025\u0064\u0020x \u0025\u0064",_abag ._abeef ,_abag ._edaga );
};_ggdfa :=make ([][]TableCell ,_abag ._edaga );for _eadde :=0;_eadde < _abag ._edaga ;_eadde ++{_ggdfa [_eadde ]=make ([]TableCell ,_abag ._abeef );for _ffed :=0;_ffed < _abag ._abeef ;_ffed ++{_febgd :=_abag .get (_ffed ,_eadde );if _febgd ==nil {continue ;
};_cagdb (_febgd ._ecbe );if _dcdb {_cg .Printf ("\u0025\u0034\u0064 \u0025\u0032\u0064\u003a\u0020\u0025\u0073\u000a",_ffed ,_eadde ,_febgd );};_ggdfa [_eadde ][_ffed ].Text =_febgd .text ();_ddeb :=0;_ggdfa [_eadde ][_ffed ].Marks ._cea =_febgd .toTextMarks (&_ddeb );
};};_eddb :=TextTable {W :_abag ._abeef ,H :_abag ._edaga ,Cells :_ggdfa };_eddb .PdfRectangle =_abag .bbox ();return _eddb ;};func (_fbaff gridTile )numBorders ()int {_geeff :=0;if _fbaff ._fccgbd {_geeff ++;};if _fbaff ._abda {_geeff ++;};if _fbaff ._bbgd {_geeff ++;
};if _fbaff ._ffccc {_geeff ++;};return _geeff ;};func (_cbdb *textPara )toCellTextMarks (_dbce *int )[]TextMark {var _aeed []TextMark ;for _deec ,_gbgd :=range _cbdb ._ecbe {_fbec :=_gbgd .toTextMarks (_dbce );_dcgea :=_fdda &&_gbgd .endsInHyphen ()&&_deec !=len (_cbdb ._ecbe )-1;
if _dcgea {_fbec =_ecaaa (_fbec ,_dbce );};_aeed =append (_aeed ,_fbec ...);if !(_dcgea ||_deec ==len (_cbdb ._ecbe )-1){_aeed =_cecfe (_aeed ,_dbce ,_egcgd (_gbgd ._aabbc ,_cbdb ._ecbe [_deec +1]._aabbc ));};};return _aeed ;};func _egdbg (_ebba ,_addgg _b .Point )rulingKind {_abafb :=_gc .Abs (_ebba .X -_addgg .X );
_cfdbb :=_gc .Abs (_ebba .Y -_addgg .Y );return _gbac (_abafb ,_cfdbb ,_agba );};func _dfcc (_cgdg map[float64 ]map[float64 ]gridTile )[]float64 {_efecd :=make ([]float64 ,0,len (_cgdg ));_ggfa :=make (map[float64 ]struct{},len (_cgdg ));for _ ,_dbde :=range _cgdg {for _abde :=range _dbde {if _ ,_gcabe :=_ggfa [_abde ];
_gcabe {continue ;};_efecd =append (_efecd ,_abde );_ggfa [_abde ]=struct{}{};};};_eb .Float64s (_efecd );return _efecd ;};func _gdec (_dcfa map[int ][]float64 ){if len (_dcfa )<=1{return ;};_fdfcc :=_adacg (_dcfa );if _dcdb {_cf .Log .Info ("\u0066i\u0078C\u0065\u006c\u006c\u0073\u003a \u006b\u0065y\u0073\u003d\u0025\u002b\u0076",_fdfcc );
};var _gfde ,_bfbb int ;for _gfde ,_bfbb =range _fdfcc {if _dcfa [_bfbb ]!=nil {break ;};};for _dgag ,_fbfgd :=range _fdfcc [_gfde :]{_fede :=_dcfa [_fbfgd ];if _fede ==nil {continue ;};if _dcdb {_cg .Printf ("\u0025\u0034\u0064\u003a\u0020\u006b\u0030\u003d\u0025\u0064\u0020\u006b1\u003d\u0025\u0064\u000a",_gfde +_dgag ,_bfbb ,_fbfgd );
};_dadb :=_dcfa [_fbfgd ];if _dadb [len (_dadb )-1]> _fede [0]{_dadb [len (_dadb )-1]=_fede [0];_dcfa [_bfbb ]=_dadb ;};_bfbb =_fbfgd ;};};func _fgfd (_ffae *list )[]*textLine {for _ ,_edae :=range _ffae ._dbece {switch _edae ._cdbe {case "\u004c\u0042\u006fd\u0079":if len (_edae ._gcac )!=0{return _edae ._gcac ;
};return _fgfd (_edae );case "\u0053\u0070\u0061\u006e":return _edae ._gcac ;case "I\u006e\u006c\u0069\u006e\u0065\u0053\u0068\u0061\u0070\u0065":return _edae ._gcac ;};};return nil ;};type shapesState struct{_fegda _b .Matrix ;_ebf _b .Matrix ;_becf []*subpath ;
_agcg bool ;_dfa _b .Point ;_ebab *textObject ;};func _ebgaf (_ddad ,_feegd _b .Point )rulingKind {_bbcac :=_gc .Abs (_ddad .X -_feegd .X );_beag :=_gc .Abs (_ddad .Y -_feegd .Y );return _gbac (_bbcac ,_beag ,_deaa );};func (_bece *subpath )close (){if !_eeefg (_bece ._gfee [0],_bece .last ()){_bece .add (_bece ._gfee [0]);
};_bece ._fgdf =true ;_bece .removeDuplicates ();};func (_abce *textObject )showTextAdjusted (_fbc *_ec .PdfObjectArray ,_aec int ,_abcd string )error {_cdbb :=false ;for _ ,_efca :=range _fbc .Elements (){switch _efca .(type ){case *_ec .PdfObjectFloat ,*_ec .PdfObjectInteger :_dad ,_daa :=_ec .GetNumberAsFloat (_efca );
if _daa !=nil {_cf .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",_efca ,_fbc );
return _daa ;};_fecd ,_cdd :=-_dad *0.001*_abce ._cgge ._eccd ,0.0;if _cdbb {_cdd ,_fecd =_fecd ,_cdd ;};_ebcb :=_gdeg (_b .Point {X :_fecd ,Y :_cdd });_abce ._gfb .Concat (_ebcb );case *_ec .PdfObjectString :_bag :=_ec .TraceToDirectObject (_efca );_bbgf ,_bcc :=_ec .GetStringBytes (_bag );
if !_bcc {_cf .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",_efca ,_fbc );
return _ec .ErrTypeError ;};_abce .renderText (_bag ,_bbgf ,_aec ,_abcd );default:_cf .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",_efca ,_fbc );
return _ec .ErrTypeError ;};};return nil ;};func (_ecca *textTable )getDown ()paraList {_cdae :=make (paraList ,_ecca ._abeef );for _cfbda :=0;_cfbda < _ecca ._abeef ;_cfbda ++{_eeaef :=_ecca .get (_cfbda ,_ecca ._edaga -1)._fgbdg ;if _eeaef .taken (){return nil ;
};_cdae [_cfbda ]=_eeaef ;};for _fdad :=0;_fdad < _ecca ._abeef -1;_fdad ++{if _cdae [_fdad ]._dffg !=_cdae [_fdad +1]{return nil ;};};return _cdae ;};const (_fdda =true ;_defd =true ;_cbgg =true ;_fdbc =false ;_ccbf =false ;_daeb =6;_bbdb =3.0;_bacd =200;
_aefg =true ;_gbdbd =true ;_ecbgaa =true ;_aadc =true ;_agafb =false ;);type lineRuling struct{_egab rulingKind ;_egcb markKind ;_ca .Color ;_efgf ,_afdd _b .Point ;};type gridTiling struct{_gcb .PdfRectangle ;_bcfdd []float64 ;_gdggf []float64 ;_caeg map[float64 ]map[float64 ]gridTile ;
};func _adgg (_eacga ,_abdfa _b .Point )bool {_febf :=_gc .Abs (_eacga .X -_abdfa .X );_cbcbe :=_gc .Abs (_eacga .Y -_abdfa .Y );return _gabb (_cbcbe ,_febf );};func (_gfea *TextMarkArray )getTextMarkAtOffset (_fedc int )*TextMark {for _ ,_fegdf :=range _gfea ._cea {if _fegdf .Offset ==_fedc {return &_fegdf ;
};};return nil ;};func _dgecb (_bccgb map[float64 ][]*textLine )[]float64 {_cdce :=[]float64 {};for _ccecd :=range _bccgb {_cdce =append (_cdce ,_ccecd );};_eb .Float64s (_cdce );return _cdce ;};type gridTile struct{_gcb .PdfRectangle ;_ffccc ,_fccgbd ,_bbgd ,_abda bool ;
};func (_dfbd *stateStack )empty ()bool {return len (*_dfbd )==0};func (_bedg rulingList )isActualGrid ()(rulingList ,bool ){_ddbcd ,_fbdae :=_bedg .augmentGrid ();if !(len (_ddbcd )>=_gdafg +1&&len (_fbdae )>=_gbgb +1){if _cgcb {_cf .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 (_ddbcd ),len (_fbdae ),_gdafg +1,_gbgb +1);
};return nil ,false ;};if _cgcb {_cf .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",_bedg ,len (_ddbcd )>=2,len (_fbdae )>=2,len (_ddbcd )>=2&&len (_fbdae )>=2);
for _gedc ,_geef :=range _bedg {_cg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0076\u000a",_gedc ,_geef );};};if _agafb {_eagbf ,_dgga :=_ddbcd [0],_ddbcd [len (_ddbcd )-1];_cbcea ,_cdeda :=_fbdae [0],_fbdae [len (_fbdae )-1];if !(_ggddf (_eagbf ._ccgff -_cbcea ._bggg )&&_ggddf (_dgga ._ccgff -_cbcea ._dfadf )&&_ggddf (_cbcea ._ccgff -_eagbf ._dfadf )&&_ggddf (_cdeda ._ccgff -_eagbf ._bggg )){if _cgcb {_cf .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",_eagbf ,_dgga ,_cbcea ,_cdeda );
};return nil ,false ;};}else {if !_ddbcd .aligned (){if _gagd {_cf .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 (_ddbcd ));
};return nil ,false ;};if !_fbdae .aligned (){if _cgcb {_cf .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 (_fbdae ));
};return nil ,false ;};};_ceeee :=append (_ddbcd ,_fbdae ...);return _ceeee ,true ;};type rulingList []*ruling ;type cachedImage struct{_bdac *_gcb .Image ;_acf _gcb .PdfColorspace ;};func (_gdgb *wordBag )depthRange (_cbced ,_ddfaf int )[]int {var _agfb []int ;
for _aeae :=range _gdgb ._eafg {if _cbced <=_aeae &&_aeae <=_ddfaf {_agfb =append (_agfb ,_aeae );};};if len (_agfb )==0{return nil ;};_eb .Ints (_agfb );return _agfb ;};func (_bgab *textObject )getFontDirect (_dacec string )(*_gcb .PdfFont ,error ){_cdag ,_cceg :=_bgab .getFontDict (_dacec );
if _cceg !=nil {return nil ,_cceg ;};_ddb ,_cceg :=_gcb .NewPdfFontFromPdfObject (_cdag );if _cceg !=nil {_cf .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",_dacec ,_cceg );
};return _ddb ,_cceg ;};type rectRuling struct{_cefe rulingKind ;_ddcaa markKind ;_ca .Color ;_gcb .PdfRectangle ;};var _fgb =false ;
// Marks returns the TextMark collection for a page. It represents all the text on the page.
func (_ccff PageText )Marks ()*TextMarkArray {return &TextMarkArray {_cea :_ccff ._fff }};func (_bbed compositeCell )String ()string {_abfe :="";if len (_bbed .paraList )> 0{_abfe =_beaaf (_bbed .paraList .merge ().text (),50);};return _cg .Sprintf ("\u0025\u0036\u002e\u0032\u0066\u0020\u0025\u0064\u0020\u0070\u0061\u0072a\u0073\u0020\u0025\u0071",_bbed .PdfRectangle ,len (_bbed .paraList ),_abfe );
};func (_baeg *structElement )parseStructElement (_eaca _ec .PdfObject ){_gace ,_fbbf :=_ec .GetDict (_eaca );if !_fbbf {_cf .Log .Debug ("\u0070\u0061\u0072\u0073\u0065\u0053\u0074\u0072u\u0063\u0074\u0045le\u006d\u0065\u006e\u0074\u003a\u0020d\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079\u0020\u006f\u0062\u006a\u0065\u0063t\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075n\u0064\u002e");
return ;};_aaeb :=_gace .Get ("\u0053");_aeadb :=_gace .Get ("\u0050\u0067");_dafe :="";if _aaeb !=nil {_dafe =_aaeb .String ();};_aedd :=_gace .Get ("\u004b");_baeg ._fbbed =_dafe ;_baeg ._ffcc =_aeadb ;switch _fgeda :=_aedd .(type ){case *_ec .PdfObjectInteger :_baeg ._fbbed =_dafe ;
_baeg ._daaa =int64 (*_fgeda );_baeg ._ffcc =_aeadb ;case *_ec .PdfObjectReference :_gcbaa :=*_ec .MakeArray (_fgeda );var _efdg int64 =-1;_baeg ._daaa =_efdg ;if _gcbaa .Len ()==1{_fccd :=_gcbaa .Elements ()[0];_efce ,_gegec :=_fccd .(*_ec .PdfObjectInteger );
if _gegec {_efdg =int64 (*_efce );_baeg ._daaa =_efdg ;_baeg ._fbbed =_dafe ;_baeg ._ffcc =_aeadb ;return ;};};_agadb :=[]structElement {};for _ ,_edda :=range _gcbaa .Elements (){_badf ,_fbde :=_edda .(*_ec .PdfObjectInteger );if _fbde {_efdg =int64 (*_badf );
_baeg ._daaa =_efdg ;_baeg ._fbbed =_dafe ;}else {_fdcf :=&structElement {};_fdcf .parseStructElement (_edda );_agadb =append (_agadb ,*_fdcf );};_efdg =-1;};_baeg ._gbee =_agadb ;case *_ec .PdfObjectArray :_fegg :=_aedd .(*_ec .PdfObjectArray );var _adff int64 =-1;
_baeg ._daaa =_adff ;if _fegg .Len ()==1{_bgaf :=_fegg .Elements ()[0];_gebe ,_bcgb :=_bgaf .(*_ec .PdfObjectInteger );if _bcgb {_adff =int64 (*_gebe );_baeg ._daaa =_adff ;_baeg ._fbbed =_dafe ;_baeg ._ffcc =_aeadb ;return ;};};_aefgf :=[]structElement {};
for _ ,_dafg :=range _fegg .Elements (){_cfdb ,_aecaa :=_dafg .(*_ec .PdfObjectInteger );if _aecaa {_adff =int64 (*_cfdb );_baeg ._daaa =_adff ;_baeg ._fbbed =_dafe ;_baeg ._ffcc =_aeadb ;}else {_bbaa :=&structElement {};_bbaa .parseStructElement (_dafg );
_aefgf =append (_aefgf ,*_bbaa );};_adff =-1;};_baeg ._gbee =_aefgf ;};};func (_gbcd *textObject )setCharSpacing (_abd float64 ){if _gbcd ==nil {return ;};_gbcd ._cgge ._gbdb =_abd ;if _gdgec {_cf .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",_abd ,_gbcd ._cgge .String ());
};};type stateStack []*textState ;func _eage (_bdfbb float64 )bool {return _gc .Abs (_bdfbb )< _gaeg };func (_ddfc *textObject )setTextRenderMode (_aedf int ){if _ddfc ==nil {return ;};_ddfc ._cgge ._ddg =RenderMode (_aedf );};func _gba (_fd []string ,_adf int ,_gf int ){for _ebe ,_ee :=_adf ,_gf -1;
_ebe < _ee ;_ebe ,_ee =_ebe +1,_ee -1{_bga :=_fd [_ebe ];_fd [_ebe ]=_fd [_ee ];_fd [_ee ]=_bga ;};};func _aebf (_cgbb *wordBag ,_cacf *textWord ,_cfda float64 )bool {return _cgbb .Urx <=_cacf .Llx &&_cacf .Llx < _cgbb .Urx +_cfda ;};func (_fdfe paraList )findTextTables ()[]*textTable {var _dbcf []*textTable ;
for _ ,_ecee :=range _fdfe {if _ecee .taken ()||_ecee .Width ()==0{continue ;};_abfa :=_ecee .isAtom ();if _abfa ==nil {continue ;};_abfa .growTable ();if _abfa ._abeef *_abfa ._edaga < _cdcg {continue ;};_abfa .markCells ();_abfa .log ("\u0067\u0072\u006fw\u006e");
_dbcf =append (_dbcf ,_abfa );};return _dbcf ;};func (_cfbc *textObject )setHorizScaling (_cgcc float64 ){if _cfbc ==nil {return ;};_cfbc ._cgge ._fdg =_cgcc ;};
// String returns a description of `w`.
func (_caee *textWord )String ()string {return _cg .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",_caee ._aada ,_caee .PdfRectangle ,_caee ._ffcg ,_caee ._cfafbd );
};func (_fdfg *subpath )removeDuplicates (){if len (_fdfg ._gfee )==0{return ;};_feda :=[]_b .Point {_fdfg ._gfee [0]};for _ ,_fde :=range _fdfg ._gfee [1:]{if !_eeefg (_fde ,_feda [len (_feda )-1]){_feda =append (_feda ,_fde );};};_fdfg ._gfee =_feda ;
};func (_fggb *textTable )log (_aabge string ){if !_dcdb {return ;};_cf .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",_aabge ,_fggb ._abeef ,_fggb ._edaga ,_fggb ._ceda ,_fggb .PdfRectangle );
for _bfcfb :=0;_bfcfb < _fggb ._edaga ;_bfcfb ++{for _bgfb :=0;_bgfb < _fggb ._abeef ;_bgfb ++{_gddcg :=_fggb .get (_bgfb ,_bfcfb );if _gddcg ==nil {continue ;};_cg .Printf ("%\u0034\u0064\u0020\u00252d\u003a \u0025\u0036\u002e\u0032\u0066 \u0025\u0071\u0020\u0025\u0064\u000a",_bgfb ,_bfcfb ,_gddcg .PdfRectangle ,_beaaf (_gddcg .text (),50),_cc .RuneCountInString (_gddcg .text ()));
};};};func (_gccgd intSet )add (_ffad int ){_gccgd [_ffad ]=struct{}{}};func _cecfe (_bggf []TextMark ,_feecg *int ,_bebc string )[]TextMark {_cfbf :=_ggda ;_cfbf .Text =_bebc ;return _cab (_bggf ,_feecg ,_cfbf );};
// String returns a human readable description of `path`.
func (_dbbg *subpath )String ()string {_geaf :=_dbbg ._gfee ;_gebc :=len (_geaf );if _gebc <=5{return _cg .Sprintf ("\u0025d\u003a\u0020\u0025\u0036\u002e\u0032f",_gebc ,_geaf );};return _cg .Sprintf ("\u0025d\u003a\u0020\u0025\u0036.\u0032\u0066\u0020\u0025\u0036.\u0032f\u0020.\u002e\u002e\u0020\u0025\u0036\u002e\u0032f",_gebc ,_geaf [0],_geaf [1],_geaf [_gebc -1]);
};func (_cadd *textTable )growTable (){_gcddb :=func (_affcb paraList ){_cadd ._edaga ++;for _bfdce :=0;_bfdce < _cadd ._abeef ;_bfdce ++{_fcdd :=_affcb [_bfdce ];_cadd .put (_bfdce ,_cadd ._edaga -1,_fcdd );};};_baca :=func (_fadd paraList ){_cadd ._abeef ++;
for _dffc :=0;_dffc < _cadd ._edaga ;_dffc ++{_fcee :=_fadd [_dffc ];_cadd .put (_cadd ._abeef -1,_dffc ,_fcee );};};if _eed {_cadd .log ("\u0067r\u006f\u0077\u0054\u0061\u0062\u006ce");};for _bdeg :=0;;_bdeg ++{_aeaaf :=false ;_cdeea :=_cadd .getDown ();
_cgfe :=_cadd .getRight ();if _eed {_cg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_bdeg ,_cadd );_cg .Printf ("\u0020\u0020 \u0020\u0020\u0020 \u0020\u0064\u006f\u0077\u006e\u003d\u0025\u0073\u000a",_cdeea );_cg .Printf ("\u0020\u0020 \u0020\u0020\u0020 \u0072\u0069\u0067\u0068\u0074\u003d\u0025\u0073\u000a",_cgfe );
};if _cdeea !=nil &&_cgfe !=nil {_dfac :=_cdeea [len (_cdeea )-1];if !_dfac .taken ()&&_dfac ==_cgfe [len (_cgfe )-1]{_gcddb (_cdeea );if _cgfe =_cadd .getRight ();_cgfe !=nil {_baca (_cgfe );_cadd .put (_cadd ._abeef -1,_cadd ._edaga -1,_dfac );};_aeaaf =true ;
};};if !_aeaaf &&_cdeea !=nil {_gcddb (_cdeea );_aeaaf =true ;};if !_aeaaf &&_cgfe !=nil {_baca (_cgfe );_aeaaf =true ;};if !_aeaaf {break ;};};};func (_bagfc *textMark )bbox ()_gcb .PdfRectangle {return _bagfc .PdfRectangle };func _fcbe (_debe *textLine )bool {_fadgd :=true ;
_cdabd :=-1;for _ ,_cbbf :=range _debe ._gaef {for _ ,_gceg :=range _cbbf ._ebeb {_bgfg :=_gceg ._faggb ;if _cdabd ==-1{_cdabd =_bgfg ;}else {if _cdabd !=_bgfg {_fadgd =false ;break ;};};};};return _fadgd ;};type textTable struct{_gcb .PdfRectangle ;_abeef ,_edaga int ;
_ceda bool ;_cfcac map[uint64 ]*textPara ;_agda map[uint64 ]compositeCell ;};func (_deef *shapesState )devicePoint (_dfc ,_aecf float64 )_b .Point {_bacc :=_deef ._ebf .Mult (_deef ._fegda );_dfc ,_aecf =_bacc .Transform (_dfc ,_aecf );return _b .NewPoint (_dfc ,_aecf );
};func (_fffga *textTable )reduce ()*textTable {_fbac :=make ([]int ,0,_fffga ._edaga );_fcge :=make ([]int ,0,_fffga ._abeef );for _adde :=0;_adde < _fffga ._edaga ;_adde ++{if !_fffga .emptyCompositeRow (_adde ){_fbac =append (_fbac ,_adde );};};for _ffgb :=0;
_ffgb < _fffga ._abeef ;_ffgb ++{if !_fffga .emptyCompositeColumn (_ffgb ){_fcge =append (_fcge ,_ffgb );};};if len (_fbac )==_fffga ._edaga &&len (_fcge )==_fffga ._abeef {return _fffga ;};_bdceg :=textTable {_ceda :_fffga ._ceda ,_abeef :len (_fcge ),_edaga :len (_fbac ),_cfcac :make (map[uint64 ]*textPara ,len (_fcge )*len (_fbac ))};
if _dcdb {_cf .Log .Info ("\u0072\u0065\u0064\u0075ce\u003a\u0020\u0025\u0064\u0078\u0025\u0064\u0020\u002d\u003e\u0020\u0025\u0064\u0078%\u0064",_fffga ._abeef ,_fffga ._edaga ,len (_fcge ),len (_fbac ));_cf .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0043\u006f\u006c\u0073\u003a\u0020\u0025\u002b\u0076",_fcge );
_cf .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0052\u006f\u0077\u0073\u003a\u0020\u0025\u002b\u0076",_fbac );};for _dcafc ,_ggeb :=range _fbac {for _fadc ,_agafe :=range _fcge {_faag ,_edgf :=_fffga .getComposite (_agafe ,_ggeb );if _faag ==nil {continue ;
};if _dcdb {_cg .Printf ("\u0020 \u0025\u0032\u0064\u002c \u0025\u0032\u0064\u0020\u0028%\u0032d\u002c \u0025\u0032\u0064\u0029\u0020\u0025\u0071\n",_fadc ,_dcafc ,_agafe ,_ggeb ,_beaaf (_faag .merge ().text (),50));};_bdceg .putComposite (_fadc ,_dcafc ,_faag ,_edgf );
};};return &_bdceg ;};func (_gaaa *wordBag )scanBand (_bbafe string ,_cfga *wordBag ,_caed func (_ggab *wordBag ,_dddcf *textWord )bool ,_gacg ,_bcce ,_gcef float64 ,_cbfa ,_aagd bool )int {_fbeb :=_cfga ._cgaeg ;var _gee map[int ]map[*textWord ]struct{};
if !_cbfa {_gee =_gaaa .makeRemovals ();};_eaad :=_dcad *_fbeb ;_bef :=0;for _ ,_cged :=range _gaaa .depthBand (_gacg -_eaad ,_bcce +_eaad ){if len (_gaaa ._eafg [_cged ])==0{continue ;};for _ ,_daac :=range _gaaa ._eafg [_cged ]{if !(_gacg -_eaad <=_daac ._aada &&_daac ._aada <=_bcce +_eaad ){continue ;
};if !_caed (_cfga ,_daac ){continue ;};_deg :=2.0*_gc .Abs (_daac ._ffcg -_cfga ._cgaeg )/(_daac ._ffcg +_cfga ._cgaeg );_fagg :=_gc .Max (_daac ._ffcg /_cfga ._cgaeg ,_cfga ._cgaeg /_daac ._ffcg );_dfdf :=_gc .Min (_deg ,_fagg );if _gcef > 0&&_dfdf > _gcef {continue ;
};if _cfga .blocked (_daac ){continue ;};if !_cbfa {_cfga .pullWord (_daac ,_cged ,_gee );};_bef ++;if !_aagd {if _daac ._aada < _gacg {_gacg =_daac ._aada ;};if _daac ._aada > _bcce {_bcce =_daac ._aada ;};};if _cbfa {break ;};};};if !_cbfa {_gaaa .applyRemovals (_gee );
};return _bef ;};func _cfddb (_aggab []*textMark ,_ceaf _gcb .PdfRectangle )*textWord {_fgfba :=_aggab [0].PdfRectangle ;_gegab :=_aggab [0]._cegg ;for _ ,_edafe :=range _aggab [1:]{_fgfba =_edfc (_fgfba ,_edafe .PdfRectangle );if _edafe ._cegg > _gegab {_gegab =_edafe ._cegg ;
};};return &textWord {PdfRectangle :_fgfba ,_ebeb :_aggab ,_aada :_ceaf .Ury -_fgfba .Lly ,_ffcg :_gegab };};func _cabd (_cedd ,_dagg int )int {if _cedd > _dagg {return _cedd ;};return _dagg ;};func _cgaea (_cace *list ,_gccbf *string )string {_efgea :=_cgb .Split (_cace ._daafgc ,"\u000a");
_baac :=&_cgb .Builder {};for _ ,_fcgb :=range _efgea {if _fcgb !=""{_baac .WriteString (*_gccbf );_baac .WriteString (_fcgb );_baac .WriteString ("\u000a");};};return _baac .String ();};func (_bbfb *textPara )getListLines ()[]*textLine {var _egeg []*textLine ;
_ggdag :=_ffea (_bbfb ._ecbe );for _ ,_efdd :=range _bbfb ._ecbe {_fffg :=_efdd ._gaef [0]._cfafbd [0];if _dgaa (_fffg ){_egeg =append (_egeg ,_efdd );};};_egeg =append (_egeg ,_ggdag ...);return _egeg ;};func (_cfce *textObject )moveLP (_acgb ,_cbec float64 ){_cfce ._bfdf .Concat (_b .NewMatrix (1,0,0,1,_acgb ,_cbec ));
_cfce ._gfb =_cfce ._bfdf ;};var _de =[]string {"\u0041\u004e","\u0041\u004e","\u0041\u004e","\u0041\u004e","\u0041\u004e","\u0041\u004e","\u004f\u004e","\u004f\u004e","\u0041\u004c","\u0045\u0054","\u0045\u0054","\u0041\u004c","\u0043\u0053","\u0041\u004c","\u004f\u004e","\u004f\u004e","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u0041\u004c","\u0041\u004c","","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u0041\u004e","\u0041\u004e","\u0041\u004e","\u0041\u004e","\u0041\u004e","\u0041\u004e","\u0041\u004e","\u0041\u004e","\u0041\u004e","\u0041\u004e","\u0045\u0054","\u0041\u004e","\u0041\u004e","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u004e\u0053\u004d","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u0041\u004e","\u004f\u004e","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u0041\u004c","\u0041\u004c","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004f\u004e","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u004e\u0053\u004d","\u0041\u004c","\u0041\u004c","\u0045\u004e","\u0045\u004e","\u0045\u004e","\u0045\u004e","\u0045\u004e","\u0045\u004e","\u0045\u004e","\u0045\u004e","\u0045\u004e","\u0045\u004e","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c","\u0041\u004c"};
type fontEntry struct{_dagf *_gcb .PdfFont ;_ecbg int64 ;};func (_bgde *ruling )encloses (_gceadc ,_adaee float64 )bool {return _bgde ._bggg -_cddf <=_gceadc &&_adaee <=_bgde ._dfadf +_cddf ;};func (_gdga paraList )sortReadingOrder (){_cf .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 (_gdga ));
if len (_gdga )<=1{return ;};_gdga .computeEBBoxes ();_eb .Slice (_gdga ,func (_gdde ,_cebed int )bool {return _eadd (_gdga [_gdde ],_gdga [_cebed ])<=0});};type pathSection struct{_adbcg []*subpath ;_ca .Color ;};func _bcgdg (_ffag ,_gabf _gcb .PdfRectangle )(_gcb .PdfRectangle ,bool ){if !_cbcb (_ffag ,_gabf ){return _gcb .PdfRectangle {},false ;
};return _gcb .PdfRectangle {Llx :_gc .Max (_ffag .Llx ,_gabf .Llx ),Urx :_gc .Min (_ffag .Urx ,_gabf .Urx ),Lly :_gc .Max (_ffag .Lly ,_gabf .Lly ),Ury :_gc .Min (_ffag .Ury ,_gabf .Ury )},true ;};func (_ccbg paraList )yNeighbours (_ccdc float64 )map[*textPara ][]int {_dddca :=make ([]event ,2*len (_ccbg ));
if _ccdc ==0{for _gabdg ,_cedc :=range _ccbg {_dddca [2*_gabdg ]=event {_cedc .Lly ,true ,_gabdg };_dddca [2*_gabdg +1]=event {_cedc .Ury ,false ,_gabdg };};}else {for _ccce ,_fcddg :=range _ccbg {_dddca [2*_ccce ]=event {_fcddg .Lly -_ccdc *_fcddg .fontsize (),true ,_ccce };
_dddca [2*_ccce +1]=event {_fcddg .Ury +_ccdc *_fcddg .fontsize (),false ,_ccce };};};return _ccbg .eventNeighbours (_dddca );};func _fdbb (_dbae []pathSection )rulingList {_bbgfd (_dbae );if _cgcb {_cf .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 (_dbae ));
};var _deae rulingList ;for _ ,_fgfg :=range _dbae {for _ ,_fgdg :=range _fgfg ._adbcg {if len (_fgdg ._gfee )< 2{continue ;};_dfdd :=_fgdg ._gfee [0];for _ ,_bffg :=range _fgdg ._gfee [1:]{if _fcdf ,_eagg :=_gfaad (_dfdd ,_bffg ,_fgfg .Color );_eagg {_deae =append (_deae ,_fcdf );
};_dfdd =_bffg ;};};};if _cgcb {_cf .Log .Info ("m\u0061\u006b\u0065\u0053tr\u006fk\u0065\u0052\u0075\u006c\u0069n\u0067\u0073\u003a\u0020\u0025\u0073",_deae );};return _deae ;};var _agfge string ="\u005e\u005b\u0061\u002d\u007a\u0041\u002dZ\u005d\u0028\u005c)\u007c\u005c\u002e)\u007c\u005e[\u005c\u0064\u005d\u002b\u0028\u005c)\u007c\\.\u0029\u007c\u005e\u005c\u0028\u005b\u0061\u002d\u007a\u0041\u002d\u005a\u005d\u005c\u0029\u007c\u005e\u005c\u0028\u005b\u005c\u0064\u005d\u002b\u005c\u0029";
func (_fecc *wordBag )removeDuplicates (){if _addgf {_cf .Log .Info ("r\u0065m\u006f\u0076\u0065\u0044\u0075\u0070\u006c\u0069c\u0061\u0074\u0065\u0073: \u0025\u0071",_fecc .text ());};for _ ,_gbbab :=range _fecc .depthIndexes (){if len (_fecc ._eafg [_gbbab ])==0{continue ;
};_cbcef :=_fecc ._eafg [_gbbab ][0];_eaee :=_aegd *_cbcef ._ffcg ;_adgd :=_cbcef ._aada ;for _ ,_acab :=range _fecc .depthBand (_adgd ,_adgd +_eaee ){_bgfgd :=map[*textWord ]struct{}{};_feedd :=_fecc ._eafg [_acab ];for _ ,_dffbe :=range _feedd {if _ ,_acddf :=_bgfgd [_dffbe ];
_acddf {continue ;};for _ ,_bcaa :=range _feedd {if _ ,_bgdc :=_bgfgd [_bcaa ];_bgdc {continue ;};if _bcaa !=_dffbe &&_bcaa ._cfafbd ==_dffbe ._cfafbd &&_gc .Abs (_bcaa .Llx -_dffbe .Llx )< _eaee &&_gc .Abs (_bcaa .Urx -_dffbe .Urx )< _eaee &&_gc .Abs (_bcaa .Lly -_dffbe .Lly )< _eaee &&_gc .Abs (_bcaa .Ury -_dffbe .Ury )< _eaee {_bgfgd [_bcaa ]=struct{}{};
};};};if len (_bgfgd )> 0{_abgg :=0;for _ ,_eabb :=range _feedd {if _ ,_dgea :=_bgfgd [_eabb ];!_dgea {_feedd [_abgg ]=_eabb ;_abgg ++;};};_fecc ._eafg [_acab ]=_feedd [:len (_feedd )-len (_bgfgd )];if len (_fecc ._eafg [_acab ])==0{delete (_fecc ._eafg ,_acab );
};};};};};func (_bcbfc *textTable )reduceTiling (_ceag gridTiling ,_eadea float64 )*textTable {_eceb :=make ([]int ,0,_bcbfc ._edaga );_cffca :=make ([]int ,0,_bcbfc ._abeef );_eaaa :=_ceag ._bcfdd ;_ddge :=_ceag ._gdggf ;for _gbgec :=0;_gbgec < _bcbfc ._edaga ;
_gbgec ++{_acec :=_gbgec > 0&&_gc .Abs (_ddge [_gbgec -1]-_ddge [_gbgec ])< _eadea &&_bcbfc .emptyCompositeRow (_gbgec );if !_acec {_eceb =append (_eceb ,_gbgec );};};for _gfcge :=0;_gfcge < _bcbfc ._abeef ;_gfcge ++{_egfef :=_gfcge < _bcbfc ._abeef -1&&_gc .Abs (_eaaa [_gfcge +1]-_eaaa [_gfcge ])< _eadea &&_bcbfc .emptyCompositeColumn (_gfcge );
if !_egfef {_cffca =append (_cffca ,_gfcge );};};if len (_eceb )==_bcbfc ._edaga &&len (_cffca )==_bcbfc ._abeef {return _bcbfc ;};_dbaag :=textTable {_ceda :_bcbfc ._ceda ,_abeef :len (_cffca ),_edaga :len (_eceb ),_agda :make (map[uint64 ]compositeCell ,len (_cffca )*len (_eceb ))};
if _dcdb {_cf .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",_bcbfc ._abeef ,_bcbfc ._edaga ,len (_cffca ),len (_eceb ));_cf .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0043\u006f\u006c\u0073\u003a\u0020\u0025\u002b\u0076",_cffca );
_cf .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0052\u006f\u0077\u0073\u003a\u0020\u0025\u002b\u0076",_eceb );};for _eddbb ,_cbegg :=range _eceb {for _geag ,_gbcba :=range _cffca {_cdbd ,_fcafc :=_bcbfc .getComposite (_gbcba ,_cbegg );if len (_cdbd )==0{continue ;
};if _dcdb {_cg .Printf ("\u0020 \u0025\u0032\u0064\u002c \u0025\u0032\u0064\u0020\u0028%\u0032d\u002c \u0025\u0032\u0064\u0029\u0020\u0025\u0071\n",_geag ,_eddbb ,_gbcba ,_cbegg ,_beaaf (_cdbd .merge ().text (),50));};_dbaag .putComposite (_geag ,_eddbb ,_cdbd ,_fcafc );
};};return &_dbaag ;};func _agb (_gdfd []*wordBag )[]*wordBag {if len (_gdfd )<=1{return _gdfd ;};if _aade {_cf .Log .Info ("\u006d\u0065\u0072\u0067\u0065\u0057\u006f\u0072\u0064B\u0061\u0067\u0073\u003a");};_eb .Slice (_gdfd ,func (_dcbb ,_addbf int )bool {_fbae ,_bgge :=_gdfd [_dcbb ],_gdfd [_addbf ];
_fadg :=_fbae .Width ()*_fbae .Height ();_bdde :=_bgge .Width ()*_bgge .Height ();if _fadg !=_bdde {return _fadg > _bdde ;};if _fbae .Height ()!=_bgge .Height (){return _fbae .Height ()> _bgge .Height ();};return _dcbb < _addbf ;});var _ffgf []*wordBag ;
_dcca :=make (intSet );for _agce :=0;_agce < len (_gdfd );_agce ++{if _dcca .has (_agce ){continue ;};_efdf :=_gdfd [_agce ];for _cebd :=_agce +1;_cebd < len (_gdfd );_cebd ++{if _dcca .has (_agce ){continue ;};_cfffg :=_gdfd [_cebd ];_ccae :=_efdf .PdfRectangle ;
_ccae .Llx -=_efdf ._cgaeg ;if _bgbb (_ccae ,_cfffg .PdfRectangle ){_efdf .absorb (_cfffg );_dcca .add (_cebd );};};_ffgf =append (_ffgf ,_efdf );};if len (_gdfd )!=len (_ffgf )+len (_dcca ){_cf .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 (_gdfd ),len (_ffgf ),len (_dcca ));
};return _ffgf ;};func (_ddgd *subpath )isQuadrilateral ()bool {if len (_ddgd ._gfee )< 4||len (_ddgd ._gfee )> 5{return false ;};if len (_ddgd ._gfee )==5{_bfdbe :=_ddgd ._gfee [0];_gdfde :=_ddgd ._gfee [4];if _bfdbe .X !=_gdfde .X ||_bfdbe .Y !=_gdfde .Y {return false ;
};};return true ;};func (_cbge *imageExtractContext )extractFormImages (_addga *_ec .PdfObjectName ,_gdgd _ag .GraphicsState ,_dgg *_gcb .PdfPageResources )error {_aafc ,_ffce :=_dgg .GetXObjectFormByName (*_addga );if _ffce !=nil {return _ffce ;};if _aafc ==nil {return nil ;
};_ceg ,_ffce :=_aafc .GetContentStream ();if _ffce !=nil {return _ffce ;};_dcc :=_aafc .Resources ;if _dcc ==nil {_dcc =_dgg ;};_ffce =_cbge .extractContentStreamImages (string (_ceg ),_dcc );if _ffce !=nil {return _ffce ;};_cbge ._dff ++;return nil ;
};func _deaed (_ffebc map[int ][]float64 )string {_fbce :=_adacg (_ffebc );_gcfae :=make ([]string ,len (_ffebc ));for _bcgda ,_ecbge :=range _fbce {_gcfae [_bcgda ]=_cg .Sprintf ("\u0025\u0064\u003a\u0020\u0025\u002e\u0032\u0066",_ecbge ,_ffebc [_ecbge ]);
};return _cg .Sprintf ("\u007b\u0025\u0073\u007d",_cgb .Join (_gcfae ,"\u002c\u0020"));};func (_gbga *wordBag )sort (){for _ ,_fdde :=range _gbga ._eafg {_eb .Slice (_fdde ,func (_gcda ,_gab int )bool {return _decg (_fdde [_gcda ],_fdde [_gab ])< 0});};
};type paraList []*textPara ;func (_adfcc *textTable )putComposite (_bbfbg ,_fbaaf int ,_dabb paraList ,_fffef _gcb .PdfRectangle ){if len (_dabb )==0{_cf .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 ;};_efcef :=compositeCell {PdfRectangle :_fffef ,paraList :_dabb };if _dcdb {_cg .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",_bbfbg ,_fbaaf ,_efcef .String ());
};_efcef .updateBBox ();_adfcc ._agda [_fgfde (_bbfbg ,_fbaaf )]=_efcef ;};type textResult struct{_abff PageText ;_fbea int ;_dbad int ;};func (_ddcc *textWord )appendMark (_ecdf *textMark ,_fcbef _gcb .PdfRectangle ){_ddcc ._ebeb =append (_ddcc ._ebeb ,_ecdf );
_ddcc .PdfRectangle =_edfc (_ddcc .PdfRectangle ,_ecdf .PdfRectangle );if _ecdf ._cegg > _ddcc ._ffcg {_ddcc ._ffcg =_ecdf ._cegg ;};_ddcc ._aada =_fcbef .Ury -_ddcc .PdfRectangle .Lly ;};func (_ffcca lineRuling )xMean ()float64 {return 0.5*(_ffcca ._efgf .X +_ffcca ._afdd .X )};
func (_bdbc *textWord )toTextMarks (_dbcaf *int )[]TextMark {var _ffgaa []TextMark ;for _ ,_dabbg :=range _bdbc ._ebeb {_ffgaa =_cab (_ffgaa ,_dbcaf ,_dabbg .ToTextMark ());};return _ffgaa ;};
// 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 (_bebd *Extractor )ExtractPageImages (options *ImageExtractOptions )(*PageImages ,error ){_ccdg :=&imageExtractContext {_dfeb :options };_dfec :=_ccdg .extractContentStreamImages (_bebd ._bdc ,_bebd ._ed );if _dfec !=nil {return nil ,_dfec ;};return &PageImages {Images :_ccdg ._dbgg },nil ;
};func (_gedd *textTable )get (_fgfdd ,_bagg int )*textPara {return _gedd ._cfcac [_fgfde (_fgfdd ,_bagg )]};func (_bcbc *textTable )isExportable ()bool {if _bcbc ._ceda {return true ;};_gfcc :=func (_gfbg int )bool {_cbbfd :=_bcbc .get (0,_gfbg );if _cbbfd ==nil {return false ;
};_decaf :=_cbbfd .text ();_fcec :=_cc .RuneCountInString (_decaf );_aaeaa :=_afee .MatchString (_decaf );return _fcec <=1||_aaeaa ;};for _dgfg :=0;_dgfg < _bcbc ._edaga ;_dgfg ++{if !_gfcc (_dgfg ){return true ;};};return false ;};func (_gbda *stateStack )size ()int {return len (*_gbda )};
const (_bada =false ;_fcade =false ;_ebcbb =false ;_aece =false ;_efda =false ;_gdgec =false ;_bdafc =false ;_cecd =false ;_aade =false ;_fdef =_aade &&true ;_aeca =_fdef &&false ;_addgf =_aade &&true ;_dcdb =false ;_eed =_dcdb &&false ;_gcefa =_dcdb &&true ;
_cgcb =false ;_abbb =_cgcb &&false ;_gagd =_cgcb &&false ;_fbfd =_cgcb &&true ;_faac =_cgcb &&false ;_faged =_cgcb &&false ;);
// New returns an Extractor instance for extracting content from the input PDF page.
func New (page *_gcb .PdfPage )(*Extractor ,error ){return NewWithOptions (page ,nil )};func (_cecca *textPara )taken ()bool {return _cecca ==nil ||_cecca ._acffe };type intSet map[int ]struct{};var _gfaab string ="\u0028\u003f\u0069\u0029\u005e\u0028\u004d\u007b\u0030\u002c\u0033\u007d\u0029\u0028\u0043\u0028?\u003a\u0044\u007cM\u0029\u007c\u0044\u003f\u0043{\u0030\u002c\u0033\u007d\u0029\u0028\u0058\u0028\u003f\u003a\u004c\u007c\u0043\u0029\u007cL\u003f\u0058\u007b\u0030\u002c\u0033}\u0029\u0028\u0049\u0028\u003f\u003a\u0056\u007c\u0058\u0029\u007c\u0056\u003f\u0049\u007b\u0030\u002c\u0033\u007d\u0029\u0028\u005c\u0029\u007c\u005c\u002e\u0029\u007c\u005e\u005c\u0028\u0028\u004d\u007b\u0030\u002c\u0033\u007d\u0029\u0028\u0043\u0028\u003f\u003aD\u007cM\u0029\u007c\u0044\u003f\u0043\u007b\u0030\u002c\u0033\u007d\u0029\u0028\u0058\u0028?\u003a\u004c\u007c\u0043\u0029\u007c\u004c?\u0058\u007b0\u002c\u0033\u007d\u0029(\u0049\u0028\u003f\u003a\u0056|\u0058\u0029\u007c\u0056\u003f\u0049\u007b\u0030\u002c\u0033\u007d\u0029\u005c\u0029";
func (_dgfc *shapesState )clearPath (){_dgfc ._becf =nil ;_dgfc ._agcg =false ;if _efda {_cf .Log .Info ("\u0043\u004c\u0045A\u0052\u003a\u0020\u0073\u0073\u003d\u0025\u0073",_dgfc );};};func (_aebb *textObject )setTextLeading (_dce float64 ){if _aebb ==nil {return ;
};_aebb ._cgge ._bccg =_dce ;};func _ddcgd (_fadef map[float64 ]map[float64 ]gridTile )[]float64 {_fgdb :=make ([]float64 ,0,len (_fadef ));for _adaga :=range _fadef {_fgdb =append (_fgdb ,_adaga );};_eb .Float64s (_fgdb );_efga :=len (_fgdb );for _gcee :=0;
_gcee < _efga /2;_gcee ++{_fgdb [_gcee ],_fgdb [_efga -1-_gcee ]=_fgdb [_efga -1-_gcee ],_fgdb [_gcee ];};return _fgdb ;};func (_gbge *shapesState )fill (_fcef *[]pathSection ){_cbcc :=pathSection {_adbcg :_gbge ._becf ,Color :_gbge ._ebab .getFillColor ()};
*_fcef =append (*_fcef ,_cbcc );if _cgcb {_faafa :=_cbcc .bbox ();_cg .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 (*_fcef ),len (_cbcc ._adbcg ),_gbge ,_cbcc .Color ,_faafa ,_faafa .Width (),_faafa .Height ());
if _abbb {for _gddb ,_bdfe :=range _cbcc ._adbcg {_cg .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_gddb ,_bdfe );if _gddb ==10{break ;};};};};};func (_dgggag paraList )sortTopoOrder (){_aagb :=_dgggag .topoOrder ();_dgggag .reorder (_aagb )};
func _cfef (_ageaa _ec .PdfObject ,_fefe _ca .Color )(_a .Image ,error ){_feba ,_ggdg :=_ec .GetStream (_ageaa );if !_ggdg {return nil ,nil ;};_dbgdc ,_cgafc :=_gcb .NewXObjectImageFromStream (_feba );if _cgafc !=nil {return nil ,_cgafc ;};_fggg ,_cgafc :=_dbgdc .ToImage ();
if _cgafc !=nil {return nil ,_cgafc ;};return _abdaa (_fggg ,_fefe ),nil ;};func (_caggf rulingList )toTilings ()(rulingList ,[]gridTiling ){_caggf .log ("\u0074o\u0054\u0069\u006c\u0069\u006e\u0067s");if len (_caggf )==0{return nil ,nil ;};_caggf =_caggf .tidied ("\u0061\u006c\u006c");
_caggf .log ("\u0074\u0069\u0064\u0069\u0065\u0064");_gegcg :=_caggf .toGrids ();_bade :=make ([]gridTiling ,len (_gegcg ));for _agdfg ,_acbe :=range _gegcg {_bade [_agdfg ]=_acbe .asTiling ();};return _caggf ,_bade ;};func (_afe *textObject )moveText (_bbg ,_eaec float64 ){_afe .moveLP (_bbg ,_eaec )};
func _babg (_egge _b .Point )*subpath {return &subpath {_gfee :[]_b .Point {_egge }}};func _ebabd (_bbacc _gcb .PdfColorspace ,_bffgfb _gcb .PdfColor )_ca .Color {if _bbacc ==nil ||_bffgfb ==nil {return _ca .Black ;};_bbgab ,_fadgfd :=_bbacc .ColorToRGB (_bffgfb );
if _fadgfd !=nil {_cf .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",_bffgfb ,_bbacc ,_fadgfd );
return _ca .Black ;};_cadc ,_aafcce :=_bbgab .(*_gcb .PdfColorDeviceRGB );if !_aafcce {_cf .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",_bbgab );
return _ca .Black ;};return _ca .NRGBA {R :uint8 (_cadc .R ()*255),G :uint8 (_cadc .G ()*255),B :uint8 (_cadc .B ()*255),A :uint8 (255)};};func _afcab (_cffg []pathSection )rulingList {_bbgfd (_cffg );if _cgcb {_cf .Log .Info ("\u006da\u006b\u0065\u0046\u0069l\u006c\u0052\u0075\u006c\u0069n\u0067s\u003a \u0025\u0064\u0020\u0066\u0069\u006c\u006cs",len (_cffg ));
};var _acddd rulingList ;for _ ,_acee :=range _cffg {for _ ,_cffc :=range _acee ._adbcg {if !_cffc .isQuadrilateral (){if _cgcb {_cf .Log .Error ("!\u0069s\u0051\u0075\u0061\u0064\u0072\u0069\u006c\u0061t\u0065\u0072\u0061\u006c: \u0025\u0073",_cffc );
};continue ;};if _fddfb ,_ggff :=_cffc .makeRectRuling (_acee .Color );_ggff {_acddd =append (_acddd ,_fddfb );}else {if _faac {_cf .Log .Error ("\u0021\u006d\u0061\u006beR\u0065\u0063\u0074\u0052\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0025\u0073",_cffc );
};};};};if _cgcb {_cf .Log .Info ("\u006d\u0061\u006b\u0065Fi\u006c\u006c\u0052\u0075\u006c\u0069\u006e\u0067\u0073\u003a\u0020\u0025\u0073",_acddd .String ());};return _acddd ;};func (_eaac *wordBag )pullWord (_bbbgb *textWord ,_gcdf int ,_dggc map[int ]map[*textWord ]struct{}){_eaac .PdfRectangle =_edfc (_eaac .PdfRectangle ,_bbbgb .PdfRectangle );
if _bbbgb ._ffcg > _eaac ._cgaeg {_eaac ._cgaeg =_bbbgb ._ffcg ;};_eaac ._eafg [_gcdf ]=append (_eaac ._eafg [_gcdf ],_bbbgb );_dggc [_gcdf ][_bbbgb ]=struct{}{};};func (_dagbc rulingList )findPrimSec (_fafa ,_gbag float64 )*ruling {for _ ,_dcea :=range _dagbc {if _eage (_dcea ._ccgff -_fafa )&&_dcea ._bggg -_cddf <=_gbag &&_gbag <=_dcea ._dfadf +_cddf {return _dcea ;
};};return nil ;};func (_eaeab paraList )findTables (_bbfeb []gridTiling )[]*textTable {_eaeab .addNeighbours ();_eb .Slice (_eaeab ,func (_bdcge ,_eaede int )bool {return _egfc (_eaeab [_bdcge ],_eaeab [_eaede ])< 0});var _daeeg []*textTable ;if _aefg {_eccf :=_eaeab .findGridTables (_bbfeb );
_daeeg =append (_daeeg ,_eccf ...);};if _gbdbd {_gfgdc :=_eaeab .findTextTables ();_daeeg =append (_daeeg ,_gfgdc ...);};return _daeeg ;};var _ggda =TextMark {Text :"\u005b\u0058\u005d",Original :"\u0020",Meta :true ,FillColor :_ca .White ,StrokeColor :_ca .White };
// List returns all the list objects detected on the page.
// It detects all the bullet point Lists from a given pdf page and builds a slice of bullet list objects.
// A given bullet list object has a tree structure.
// Each bullet point list is extracted with the text content it contains and all the sub lists found under it as children in the tree.
// The rest content of the pdf is ignored and only text in the bullet point lists are extracted.
// The list extraction is done in two ways.
// 1. If the document is tagged then the lists are extracted using the tags provided in the document.
// 2. Otherwise the bullet lists are extracted from the raw text using regex matching.
// By default the document tag is used if available.
// However this can be disabled using `DisableDocumentTags` in the `Options` object.
// Sometimes disabling document tags option might give a better bullet list extraction if the document was tagged incorrectly.
//
// options := &Options{
// DisableDocumentTags: false, // this means use document tag if available
// }
// ex, err := NewWithOptions(page, options)
// // handle error
// pageText, _, _, err := ex.ExtractPageText()
// // handle error
// lists := pageText.List()
// txt := lists.Text()
func (_gffd PageText )List ()lists {_dbgf :=!_gffd ._gebg ._abcee ;_adge :=_gffd .getParagraphs ();_bagf :=true ;if _gffd ._bdcgc ==nil ||*_gffd ._bdcgc ==nil {_bagf =false ;};_dadc :=_adge .list ();if _bagf &&_dbgf {_cbbd :=_cfdc (&_adge );_dege :=&structTreeRoot {};
_dege .parseStructTreeRoot (*_gffd ._bdcgc );if _dege ._bgda ==nil {_cf .Log .Debug ("\u004c\u0069\u0073\u0074\u003a\u0020\u0073t\u0072\u0075\u0063\u0074\u0054\u0072\u0065\u0065\u0052\u006f\u006f\u0074\u0020\u0064\u006f\u0065\u0073\u006e'\u0074\u0020\u0068\u0061\u0076e\u0020\u0061\u006e\u0079\u0020\u0063\u006f\u006e\u0074e\u006e\u0074\u002c\u0020\u0075\u0073\u0069\u006e\u0067\u0020\u0074\u0065\u0078\u0074\u0020\u006d\u0061\u0074\u0063\u0068\u0069\u006e\u0067\u0020\u006d\u0065\u0074\u0068\u006f\u0064\u0020\u0069\u006e\u0073\u0074\u0065\u0061\u0064\u002e");
return _dadc ;};_dadc =_dege .buildList (_cbbd ,_gffd ._fbf );};return _dadc ;};func (_add *imageExtractContext )extractXObjectImage (_gaf *_ec .PdfObjectName ,_fcc _ag .GraphicsState ,_da *_gcb .PdfPageResources )error {_bcac ,_ :=_da .GetXObjectByName (*_gaf );
if _bcac ==nil {return nil ;};_addg ,_baf :=_add ._acb [_bcac ];if !_baf {_ebec ,_cfg :=_da .GetXObjectImageByName (*_gaf );if _cfg !=nil {return _cfg ;};if _ebec ==nil {return nil ;};_dcd ,_cfg :=_ebec .ToImage ();if _cfg !=nil {return _cfg ;};var _ggea _a .Image ;
if _ebec .Mask !=nil {if _ggea ,_cfg =_bfbbf (_ebec .Mask ,_ca .Opaque );_cfg !=nil {_cf .Log .Debug ("\u0057\u0041\u0052\u004e\u003a \u0063\u006f\u0075\u006c\u0064 \u006eo\u0074\u0020\u0067\u0065\u0074\u0020\u0065\u0078\u0070\u006c\u0069\u0063\u0069\u0074\u0020\u0069\u006d\u0061\u0067e\u0020\u006d\u0061\u0073\u006b\u002e\u0020\u004f\u0075\u0074\u0070\u0075\u0074\u0020\u006d\u0061\u0079\u0020\u0062\u0065\u0020\u0069\u006e\u0063o\u0072\u0072\u0065\u0063\u0074\u002e");
};}else if _ebec .SMask !=nil {_ggea ,_cfg =_cfef (_ebec .SMask ,_ca .Opaque );if _cfg !=nil {_cf .Log .Debug ("W\u0041\u0052\u004e\u003a\u0020\u0063\u006f\u0075\u006c\u0064\u0020\u006e\u006f\u0074\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0066\u0074\u0020\u0069\u006da\u0067e\u0020\u006d\u0061\u0073k\u002e\u0020O\u0075\u0074\u0070\u0075\u0074\u0020\u006d\u0061\u0079\u0020\u0062\u0065\u0020\u0069\u006e\u0063\u006f\u0072\u0072\u0065\u0063\u0074\u002e");
};};if _ggea !=nil {_gce ,_aea :=_dcd .ToGoImage ();if _aea !=nil {return _aea ;};_gce =_gggff (_gce ,_ggea );switch _ebec .ColorSpace .String (){case "\u0044\u0065\u0076\u0069\u0063\u0065\u0047\u0072\u0061\u0079","\u0049n\u0064\u0065\u0078\u0065\u0064":_dcd ,_aea =_gcb .ImageHandling .NewGrayImageFromGoImage (_gce );
if _aea !=nil {return _aea ;};default:_dcd ,_aea =_gcb .ImageHandling .NewImageFromGoImage (_gce );if _aea !=nil {return _aea ;};};};_addg =&cachedImage {_bdac :_dcd ,_acf :_ebec .ColorSpace };_add ._acb [_bcac ]=_addg ;};_edd :=_addg ._bdac ;_cce :=_addg ._acf ;
_cdad ,_cdf :=_cce .ImageToRGB (*_edd );if _cdf !=nil {return _cdf ;};_cf .Log .Debug ("@\u0044\u006f\u0020\u0043\u0054\u004d\u003a\u0020\u0025\u0073",_fcc .CTM .String ());_eeba :=ImageMark {Image :&_cdad ,Width :_fcc .CTM .ScalingFactorX (),Height :_fcc .CTM .ScalingFactorY (),Angle :_fcc .CTM .Angle ()};
_eeba .X ,_eeba .Y =_fcc .CTM .Translation ();_add ._dbgg =append (_add ._dbgg ,_eeba );_add ._bab ++;return nil ;};type bounded interface{bbox ()_gcb .PdfRectangle };func _egcgd (_defde ,_dagbg float64 )string {_aebfc :=!_eage (_defde -_dagbg );if _aebfc {return "\u000a";
};return "\u0020";};func (_gdgg *textLine )endsInHyphen ()bool {_eged :=_gdgg ._gaef [len (_gdgg ._gaef )-1];_bfga :=_eged ._cfafbd ;_bgeba ,_dgcf :=_cc .DecodeLastRuneInString (_bfga );if _dgcf <=0||!_ef .Is (_ef .Hyphen ,_bgeba ){return false ;};if _eged ._afeg &&_gfaa (_bfga ){return true ;
};return _gfaa (_gdgg .text ());};func _cbcb (_edfd ,_cdab _gcb .PdfRectangle )bool {return _gbdda (_edfd ,_cdab )&&_ffbc (_edfd ,_cdab )};func _gbfb (_fcdaf *PageText )error {_dfgb :=_ab .GetLicenseKey ();if _dfgb !=nil &&_dfgb .IsLicensed ()||_fgb {return nil ;
};_cg .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");_cg .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 _fe .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 _dgaa (_caeda byte )bool {for _ ,_dcfg :=range _afbe {if []byte (_dcfg )[0]==_caeda {return true ;
};};return false ;};func (_daafc *wordBag )makeRemovals ()map[int ]map[*textWord ]struct{}{_dbee :=make (map[int ]map[*textWord ]struct{},len (_daafc ._eafg ));for _beda :=range _daafc ._eafg {_dbee [_beda ]=make (map[*textWord ]struct{});};return _dbee ;
};
// String returns a description of `t`.
func (_dcfgf *textTable )String ()string {return _cg .Sprintf ("\u0025\u0064\u0020\u0078\u0020\u0025\u0064\u0020\u0025\u0074",_dcfgf ._abeef ,_dcfgf ._edaga ,_dcfgf ._ceda );};
// 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{_gcb .PdfRectangle ;W ,H int ;Cells [][]TableCell ;};func _aabe (_ebed float64 ,_cebb int )int {if _cebb ==0{_cebb =1;};_ffbfc :=float64 (_cebb );return int (_gc .Round (_ebed /_ffbfc )*_ffbfc );};func (_feeb paraList )log (_bbga string ){if !_cecd {return ;
};_cf .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",_bbga ,len (_feeb ));for _dbff ,_dgcgc :=range _feeb {if _dgcgc ==nil {continue ;
};_bcdcb :=_dgcgc .text ();_cfad :="\u0020\u0020";if _dgcgc ._gegf !=nil {_cfad =_cg .Sprintf ("\u005b%\u0064\u0078\u0025\u0064\u005d",_dgcgc ._gegf ._abeef ,_dgcgc ._gegf ._edaga );};_cg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u0025s\u0020\u0025\u0071\u000a",_dbff ,_dgcgc .PdfRectangle ,_cfad ,_beaaf (_bcdcb ,50));
};};
// Font represents the font properties on a PDF page.
type Font struct{PdfFont *_gcb .PdfFont ;
// FontName represents Font Name from font properties.
FontName string ;
// FontType represents Font Subtype entry in the font dictionary inside page resources.
// Examples : type0, Type1, MMType1, Type3, TrueType, CIDFont.
FontType string ;
// ToUnicode is true if font provides a `ToUnicode` mapping.
ToUnicode bool ;
// IsCID is true if underlying font is a composite font.
// Composite font is represented by a font dictionary whose Subtype is `Type0`
IsCID bool ;
// IsSimple is true if font is simple font.
// A simple font is limited to only 8 bit (255) character codes.
IsSimple bool ;
// FontData represents the raw data of the embedded font file.
// It can have format TrueType (TTF), PostScript Font (PFB) or Compact Font Format (CCF).
// FontData value can be indicates from `FontFile`, `FontFile2` or `FontFile3` inside Font Descriptor.
// At most, only one of `FontFile`, `FontFile2` or `FontFile3` will be FontData value.
FontData []byte ;
// FontFileName is a name representing the font. it has format:
// (Font Name) + (Font Type Extension), example: helvetica.ttf.
FontFileName string ;
// FontDescriptor represents metrics and other attributes inside font properties from PDF Structure (Font Descriptor).
FontDescriptor *_gcb .PdfFontDescriptor ;};func (_gdff *textTable )newTablePara ()*textPara {_dbedf :=_gdff .computeBbox ();_bfec :=&textPara {PdfRectangle :_dbedf ,_febg :_dbedf ,_gegf :_gdff };if _dcdb {_cf .Log .Info ("\u006e\u0065w\u0054\u0061\u0062l\u0065\u0050\u0061\u0072\u0061\u003a\u0020\u0025\u0073",_bfec );
};return _bfec ;};
// 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 (_cba *Extractor )ExtractPageText ()(*PageText ,int ,int ,error ){_fda ,_bfbf ,_eca ,_aeab :=_cba .extractPageText (_cba ._bdc ,_cba ._ed ,_b .IdentityMatrix (),0,false );if _aeab !=nil &&_aeab !=_gcb .ErrColorOutOfRange {return nil ,0,0,_aeab ;};
if _cba ._bec !=nil {_fda ._gebg ._cfag =_cba ._bec .UseSimplerExtractionProcess ;};_fda .computeViews ();_aeab =_gbfb (_fda );if _aeab !=nil {return nil ,0,0,_aeab ;};if _cba ._bec !=nil {if _cba ._bec .ApplyCropBox &&_cba ._fdd !=nil {_fda .ApplyArea (*_cba ._fdd );
};_fda ._gebg ._abcee =_cba ._bec .DisableDocumentTags ;};return _fda ,_bfbf ,_eca ,nil ;};func (_eaegg paraList )extractTables (_eddd []gridTiling )paraList {if _dcdb {_cf .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 (_eaegg ));
};if len (_eaegg )< _cdcg {return _eaegg ;};_abdab :=_eaegg .findTables (_eddd );if _dcdb {_cf .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 (_abdab ));
for _fceg ,_adbg :=range _abdab {_adbg .log (_cg .Sprintf ("c\u006f\u006d\u0062\u0069\u006e\u0065\u0064\u0020\u0025\u0064",_fceg ));};};return _eaegg .applyTables (_abdab );};func (_bbad rulingList )merge ()*ruling {_geebe :=_bbad [0]._ccgff ;_degbd :=_bbad [0]._bggg ;
_dbbcc :=_bbad [0]._dfadf ;for _ ,_fbga :=range _bbad [1:]{_geebe +=_fbga ._ccgff ;if _fbga ._bggg < _degbd {_degbd =_fbga ._bggg ;};if _fbga ._dfadf > _dbbcc {_dbbcc =_fbga ._dfadf ;};};_bbgge :=&ruling {_cfgc :_bbad [0]._cfgc ,_baea :_bbad [0]._baea ,Color :_bbad [0].Color ,_ccgff :_geebe /float64 (len (_bbad )),_bggg :_degbd ,_dfadf :_dbbcc };
if _gagd {_cf .Log .Info ("\u006de\u0072g\u0065\u003a\u0020\u0025\u0032d\u0020\u0076e\u0063\u0073\u0020\u0025\u0073",len (_bbad ),_bbgge );for _ceefa ,_dcfb :=range _bbad {_cg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_ceefa ,_dcfb );
};};return _bbgge ;};func _acbf (_fdac ,_gebcg float64 )bool {return _gc .Abs (_fdac -_gebcg )<=_cddf };func _bgeed (_aabg []*textLine )map[float64 ][]*textLine {_eb .Slice (_aabg ,func (_ebbg ,_gacc int )bool {return _aabg [_ebbg ]._aabbc < _aabg [_gacc ]._aabbc });
_cfgag :=map[float64 ][]*textLine {};for _ ,_cgeg :=range _aabg {_egfb :=_fbbee (_cgeg );_egfb =_gc .Round (_egfb );_cfgag [_egfb ]=append (_cfgag [_egfb ],_cgeg );};return _cfgag ;};var _afbe =[]string {"\u2756","\u27a2","\u2713","\u2022","\uf0a7","\u25a1","\u2212","\u25a0","\u25aa","\u006f"};
func (_fecec *shapesState )lineTo (_aage ,_ebcbf float64 ){if _efda {_cf .Log .Info ("\u006c\u0069\u006eeT\u006f\u0028\u0025\u002e\u0032\u0066\u002c\u0025\u002e\u0032\u0066\u0020\u0070\u003d\u0025\u002e\u0032\u0066",_aage ,_ebcbf ,_fecec .devicePoint (_aage ,_ebcbf ));
};_fecec .addPoint (_aage ,_ebcbf );};func _agfd (_cecaa []_ec .PdfObject )(_aefa ,_acbfd float64 ,_caaa error ){if len (_cecaa )!=2{return 0,0,_cg .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 (_cecaa ));
};_bdfa ,_caaa :=_ec .GetNumbersAsFloat (_cecaa );if _caaa !=nil {return 0,0,_caaa ;};return _bdfa [0],_bdfa [1],nil ;};func _dgd (_egdb *_ag .ContentStreamOperation )(float64 ,error ){if len (_egdb .Params )!=1{_cca :=_fe .New ("\u0069n\u0063\u006f\u0072\u0072e\u0063\u0074\u0020\u0070\u0061r\u0061m\u0065t\u0065\u0072\u0020\u0063\u006f\u0075\u006et");
_cf .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",_egdb .Operand ,1,len (_egdb .Params ),_egdb .Params );
return 0.0,_cca ;};return _ec .GetNumberAsFloat (_egdb .Params [0]);};type event struct{_dbge float64 ;_edefc bool ;_cddgb int ;};func (_defe *shapesState )quadraticTo (_gfbf ,_ebb ,_cede ,_ggdc float64 ){if _efda {_cf .Log .Info ("\u0071\u0075\u0061d\u0072\u0061\u0074\u0069\u0063\u0054\u006f\u003a");
};_defe .addPoint (_cede ,_ggdc );};func (_cbdf *shapesState )closePath (){if _cbdf ._agcg {_cbdf ._becf =append (_cbdf ._becf ,_babg (_cbdf ._dfa ));_cbdf ._agcg =false ;}else if len (_cbdf ._becf )==0{if _efda {_cf .Log .Debug ("\u0063\u006c\u006f\u0073eP\u0061\u0074\u0068\u0020\u0077\u0069\u0074\u0068\u0020\u006e\u006f\u0020\u0070\u0061t\u0068");
};_cbdf ._agcg =false ;return ;};_cbdf ._becf [len (_cbdf ._becf )-1].close ();if _efda {_cf .Log .Info ("\u0063\u006c\u006f\u0073\u0065\u0050\u0061\u0074\u0068\u003a\u0020\u0025\u0073",_cbdf );};};func (_dbag gridTile )contains (_acef _gcb .PdfRectangle )bool {if _dbag .numBorders ()< 3{return false ;
};if _dbag ._fccgbd &&_acef .Llx < _dbag .Llx -_cbed {return false ;};if _dbag ._abda &&_acef .Urx > _dbag .Urx +_cbed {return false ;};if _dbag ._bbgd &&_acef .Lly < _dbag .Lly -_cbed {return false ;};if _dbag ._ffccc &&_acef .Ury > _dbag .Ury +_cbed {return false ;
};return true ;};func (_dbbcd rulingList )secMinMax ()(float64 ,float64 ){_fcfg ,_dgcfa :=_dbbcd [0]._bggg ,_dbbcd [0]._dfadf ;for _ ,_bccb :=range _dbbcd [1:]{if _bccb ._bggg < _fcfg {_fcfg =_bccb ._bggg ;};if _bccb ._dfadf > _dgcfa {_dgcfa =_bccb ._dfadf ;
};};return _fcfg ,_dgcfa ;};
// PageImages represents extracted images on a PDF page with spatial information:
// display position and size.
type PageImages struct{Images []ImageMark ;};func (_aaad *textObject )nextLine (){_aaad .moveLP (0,-_aaad ._cgge ._bccg )};func _ffea (_gdfb []*textLine )[]*textLine {_dead :=[]*textLine {};for _ ,_ccaf :=range _gdfb {_gffeg :=_ccaf .text ();_fbef :=_eeeg .Find ([]byte (_gffeg ));
if _fbef !=nil {_dead =append (_dead ,_ccaf );};};return _dead ;};const (_dbgc rulingKind =iota ;_effb ;_gcaf ;);func (_aef *textObject )setTextMatrix (_aga []float64 ){if len (_aga )!=6{_cf .Log .Debug ("\u0045\u0052\u0052OR\u003a\u0020\u006c\u0065\u006e\u0028\u0066\u0029\u0020\u0021\u003d\u0020\u0036\u0020\u0028\u0025\u0064\u0029",len (_aga ));
return ;};_aabc ,_acgg ,_begf ,_bgdg ,_eeca ,_bfa :=_aga [0],_aga [1],_aga [2],_aga [3],_aga [4],_aga [5];_aef ._gfb =_b .NewMatrix (_aabc ,_acgg ,_begf ,_bgdg ,_eeca ,_bfa );_aef ._bfdf =_aef ._gfb ;};func _gaaf (_cgcd _gcb .PdfRectangle ,_defbe ,_gdegc ,_edbeb ,_fegad *ruling )gridTile {_adadb :=_cgcd .Llx ;
_aced :=_cgcd .Urx ;_fcff :=_cgcd .Lly ;_gbgdf :=_cgcd .Ury ;return gridTile {PdfRectangle :_cgcd ,_fccgbd :_defbe !=nil &&_defbe .encloses (_fcff ,_gbgdf ),_abda :_gdegc !=nil &&_gdegc .encloses (_fcff ,_gbgdf ),_bbgd :_edbeb !=nil &&_edbeb .encloses (_adadb ,_aced ),_ffccc :_fegad !=nil &&_fegad .encloses (_adadb ,_aced )};
};func (_ecfef rulingList )primaries ()[]float64 {_gebd :=make (map[float64 ]struct{},len (_ecfef ));for _ ,_efgff :=range _ecfef {_gebd [_efgff ._ccgff ]=struct{}{};};_bfea :=make ([]float64 ,len (_gebd ));_dfab :=0;for _bbfe :=range _gebd {_bfea [_dfab ]=_bbfe ;
_dfab ++;};_eb .Float64s (_bfea );return _bfea ;};type wordBag struct{_gcb .PdfRectangle ;_cgaeg float64 ;_ffdee ,_aabb rulingList ;_dbfe float64 ;_eafg map[int ][]*textWord ;};func _dgcc (_begb _gcb .PdfRectangle ,_deaf bounded )float64 {return _begb .Ury -_deaf .bbox ().Lly };
func (_gccc paraList )llyRange (_fbcb []int ,_bgfad ,_cabc float64 )[]int {_afad :=len (_gccc );if _cabc < _gccc [_fbcb [0]].Lly ||_bgfad > _gccc [_fbcb [_afad -1]].Lly {return nil ;};_ffgg :=_eb .Search (_afad ,func (_afebf int )bool {return _gccc [_fbcb [_afebf ]].Lly >=_bgfad });
_bdge :=_eb .Search (_afad ,func (_gebcb int )bool {return _gccc [_fbcb [_gebcb ]].Lly > _cabc });return _fbcb [_ffgg :_bdge ];};func (_cafd *textTable )computeBbox ()_gcb .PdfRectangle {var _bfgaf _gcb .PdfRectangle ;_geba :=false ;for _afede :=0;_afede < _cafd ._edaga ;
_afede ++{for _acbcc :=0;_acbcc < _cafd ._abeef ;_acbcc ++{_edbg :=_cafd .get (_acbcc ,_afede );if _edbg ==nil {continue ;};if !_geba {_bfgaf =_edbg .PdfRectangle ;_geba =true ;}else {_bfgaf =_edfc (_bfgaf ,_edbg .PdfRectangle );};};};return _bfgaf ;};
func (_ceeg *textObject )setWordSpacing (_ege float64 ){if _ceeg ==nil {return ;};_ceeg ._cgge ._bfbc =_ege ;};func (_ebafb paraList )applyTables (_caaf []*textTable )paraList {var _abdcg paraList ;for _ ,_babb :=range _caaf {_abdcg =append (_abdcg ,_babb .newTablePara ());
};for _ ,_bbadb :=range _ebafb {if _bbadb ._acffe {continue ;};_abdcg =append (_abdcg ,_bbadb );};return _abdcg ;};type markKind int ;func (_ecgcd *textTable )getComposite (_aegbc ,_gfff int )(paraList ,_gcb .PdfRectangle ){_abab ,_cgdf :=_ecgcd ._agda [_fgfde (_aegbc ,_gfff )];
if _dcdb {_cg .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",_aegbc ,_gfff ,_abab .String ());};if !_cgdf {return nil ,_gcb .PdfRectangle {};
};return _abab .parasBBox ();};func _deeca (_abecd *_gcb .Image ,_fabb _ca .Color )_a .Image {_cdcb ,_ecefd :=int (_abecd .Width ),int (_abecd .Height );_cgdc :=_a .NewRGBA (_a .Rect (0,0,_cdcb ,_ecefd ));for _bdffb :=0;_bdffb < _ecefd ;_bdffb ++{for _baebc :=0;
_baebc < _cdcb ;_baebc ++{_agedf ,_cbef :=_abecd .ColorAt (_baebc ,_bdffb );if _cbef !=nil {_cf .Log .Debug ("\u0057\u0041\u0052\u004e\u003a\u0020\u0063o\u0075\u006c\u0064\u0020\u006e\u006f\u0074\u0020\u0072\u0065\u0074\u0072\u0069\u0065v\u0065 \u0069\u006d\u0061\u0067\u0065\u0020m\u0061\u0073\u006b\u0020\u0076\u0061\u006cu\u0065\u0020\u0061\u0074\u0020\u0028\u0025\u0064\u002c\u0020\u0025\u0064\u0029\u002e\u0020\u004f\u0075\u0074\u0070\u0075\u0074\u0020\u006da\u0079\u0020\u0062\u0065\u0020\u0069\u006e\u0063\u006f\u0072\u0072\u0065\u0063t\u002e",_baebc ,_bdffb );
continue ;};_gggg ,_adeed ,_adbfg ,_ :=_agedf .RGBA ();var _bbdca _ca .Color ;if _gggg +_adeed +_adbfg ==0{_bbdca =_fabb ;}else {_bbdca =_ca .Transparent ;};_cgdc .Set (_baebc ,_bdffb ,_bbdca );};};return _cgdc ;};func (_aafb *textObject )moveTextSetLeading (_fbb ,_aeea float64 ){_aafb ._cgge ._bccg =-_aeea ;
_aafb .moveLP (_fbb ,_aeea );};func _adacg (_ffega map[int ][]float64 )[]int {_bcgc :=make ([]int ,len (_ffega ));_gece :=0;for _eadb :=range _ffega {_bcgc [_gece ]=_eadb ;_gece ++;};_eb .Ints (_bcgc );return _bcgc ;};
// String returns a string describing the current state of the textState stack.
func (_beaa *stateStack )String ()string {_gafb :=[]string {_cg .Sprintf ("\u002d\u002d\u002d\u002d f\u006f\u006e\u0074\u0020\u0073\u0074\u0061\u0063\u006b\u003a\u0020\u0025\u0064",len (*_beaa ))};for _eaa ,_afbf :=range *_beaa {_abdf :="\u003c\u006e\u0069l\u003e";
if _afbf !=nil {_abdf =_afbf .String ();};_gafb =append (_gafb ,_cg .Sprintf ("\u0009\u0025\u0032\u0064\u003a\u0020\u0025\u0073",_eaa ,_abdf ));};return _cgb .Join (_gafb ,"\u000a");};
// Extractor stores and offers functionality for extracting content from PDF pages.
type Extractor struct{_bdc string ;_ed *_gcb .PdfPageResources ;_efc _gcb .PdfRectangle ;_fdd *_gcb .PdfRectangle ;_efa map[string ]fontEntry ;_bdg map[string ]textResult ;_dfb map[string ]textResult ;_dgf int64 ;_fefb int ;_bec *Options ;_ga *_ec .PdfObject ;
_bda _ec .PdfObject ;_ccd []*_gcb .PdfAnnotation ;};func _fdaab (_eefd []int )[]int {_fcdae :=make ([]int ,len (_eefd ));for _ccfb ,_bgcc :=range _eefd {_fcdae [len (_eefd )-1-_ccfb ]=_bgcc ;};return _fcdae ;};func (_ccdb *textWord )computeText ()string {_bbgff :=make ([]string ,len (_ccdb ._ebeb ));
for _caedb ,_deced :=range _ccdb ._ebeb {_bbgff [_caedb ]=_deced ._abac ;};return _cgb .Join (_bbgff ,"");};func (_addba *textPara )isAtom ()*textTable {_aface :=_addba ;_dbbca :=_addba ._dffg ;_eaab :=_addba ._fgbdg ;if _dbbca .taken ()||_eaab .taken (){return nil ;
};_eeefb :=_dbbca ._fgbdg ;if _eeefb .taken ()||_eeefb !=_eaab ._dffg {return nil ;};return _gaea (_aface ,_dbbca ,_eaab ,_eeefb );};func (_cfgd *subpath )clear (){*_cfgd =subpath {}};type imageExtractContext struct{_dbgg []ImageMark ;_bdba int ;_bab int ;
_dff int ;_acb map[*_ec .PdfObjectStream ]*cachedImage ;_dfeb *ImageExtractOptions ;_ggf bool ;};
// Len returns the number of TextMarks in `ma`.
func (_aaccf *TextMarkArray )Len ()int {if _aaccf ==nil {return 0;};return len (_aaccf ._cea );};func _bge (_eg []string ,_ff int ,_be string )int {_fee :=_ff ;for ;_fee < len (_eg );_fee ++{if _eg [_fee ]!=_be {return _fee ;};};return _fee ;};func _cd (_eba []string ,_gb int ,_af int ,_fge string ){for _ffe :=_gb ;
_ffe < _af ;_ffe ++{_eba [_ffe ]=_fge ;};};func (_ebgdf *textMark )inDiacriticArea (_agga *textMark )bool {_dcaa :=_ebgdf .Llx -_agga .Llx ;_cccc :=_ebgdf .Urx -_agga .Urx ;_ddeaf :=_ebgdf .Lly -_agga .Lly ;return _gc .Abs (_dcaa +_cccc )< _ebgdf .Width ()*_cgbc &&_gc .Abs (_ddeaf )< _ebgdf .Height ()*_cgbc ;
};
// PageFonts represents extracted fonts on a PDF page.
type PageFonts struct{Fonts []Font ;};func _abdg (_ecfg func (*wordBag ,*textWord ,float64 )bool ,_agaf float64 )func (*wordBag ,*textWord )bool {return func (_gdbb *wordBag ,_dfca *textWord )bool {return _ecfg (_gdbb ,_dfca ,_agaf )};};func (_ffbfcc gridTile )complete ()bool {return _ffbfcc .numBorders ()==4};
// NewFromContents creates a new extractor from contents and page resources.
func NewFromContents (contents string ,resources *_gcb .PdfPageResources )(*Extractor ,error ){const _ce ="\u0065x\u0074\u0072\u0061\u0063t\u006f\u0072\u002e\u004e\u0065w\u0046r\u006fm\u0043\u006f\u006e\u0074\u0065\u006e\u0074s";_gfa :=&Extractor {_bdc :contents ,_ed :resources ,_efa :map[string ]fontEntry {},_bdg :map[string ]textResult {}};
_ab .TrackUse (_ce );return _gfa ,nil ;};func _edfc (_agdc ,_ffge _gcb .PdfRectangle )_gcb .PdfRectangle {return _gcb .PdfRectangle {Llx :_gc .Min (_agdc .Llx ,_ffge .Llx ),Lly :_gc .Min (_agdc .Lly ,_ffge .Lly ),Urx :_gc .Max (_agdc .Urx ,_ffge .Urx ),Ury :_gc .Max (_agdc .Ury ,_ffge .Ury )};
};func _gedaf (_ggcc []*textLine ,_fgfb ,_fccgf float64 )[]*textLine {var _cdfda []*textLine ;for _ ,_agdf :=range _ggcc {if _fgfb ==-1{if _agdf ._aabbc > _fccgf {_cdfda =append (_cdfda ,_agdf );};}else {if _agdf ._aabbc > _fccgf &&_agdf ._aabbc < _fgfb {_cdfda =append (_cdfda ,_agdf );
};};};return _cdfda ;};func _bfbbf (_cbgf _ec .PdfObject ,_gfgee _ca .Color )(_a .Image ,error ){_abbg ,_ebeg :=_ec .GetStream (_cbgf );if !_ebeg {return nil ,nil ;};_fgbf ,_cefd :=_gcb .NewXObjectImageFromStream (_abbg );if _cefd !=nil {return nil ,_cefd ;
};_eaedg ,_cefd :=_fgbf .ToImage ();if _cefd !=nil {return nil ,_cefd ;};return _deeca (_eaedg ,_gfgee ),nil ;};const (RenderModeStroke RenderMode =1<<iota ;RenderModeFill ;RenderModeClip ;);
// String returns a description of `state`.
func (_dgce *textState )String ()string {_eebd :="\u005bN\u004f\u0054\u0020\u0053\u0045\u0054]";if _dgce ._aedfe !=nil {_eebd =_dgce ._aedfe .BaseFont ();};return _cg .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",_dgce ._gbdb ,_dgce ._bfbc ,_dgce ._eccd ,_eebd );
};func _gabb (_cddg ,_ggec float64 )bool {return _cddg /_gc .Max (_aeda ,_ggec )< _deaa };func _feg (_ggc string ,_bd bool ,_bc bool )BidiText {_fgeg :="\u006c\u0074\u0072";if _bc {_fgeg ="\u0074\u0074\u0062";}else if !_bd {_fgeg ="\u0072\u0074\u006c";
};return BidiText {_cad :_ggc ,_ccc :_fgeg };};func (_agg *wordBag )firstWord (_caga int )*textWord {return _agg ._eafg [_caga ][0]};func (_gbbe *textPara )writeCellText (_fbefc _d .Writer ){for _acc ,_edebe :=range _gbbe ._ecbe {_dffbc :=_edebe .text ();
_dfaf :=_fdda &&_edebe .endsInHyphen ()&&_acc !=len (_gbbe ._ecbe )-1;if _dfaf {_dffbc =_bded (_dffbc );};_fbefc .Write ([]byte (_dffbc ));if !(_dfaf ||_acc ==len (_gbbe ._ecbe )-1){_fbefc .Write ([]byte (_egcgd (_edebe ._aabbc ,_gbbe ._ecbe [_acc +1]._aabbc )));
};};};func (_afade paraList )xNeighbours (_eccaa float64 )map[*textPara ][]int {_aaga :=make ([]event ,2*len (_afade ));if _eccaa ==0{for _gegbac ,_gdage :=range _afade {_aaga [2*_gegbac ]=event {_gdage .Llx ,true ,_gegbac };_aaga [2*_gegbac +1]=event {_gdage .Urx ,false ,_gegbac };
};}else {for _gbbg ,_ddbe :=range _afade {_aaga [2*_gbbg ]=event {_ddbe .Llx -_eccaa *_ddbe .fontsize (),true ,_gbbg };_aaga [2*_gbbg +1]=event {_ddbe .Urx +_eccaa *_ddbe .fontsize (),false ,_gbbg };};};return _afade .eventNeighbours (_aaga );};func (_ddab *stateStack )push (_daca *textState ){_fcbd :=*_daca ;
*_ddab =append (*_ddab ,&_fcbd )};func (_ddfg *textWord )bbox ()_gcb .PdfRectangle {return _ddfg .PdfRectangle };
// ExtractFonts returns all font information from the page extractor, including
// font name, font type, the raw data of the embedded font file (if embedded), font descriptor and more.
//
// The argument `previousPageFonts` is used when trying to build a complete font catalog for multiple pages or the entire document.
// The entries from `previousPageFonts` are added to the returned result unless already included in the page, i.e. no duplicate entries.
//
// NOTE: If previousPageFonts is nil, all fonts from the page will be returned. Use it when building up a full list of fonts for a document or page range.
func (_bdaf *Extractor )ExtractFonts (previousPageFonts *PageFonts )(*PageFonts ,error ){_bde :=PageFonts {};_ddf :=_bde .extractPageResourcesToFont (_bdaf ._ed );if _ddf !=nil {return nil ,_ddf ;};if previousPageFonts !=nil {for _ ,_fec :=range previousPageFonts .Fonts {if !_agcd (_bde .Fonts ,_fec .FontName ){_bde .Fonts =append (_bde .Fonts ,_fec );
};};};return &PageFonts {Fonts :_bde .Fonts },nil ;};func (_acff paraList )computeEBBoxes (){if _bada {_cf .Log .Info ("\u0063o\u006dp\u0075\u0074\u0065\u0045\u0042\u0042\u006f\u0078\u0065\u0073\u003a");};for _ ,_egbad :=range _acff {_egbad ._febg =_egbad .PdfRectangle ;
};_adcef :=_acff .yNeighbours (0);for _bdbb ,_ddceg :=range _acff {_eagc :=_ddceg ._febg ;_fcgg ,_afdc :=-1.0e9,+1.0e9;for _ ,_cadfc :=range _adcef [_ddceg ]{_dggce :=_acff [_cadfc ]._febg ;if _dggce .Urx < _eagc .Llx {_fcgg =_gc .Max (_fcgg ,_dggce .Urx );
}else if _eagc .Urx < _dggce .Llx {_afdc =_gc .Min (_afdc ,_dggce .Llx );};};for _eafc ,_afef :=range _acff {_fgca :=_afef ._febg ;if _bdbb ==_eafc ||_fgca .Ury > _eagc .Lly {continue ;};if _fcgg <=_fgca .Llx &&_fgca .Llx < _eagc .Llx {_eagc .Llx =_fgca .Llx ;
}else if _fgca .Urx <=_afdc &&_eagc .Urx < _fgca .Urx {_eagc .Urx =_fgca .Urx ;};};if _bada {_cg .Printf ("\u0025\u0034\u0064\u003a %\u0036\u002e\u0032\u0066\u2192\u0025\u0036\u002e\u0032\u0066\u0020\u0025\u0071\u000a",_bdbb ,_ddceg ._febg ,_eagc ,_beaaf (_ddceg .text (),50));
};_ddceg ._febg =_eagc ;};if _fdbc {for _ ,_dega :=range _acff {_dega .PdfRectangle =_dega ._febg ;};};};func _cfdc (_fcgc *paraList )map[int ][]*textLine {_daadb :=map[int ][]*textLine {};for _ ,_dcada :=range *_fcgc {for _ ,_ggaf :=range _dcada ._ecbe {if !_fcbe (_ggaf ){_cf .Log .Debug ("g\u0072\u006f\u0075p\u004c\u0069\u006e\u0065\u0073\u003a\u0020\u0054\u0068\u0065\u0020\u0074\u0065\u0078\u0074\u0020\u006c\u0069\u006e\u0065\u0020\u0063\u006f\u006e\u0074a\u0069\u006e\u0073 \u006d\u006f\u0072\u0065\u0020\u0074\u0068\u0061\u006e\u0020\u006f\u006e\u0065 \u006d\u0063\u0069\u0064 \u006e\u0075\u006d\u0062e\u0072\u002e\u0020\u0049\u0074\u0020\u0073\u0068\u006f\u0075\u006c\u0064\u0020\u0062\u0065\u0020\u0073p\u006c\u0069\u0074\u002e");
continue ;};_ecgae :=_ggaf ._gaef [0]._ebeb [0]._faggb ;_daadb [_ecgae ]=append (_daadb [_ecgae ],_ggaf );};if _dcada ._gegf !=nil {_gcgc :=_dcada ._gegf ._cfcac ;for _ ,_dgbd :=range _gcgc {for _ ,_afcag :=range _dgbd ._ecbe {if !_fcbe (_afcag ){_cf .Log .Debug ("g\u0072\u006f\u0075p\u004c\u0069\u006e\u0065\u0073\u003a\u0020\u0054\u0068\u0065\u0020\u0074\u0065\u0078\u0074\u0020\u006c\u0069\u006e\u0065\u0020\u0063\u006f\u006e\u0074a\u0069\u006e\u0073 \u006d\u006f\u0072\u0065\u0020\u0074\u0068\u0061\u006e\u0020\u006f\u006e\u0065 \u006d\u0063\u0069\u0064 \u006e\u0075\u006d\u0062e\u0072\u002e\u0020\u0049\u0074\u0020\u0073\u0068\u006f\u0075\u006c\u0064\u0020\u0062\u0065\u0020\u0073p\u006c\u0069\u0074\u002e");
continue ;};_fedae :=_afcag ._gaef [0]._ebeb [0]._faggb ;_daadb [_fedae ]=append (_daadb [_fedae ],_afcag );};};};};return _daadb ;};func _bcdf (_gbcc *textLine ,_dcgb []*textLine ,_fgefc []float64 )float64 {var _egac float64 =-1;for _ ,_fcda :=range _dcgb {if _fcda ._aabbc > _gbcc ._aabbc {if _gc .Round (_fcda .Llx )>=_gc .Round (_gbcc .Llx ){_egac =_fcda ._aabbc ;
}else {break ;};};};return _egac ;};func _abdce (_fbaec map[int ]intSet )[]int {_ggcbe :=make ([]int ,0,len (_fbaec ));for _dada :=range _fbaec {_ggcbe =append (_ggcbe ,_dada );};_eb .Ints (_ggcbe );return _ggcbe ;};func (_fcgab rulingList )snapToGroupsDirection ()rulingList {_fcgab .sortStrict ();
_bggfa :=make (map[*ruling ]rulingList ,len (_fcgab ));_edccg :=_fcgab [0];_ebcdd :=func (_faff *ruling ){_edccg =_faff ;_bggfa [_edccg ]=rulingList {_faff }};_ebcdd (_fcgab [0]);for _ ,_agbab :=range _fcgab [1:]{if _agbab ._ccgff < _edccg ._ccgff -_gaeg {_cf .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",_edccg ,_agbab );
};if _agbab ._ccgff > _edccg ._ccgff +_fcd {_ebcdd (_agbab );}else {_bggfa [_edccg ]=append (_bggfa [_edccg ],_agbab );};};_egcbf :=make (map[*ruling ]float64 ,len (_bggfa ));_feaeb :=make (map[*ruling ]*ruling ,len (_fcgab ));for _eaba ,_dedgb :=range _bggfa {_egcbf [_eaba ]=_dedgb .mergePrimary ();
for _ ,_acdf :=range _dedgb {_feaeb [_acdf ]=_eaba ;};};for _ ,_dbbge :=range _fcgab {_dbbge ._ccgff =_egcbf [_feaeb [_dbbge ]];};_egadc :=make (rulingList ,0,len (_fcgab ));for _ ,_beca :=range _bggfa {_cbggb :=_beca .splitSec ();for _ccaa ,_cbbfc :=range _cbggb {_fabf :=_cbbfc .merge ();
if len (_egadc )> 0{_dgba :=_egadc [len (_egadc )-1];if _dgba .alignsPrimary (_fabf )&&_dgba .alignsSec (_fabf ){_cf .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",_ccaa ,_dgba ,_fabf );
continue ;};};_egadc =append (_egadc ,_fabf );};};_egadc .sortStrict ();return _egadc ;};func _bcbb (_fedb []*textLine ,_dfdfb map[float64 ][]*textLine ,_aggg []float64 ,_gbcg int ,_gbcaf ,_gbcdf float64 )[]*list {_abdfe :=[]*list {};_dbecc :=_gbcg ;_gbcg =_gbcg +1;
_gdgf :=_aggg [_dbecc ];_fddc :=_dfdfb [_gdgf ];_ebda :=_gedaf (_fddc ,_gbcdf ,_gbcaf );for _aedc ,_ebga :=range _ebda {var _efdc float64 ;_eegb :=[]*list {};_fccf :=_ebga ._aabbc ;_ddba :=_gbcdf ;if _aedc < len (_ebda )-1{_ddba =_ebda [_aedc +1]._aabbc ;
};if _gbcg < len (_aggg ){_eegb =_bcbb (_fedb ,_dfdfb ,_aggg ,_gbcg ,_fccf ,_ddba );};_efdc =_ddba ;if len (_eegb )> 0{_cded :=_eegb [0];if len (_cded ._gcac )> 0{_efdc =_cded ._gcac [0]._aabbc ;};};_fbaa :=[]*textLine {_ebga };_edcf :=_becgf (_ebga ,_fedb ,_aggg ,_fccf ,_efdc );
_fbaa =append (_fbaa ,_edcf ...);_gccg :=_fgff (_fbaa ,"\u0062\u0075\u006c\u006c\u0065\u0074",_eegb );_gccg ._daafgc =_eade (_fbaa ,"");_abdfe =append (_abdfe ,_gccg );};return _abdfe ;};func _agcd (_bcaf []Font ,_ae string )bool {for _ ,_abg :=range _bcaf {if _abg .FontName ==_ae {return true ;
};};return false ;};func _gbdda (_gdbc ,_bgdb _gcb .PdfRectangle )bool {return _bgdb .Llx <=_gdbc .Urx &&_gdbc .Llx <=_bgdb .Urx ;};func (_bagb paraList )llyOrdering ()[]int {_gagdg :=make ([]int ,len (_bagb ));for _fcgcg :=range _bagb {_gagdg [_fcgcg ]=_fcgcg ;
};_eb .SliceStable (_gagdg ,func (_ecfd ,_fade int )bool {_bcdc ,_cfdg :=_gagdg [_ecfd ],_gagdg [_fade ];return _bagb [_bcdc ].Lly < _bagb [_cfdg ].Lly ;});return _gagdg ;};func (_cecb rectRuling )checkWidth (_aagec ,_eeefa float64 )(float64 ,bool ){_eaff :=_eeefa -_aagec ;
_eadeg :=_eaff <=_fcd ;return _eaff ,_eadeg ;};func (_egfe paraList )list ()[]*list {var _bcgdf []*textLine ;var _gacde []*textLine ;for _ ,_febc :=range _egfe {_bbeb :=_febc .getListLines ();_bcgdf =append (_bcgdf ,_bbeb ...);_gacde =append (_gacde ,_febc ._ecbe ...);
};_eggeg :=_bgeed (_bcgdf );_gbce :=_bgdgc (_gacde ,_eggeg );return _gbce ;};type textWord struct{_gcb .PdfRectangle ;_aada float64 ;_cfafbd string ;_ebeb []*textMark ;_ffcg float64 ;_afeg bool ;};func _egfc (_fabc ,_dafb bounded )float64 {_eggef :=_decg (_fabc ,_dafb );
if !_eage (_eggef ){return _eggef ;};return _bbac (_fabc ,_dafb );};func _dg (_ad int )bool {return (_ad &1)!=0};func (_cadaf rectRuling )asRuling ()(*ruling ,bool ){_ebgc :=ruling {_cfgc :_cadaf ._cefe ,Color :_cadaf .Color ,_baea :_agedg };switch _cadaf ._cefe {case _gcaf :_ebgc ._ccgff =0.5*(_cadaf .Llx +_cadaf .Urx );
_ebgc ._bggg =_cadaf .Lly ;_ebgc ._dfadf =_cadaf .Ury ;_ggcfc ,_gecg :=_cadaf .checkWidth (_cadaf .Llx ,_cadaf .Urx );if !_gecg {if _faac {_cf .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",_cadaf );
};return nil ,false ;};_ebgc ._fegdc =_ggcfc ;case _effb :_ebgc ._ccgff =0.5*(_cadaf .Lly +_cadaf .Ury );_ebgc ._bggg =_cadaf .Llx ;_ebgc ._dfadf =_cadaf .Urx ;_gbde ,_eafdb :=_cadaf .checkWidth (_cadaf .Lly ,_cadaf .Ury );if !_eafdb {if _faac {_cf .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",_cadaf );
};return nil ,false ;};_ebgc ._fegdc =_gbde ;default:_cf .Log .Error ("\u0062\u0061\u0064\u0020pr\u0069\u006d\u0061\u0072\u0079\u0020\u006b\u0069\u006e\u0064\u003d\u0025\u0064",_cadaf ._cefe );return nil ,false ;};return &_ebgc ,true ;};func (_egd *textObject )setTextRise (_ebd float64 ){if _egd ==nil {return ;
};_egd ._cgge ._cgg =_ebd ;};func (_fbebf intSet )has (_aeadc int )bool {_ ,_dfadb :=_fbebf [_aeadc ];return _dfadb };func _caac (_aeaa ,_bdbg *textPara )bool {return _gbdda (_aeaa ._febg ,_bdbg ._febg )};
// TextMarkArray is a collection of TextMarks.
type TextMarkArray struct{_cea []TextMark };func (_dcfe *wordBag )depthIndexes ()[]int {if len (_dcfe ._eafg )==0{return nil ;};_ffcea :=make ([]int ,len (_dcfe ._eafg ));_beec :=0;for _abdc :=range _dcfe ._eafg {_ffcea [_beec ]=_abdc ;_beec ++;};_eb .Ints (_ffcea );
return _ffcea ;};func (_edg paraList )writeText (_deefd _d .Writer ){for _acaf ,_badg :=range _edg {if _badg ._fbfg {continue ;};_badg .writeText (_deefd );if _acaf !=len (_edg )-1{if _ggaa (_badg ,_edg [_acaf +1]){_deefd .Write ([]byte ("\u0020"));}else {_deefd .Write ([]byte ("\u000a"));
_deefd .Write ([]byte ("\u000a"));};};};_deefd .Write ([]byte ("\u000a"));_deefd .Write ([]byte ("\u000a"));};func (_badbg *subpath )makeRectRuling (_abfc _ca .Color )(*ruling ,bool ){if _faac {_cf .Log .Info ("\u006d\u0061\u006beR\u0065\u0063\u0074\u0052\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0070\u0061\u0074\u0068\u003d\u0025\u0076",_badbg );
};_dcgeaa :=_badbg ._gfee [:4];_adga :=make (map[int ]rulingKind ,len (_dcgeaa ));for _fdgg ,_afdg :=range _dcgeaa {_bbdaf :=_badbg ._gfee [(_fdgg +1)%4];_adga [_fdgg ]=_ebgaf (_afdg ,_bbdaf );if _faac {_cg .Printf ("\u0025\u0034\u0064: \u0025\u0073\u0020\u003d\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u002d\u0020\u0025\u0036\u002e\u0032\u0066",_fdgg ,_adga [_fdgg ],_afdg ,_bbdaf );
};};if _faac {_cg .Printf ("\u0020\u0020\u0020\u006b\u0069\u006e\u0064\u0073\u003d\u0025\u002b\u0076\u000a",_adga );};var _cdabe ,_bffgf []int ;for _ffceb ,_agff :=range _adga {switch _agff {case _effb :_bffgf =append (_bffgf ,_ffceb );case _gcaf :_cdabe =append (_cdabe ,_ffceb );
};};if _faac {_cg .Printf ("\u0020\u0020 \u0068\u006f\u0072z\u0073\u003d\u0025\u0064\u0020\u0025\u002b\u0076\u000a",len (_bffgf ),_bffgf );_cg .Printf ("\u0020\u0020 \u0076\u0065\u0072t\u0073\u003d\u0025\u0064\u0020\u0025\u002b\u0076\u000a",len (_cdabe ),_cdabe );
};_fbbeg :=(len (_bffgf )==2&&len (_cdabe )==2)||(len (_bffgf )==2&&len (_cdabe )==0&&_adgg (_dcgeaa [_bffgf [0]],_dcgeaa [_bffgf [1]]))||(len (_cdabe )==2&&len (_bffgf )==0&&_eddff (_dcgeaa [_cdabe [0]],_dcgeaa [_cdabe [1]]));if _faac {_cg .Printf (" \u0020\u0020\u0068\u006f\u0072\u007as\u003d\u0025\u0064\u0020\u0076\u0065\u0072\u0074\u0073=\u0025\u0064\u0020o\u006b=\u0025\u0074\u000a",len (_bffgf ),len (_cdabe ),_fbbeg );
};if !_fbbeg {if _faac {_cf .Log .Error ("\u0021!\u006d\u0061\u006b\u0065R\u0065\u0063\u0074\u0052\u0075l\u0069n\u0067:\u0020\u0070\u0061\u0074\u0068\u003d\u0025v",_badbg );_cg .Printf (" \u0020\u0020\u0068\u006f\u0072\u007as\u003d\u0025\u0064\u0020\u0076\u0065\u0072\u0074\u0073=\u0025\u0064\u0020o\u006b=\u0025\u0074\u000a",len (_bffgf ),len (_cdabe ),_fbbeg );
};return &ruling {},false ;};if len (_cdabe )==0{for _gbae ,_acdddd :=range _adga {if _acdddd !=_effb {_cdabe =append (_cdabe ,_gbae );};};};if len (_bffgf )==0{for _bcge ,_fgcd :=range _adga {if _fgcd !=_gcaf {_bffgf =append (_bffgf ,_bcge );};};};if _faac {_cf .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 (_bffgf ),len (_cdabe ),len (_dcgeaa ),_bffgf ,_cdabe ,_dcgeaa );
};var _adaf ,_gcff ,_efcad ,_efff _b .Point ;if _dcgeaa [_bffgf [0]].Y > _dcgeaa [_bffgf [1]].Y {_efcad ,_efff =_dcgeaa [_bffgf [0]],_dcgeaa [_bffgf [1]];}else {_efcad ,_efff =_dcgeaa [_bffgf [1]],_dcgeaa [_bffgf [0]];};if _dcgeaa [_cdabe [0]].X > _dcgeaa [_cdabe [1]].X {_adaf ,_gcff =_dcgeaa [_cdabe [0]],_dcgeaa [_cdabe [1]];
}else {_adaf ,_gcff =_dcgeaa [_cdabe [1]],_dcgeaa [_cdabe [0]];};_ccgg :=_gcb .PdfRectangle {Llx :_adaf .X ,Urx :_gcff .X ,Lly :_efff .Y ,Ury :_efcad .Y };if _ccgg .Llx > _ccgg .Urx {_ccgg .Llx ,_ccgg .Urx =_ccgg .Urx ,_ccgg .Llx ;};if _ccgg .Lly > _ccgg .Ury {_ccgg .Lly ,_ccgg .Ury =_ccgg .Ury ,_ccgg .Lly ;
};_dceg :=rectRuling {PdfRectangle :_ccgg ,_cefe :_gdaag (_ccgg ),Color :_abfc };if _dceg ._cefe ==_dbgc {if _faac {_cf .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 ;};_bffa ,_egfa :=_dceg .asRuling ();if !_egfa {if _faac {_cf .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 _cgcb {_cg .Printf ("\u0020\u0020\u0020\u0072\u003d\u0025\u0073\u000a",_bffa .String ());
};return _bffa ,true ;};
// Tables returns the tables extracted from the page.
func (_fgf PageText )Tables ()[]TextTable {if _dcdb {_cf .Log .Info ("\u0054\u0061\u0062\u006c\u0065\u0073\u003a\u0020\u0025\u0064",len (_fgf ._egadg ));};return _fgf ._egadg ;};func (_acd *shapesState )addPoint (_cagd ,_gbb float64 ){_egda :=_acd .establishSubpath ();
_ebacc :=_acd .devicePoint (_cagd ,_gbb );if _egda ==nil {_acd ._agcg =true ;_acd ._dfa =_ebacc ;}else {_egda .add (_ebacc );};};func (_gcdac paraList )addNeighbours (){_gcgbd :=func (_faggg []int ,_adcdc *textPara )([]*textPara ,[]*textPara ){_ebgb :=make ([]*textPara ,0,len (_faggg )-1);
_caace :=make ([]*textPara ,0,len (_faggg )-1);for _ ,_edeg :=range _faggg {_gaed :=_gcdac [_edeg ];if _gaed .Urx <=_adcdc .Llx {_ebgb =append (_ebgb ,_gaed );}else if _gaed .Llx >=_adcdc .Urx {_caace =append (_caace ,_gaed );};};return _ebgb ,_caace ;
};_gffa :=func (_cdbec []int ,_efaegc *textPara )([]*textPara ,[]*textPara ){_abcg :=make ([]*textPara ,0,len (_cdbec )-1);_gaagc :=make ([]*textPara ,0,len (_cdbec )-1);for _ ,_dbbe :=range _cdbec {_dbgcc :=_gcdac [_dbbe ];if _dbgcc .Ury <=_efaegc .Lly {_gaagc =append (_gaagc ,_dbgcc );
}else if _dbgcc .Lly >=_efaegc .Ury {_abcg =append (_abcg ,_dbgcc );};};return _abcg ,_gaagc ;};_gecee :=_gcdac .yNeighbours (_cfgf );for _ ,_bddae :=range _gcdac {_ddggc :=_gecee [_bddae ];if len (_ddggc )==0{continue ;};_gabg ,_ebeac :=_gcgbd (_ddggc ,_bddae );
if len (_gabg )==0&&len (_ebeac )==0{continue ;};if len (_gabg )> 0{_abgca :=_gabg [0];for _ ,_gbfd :=range _gabg [1:]{if _gbfd .Urx >=_abgca .Urx {_abgca =_gbfd ;};};for _ ,_gbaf :=range _gabg {if _gbaf !=_abgca &&_gbaf .Urx > _abgca .Llx {_abgca =nil ;
break ;};};if _abgca !=nil &&_ffbc (_bddae .PdfRectangle ,_abgca .PdfRectangle ){_bddae ._fagc =_abgca ;};};if len (_ebeac )> 0{_fafc :=_ebeac [0];for _ ,_ecde :=range _ebeac [1:]{if _ecde .Llx <=_fafc .Llx {_fafc =_ecde ;};};for _ ,_fggag :=range _ebeac {if _fggag !=_fafc &&_fggag .Llx < _fafc .Urx {_fafc =nil ;
break ;};};if _fafc !=nil &&_ffbc (_bddae .PdfRectangle ,_fafc .PdfRectangle ){_bddae ._dffg =_fafc ;};};};_gecee =_gcdac .xNeighbours (_dfbe );for _ ,_dcda :=range _gcdac {_cggge :=_gecee [_dcda ];if len (_cggge )==0{continue ;};_aacd ,_egbce :=_gffa (_cggge ,_dcda );
if len (_aacd )==0&&len (_egbce )==0{continue ;};if len (_egbce )> 0{_ceaa :=_egbce [0];for _ ,_defc :=range _egbce [1:]{if _defc .Ury >=_ceaa .Ury {_ceaa =_defc ;};};for _ ,_egbbc :=range _egbce {if _egbbc !=_ceaa &&_egbbc .Ury > _ceaa .Lly {_ceaa =nil ;
break ;};};if _ceaa !=nil &&_gbdda (_dcda .PdfRectangle ,_ceaa .PdfRectangle ){_dcda ._fgbdg =_ceaa ;};};if len (_aacd )> 0{_affed :=_aacd [0];for _ ,_fbcfb :=range _aacd [1:]{if _fbcfb .Lly <=_affed .Lly {_affed =_fbcfb ;};};for _ ,_bddf :=range _aacd {if _bddf !=_affed &&_bddf .Lly < _affed .Ury {_affed =nil ;
break ;};};if _affed !=nil &&_gbdda (_dcda .PdfRectangle ,_affed .PdfRectangle ){_dcda ._cgaa =_affed ;};};};for _ ,_ebge :=range _gcdac {if _ebge ._fagc !=nil &&_ebge ._fagc ._dffg !=_ebge {_ebge ._fagc =nil ;};if _ebge ._cgaa !=nil &&_ebge ._cgaa ._fgbdg !=_ebge {_ebge ._cgaa =nil ;
};if _ebge ._dffg !=nil &&_ebge ._dffg ._fagc !=_ebge {_ebge ._dffg =nil ;};if _ebge ._fgbdg !=nil &&_ebge ._fgbdg ._cgaa !=_ebge {_ebge ._fgbdg =nil ;};};};
// String returns a description of `k`.
func (_fcaf rulingKind )String ()string {_edafd ,_ddbg :=_bdda [_fcaf ];if !_ddbg {return _cg .Sprintf ("\u004e\u006ft\u0020\u0061\u0020r\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0025\u0064",_fcaf );};return _edafd ;};func (_gaae rulingList )mergePrimary ()float64 {_ebcf :=_gaae [0]._ccgff ;
for _ ,_febe :=range _gaae [1:]{_ebcf +=_febe ._ccgff ;};return _ebcf /float64 (len (_gaae ));};
// TableCell is a cell in a TextTable.
type TableCell struct{_gcb .PdfRectangle ;
// Text is the extracted text.
Text string ;
// Marks returns the TextMarks corresponding to the text in Text.
Marks TextMarkArray ;};func (_cfbd gridTiling )log (_gddg string ){if !_fbfd {return ;};_cf .Log .Info ("\u0074i\u006ci\u006e\u0067\u003a\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0071",len (_cfbd ._bcfdd ),len (_cfbd ._gdggf ),_gddg );_cg .Printf ("\u0020\u0020\u0020l\u006c\u0078\u003d\u0025\u002e\u0032\u0066\u000a",_cfbd ._bcfdd );
_cg .Printf ("\u0020\u0020\u0020l\u006c\u0079\u003d\u0025\u002e\u0032\u0066\u000a",_cfbd ._gdggf );for _dccg ,_babab :=range _cfbd ._gdggf {_ceebe ,_edbf :=_cfbd ._caeg [_babab ];if !_edbf {continue ;};_cg .Printf ("%\u0034\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u000a",_dccg ,_babab );
for _ecac ,_fbfa :=range _cfbd ._bcfdd {_dfgc ,_bbgg :=_ceebe [_fbfa ];if !_bbgg {continue ;};_cg .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_ecac ,_dfgc .String ());};};};func (_ffec *textPara )depth ()float64 {if _ffec ._fbfg {return -1.0;
};if len (_ffec ._ecbe )> 0{return _ffec ._ecbe [0]._aabbc ;};return _ffec ._gegf .depth ();};type structElement struct{_fbbed string ;_gbee []structElement ;_daaa int64 ;_ffcc _ec .PdfObject ;};func _ecaef (_ecbfa int ,_acgc map[int ][]float64 )([]int ,int ){_babge :=make ([]int ,_ecbfa );
_ebecf :=0;for _beac :=0;_beac < _ecbfa ;_beac ++{_babge [_beac ]=_ebecf ;_ebecf +=len (_acgc [_beac ])+1;};return _babge ,_ebecf ;};func _eddff (_dbef ,_affeb _b .Point )bool {_cdedd :=_gc .Abs (_dbef .X -_affeb .X );_ebdca :=_gc .Abs (_dbef .Y -_affeb .Y );
return _gabb (_cdedd ,_ebdca );};func (_acge paraList )readBefore (_bcgf []int ,_gdgab ,_gdafa int )bool {_ecgca ,_ecbbd :=_acge [_gdgab ],_acge [_gdafa ];if _caac (_ecgca ,_ecbbd )&&_ecgca .Lly > _ecbbd .Lly {return true ;};if !(_ecgca ._febg .Urx < _ecbbd ._febg .Llx ){return false ;
};_ecef ,_bfgd :=_ecgca .Lly ,_ecbbd .Lly ;if _ecef > _bfgd {_bfgd ,_ecef =_ecef ,_bfgd ;};_ffceg :=_gc .Max (_ecgca ._febg .Llx ,_ecbbd ._febg .Llx );_baba :=_gc .Min (_ecgca ._febg .Urx ,_ecbbd ._febg .Urx );_bbea :=_acge .llyRange (_bcgf ,_ecef ,_bfgd );
for _ ,_cegcc :=range _bbea {if _cegcc ==_gdgab ||_cegcc ==_gdafa {continue ;};_ccfe :=_acge [_cegcc ];if _ccfe ._febg .Llx <=_baba &&_ffceg <=_ccfe ._febg .Urx {return false ;};};return true ;};func _eeefg (_deecf ,_cccd _b .Point )bool {return _deecf .X ==_cccd .X &&_deecf .Y ==_cccd .Y };
func _gbac (_debef ,_gcab ,_egffe float64 )rulingKind {if _debef >=_egffe &&_gabb (_gcab ,_debef ){return _effb ;};if _gcab >=_egffe &&_gabb (_debef ,_gcab ){return _gcaf ;};return _dbgc ;};func (_eefg lineRuling )yMean ()float64 {return 0.5*(_eefg ._efgf .Y +_eefg ._afdd .Y )};
func _cagdb (_gdag []*textLine ){_eb .Slice (_gdag ,func (_caddf ,_cgfd int )bool {_afgdc ,_ecaff :=_gdag [_caddf ],_gdag [_cgfd ];return _afgdc ._aabbc < _ecaff ._aabbc ;});};func _fcgd (_faeg float64 )float64 {return _ggfda *_gc .Round (_faeg /_ggfda )};
func _deaad (_bgceb []*textWord ,_edece *textWord )[]*textWord {for _ebeaca ,_dbgd :=range _bgceb {if _dbgd ==_edece {return _fadgf (_bgceb ,_ebeaca );};};_cf .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",_edece );
return nil ;};func _cbgdc (_cffa _gcb .PdfRectangle )*ruling {return &ruling {_cfgc :_gcaf ,_ccgff :_cffa .Urx ,_bggg :_cffa .Lly ,_dfadf :_cffa .Ury };};func _adef (_ceeb *wordBag ,_afcg *textWord ,_deb float64 )bool {return _afcg .Llx < _ceeb .Urx +_deb &&_ceeb .Llx -_deb < _afcg .Urx ;
};
// String returns a description of `b`.
func (_ebcbg *wordBag )String ()string {var _aaed []string ;for _ ,_bdfc :=range _ebcbg .depthIndexes (){_fcac :=_ebcbg ._eafg [_bdfc ];for _ ,_gae :=range _fcac {_aaed =append (_aaed ,_gae ._cfafbd );};};return _cg .Sprintf ("\u0025.\u0032\u0066\u0020\u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065=\u0025\u002e\u0032\u0066\u0020\u0025\u0064\u0020\u0025\u0071",_ebcbg .PdfRectangle ,_ebcbg ._cgaeg ,len (_aaed ),_aaed );
};func (_acaa paraList )reorder (_eaefb []int ){_abcea :=make (paraList ,len (_acaa ));for _edfa ,_fddae :=range _eaefb {_abcea [_edfa ]=_acaa [_fddae ];};copy (_acaa ,_abcea );};
// NewWithOptions an Extractor instance for extracting content from the input PDF page with options.
func NewWithOptions (page *_gcb .PdfPage ,options *Options )(*Extractor ,error ){const _ffc ="\u0065x\u0074\u0072\u0061\u0063\u0074\u006f\u0072\u002e\u004e\u0065\u0077W\u0069\u0074\u0068\u004f\u0070\u0074\u0069\u006f\u006e\u0073";_cff ,_cga :=page .GetAllContentStreams ();
if _cga !=nil {return nil ,_cga ;};_dbc ,_fgg :=page .GetStructTreeRoot ();if !_fgg {_cf .Log .Debug ("T\u0068\u0065\u0020\u0070\u0064\u0066\u0020\u0064\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0074\u0061\u0067g\u0065d\u002e\u0020\u0053\u0074r\u0075\u0063t\u0054\u0072\u0065\u0065\u0052\u006f\u006f\u0074\u0020\u0064\u006f\u0065\u0073\u006e\u0027\u0074\u0020\u0065\u0078\u0069\u0073\u0074\u002e");
};_cde :=page .GetContainingPdfObject ();_cgae ,_cga :=page .GetMediaBox ();if _cga !=nil {return nil ,_cg .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",_cga );
};_bdb :=&Extractor {_bdc :_cff ,_ed :page .Resources ,_efc :*_cgae ,_fdd :page .CropBox ,_efa :map[string ]fontEntry {},_bdg :map[string ]textResult {},_dfb :map[string ]textResult {},_bec :options ,_ga :_dbc ,_bda :_cde };if _bdb ._efc .Llx > _bdb ._efc .Urx {_cf .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",_bdb ._efc );
_bdb ._efc .Llx ,_bdb ._efc .Urx =_bdb ._efc .Urx ,_bdb ._efc .Llx ;};if _bdb ._efc .Lly > _bdb ._efc .Ury {_cf .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",_bdb ._efc );
_bdb ._efc .Lly ,_bdb ._efc .Ury =_bdb ._efc .Ury ,_bdb ._efc .Lly ;};if _bdb ._bec !=nil {if _bdb ._bec .IncludeAnnotations {_bdb ._ccd ,_cga =page .GetAnnotations ();if _cga !=nil {_cf .Log .Debug ("\u0045\u0072r\u006f\u0072\u0020\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0061\u006e\u006e\u006f\u0074\u0061\u0074\u0069\u006f\u006e\u0073: \u0025\u0076",_cga );
};};};_ab .TrackUse (_ffc );return _bdb ,nil ;};func (_eabe *textPara )toTextMarks (_fcfcb *int )[]TextMark {if _eabe ._gegf ==nil {return _eabe .toCellTextMarks (_fcfcb );};var _ccab []TextMark ;for _gbba :=0;_gbba < _eabe ._gegf ._edaga ;_gbba ++{for _cedfb :=0;
_cedfb < _eabe ._gegf ._abeef ;_cedfb ++{_acag :=_eabe ._gegf .get (_cedfb ,_gbba );if _acag ==nil {_ccab =_cecfe (_ccab ,_fcfcb ,"\u0009");}else {_cbcd :=_acag .toCellTextMarks (_fcfcb );_ccab =append (_ccab ,_cbcd ...);};_ccab =_cecfe (_ccab ,_fcfcb ,"\u0020");
};if _gbba < _eabe ._gegf ._edaga -1{_ccab =_cecfe (_ccab ,_fcfcb ,"\u000a");};};_fgfbd :=_eabe ._gegf ;if _fgfbd .isExportable (){_gcaa :=_fgfbd .toTextTable ();_ccab =_fgdfb (_ccab ,&_gcaa );};return _ccab ;};func (_gfeac *shapesState )drawRectangle (_gegc ,_dca ,_fab ,_adcd float64 ){if _efda {_gbdd :=_gfeac .devicePoint (_gegc ,_dca );
_gag :=_gfeac .devicePoint (_gegc +_fab ,_dca +_adcd );_fgbd :=_gcb .PdfRectangle {Llx :_gbdd .X ,Lly :_gbdd .Y ,Urx :_gag .X ,Ury :_gag .Y };_cf .Log .Info ("d\u0072a\u0077\u0052\u0065\u0063\u0074\u0061\u006e\u0067l\u0065\u003a\u0020\u00256.\u0032\u0066",_fgbd );
};_gfeac .newSubPath ();_gfeac .moveTo (_gegc ,_dca );_gfeac .lineTo (_gegc +_fab ,_dca );_gfeac .lineTo (_gegc +_fab ,_dca +_adcd );_gfeac .lineTo (_gegc ,_dca +_adcd );_gfeac .closePath ();};func (_gadc rulingList )toGrids ()[]rulingList {if _cgcb {_cf .Log .Info ("t\u006f\u0047\u0072\u0069\u0064\u0073\u003a\u0020\u0025\u0073",_gadc );
};_abec :=_gadc .intersections ();if _cgcb {_cf .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 (_gadc ),len (_abec ));
for _ ,_ddbbc :=range _abdce (_abec ){_cg .Printf ("\u00254\u0064\u003a\u0020\u0025\u002b\u0076\n",_ddbbc ,_abec [_ddbbc ]);};};_aggf :=make (map[int ]intSet ,len (_gadc ));for _aaca :=range _gadc {_fabd :=_gadc .connections (_abec ,_aaca );if len (_fabd )> 0{_aggf [_aaca ]=_fabd ;
};};if _cgcb {_cf .Log .Info ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u0063\u006fn\u006e\u0065\u0063\u0074s=\u0025\u0064",len (_aggf ));for _ ,_bdbad :=range _abdce (_aggf ){_cg .Printf ("\u00254\u0064\u003a\u0020\u0025\u002b\u0076\n",_bdbad ,_aggf [_bdbad ]);
};};_cfge :=_fabe (len (_gadc ),func (_bcda ,_dggfa int )bool {_deeb ,_dcdce :=len (_aggf [_bcda ]),len (_aggf [_dggfa ]);if _deeb !=_dcdce {return _deeb > _dcdce ;};return _gadc .comp (_bcda ,_dggfa );});if _cgcb {_cf .Log .Info ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u006f\u0072d\u0065\u0072\u0069\u006eg=\u0025\u0076",_cfge );
};_bdgb :=[][]int {{_cfge [0]}};_fcefd :for _ ,_beaed :=range _cfge [1:]{for _egdbcg ,_egdbca :=range _bdgb {for _ ,_eacdc :=range _egdbca {if _aggf [_eacdc ].has (_beaed ){_bdgb [_egdbcg ]=append (_egdbca ,_beaed );continue _fcefd ;};};};_bdgb =append (_bdgb ,[]int {_beaed });
};if _cgcb {_cf .Log .Info ("\u0074o\u0047r\u0069\u0064\u0073\u003a\u0020i\u0067\u0072i\u0064\u0073\u003d\u0025\u0076",_bdgb );};_eb .SliceStable (_bdgb ,func (_bagfd ,_gefd int )bool {return len (_bdgb [_bagfd ])> len (_bdgb [_gefd ])});for _ ,_dcaf :=range _bdgb {_eb .Slice (_dcaf ,func (_eafae ,_ecaac int )bool {return _gadc .comp (_dcaf [_eafae ],_dcaf [_ecaac ])});
};_facd :=make ([]rulingList ,len (_bdgb ));for _bcbd ,_aafcd :=range _bdgb {_geegf :=make (rulingList ,len (_aafcd ));for _cfdd ,_ecafg :=range _aafcd {_geegf [_cfdd ]=_gadc [_ecafg ];};_facd [_bcbd ]=_geegf ;};if _cgcb {_cf .Log .Info ("\u0074o\u0047r\u0069\u0064\u0073\u003a\u0020g\u0072\u0069d\u0073\u003d\u0025\u002b\u0076",_facd );
};var _cfbgg []rulingList ;for _ ,_gcdd :=range _facd {if _ccggf ,_cadad :=_gcdd .isActualGrid ();_cadad {_gcdd =_ccggf ;_gcdd =_gcdd .snapToGroups ();_cfbgg =append (_cfbgg ,_gcdd );};};if _cgcb {_aecff ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u0061\u0063t\u0075\u0061\u006c\u0047ri\u0064\u0073",_cfbgg );
_cf .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 (_facd ),len (_cfbgg ));};return _cfbgg ;};func (_gddc *textTable )emptyCompositeColumn (_cdbdb int )bool {for _fcgef :=0;
_fcgef < _gddc ._edaga ;_fcgef ++{if _bbbfd ,_baaad :=_gddc ._agda [_fgfde (_cdbdb ,_fcgef )];_baaad {if len (_bbbfd .paraList )> 0{return false ;};};};return true ;};func (_ddbd rulingList )asTiling ()gridTiling {if _fbfd {_cf .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 (_ddbd ));
};for _deff ,_gfcee :=range _ddbd [1:]{_fbffg :=_ddbd [_deff ];if _fbffg .alignsPrimary (_gfcee )&&_fbffg .alignsSec (_gfcee ){_cf .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",_gfcee ,_fbffg );
};};_ddbd .sortStrict ();_ddbd .log ("\u0073n\u0061\u0070\u0070\u0065\u0064");_geeb ,_ebagf :=_ddbd .vertsHorzs ();_dbfb :=_geeb .primaries ();_dgfe :=_ebagf .primaries ();_agfc :=len (_dbfb )-1;_dbcd :=len (_dgfe )-1;if _agfc ==0||_dbcd ==0{return gridTiling {};
};_geeec :=_gcb .PdfRectangle {Llx :_dbfb [0],Urx :_dbfb [_agfc ],Lly :_dgfe [0],Ury :_dgfe [_dbcd ]};if _fbfd {_cf .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 (_geeb ));
for _bbgaf ,_bfge :=range _geeb {_cg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_bbgaf ,_bfge );};_cf .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 (_ebagf ));
for _bfaa ,_aacb :=range _ebagf {_cg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_bfaa ,_aacb );};_cf .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",_agfc ,_dbcd ,_dbfb ,_dgfe );
};_eecbc :=make ([]gridTile ,_agfc *_dbcd );for _facae :=_dbcd -1;_facae >=0;_facae --{_ccee :=_dgfe [_facae ];_cgcad :=_dgfe [_facae +1];for _gaab :=0;_gaab < _agfc ;_gaab ++{_ebfa :=_dbfb [_gaab ];_fdaac :=_dbfb [_gaab +1];_baae :=_geeb .findPrimSec (_ebfa ,_ccee );
_fdgf :=_geeb .findPrimSec (_fdaac ,_ccee );_dcfd :=_ebagf .findPrimSec (_ccee ,_ebfa );_agge :=_ebagf .findPrimSec (_cgcad ,_ebfa );_aaded :=_gcb .PdfRectangle {Llx :_ebfa ,Urx :_fdaac ,Lly :_ccee ,Ury :_cgcad };_ffbb :=_gaaf (_aaded ,_baae ,_fdgf ,_dcfd ,_agge );
_eecbc [_facae *_agfc +_gaab ]=_ffbb ;if _fbfd {_cg .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",_gaab ,_facae ,_ffbb .String (),_ffbb .Width (),_ffbb .Height ());
};};};if _fbfd {_cf .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",_geeec );
};_cbbg :=make ([]map[float64 ]gridTile ,_dbcd );for _bgcd :=_dbcd -1;_bgcd >=0;_bgcd --{if _fbfd {_cg .Printf ("\u0020\u0020\u0079\u003d\u0025\u0032\u0064\u000a",_bgcd );};_cbbg [_bgcd ]=make (map[float64 ]gridTile ,_agfc );for _dfaa :=0;_dfaa < _agfc ;
_dfaa ++{_bbcf :=_eecbc [_bgcd *_agfc +_dfaa ];if _fbfd {_cg .Printf ("\u0020\u0020\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_dfaa ,_bbcf );};if !_bbcf ._fccgbd {continue ;};_abed :=_dfaa ;for _fegdg :=_dfaa +1;!_bbcf ._abda &&_fegdg < _agfc ;_fegdg ++{_dbgcg :=_eecbc [_bgcd *_agfc +_fegdg ];
_bbcf .Urx =_dbgcg .Urx ;_bbcf ._ffccc =_bbcf ._ffccc ||_dbgcg ._ffccc ;_bbcf ._bbgd =_bbcf ._bbgd ||_dbgcg ._bbgd ;_bbcf ._abda =_dbgcg ._abda ;if _fbfd {_cg .Printf ("\u0020 \u0020%\u0034\u0064\u003a\u0020\u0025s\u0020\u2192 \u0025\u0073\u000a",_fegdg ,_dbgcg ,_bbcf );
};_abed =_fegdg ;};if _fbfd {_cg .Printf (" \u0020 \u0025\u0032\u0064\u0020\u002d\u0020\u0025\u0032d\u0020\u2192\u0020\u0025s\n",_dfaa ,_abed ,_bbcf );};_dfaa =_abed ;_cbbg [_bgcd ][_bbcf .Llx ]=_bbcf ;};};_ffcebc :=make (map[float64 ]map[float64 ]gridTile ,_dbcd );
_cfee :=make (map[float64 ]map[float64 ]struct{},_dbcd );for _fdgb :=_dbcd -1;_fdgb >=0;_fdgb --{_afbd :=_eecbc [_fdgb *_agfc ].Lly ;_ffcebc [_afbd ]=make (map[float64 ]gridTile ,_agfc );_cfee [_afbd ]=make (map[float64 ]struct{},_agfc );};if _fbfd {_cf .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",_geeec );
};for _dgbba :=_dbcd -1;_dgbba >=0;_dgbba --{_cggef :=_eecbc [_dgbba *_agfc ].Lly ;_agafba :=_cbbg [_dgbba ];if _fbfd {_cg .Printf ("\u0020\u0020\u0079\u003d\u0025\u0032\u0064\u000a",_dgbba );};for _ ,_gcbcf :=range _efab (_agafba ){if _ ,_geefb :=_cfee [_cggef ][_gcbcf ];
_geefb {continue ;};_cdbf :=_agafba [_gcbcf ];if _fbfd {_cg .Printf (" \u0020\u0020\u0020\u0020\u0076\u0030\u003d\u0025\u0073\u000a",_cdbf .String ());};for _babcb :=_dgbba -1;_babcb >=0;_babcb --{if _cdbf ._bbgd {break ;};_dbaa :=_cbbg [_babcb ];_bfddc ,_abdff :=_dbaa [_gcbcf ];
if !_abdff {break ;};if _bfddc .Urx !=_cdbf .Urx {break ;};_cdbf ._bbgd =_bfddc ._bbgd ;_cdbf .Lly =_bfddc .Lly ;if _fbfd {_cg .Printf ("\u0020\u0020\u0020\u0020 \u0020\u0020\u0076\u003d\u0025\u0073\u0020\u0076\u0030\u003d\u0025\u0073\u000a",_bfddc .String (),_cdbf .String ());
};_cfee [_bfddc .Lly ][_bfddc .Llx ]=struct{}{};};if _dgbba ==0{_cdbf ._bbgd =true ;};if _cdbf .complete (){_ffcebc [_cggef ][_gcbcf ]=_cdbf ;};};};_eaeb :=gridTiling {PdfRectangle :_geeec ,_bcfdd :_dfcc (_ffcebc ),_gdggf :_ddcgd (_ffcebc ),_caeg :_ffcebc };
_eaeb .log ("\u0043r\u0065\u0061\u0074\u0065\u0064");return _eaeb ;};
// TableInfo gets table information of the textmark `tm`.
func (_cedb *TextMark )TableInfo ()(*TextTable ,[][]int ){if !_cedb ._fbd {return nil ,nil ;};_fba :=_cedb ._bdff ;_gbcda :=_fba .getCellInfo (*_cedb );return _fba ,_gbcda ;};
// String returns a description of `k`.
func (_cdbbd markKind )String ()string {_bfbe ,_dfcg :=_fbcc [_cdbbd ];if !_dfcg {return _cg .Sprintf ("\u004e\u006f\u0074\u0020\u0061\u0020\u006d\u0061\u0072k\u003a\u0020\u0025\u0064",_cdbbd );};return _bfbe ;};func (_dcgg rulingList )vertsHorzs ()(rulingList ,rulingList ){var _efebe ,_fcacb rulingList ;
for _ ,_cfddf :=range _dcgg {switch _cfddf ._cfgc {case _gcaf :_efebe =append (_efebe ,_cfddf );case _effb :_fcacb =append (_fcacb ,_cfddf );};};return _efebe ,_fcacb ;};func (_fcgbc rulingList )splitSec ()[]rulingList {_eb .Slice (_fcgbc ,func (_cfcb ,_dcfge int )bool {_afbb ,_egeb :=_fcgbc [_cfcb ],_fcgbc [_dcfge ];
if _afbb ._bggg !=_egeb ._bggg {return _afbb ._bggg < _egeb ._bggg ;};return _afbb ._dfadf < _egeb ._dfadf ;});_ecaed :=make (map[*ruling ]struct{},len (_fcgbc ));_cefgb :=func (_ebbec *ruling )rulingList {_fdefe :=rulingList {_ebbec };_ecaed [_ebbec ]=struct{}{};
for _ ,_aegcb :=range _fcgbc {if _ ,_agbe :=_ecaed [_aegcb ];_agbe {continue ;};for _ ,_gade :=range _fdefe {if _aegcb .alignsSec (_gade ){_fdefe =append (_fdefe ,_aegcb );_ecaed [_aegcb ]=struct{}{};break ;};};};return _fdefe ;};_agcgc :=[]rulingList {_cefgb (_fcgbc [0])};
for _ ,_baaggb :=range _fcgbc [1:]{if _ ,_edbbbf :=_ecaed [_baaggb ];_edbbbf {continue ;};_agcgc =append (_agcgc ,_cefgb (_baaggb ));};return _agcgc ;};func (_cccf rulingList )bbox ()_gcb .PdfRectangle {var _ddff _gcb .PdfRectangle ;if len (_cccf )==0{_cf .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 _gcb .PdfRectangle {};};if _cccf [0]._cfgc ==_effb {_ddff .Llx ,_ddff .Urx =_cccf .secMinMax ();_ddff .Lly ,_ddff .Ury =_cccf .primMinMax ();}else {_ddff .Llx ,_ddff .Urx =_cccf .primMinMax ();_ddff .Lly ,_ddff .Ury =_cccf .secMinMax ();};return _ddff ;
};func (_egad *imageExtractContext )extractInlineImage (_eff *_ag .ContentStreamInlineImage ,_dba _ag .GraphicsState ,_eec *_gcb .PdfPageResources )error {_bbd ,_ddfd :=_eff .ToImage (_eec );if _ddfd !=nil {return _ddfd ;};_gcc ,_ddfd :=_eff .GetColorSpace (_eec );
if _ddfd !=nil {return _ddfd ;};if _gcc ==nil {_gcc =_gcb .NewPdfColorspaceDeviceGray ();};_gfaf ,_ddfd :=_gcc .ImageToRGB (*_bbd );if _ddfd !=nil {return _ddfd ;};_dcf :=ImageMark {Image :&_gfaf ,Width :_dba .CTM .ScalingFactorX (),Height :_dba .CTM .ScalingFactorY (),Angle :_dba .CTM .Angle ()};
_dcf .X ,_dcf .Y =_dba .CTM .Translation ();_egad ._dbgg =append (_egad ._dbgg ,_dcf );_egad ._bdba ++;return nil ;};var _fbcc =map[markKind ]string {_aeec :"\u0073\u0074\u0072\u006f\u006b\u0065",_agedg :"\u0066\u0069\u006c\u006c",_egabf :"\u0061u\u0067\u006d\u0065\u006e\u0074"};
// Text gets the extracted text contained in `l`.
func (_edag *list )Text ()string {_dfgg :=&_cgb .Builder {};_gcea :="";_bddg (_edag ,_dfgg ,&_gcea );return _dfgg .String ();};func _ecfff (_gabfg _gcb .PdfRectangle )*ruling {return &ruling {_cfgc :_gcaf ,_ccgff :_gabfg .Llx ,_bggg :_gabfg .Lly ,_dfadf :_gabfg .Ury };
};func _gdeg (_fagf _b .Point )_b .Matrix {return _b .TranslationMatrix (_fagf .X ,_fagf .Y )};func (_cdfg *wordBag )depthBand (_dga ,_deca float64 )[]int {if len (_cdfg ._eafg )==0{return nil ;};return _cdfg .depthRange (_cdfg .getDepthIdx (_dga ),_cdfg .getDepthIdx (_deca ));
};
// Text returns the extracted page text.
func (_dcge PageText )Text ()string {return _dcge ._dae };type lists []*list ;
// String returns a string describing `tm`.
func (_aebg TextMark )String ()string {_efbd :=_aebg .BBox ;var _effg string ;if _aebg .Font !=nil {_effg =_aebg .Font .String ();if len (_effg )> 50{_effg =_effg [:50]+"\u002e\u002e\u002e";};};var _agad string ;if _aebg .Meta {_agad ="\u0020\u002a\u004d\u002a";
};return _cg .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",_aebg .Offset ,_aebg .Text ,[]rune (_aebg .Text ),_efbd .Llx ,_efbd .Lly ,_efbd .Urx ,_efbd .Ury ,_effg ,_agad );
};type structTreeRoot struct{_bgda []structElement ;_fcfc string ;};func (_ffgc intSet )del (_bfag int ){delete (_ffgc ,_bfag )};
// String returns a string descibing `i`.
func (_gaeba gridTile )String ()string {_acae :=func (_eaeg bool ,_ccdf string )string {if _eaeg {return _ccdf ;};return "\u005f";};return _cg .Sprintf ("\u00256\u002e2\u0066\u0020\u0025\u0031\u0073%\u0031\u0073%\u0031\u0073\u0025\u0031\u0073",_gaeba .PdfRectangle ,_acae (_gaeba ._fccgbd ,"\u004c"),_acae (_gaeba ._abda ,"\u0052"),_acae (_gaeba ._bbgd ,"\u0042"),_acae (_gaeba ._ffccc ,"\u0054"));
};func (_cbgc *wordBag )getDepthIdx (_agfg float64 )int {_aafd :=_cbgc .depthIndexes ();_cdg :=_ccec (_agfg );if _cdg < _aafd [0]{return _aafd [0];};if _cdg > _aafd [len (_aafd )-1]{return _aafd [len (_aafd )-1];};return _cdg ;};func (_ggafc *textTable )compositeColCorridors ()map[int ][]float64 {_eeegb :=make (map[int ][]float64 ,_ggafc ._abeef );
if _dcdb {_cf .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",_ggafc ._abeef );};for _aagecg :=0;_aagecg < _ggafc ._abeef ;_aagecg ++{_eeegb [_aagecg ]=nil ;
};return _eeegb ;};type textMark struct{_gcb .PdfRectangle ;_edbb int ;_abac string ;_bbbf string ;_cafa *_gcb .PdfFont ;_cegg float64 ;_fcbc float64 ;_dgbe _b .Matrix ;_cfgae _b .Point ;_baeb _gcb .PdfRectangle ;_abbf _ca .Color ;_fffc _ca .Color ;_ddce _ec .PdfObject ;
_aafg []string ;Tw float64 ;Th float64 ;_faggb int ;_bbeg int ;};func (_cfd *wordBag )removeWord (_ggbg *textWord ,_faca int ){_fcae :=_cfd ._eafg [_faca ];_fcae =_deaad (_fcae ,_ggbg );if len (_fcae )==0{delete (_cfd ._eafg ,_faca );}else {_cfd ._eafg [_faca ]=_fcae ;
};};func (_ebbag *textTable )logComposite (_cadfe string ){if !_dcdb {return ;};_cf .Log .Info ("\u007e~\u007eP\u0061\u0072\u0061\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0073",_ebbag ._abeef ,_ebbag ._edaga ,_cadfe );_cg .Printf ("\u0025\u0035\u0073 \u007c","");
for _dffdd :=0;_dffdd < _ebbag ._abeef ;_dffdd ++{_cg .Printf ("\u0025\u0033\u0064 \u007c",_dffdd );};_cg .Println ("");_cg .Printf ("\u0025\u0035\u0073 \u002b","");for _afbg :=0;_afbg < _ebbag ._abeef ;_afbg ++{_cg .Printf ("\u0025\u0033\u0073 \u002b","\u002d\u002d\u002d");
};_cg .Println ("");for _ffaa :=0;_ffaa < _ebbag ._edaga ;_ffaa ++{_cg .Printf ("\u0025\u0035\u0064 \u007c",_ffaa );for _ebaa :=0;_ebaa < _ebbag ._abeef ;_ebaa ++{_aagf ,_ :=_ebbag ._agda [_fgfde (_ebaa ,_ffaa )].parasBBox ();_cg .Printf ("\u0025\u0033\u0064 \u007c",len (_aagf ));
};_cg .Println ("");};_cf .Log .Info ("\u007e~\u007eT\u0065\u0078\u0074\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0073",_ebbag ._abeef ,_ebbag ._edaga ,_cadfe );_cg .Printf ("\u0025\u0035\u0073 \u007c","");for _caddc :=0;_caddc < _ebbag ._abeef ;
_caddc ++{_cg .Printf ("\u0025\u0031\u0032\u0064\u0020\u007c",_caddc );};_cg .Println ("");_cg .Printf ("\u0025\u0035\u0073 \u002b","");for _egcd :=0;_egcd < _ebbag ._abeef ;_egcd ++{_cg .Print ("\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d-\u002d\u002d\u002d\u002b");
};_cg .Println ("");for _egffc :=0;_egffc < _ebbag ._edaga ;_egffc ++{_cg .Printf ("\u0025\u0035\u0064 \u007c",_egffc );for _gedb :=0;_gedb < _ebbag ._abeef ;_gedb ++{_ggbgd ,_ :=_ebbag ._agda [_fgfde (_gedb ,_egffc )].parasBBox ();_fffea :="";_fgbbf :=_ggbgd .merge ();
if _fgbbf !=nil {_fffea =_fgbbf .text ();};_fffea =_cg .Sprintf ("\u0025\u0071",_beaaf (_fffea ,12));_fffea =_fffea [1:len (_fffea )-1];_cg .Printf ("\u0025\u0031\u0032\u0073\u0020\u007c",_fffea );};_cg .Println ("");};};