unipdf/extractor/extractor.go
2021-01-26 01:31:56 +00:00

253 lines
180 KiB
Go
Raw Blame History

//
// Copyright 2020 FoxyUtils ehf. All rights reserved.
//
// This is a commercial product and requires a license to operate.
// A trial license can be obtained at https://unidoc.io
//
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
//
// Use of this source code is governed by the UniDoc End User License Agreement
// terms that can be accessed at https://unidoc.io/eula/
//
// Package extractor is used for quickly extracting PDF content through a simple interface.
// Currently offers functionality for extracting textual content.
//
package extractor ;import (_ac "bytes";_f "errors";_fg "fmt";_cg "github.com/unidoc/unipdf/v3/common";_acb "github.com/unidoc/unipdf/v3/contentstream";_dfc "github.com/unidoc/unipdf/v3/core";_fd "github.com/unidoc/unipdf/v3/internal/license";_be "github.com/unidoc/unipdf/v3/internal/textencoding";_ce "github.com/unidoc/unipdf/v3/internal/transform";_eb "github.com/unidoc/unipdf/v3/model";_fe "golang.org/x/text/unicode/norm";_ga "golang.org/x/xerrors";_e "image/color";_bf "io";_c "math";_g "regexp";_a "sort";_fc "strings";_df "unicode";_d "unicode/utf8";);func (_cgaa *textPara )fontsize ()float64 {return _cgaa ._ffac [0]._gcff };func (_bdc *imageExtractContext )extractXObjectImage (_gfb *_dfc .PdfObjectName ,_gaa _acb .GraphicsState ,_fef *_eb .PdfPageResources )error {_cfa ,_ :=_fef .GetXObjectByName (*_gfb );if _cfa ==nil {return nil ;};_ab ,_afe :=_bdc ._af [_cfa ];if !_afe {_aab ,_agc :=_fef .GetXObjectImageByName (*_gfb );if _agc !=nil {return _agc ;};if _aab ==nil {return nil ;};_cff ,_agc :=_aab .ToImage ();if _agc !=nil {return _agc ;};_ab =&cachedImage {_fbgb :_cff ,_eff :_aab .ColorSpace };_bdc ._af [_cfa ]=_ab ;};_dbe :=_ab ._fbgb ;_fbb :=_ab ._eff ;_bac ,_cef :=_fbb .ImageToRGB (*_dbe );if _cef !=nil {return _cef ;};_cg .Log .Debug ("@\u0044\u006f\u0020\u0043\u0054\u004d\u003a\u0020\u0025\u0073",_gaa .CTM .String ());_fdd :=ImageMark {Image :&_bac ,Width :_gaa .CTM .ScalingFactorX (),Height :_gaa .CTM .ScalingFactorY (),Angle :_gaa .CTM .Angle ()};_fdd .X ,_fdd .Y =_gaa .CTM .Translation ();_bdc ._ag =append (_bdc ._ag ,_fdd );_bdc ._cbf ++;return nil ;};type lineRuling struct{_degfd rulingKind ;_daca markKind ;_e .Color ;_ecbef ,_fagb _ce .Point ;};type textTable struct{_eb .PdfRectangle ;_gdgf ,_eagaa int ;_aead bool ;_edeac map[uint64 ]*textPara ;_gdea map[uint64 ]compositeCell ;};func (_fagd *shapesState )clearPath (){_fagd ._cddf =nil ;_fagd ._gdca =false ;if _fcdb {_cg .Log .Info ("\u0043\u004c\u0045A\u0052\u003a\u0020\u0073\u0073\u003d\u0025\u0073",_fagd );};};func _beg (_bfd *Extractor ,_ggg *_eb .PdfPageResources ,_dab _acb .GraphicsState ,_bfdf *textState ,_efb *stateStack )*textObject {return &textObject {_adfa :_bfd ,_dad :_ggg ,_abb :_dab ,_ddcg :_efb ,_ddd :_bfdf ,_fafg :_ce .IdentityMatrix (),_cffg :_ce .IdentityMatrix ()};};func _fbbee (_dfeda map[int ][]float64 ){if len (_dfeda )<=1{return ;};_efbcg :=_cagcd (_dfeda );if _egfe {_cg .Log .Info ("\u0066i\u0078C\u0065\u006c\u006c\u0073\u003a \u006b\u0065y\u0073\u003d\u0025\u002b\u0076",_efbcg );};var _agfa ,_dgbaf int ;for _agfa ,_dgbaf =range _efbcg {if _dfeda [_dgbaf ]!=nil {break ;};};for _bdcagg ,_dfdbg :=range _efbcg [_agfa :]{_bgggc :=_dfeda [_dfdbg ];if _bgggc ==nil {continue ;};if _egfe {_fg .Printf ("\u0025\u0034\u0064\u003a\u0020\u006b\u0030\u003d\u0025\u0064\u0020\u006b1\u003d\u0025\u0064\u000a",_agfa +_bdcagg ,_dgbaf ,_dfdbg );};_gbcd :=_dfeda [_dfdbg ];if _gbcd [len (_gbcd )-1]> _bgggc [0]{_gbcd [len (_gbcd )-1]=_bgggc [0];_dfeda [_dgbaf ]=_gbcd ;};_dgbaf =_dfdbg ;};};func _ddfb (_fcb float64 )int {var _eaaf int ;if _fcb >=0{_eaaf =int (_fcb /_dafd );}else {_eaaf =int (_fcb /_dafd )-1;};return _eaaf ;};func (_affa *textObject )showTextAdjusted (_dce *_dfc .PdfObjectArray )error {_ccd :=false ;for _ ,_ffb :=range _dce .Elements (){switch _ffb .(type ){case *_dfc .PdfObjectFloat ,*_dfc .PdfObjectInteger :_bee ,_fbe :=_dfc .GetNumberAsFloat (_ffb );if _fbe !=nil {_cg .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",_ffb ,_dce );return _fbe ;};_fec ,_dece :=-_bee *0.001*_affa ._ddd ._dcb ,0.0;if _ccd {_dece ,_fec =_fec ,_dece ;};_eagd :=_fgag (_ce .Point {X :_fec ,Y :_dece });_affa ._fafg .Concat (_eagd );case *_dfc .PdfObjectString :_deb ,_afd :=_dfc .GetStringBytes (_ffb );if !_afd {_cg .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",_ffb ,_dce );return _dfc .ErrTypeError ;};_affa .renderText (_deb );default:_cg .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",_ffb ,_dce );return _dfc .ErrTypeError ;};};return nil ;};const _edae =10;var (_adga =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 _ebgc (_eggc *wordBag ,_bcbg int )*textLine {_ecfe :=_eggc .firstWord (_bcbg );_eddc :=textLine {PdfRectangle :_ecfe .PdfRectangle ,_gcff :_ecfe ._cbbbc ,_cfaa :_ecfe ._dfgg };_eddc .pullWord (_eggc ,_ecfe ,_bcbg );return &_eddc ;};func _cgdf (_fgab ,_beba _eb .PdfRectangle )bool {return _beba .Llx <=_fgab .Urx &&_fgab .Llx <=_beba .Urx ;};
// Append appends `mark` to the mark array.
func (_geff *TextMarkArray )Append (mark TextMark ){_geff ._dcae =append (_geff ._dcae ,mark )};func (_bgcc *textPara )text ()string {_gaaed :=new (_ac .Buffer );_bgcc .writeText (_gaaed );return _gaaed .String ();};func (_fbca paraList )lines ()[]*textLine {var _ffeb []*textLine ;for _ ,_ecgfg :=range _fbca {_ffeb =append (_ffeb ,_ecgfg ._ffac ...);};return _ffeb ;};func (_bef *textObject )setFont (_adea string ,_cde float64 )error {if _bef ==nil {return nil ;};_bef ._ddd ._dcb =_cde ;_fcgb ,_bab :=_bef .getFont (_adea );if _bab !=nil {return _bab ;};_bef ._ddd ._ded =_fcgb ;if _bef ._ddcg .empty (){_bef ._ddcg .push (_bef ._ddd );}else {_bef ._ddcg .top ()._ded =_bef ._ddd ._ded ;};return nil ;};func (_gefb *wordBag )removeWord (_bfg *textWord ,_baf int ){_cgca :=_gefb ._fccg [_baf ];_cgca =_eefdf (_cgca ,_bfg );if len (_cgca )==0{delete (_gefb ._fccg ,_baf );}else {_gefb ._fccg [_baf ]=_cgca ;};};func (_aefe *shapesState )establishSubpath ()*subpath {_efbf ,_gcf :=_aefe .lastpointEstablished ();if !_gcf {_aefe ._cddf =append (_aefe ._cddf ,_deggb (_efbf ));};if len (_aefe ._cddf )==0{return nil ;};_aefe ._gdca =false ;return _aefe ._cddf [len (_aefe ._cddf )-1];};func _aeec (_bebb []TextMark ,_afgg *int ,_bbga string )[]TextMark {_gbbb :=_dgb ;_gbbb .Text =_bbga ;return _cdeab (_bebb ,_afgg ,_gbbb );};func (_bcgb paraList )llyRange (_badg []int ,_edcg ,_fff float64 )[]int {_gcfg :=len (_bcgb );if _fff < _bcgb [_badg [0]].Lly ||_edcg > _bcgb [_badg [_gcfg -1]].Lly {return nil ;};_dddf :=_a .Search (_gcfg ,func (_afbb int )bool {return _bcgb [_badg [_afbb ]].Lly >=_edcg });_ccff :=_a .Search (_gcfg ,func (_gbcc int )bool {return _bcgb [_badg [_gbcc ]].Lly > _fff });return _badg [_dddf :_ccff ];};
// TextMarkArray is a collection of TextMarks.
type TextMarkArray struct{_dcae []TextMark };func (_adgg *wordBag )allWords ()[]*textWord {var _cbfa []*textWord ;for _ ,_bad :=range _adgg ._fccg {_cbfa =append (_cbfa ,_bad ...);};return _cbfa ;};func (_eebf *shapesState )lineTo (_dbaa ,_agbc float64 ){if _fcdb {_cg .Log .Info ("\u006c\u0069\u006eeT\u006f\u0028\u0025\u002e\u0032\u0066\u002c\u0025\u002e\u0032\u0066\u0020\u0070\u003d\u0025\u002e\u0032\u0066",_dbaa ,_agbc ,_eebf .devicePoint (_dbaa ,_agbc ));};_eebf .addPoint (_dbaa ,_agbc );};func (_edcf rulingList )asTiling ()gridTiling {if _dac {_cg .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 (_edcf ));};for _bfgbf ,_aadf :=range _edcf [1:]{_cgcf :=_edcf [_bfgbf ];if _cgcf .alignsPrimary (_aadf )&&_cgcf .alignsSec (_aadf ){_cg .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",_aadf ,_cgcf );};};_edcf .sortStrict ();_edcf .log ("\u0073n\u0061\u0070\u0070\u0065\u0064");_bccbd ,_bfcgc :=_edcf .vertsHorzs ();_ggcef :=_bccbd .primaries ();_cagc :=_bfcgc .primaries ();_baggb :=len (_ggcef )-1;_ddgd :=len (_cagc )-1;if _baggb ==0||_ddgd ==0{return gridTiling {};};_fedf :=_eb .PdfRectangle {Llx :_ggcef [0],Urx :_ggcef [_baggb ],Lly :_cagc [0],Ury :_cagc [_ddgd ]};if _dac {_cg .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 (_bccbd ));for _fddc ,_acfdd :=range _bccbd {_fg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_fddc ,_acfdd );};_cg .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 (_bfcgc ));for _febea ,_bfeca :=range _bfcgc {_fg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_febea ,_bfeca );};_cg .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",_baggb ,_ddgd ,_ggcef ,_cagc );};_gfa :=make ([]gridTile ,_baggb *_ddgd );for _dafc :=_ddgd -1;_dafc >=0;_dafc --{_dgfae :=_cagc [_dafc ];_ffcb :=_cagc [_dafc +1];for _bbefd :=0;_bbefd < _baggb ;_bbefd ++{_fgeeec :=_ggcef [_bbefd ];_cffcd :=_ggcef [_bbefd +1];_caff :=_bccbd .findPrimSec (_fgeeec ,_dgfae );_bbce :=_bccbd .findPrimSec (_cffcd ,_dgfae );_gaeeb :=_bfcgc .findPrimSec (_dgfae ,_fgeeec );_dfda :=_bfcgc .findPrimSec (_ffcb ,_fgeeec );_fcgbe :=_eb .PdfRectangle {Llx :_fgeeec ,Urx :_cffcd ,Lly :_dgfae ,Ury :_ffcb };_bcffe :=_aebcc (_fcgbe ,_caff ,_bbce ,_gaeeb ,_dfda );_gfa [_dafc *_baggb +_bbefd ]=_bcffe ;if _dac {_fg .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",_bbefd ,_dafc ,_bcffe .String (),_bcffe .Width (),_bcffe .Height ());};};};if _dac {_cg .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",_fedf );};_ddad :=make ([]map[float64 ]gridTile ,_ddgd );for _bfad :=_ddgd -1;_bfad >=0;_bfad --{if _dac {_fg .Printf ("\u0020\u0020\u0079\u003d\u0025\u0032\u0064\u000a",_bfad );};_ddad [_bfad ]=make (map[float64 ]gridTile ,_baggb );for _fgde :=0;_fgde < _baggb ;_fgde ++{_cagb :=_gfa [_bfad *_baggb +_fgde ];if _dac {_fg .Printf ("\u0020\u0020\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_fgde ,_cagb );};if !_cagb ._ebed {continue ;};_afag :=_fgde ;for _egac :=_fgde +1;!_cagb ._bbc &&_egac < _baggb ;_egac ++{_ecfca :=_gfa [_bfad *_baggb +_egac ];_cagb .Urx =_ecfca .Urx ;_cagb ._dgbba =_cagb ._dgbba ||_ecfca ._dgbba ;_cagb ._beag =_cagb ._beag ||_ecfca ._beag ;_cagb ._bbc =_ecfca ._bbc ;if _dac {_fg .Printf ("\u0020 \u0020%\u0034\u0064\u003a\u0020\u0025s\u0020\u2192 \u0025\u0073\u000a",_egac ,_ecfca ,_cagb );};_afag =_egac ;};if _dac {_fg .Printf (" \u0020 \u0025\u0032\u0064\u0020\u002d\u0020\u0025\u0032d\u0020\u2192\u0020\u0025s\n",_fgde ,_afag ,_cagb );};_fgde =_afag ;_ddad [_bfad ][_cagb .Llx ]=_cagb ;};};_ecfg :=make (map[float64 ]map[float64 ]gridTile ,_ddgd );_bccc :=make (map[float64 ]map[float64 ]struct{},_ddgd );for _abab :=_ddgd -1;_abab >=0;_abab --{_ffd :=_gfa [_abab *_baggb ].Lly ;_ecfg [_ffd ]=make (map[float64 ]gridTile ,_baggb );_bccc [_ffd ]=make (map[float64 ]struct{},_baggb );};if _dac {_cg .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",_fedf );};for _fbcc :=_ddgd -1;_fbcc >=0;_fbcc --{_ddfdf :=_gfa [_fbcc *_baggb ].Lly ;_aafac :=_ddad [_fbcc ];if _dac {_fg .Printf ("\u0020\u0020\u0079\u003d\u0025\u0032\u0064\u000a",_fbcc );};for _ ,_dgbf :=range _gfaa (_aafac ){if _ ,_fgca :=_bccc [_ddfdf ][_dgbf ];_fgca {continue ;};_gfffg :=_aafac [_dgbf ];if _dac {_fg .Printf (" \u0020\u0020\u0020\u0020\u0076\u0030\u003d\u0025\u0073\u000a",_gfffg .String ());};for _eddf :=_fbcc -1;_eddf >=0;_eddf --{if _gfffg ._beag {break ;};_facc :=_ddad [_eddf ];_badbd ,_agfe :=_facc [_dgbf ];if !_agfe {break ;};if _badbd .Urx !=_gfffg .Urx {break ;};_gfffg ._beag =_badbd ._beag ;_gfffg .Lly =_badbd .Lly ;if _dac {_fg .Printf ("\u0020\u0020\u0020\u0020 \u0020\u0020\u0076\u003d\u0025\u0073\u0020\u0076\u0030\u003d\u0025\u0073\u000a",_badbd .String (),_gfffg .String ());};_bccc [_badbd .Lly ][_badbd .Llx ]=struct{}{};};if _fbcc ==0{_gfffg ._beag =true ;};if _gfffg .complete (){_ecfg [_ddfdf ][_dgbf ]=_gfffg ;};};};_bgbf :=gridTiling {PdfRectangle :_fedf ,_gcdb :_afgc (_ecfg ),_dfdf :_cgce (_ecfg ),_ddggg :_ecfg };_bgbf .log ("\u0043r\u0065\u0061\u0074\u0065\u0064");return _bgbf ;};func (_cdcgf *textTable )emptyColumn (_ebfa int )bool {for _gagbg :=0;_gagbg < _cdcgf ._eagaa ;_gagbg ++{_eeba :=_cdcgf .get (_ebfa ,_gagbg );if _eeba !=nil &&_eeba .text ()!=""{return false ;};};return true ;};func _ffbg (_fgad string )bool {if _d .RuneCountInString (_fgad )< _cfd {return false ;};_dda ,_eed :=_d .DecodeLastRuneInString (_fgad );if _eed <=0||!_df .Is (_df .Hyphen ,_dda ){return false ;};_dda ,_eed =_d .DecodeLastRuneInString (_fgad [:len (_fgad )-_eed ]);return _eed > 0&&!_df .IsSpace (_dda );};func (_bcgfc *textPara )bbox ()_eb .PdfRectangle {return _bcgfc .PdfRectangle };func _gcc (_acag ,_agafb _eb .PdfRectangle )(_eb .PdfRectangle ,bool ){if !_geadc (_acag ,_agafb ){return _eb .PdfRectangle {},false ;};return _eb .PdfRectangle {Llx :_c .Max (_acag .Llx ,_agafb .Llx ),Urx :_c .Min (_acag .Urx ,_agafb .Urx ),Lly :_c .Max (_acag .Lly ,_agafb .Lly ),Ury :_c .Min (_acag .Ury ,_agafb .Ury )},true ;};func (_egdd *textTable )putComposite (_egdb ,_dfdg int ,_abdd paraList ,_deaba _eb .PdfRectangle ){if len (_abdd )==0{_cg .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 ;};_acad :=compositeCell {_deaba ,_abdd };if _egfe {_fg .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",_egdb ,_dfdg ,_acad .String ());};_acad .updateBBox ();_egdd ._gdea [_cdfa (_egdb ,_dfdg )]=_acad ;};func (_egfa *textTable )markCells (){for _eccec :=0;_eccec < _egfa ._eagaa ;_eccec ++{for _gfffb :=0;_gfffb < _egfa ._gdgf ;_gfffb ++{_fagbf :=_egfa .get (_gfffb ,_eccec );if _fagbf !=nil {_fagbf ._gaef =true ;};};};};func (_edfff *textTable )subdivide ()*textTable {_edfff .logComposite ("\u0073u\u0062\u0064\u0069\u0076\u0069\u0064e");_ccaf :=_edfff .compositeRowCorridors ();_ddcbg :=_edfff .compositeColCorridors ();if _egfe {_cg .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",_afbdf (_ccaf ),_afbdf (_ddcbg ));};if len (_ccaf )==0||len (_ddcbg )==0{return _edfff ;};_fbbee (_ccaf );_fbbee (_ddcbg );if _egfe {_cg .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",_afbdf (_ccaf ),_afbdf (_ddcbg ));};_aeccd ,_bfbb :=_dfba (_edfff ._eagaa ,_ccaf );_caeb ,_aafdd :=_dfba (_edfff ._gdgf ,_ddcbg );_gdcfg :=make (map[uint64 ]*textPara ,_aafdd *_bfbb );_gdgff :=&textTable {PdfRectangle :_edfff .PdfRectangle ,_aead :_edfff ._aead ,_eagaa :_bfbb ,_gdgf :_aafdd ,_edeac :_gdcfg };if _egfe {_cg .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",_edfff ._gdgf ,_edfff ._eagaa ,_aafdd ,_bfbb ,_afbdf (_ccaf ),_afbdf (_ddcbg ),_aeccd ,_caeb );};for _gfad :=0;_gfad < _edfff ._eagaa ;_gfad ++{_ebgge :=_aeccd [_gfad ];for _cdaae :=0;_cdaae < _edfff ._gdgf ;_cdaae ++{_ddeeg :=_caeb [_cdaae ];if _egfe {_fg .Printf ("\u0025\u0036\u0064\u002c %\u0032\u0064\u003a\u0020\u0078\u0030\u003d\u0025\u0064\u0020\u0079\u0030\u003d\u0025d\u000a",_cdaae ,_gfad ,_ddeeg ,_ebgge );};_fgdbff ,_aecfe :=_edfff ._gdea [_cdfa (_cdaae ,_gfad )];if !_aecfe {continue ;};_fdaf :=_fgdbff .split (_ccaf [_gfad ],_ddcbg [_cdaae ]);for _cceeg :=0;_cceeg < _fdaf ._eagaa ;_cceeg ++{for _agbe :=0;_agbe < _fdaf ._gdgf ;_agbe ++{_abaed :=_fdaf .get (_agbe ,_cceeg );_gdgff .put (_ddeeg +_agbe ,_ebgge +_cceeg ,_abaed );if _egfe {_fg .Printf ("\u0025\u0038\u0064\u002c\u0020\u0025\u0032\u0064\u003a\u0020\u0025\u0073\u000a",_ddeeg +_agbe ,_ebgge +_cceeg ,_abaed );};};};};};return _gdgff ;};func (_adgc *subpath )isQuadrilateral ()bool {if len (_adgc ._eadd )< 4||len (_adgc ._eadd )> 5{return false ;};if len (_adgc ._eadd )==5{_bbfa :=_adgc ._eadd [0];_aggaa :=_adgc ._eadd [4];if _bbfa .X !=_aggaa .X ||_bbfa .Y !=_aggaa .Y {return false ;};};return true ;};func _cgce (_cbad map[float64 ]map[float64 ]gridTile )[]float64 {_afff :=make ([]float64 ,0,len (_cbad ));for _cecbb :=range _cbad {_afff =append (_afff ,_cecbb );};_a .Float64s (_afff );_bdea :=len (_afff );for _afbd :=0;_afbd < _bdea /2;_afbd ++{_afff [_afbd ],_afff [_bdea -1-_afbd ]=_afff [_bdea -1-_afbd ],_afff [_afbd ];};return _afff ;};func (_fbbg *PageText )computeViews (){var _age rulingList ;if _aafg {_dbee :=_aabb (_fbbg ._gaee );_age =append (_age ,_dbee ...);};if _aefa {_dcbb :=_gbgaf (_fbbg ._egg );_age =append (_age ,_dcbb ...);};_age ,_ged :=_age .toTilings ();var _ebfc paraList ;_ddbb :=len (_fbbg ._cabf );for _ecbe :=0;_ecbe < 360&&_ddbb > 0;_ecbe +=90{_ccdb :=make ([]*textMark ,0,len (_fbbg ._cabf )-_ddbb );for _ ,_ccge :=range _fbbg ._cabf {if _ccge ._ccce ==_ecbe {_ccdb =append (_ccdb ,_ccge );};};if len (_ccdb )> 0{_fecf :=_cfee (_ccdb ,_fbbg ._cfg ,_age ,_ged );_ebfc =append (_ebfc ,_fecf ...);_ddbb -=len (_ccdb );};};_bggg :=new (_ac .Buffer );_ebfc .writeText (_bggg );_fbbg ._bgbbb =_bggg .String ();_fbbg ._bge =_ebfc .toTextMarks ();_fbbg ._accee =_ebfc .tables ();if _egfe {_cg .Log .Info ("\u0063\u006f\u006dpu\u0074\u0065\u0056\u0069\u0065\u0077\u0073\u003a\u0020\u0074\u0061\u0062\u006c\u0065\u0073\u003d\u0025\u0064",len (_fbbg ._accee ));};};func _cbc (_dfg []*wordBag )[]*wordBag {if len (_dfg )<=1{return _dfg ;};if _bdba {_cg .Log .Info ("\u006d\u0065\u0072\u0067\u0065\u0057\u006f\u0072\u0064B\u0061\u0067\u0073\u003a");};_a .Slice (_dfg ,func (_eaeb ,_caad int )bool {_dagdd ,_dcag :=_dfg [_eaeb ],_dfg [_caad ];_efccb :=_dagdd .Width ()*_dagdd .Height ();_afc :=_dcag .Width ()*_dcag .Height ();if _efccb !=_afc {return _efccb > _afc ;};if _dagdd .Height ()!=_dcag .Height (){return _dagdd .Height ()> _dcag .Height ();};return _eaeb < _caad ;});var _dfaf []*wordBag ;_bafe :=make (intSet );for _cagg :=0;_cagg < len (_dfg );_cagg ++{if _bafe .has (_cagg ){continue ;};_gba :=_dfg [_cagg ];for _abga :=_cagg +1;_abga < len (_dfg );_abga ++{if _bafe .has (_cagg ){continue ;};_affb :=_dfg [_abga ];_edba :=_gba .PdfRectangle ;_edba .Llx -=_gba ._ebbb ;if _eecg (_edba ,_affb .PdfRectangle ){_gba .absorb (_affb );_bafe .add (_abga );};};_dfaf =append (_dfaf ,_gba );};if len (_dfg )!=len (_dfaf )+len (_bafe ){_cg .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 (_dfg ),len (_dfaf ),len (_bafe ));};return _dfaf ;};func (_cabaa *textTable )newTablePara ()*textPara {_ccef :=_cabaa .computeBbox ();_facb :=&textPara {PdfRectangle :_ccef ,_eead :_ccef ,_deec :_cabaa };if _egfe {_cg .Log .Info ("\u006e\u0065w\u0054\u0061\u0062l\u0065\u0050\u0061\u0072\u0061\u003a\u0020\u0025\u0073",_facb );};return _facb ;};type textObject struct{_adfa *Extractor ;_dad *_eb .PdfPageResources ;_abb _acb .GraphicsState ;_ddd *textState ;_ddcg *stateStack ;_fafg _ce .Matrix ;_cffg _ce .Matrix ;_geg []*textMark ;_gfbge bool ;};const (RenderModeStroke RenderMode =1<<iota ;RenderModeFill ;RenderModeClip ;);func (_bcde *textTable )reduceTiling (_accc gridTiling ,_degd float64 )*textTable {_gaca :=make ([]int ,0,_bcde ._eagaa );_dbde :=make ([]int ,0,_bcde ._gdgf );_bbgfd :=_accc ._gcdb ;_cdga :=_accc ._dfdf ;for _agac :=0;_agac < _bcde ._eagaa ;_agac ++{_bfeb :=_agac > 0&&_c .Abs (_cdga [_agac -1]-_cdga [_agac ])< _degd &&_bcde .emptyRow (_agac );if !_bfeb {_gaca =append (_gaca ,_agac );};};for _fagdd :=0;_fagdd < _bcde ._gdgf ;_fagdd ++{_bgac :=_fagdd < _bcde ._gdgf -1&&_c .Abs (_bbgfd [_fagdd +1]-_bbgfd [_fagdd ])< _degd &&_bcde .emptyColumn (_fagdd );if !_bgac {_dbde =append (_dbde ,_fagdd );};};if len (_gaca )==_bcde ._eagaa &&len (_dbde )==_bcde ._gdgf {return _bcde ;};_gffg :=textTable {_aead :_bcde ._aead ,_gdgf :len (_dbde ),_eagaa :len (_gaca ),_gdea :make (map[uint64 ]compositeCell ,len (_dbde )*len (_gaca ))};if _egfe {_cg .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",_bcde ._gdgf ,_bcde ._eagaa ,len (_dbde ),len (_gaca ));_cg .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0043\u006f\u006c\u0073\u003a\u0020\u0025\u002b\u0076",_dbde );_cg .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0052\u006f\u0077\u0073\u003a\u0020\u0025\u002b\u0076",_gaca );};for _fgeb ,_adbdg :=range _gaca {for _adgbc ,_cdcg :=range _dbde {_dbgf ,_dfcbe :=_bcde .getComposite (_cdcg ,_adbdg );if len (_dbgf )==0{continue ;};if _egfe {_fg .Printf ("\u0020 \u0025\u0032\u0064\u002c \u0025\u0032\u0064\u0020\u0028%\u0032d\u002c \u0025\u0032\u0064\u0029\u0020\u0025\u0071\n",_adgbc ,_fgeb ,_cdcg ,_adbdg ,_cacb (_dbgf .merge ().text (),50));};_gffg .putComposite (_adgbc ,_fgeb ,_dbgf ,_dfcbe );};};return &_gffg ;};func _afbdf (_befd map[int ][]float64 )string {_cfaga :=_cagcd (_befd );_fedab :=make ([]string ,len (_befd ));for _aadge ,_cegd :=range _cfaga {_fedab [_aadge ]=_fg .Sprintf ("\u0025\u0064\u003a\u0020\u0025\u002e\u0032\u0066",_cegd ,_befd [_cegd ]);};return _fg .Sprintf ("\u007b\u0025\u0073\u007d",_fc .Join (_fedab ,"\u002c\u0020"));};func (_bcfef intSet )add (_adag int ){_bcfef [_adag ]=struct{}{}};func (_cafgb compositeCell )hasLines (_gbgg []*textLine )bool {for _dfaa ,_fbfb :=range _gbgg {_ddcgg :=_geadc (_cafgb .PdfRectangle ,_fbfb .PdfRectangle );if _egfe {_fg .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",_ddcgg ,_dfaa ,len (_gbgg ));_fg .Printf ("\u0020\u0020\u0020\u0020 \u005e\u005e\u005e\u0063\u006f\u006d\u0070\u006f\u0073\u0069\u0074\u0065\u003d\u0025s\u000a",_cafgb );_fg .Printf ("\u0020 \u0020 \u0020\u0020\u0020\u006c\u0069\u006e\u0065\u003d\u0025\u0073\u000a",_fbfb );};if _ddcgg {return true ;};};return false ;};func _bedf (_bgbe func (*wordBag ,*textWord ,float64 )bool ,_bdb float64 )func (*wordBag ,*textWord )bool {return func (_ebaf *wordBag ,_aada *textWord )bool {return _bgbe (_ebaf ,_aada ,_bdb )};};func _gcga (_efdg ,_dgaec *textPara )bool {return _cgdf (_efdg ._eead ,_dgaec ._eead )};
// String returns a human readable description of `s`.
func (_eeeg intSet )String ()string {var _fagfc []int ;for _ffbed :=range _eeeg {if _eeeg .has (_ffbed ){_fagfc =append (_fagfc ,_ffbed );};};_a .Ints (_fagfc );return _fg .Sprintf ("\u0025\u002b\u0076",_fagfc );};func (_dfaca *textPara )toCellTextMarks (_edaff *int )[]TextMark {var _fcga []TextMark ;for _bcfd ,_bdbe :=range _dfaca ._ffac {_babb :=_bdbe .toTextMarks (_edaff );_cbdf :=_aebd &&_bdbe .endsInHyphen ()&&_bcfd !=len (_dfaca ._ffac )-1;if _cbdf {_babb =_dfgb (_babb ,_edaff );};_fcga =append (_fcga ,_babb ...);if !(_cbdf ||_bcfd ==len (_dfaca ._ffac )-1){_fcga =_aeec (_fcga ,_edaff ,_aabg (_bdbe ._cfaa ,_dfaca ._ffac [_bcfd +1]._cfaa ));};};return _fcga ;};func (_cee gridTiling )complete ()bool {for _ ,_ggcfc :=range _cee ._ddggg {for _ ,_gdgca :=range _ggcfc {if !_gdgca .complete (){return false ;};};};return true ;};
// 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 (_dcc *Extractor )ExtractTextWithStats ()(_gaf string ,_cffc int ,_eae int ,_gfc error ){_gfbg ,_cffc ,_eae ,_gfc :=_dcc .ExtractPageText ();if _gfc !=nil {return "",_cffc ,_eae ,_gfc ;};return _gfbg .Text (),_cffc ,_eae ,nil ;};type imageExtractContext struct{_ag []ImageMark ;_eca int ;_cbf int ;_dd int ;_af map[*_dfc .PdfObjectStream ]*cachedImage ;_ae *ImageExtractOptions ;};type rulingKind int ;var _fgfc =_g .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 (_fbbd *compositeCell )updateBBox (){for _ ,_dcdg :=range _fbbd .paraList {_fbbd .PdfRectangle =_cbcc (_fbbd .PdfRectangle ,_dcdg .PdfRectangle );};};func _bfdg (_cfff _eb .PdfRectangle )*ruling {return &ruling {_dbgef :_ebga ,_dbaac :_cfff .Llx ,_dafad :_cfff .Lly ,_bacb :_cfff .Ury };};func (_caab paraList )toTextMarks ()[]TextMark {_bbbg :=0;var _fddgf []TextMark ;for _cfcf ,_gefg :=range _caab {if _gefg ._cfbg {continue ;};_gdcb :=_gefg .toTextMarks (&_bbbg );_fddgf =append (_fddgf ,_gdcb ...);if _cfcf !=len (_caab )-1{if _dfed (_gefg ,_caab [_cfcf +1]){_fddgf =_aeec (_fddgf ,&_bbbg ,"\u0020");}else {_fddgf =_aeec (_fddgf ,&_bbbg ,"\u000a");_fddgf =_aeec (_fddgf ,&_bbbg ,"\u000a");};};};_fddgf =_aeec (_fddgf ,&_bbbg ,"\u000a");_fddgf =_aeec (_fddgf ,&_bbbg ,"\u000a");return _fddgf ;};func (_cdba *textMark )inDiacriticArea (_gcee *textMark )bool {_gcbf :=_cdba .Llx -_gcee .Llx ;_cgfd :=_cdba .Urx -_gcee .Urx ;_eedc :=_cdba .Lly -_gcee .Lly ;return _c .Abs (_gcbf +_cgfd )< _cdba .Width ()*_eagg &&_c .Abs (_eedc )< _cdba .Height ()*_eagg ;};type fontEntry struct{_bgd *_eb .PdfFont ;_dcce int64 ;};type event struct{_dgbfg float64 ;_bcea bool ;_febgg int ;};func (_gac *textObject )getFontDict (_afad string )(_bdcb _dfc .PdfObject ,_beed error ){_efc :=_gac ._dad ;if _efc ==nil {_cg .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",_afad );return nil ,nil ;};_bdcb ,_dfa :=_efc .GetFontByName (_dfc .PdfObjectName (_afad ));if !_dfa {_cg .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",_afad );return nil ,_f .New ("f\u006f\u006e\u0074\u0020no\u0074 \u0069\u006e\u0020\u0072\u0065s\u006f\u0075\u0072\u0063\u0065\u0073");};return _bdcb ,nil ;};func (_dcfg *textWord )bbox ()_eb .PdfRectangle {return _dcfg .PdfRectangle };func (_ecd *imageExtractContext )extractFormImages (_eag *_dfc .PdfObjectName ,_fgd _acb .GraphicsState ,_ggb *_eb .PdfPageResources )error {_ecba ,_aabe :=_ggb .GetXObjectFormByName (*_eag );if _aabe !=nil {return _aabe ;};if _ecba ==nil {return nil ;};_ddb ,_aabe :=_ecba .GetContentStream ();if _aabe !=nil {return _aabe ;};_ddc :=_ecba .Resources ;if _ddc ==nil {_ddc =_ggb ;};_aabe =_ecd .extractContentStreamImages (string (_ddb ),_ddc );if _aabe !=nil {return _aabe ;};_ecd ._dd ++;return nil ;};func (_dgfgf gridTile )contains (_cebdg _eb .PdfRectangle )bool {if _dgfgf .numBorders ()< 3{return false ;};if _dgfgf ._ebed &&_cebdg .Llx < _dgfgf .Llx -_gfega {return false ;};if _dgfgf ._bbc &&_cebdg .Urx > _dgfgf .Urx +_gfega {return false ;};if _dgfgf ._beag &&_cebdg .Lly < _dgfgf .Lly -_gfega {return false ;};if _dgfgf ._dgbba &&_cebdg .Ury > _dgfgf .Ury +_gfega {return false ;};return true ;};func _abfcd (_fed _eb .PdfRectangle ,_daebc bounded )float64 {return _fed .Ury -_daebc .bbox ().Lly };
// Len returns the number of TextMarks in `ma`.
func (_gbb *TextMarkArray )Len ()int {if _gbb ==nil {return 0;};return len (_gbb ._dcae );};func (_ba *imageExtractContext )extractContentStreamImages (_bb string ,_adf *_eb .PdfPageResources )error {_bda :=_acb .NewContentStreamParser (_bb );_fbgc ,_cgd :=_bda .Parse ();if _cgd !=nil {return _cgd ;};if _ba ._af ==nil {_ba ._af =map[*_dfc .PdfObjectStream ]*cachedImage {};};if _ba ._ae ==nil {_ba ._ae =&ImageExtractOptions {};};_db :=_acb .NewContentStreamProcessor (*_fbgc );_db .AddHandler (_acb .HandlerConditionEnumAllOperands ,"",_ba .processOperand );return _db .Process (_adf );};func (_bbdb *textTable )isExportable ()bool {if _bbdb ._aead {return true ;};_dgeb :=func (_bcge int )bool {_bgeb :=_bbdb .get (0,_bcge );if _bgeb ==nil {return false ;};_fcdfg :=_bgeb .text ();_cccb :=_d .RuneCountInString (_fcdfg );_fddgfe :=_fgfc .MatchString (_fcdfg );return _cccb <=1||_fddgfe ;};for _bgbff :=0;_bgbff < _bbdb ._eagaa ;_bgbff ++{if !_dgeb (_bgbff ){return true ;};};return false ;};func _cbcc (_agdg ,_ebcc _eb .PdfRectangle )_eb .PdfRectangle {return _eb .PdfRectangle {Llx :_c .Min (_agdg .Llx ,_ebcc .Llx ),Lly :_c .Min (_agdg .Lly ,_ebcc .Lly ),Urx :_c .Max (_agdg .Urx ,_ebcc .Urx ),Ury :_c .Max (_agdg .Ury ,_ebcc .Ury )};};var _dgb =TextMark {Text :"\u005b\u0058\u005d",Original :"\u0020",Meta :true ,FillColor :_e .White ,StrokeColor :_e .White };func (_gdcd *wordBag )getDepthIdx (_adca float64 )int {_gggg :=_gdcd .depthIndexes ();_aaaad :=_ddfb (_adca );if _aaaad < _gggg [0]{return _gggg [0];};if _aaaad > _gggg [len (_gggg )-1]{return _gggg [len (_gggg )-1];};return _aaaad ;};func _egea (_dgbd ,_gdcdc ,_fadb ,_fcdbg *textPara )*textTable {_bcef :=&textTable {_gdgf :2,_eagaa :2,_edeac :make (map[uint64 ]*textPara ,4)};_bcef .put (0,0,_dgbd );_bcef .put (1,0,_gdcdc );_bcef .put (0,1,_fadb );_bcef .put (1,1,_fcdbg );return _bcef ;};func (_agcc *wordBag )text ()string {_cdag :=_agcc .allWords ();_dcfe :=make ([]string ,len (_cdag ));for _ege ,_eggb :=range _cdag {_dcfe [_ege ]=_eggb ._dfgdd ;};return _fc .Join (_dcfe ,"\u0020");};func _fcae (_aef _ce .Matrix )_ce .Point {_effbf ,_cebf :=_aef .Translation ();return _ce .Point {X :_effbf ,Y :_cebf };};type compositeCell struct{_eb .PdfRectangle ;paraList ;};func (_gbeg paraList )findTableGrid (_fefda gridTiling )(*textTable ,map[*textPara ]struct{}){_fccag :=len (_fefda ._gcdb );_bgbag :=len (_fefda ._dfdf );_bddc :=textTable {_aead :true ,_gdgf :_fccag ,_eagaa :_bgbag ,_edeac :make (map[uint64 ]*textPara ,_fccag *_bgbag ),_gdea :make (map[uint64 ]compositeCell ,_fccag *_bgbag )};_eade :=make (map[*textPara ]struct{});_ggcb :=int ((1.0-_befb )*float64 (_fccag *_bgbag ));_fbaf :=0;if _dac {_cg .Log .Info ("\u0066\u0069\u006e\u0064Ta\u0062\u006c\u0065\u0047\u0072\u0069\u0064\u003a\u0020\u0025\u0064\u0020\u0078\u0020%\u0064",_fccag ,_bgbag );};for _fbdg ,_gffd :=range _fefda ._dfdf {_feba ,_eadg :=_fefda ._ddggg [_gffd ];if !_eadg {continue ;};for _fddgc ,_cfea :=range _fefda ._gcdb {_abbc ,_fccfc :=_feba [_cfea ];if !_fccfc {continue ;};_ceagg :=_gbeg .inTile (_abbc );if len (_ceagg )==0{_fbaf ++;if _fbaf > _ggcb {if _dac {_cg .Log .Info ("\u0021\u006e\u0075m\u0045\u006d\u0070\u0074\u0079\u003d\u0025\u0064",_fbaf );};return nil ,nil ;};}else {_bddc .putComposite (_fddgc ,_fbdg ,_ceagg ,_abbc .PdfRectangle );for _ ,_cgcg :=range _ceagg {_eade [_cgcg ]=struct{}{};};};};};_cfeg :=0;for _cbcf :=0;_cbcf < _fccag ;_cbcf ++{_faef :=_bddc .get (_cbcf ,0);if _faef ==nil ||!_faef ._cfbg {_cfeg ++;};};if _cfeg ==0{if _dac {_cg .Log .Info ("\u0021\u006e\u0075m\u0048\u0065\u0061\u0064\u0065\u0072\u003d\u0030");};return nil ,nil ;};_dacg :=_bddc .reduceTiling (_fefda ,_fbdf );_dacg =_dacg .subdivide ();return _dacg ,_eade ;};
// String returns a human readable description of `path`.
func (_bbd *subpath )String ()string {_cda :=_bbd ._eadd ;_bgdf :=len (_cda );if _bgdf <=5{return _fg .Sprintf ("\u0025d\u003a\u0020\u0025\u0036\u002e\u0032f",_bgdf ,_cda );};return _fg .Sprintf ("\u0025d\u003a\u0020\u0025\u0036.\u0032\u0066\u0020\u0025\u0036.\u0032f\u0020.\u002e\u002e\u0020\u0025\u0036\u002e\u0032f",_bgdf ,_cda [0],_cda [1],_cda [_bgdf -1]);};func (_bdee *textTable )compositeRowCorridors ()map[int ][]float64 {_acef :=make (map[int ][]float64 ,_bdee ._eagaa );if _egfe {_cg .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",_bdee ._eagaa );};for _efcbcd :=1;_efcbcd < _bdee ._eagaa ;_efcbcd ++{var _bfdd []compositeCell ;for _dafdf :=0;_dafdf < _bdee ._gdgf ;_dafdf ++{if _efea ,_dcegc :=_bdee ._gdea [_cdfa (_dafdf ,_efcbcd )];_dcegc {_bfdd =append (_bfdd ,_efea );};};if len (_bfdd )==0{continue ;};_fbfbg :=_bbdc (_bfdd );_acef [_efcbcd ]=_fbfbg ;if _egfe {_fg .Printf ("\u0020\u0020\u0020\u0025\u0032\u0064\u003a\u0020\u00256\u002e\u0032\u0066\u000a",_efcbcd ,_fbfbg );};};return _acef ;};func _gacg (_adb ,_gbfd bounded )float64 {_cgbd :=_abdc (_adb ,_gbfd );if !_gaabc (_cgbd ){return _cgbd ;};return _cffe (_adb ,_gbfd );};func (_eddfe *textTable )log (_ecbac string ){if !_egfe {return ;};_cg .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",_ecbac ,_eddfe ._gdgf ,_eddfe ._eagaa ,_eddfe ._aead ,_eddfe .PdfRectangle );for _fgdbg :=0;_fgdbg < _eddfe ._eagaa ;_fgdbg ++{for _eacce :=0;_eacce < _eddfe ._gdgf ;_eacce ++{_bdcf :=_eddfe .get (_eacce ,_fgdbg );if _bdcf ==nil {continue ;};_fg .Printf ("%\u0034\u0064\u0020\u00252d\u003a \u0025\u0036\u002e\u0032\u0066 \u0025\u0071\u0020\u0025\u0064\u000a",_eacce ,_fgdbg ,_bdcf .PdfRectangle ,_cacb (_bdcf .text (),50),_d .RuneCountInString (_bdcf .text ()));};};};
// Tables returns the tables extracted from the page.
func (_egd PageText )Tables ()[]TextTable {if _egfe {_cg .Log .Info ("\u0054\u0061\u0062\u006c\u0065\u0073\u003a\u0020\u0025\u0064",len (_egd ._accee ));};return _egd ._accee ;};func _afgc (_bcfg map[float64 ]map[float64 ]gridTile )[]float64 {_bfca :=make ([]float64 ,0,len (_bcfg ));_dbae :=make (map[float64 ]struct{},len (_bcfg ));for _ ,_dbdd :=range _bcfg {for _efgg :=range _dbdd {if _ ,_aecg :=_dbae [_efgg ];_aecg {continue ;};_bfca =append (_bfca ,_efgg );_dbae [_efgg ]=struct{}{};};};_a .Float64s (_bfca );return _bfca ;};type textMark struct{_eb .PdfRectangle ;_ccce int ;_ffab string ;_gebf string ;_egde *_eb .PdfFont ;_ebec float64 ;_fccf float64 ;_dged _ce .Matrix ;_eaddf _ce .Point ;_bcff _eb .PdfRectangle ;_gaac _e .Color ;_cbd _e .Color ;};
// String returns a description of `t`.
func (_eaceb *textTable )String ()string {return _fg .Sprintf ("\u0025\u0064\u0020\u0078\u0020\u0025\u0064\u0020\u0025\u0074",_eaceb ._gdgf ,_eaceb ._eagaa ,_eaceb ._aead );};func (_efga *textTable )emptyRow (_cagf int )bool {for _ccfbb :=0;_ccfbb < _efga ._gdgf ;_ccfbb ++{_cbeec :=_efga .get (_ccfbb ,_cagf );if _cbeec !=nil &&_cbeec .text ()!=""{return false ;};};return true ;};func (_bfgc *textObject )newTextMark (_faac string ,_adad _ce .Matrix ,_ggce _ce .Point ,_aceg float64 ,_aefgb *_eb .PdfFont ,_gcca float64 ,_cfeb ,_ddfc _e .Color )(textMark ,bool ){_faaa :=_adad .Angle ();_fdbfb :=_acgd (_faaa ,_bgfc );var _bfcg float64 ;if _fdbfb %180!=90{_bfcg =_adad .ScalingFactorY ();}else {_bfcg =_adad .ScalingFactorX ();};_facf :=_fcae (_adad );_ccda :=_eb .PdfRectangle {Llx :_facf .X ,Lly :_facf .Y ,Urx :_ggce .X ,Ury :_ggce .Y };switch _fdbfb %360{case 90:_ccda .Urx -=_bfcg ;case 180:_ccda .Ury -=_bfcg ;case 270:_ccda .Urx +=_bfcg ;case 0:_ccda .Ury +=_bfcg ;default:_fdbfb =0;_ccda .Ury +=_bfcg ;};if _ccda .Llx > _ccda .Urx {_ccda .Llx ,_ccda .Urx =_ccda .Urx ,_ccda .Llx ;};if _ccda .Lly > _ccda .Ury {_ccda .Lly ,_ccda .Ury =_ccda .Ury ,_ccda .Lly ;};_cedbf ,_fecd :=_gcc (_ccda ,_bfgc ._adfa ._ef );if !_fecd {_cg .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",_ccda ,_bfgc ._adfa ._ef ,_faac );};_ccda =_cedbf ;_aaaab :=_ccda ;_dfe :=_bfgc ._adfa ._ef ;switch _fdbfb %360{case 90:_dfe .Urx ,_dfe .Ury =_dfe .Ury ,_dfe .Urx ;_aaaab =_eb .PdfRectangle {Llx :_dfe .Urx -_ccda .Ury ,Urx :_dfe .Urx -_ccda .Lly ,Lly :_ccda .Llx ,Ury :_ccda .Urx };case 180:_aaaab =_eb .PdfRectangle {Llx :_dfe .Urx -_ccda .Llx ,Urx :_dfe .Urx -_ccda .Urx ,Lly :_dfe .Ury -_ccda .Lly ,Ury :_dfe .Ury -_ccda .Ury };case 270:_dfe .Urx ,_dfe .Ury =_dfe .Ury ,_dfe .Urx ;_aaaab =_eb .PdfRectangle {Llx :_ccda .Ury ,Urx :_ccda .Lly ,Lly :_dfe .Ury -_ccda .Llx ,Ury :_dfe .Ury -_ccda .Urx };};if _aaaab .Llx > _aaaab .Urx {_aaaab .Llx ,_aaaab .Urx =_aaaab .Urx ,_aaaab .Llx ;};if _aaaab .Lly > _aaaab .Ury {_aaaab .Lly ,_aaaab .Ury =_aaaab .Ury ,_aaaab .Lly ;};_cded :=textMark {_ffab :_faac ,PdfRectangle :_aaaab ,_bcff :_ccda ,_egde :_aefgb ,_ebec :_bfcg ,_fccf :_gcca ,_dged :_adad ,_eaddf :_ggce ,_ccce :_fdbfb ,_gaac :_cfeb ,_cbd :_ddfc };if _gecd {_cg .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",_facf ,_ggce ,_cded .String ());};return _cded ,_fecd ;};func (_afaeg *ruling )encloses (_adbd ,_aaba float64 )bool {return _afaeg ._dafad -_bbeb <=_adbd &&_aaba <=_afaeg ._bacb +_bbeb ;};type rulingList []*ruling ;func (_dagdg *shapesState )lastpointEstablished ()(_ce .Point ,bool ){if _dagdg ._gdca {return _dagdg ._bgbd ,false ;};_eebc :=len (_dagdg ._cddf );if _eebc > 0&&_dagdg ._cddf [_eebc -1]._dff {return _dagdg ._cddf [_eebc -1].last (),false ;};return _ce .Point {},true ;};func _aecbc (_efagf _eb .PdfColorspace ,_bfgce _eb .PdfColor )_e .Color {if _efagf ==nil ||_bfgce ==nil {return _e .Black ;};_cdfge ,_cbcgd :=_efagf .ColorToRGB (_bfgce );if _cbcgd !=nil {_cg .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",_bfgce ,_efagf ,_cbcgd );return _e .Black ;};_cfbcc ,_bcaafg :=_cdfge .(*_eb .PdfColorDeviceRGB );if !_bcaafg {_cg .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",_cdfge );return _e .Black ;};return _e .NRGBA {R :uint8 (_cfbcc .R ()*255),G :uint8 (_cfbcc .G ()*255),B :uint8 (_cfbcc .B ()*255),A :uint8 (255)};};
// 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 (_cae *TextMarkArray )RangeOffset (start ,end int )(*TextMarkArray ,error ){if _cae ==nil {return nil ,_f .New ("\u006da\u003d\u003d\u006e\u0069\u006c");};if end < start {return nil ,_fg .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 );};_dgff :=len (_cae ._dcae );if _dgff ==0{return _cae ,nil ;};if start < _cae ._dcae [0].Offset {start =_cae ._dcae [0].Offset ;};if end > _cae ._dcae [_dgff -1].Offset +1{end =_cae ._dcae [_dgff -1].Offset +1;};_eda :=_a .Search (_dgff ,func (_abd int )bool {return _cae ._dcae [_abd ].Offset +len (_cae ._dcae [_abd ].Text )-1>=start });if !(0<=_eda &&_eda < _dgff ){_dcdc :=_fg .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 ,_eda ,_dgff ,_cae ._dcae [0],_cae ._dcae [_dgff -1]);return nil ,_dcdc ;};_cbgf :=_a .Search (_dgff ,func (_cgc int )bool {return _cae ._dcae [_cgc ].Offset > end -1});if !(0<=_cbgf &&_cbgf < _dgff ){_bcg :=_fg .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 ,_cbgf ,_dgff ,_cae ._dcae [0],_cae ._dcae [_dgff -1]);return nil ,_bcg ;};if _cbgf <=_eda {return nil ,_fg .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 ,_eda ,_cbgf );};return &TextMarkArray {_dcae :_cae ._dcae [_eda :_cbgf ]},nil ;};func _gfbcd (_cfabf *textWord ,_dgfc float64 ,_cdg ,_bdad rulingList )*wordBag {_afgf :=_ddfb (_cfabf ._dfgg );_eaae :=[]*textWord {_cfabf };_feec :=wordBag {_fccg :map[int ][]*textWord {_afgf :_eaae },PdfRectangle :_cfabf .PdfRectangle ,_ebbb :_cfabf ._cbbbc ,_eaga :_dgfc ,_fcab :_cdg ,_gegg :_bdad };return &_feec ;};func (_fdda *textTable )growTable (){_adfd :=func (_cgfab paraList ){_fdda ._eagaa ++;for _gcda :=0;_gcda < _fdda ._gdgf ;_gcda ++{_bcab :=_cgfab [_gcda ];_fdda .put (_gcda ,_fdda ._eagaa -1,_bcab );};};_ebca :=func (_ecca paraList ){_fdda ._gdgf ++;for _adceg :=0;_adceg < _fdda ._eagaa ;_adceg ++{_abgac :=_ecca [_adceg ];_fdda .put (_fdda ._gdgf -1,_adceg ,_abgac );};};if _abgc {_fdda .log ("\u0067r\u006f\u0077\u0054\u0061\u0062\u006ce");};for _efdaf :=0;;_efdaf ++{_fbfda :=false ;_gagda :=_fdda .getDown ();_eeef :=_fdda .getRight ();if _abgc {_fg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_efdaf ,_fdda );_fg .Printf ("\u0020\u0020 \u0020\u0020\u0020 \u0020\u0064\u006f\u0077\u006e\u003d\u0025\u0073\u000a",_gagda );_fg .Printf ("\u0020\u0020 \u0020\u0020\u0020 \u0072\u0069\u0067\u0068\u0074\u003d\u0025\u0073\u000a",_eeef );};if _gagda !=nil &&_eeef !=nil {_dcceg :=_gagda [len (_gagda )-1];if _dcceg !=nil &&!_dcceg ._gaef &&_dcceg ==_eeef [len (_eeef )-1]{_adfd (_gagda );if _eeef =_fdda .getRight ();_eeef !=nil {_ebca (_eeef );_fdda .put (_fdda ._gdgf -1,_fdda ._eagaa -1,_dcceg );};_fbfda =true ;};};if !_fbfda &&_gagda !=nil {_adfd (_gagda );_fbfda =true ;};if !_fbfda &&_eeef !=nil {_ebca (_eeef );_fbfda =true ;};if !_fbfda {break ;};};};func (_bgad *ruling )equals (_gafa *ruling )bool {return _bgad ._dbgef ==_gafa ._dbgef &&_cffff (_bgad ._dbaac ,_gafa ._dbaac )&&_cffff (_bgad ._dafad ,_gafa ._dafad )&&_cffff (_bgad ._bacb ,_gafa ._bacb );};var _dadff =map[markKind ]string {_cdgf :"\u0073\u0074\u0072\u006f\u006b\u0065",_dead :"\u0066\u0069\u006c\u006c",_bagg :"\u0061u\u0067\u006d\u0065\u006e\u0074"};var _deaff =map[rulingKind ]string {_gbab :"\u006e\u006f\u006e\u0065",_gcbe :"\u0068\u006f\u0072\u0069\u007a\u006f\u006e\u0074\u0061\u006c",_ebga :"\u0076\u0065\u0072\u0074\u0069\u0063\u0061\u006c"};
// TableCell is a cell in a TextTable.
type TableCell struct{
// Text is the extracted text.
Text string ;
// Marks returns the TextMarks corresponding to the text in Text.
Marks TextMarkArray ;};
// 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 _abdc (_ffae ,_aefg bounded )float64 {return _debe (_ffae )-_debe (_aefg )};func _caae (_gfbd ,_begdb ,_agcb float64 )rulingKind {if _gfbd >=_agcb &&_bgcab (_begdb ,_gfbd ){return _gcbe ;};if _begdb >=_agcb &&_bgcab (_gfbd ,_begdb ){return _ebga ;};return _gbab ;};func (_fbba *textTable )put (_fegc ,_gdgfa int ,_dafgf *textPara ){_fbba ._edeac [_cdfa (_fegc ,_gdgfa )]=_dafgf ;};func (_adg *textObject )nextLine (){_adg .moveLP (0,-_adg ._ddd ._ccc )};func (_abgb lineRuling )asRuling ()(*ruling ,bool ){_ddeg :=ruling {_dbgef :_abgb ._degfd ,Color :_abgb .Color ,_badd :_cdgf };switch _abgb ._degfd {case _ebga :_ddeg ._dbaac =_abgb .xMean ();_ddeg ._dafad =_c .Min (_abgb ._ecbef .Y ,_abgb ._fagb .Y );_ddeg ._bacb =_c .Max (_abgb ._ecbef .Y ,_abgb ._fagb .Y );case _gcbe :_ddeg ._dbaac =_abgb .yMean ();_ddeg ._dafad =_c .Min (_abgb ._ecbef .X ,_abgb ._fagb .X );_ddeg ._bacb =_c .Max (_abgb ._ecbef .X ,_abgb ._fagb .X );default:_cg .Log .Error ("\u0062\u0061\u0064\u0020pr\u0069\u006d\u0061\u0072\u0079\u0020\u006b\u0069\u006e\u0064\u003d\u0025\u0064",_abgb ._degfd );return nil ,false ;};return &_ddeg ,true ;};func (_dbed *wordBag )firstReadingIndex (_fdgb int )int {_cea :=_dbed .firstWord (_fdgb )._cbbbc ;_ecbdd :=float64 (_fdgb +1)*_dafd ;_efcc :=_ecbdd +_cbeb *_cea ;_ced :=_fdgb ;for _ ,_ebg :=range _dbed .depthBand (_ecbdd ,_efcc ){if _cffe (_dbed .firstWord (_ebg ),_dbed .firstWord (_ced ))< 0{_ced =_ebg ;};};return _ced ;};func (_gccf paraList )findGridTables (_cbag []gridTiling )[]*textTable {if _egfe {_cg .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 (_gccf ));for _aeaff ,_badba :=range _gccf {_fg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_aeaff ,_badba );};};var _cfef []*textTable ;for _egdc ,_egce :=range _cbag {_eeg ,_edcd :=_gccf .findTableGrid (_egce );if _eeg !=nil {_eeg .log (_fg .Sprintf ("\u0066\u0069\u006e\u0064Ta\u0062\u006c\u0065\u0057\u0069\u0074\u0068\u0047\u0072\u0069\u0064\u0073\u003a\u0020%\u0064",_egdc ));_cfef =append (_cfef ,_eeg );_eeg .markCells ();};for _egfdd :=range _edcd {_egfdd ._gaef =true ;};};if _egfe {_cg .Log .Info ("\u0066i\u006e\u0064\u0047\u0072i\u0064\u0054\u0061\u0062\u006ce\u0073:\u0020%\u0064\u0020\u0074\u0061\u0062\u006c\u0065s",len (_cfef ));};return _cfef ;};type textLine struct{_eb .PdfRectangle ;_cfaa float64 ;_edgc []*textWord ;_gcff float64 ;};func (_aadg *stateStack )size ()int {return len (*_aadg )};
// String returns a string descibing `i`.
func (_eeea gridTile )String ()string {_gacgfe :=func (_cbebb bool ,_ecff string )string {if _cbebb {return _ecff ;};return "\u005f";};return _fg .Sprintf ("\u00256\u002e2\u0066\u0020\u0025\u0031\u0073%\u0031\u0073%\u0031\u0073\u0025\u0031\u0073",_eeea .PdfRectangle ,_gacgfe (_eeea ._ebed ,"\u004c"),_gacgfe (_eeea ._bbc ,"\u0052"),_gacgfe (_eeea ._beag ,"\u0042"),_gacgfe (_eeea ._dgbba ,"\u0054"));};func (_cfgg *wordBag )pullWord (_dfbbd *textWord ,_gada int ,_cbgd map[int ]map[*textWord ]struct{}){_cfgg .PdfRectangle =_cbcc (_cfgg .PdfRectangle ,_dfbbd .PdfRectangle );if _dfbbd ._cbbbc > _cfgg ._ebbb {_cfgg ._ebbb =_dfbbd ._cbbbc ;};_cfgg ._fccg [_gada ]=append (_cfgg ._fccg [_gada ],_dfbbd );_cbgd [_gada ][_dfbbd ]=struct{}{};};func _fgag (_dcg _ce .Point )_ce .Matrix {return _ce .TranslationMatrix (_dcg .X ,_dcg .Y )};func _fdbf (_badb ,_fabd bounded )float64 {_bfgf :=_cffe (_badb ,_fabd );if !_gaabc (_bfgf ){return _bfgf ;};return _abdc (_badb ,_fabd );};func (_eabe paraList )applyTables (_adaf []*textTable )paraList {var _dbbd paraList ;for _ ,_fbccg :=range _adaf {_dbbd =append (_dbbd ,_fbccg .newTablePara ());};for _ ,_ecgbd :=range _eabe {if _ecgbd ._gaef {continue ;};_dbbd =append (_dbbd ,_ecgbd );};return _dbbd ;};func (_gee *wordBag )sort (){for _ ,_eeaf :=range _gee ._fccg {_a .Slice (_eeaf ,func (_aggg ,_feea int )bool {return _cffe (_eeaf [_aggg ],_eeaf [_feea ])< 0});};};
// PageImages represents extracted images on a PDF page with spatial information:
// display position and size.
type PageImages struct{Images []ImageMark ;};func (_bcad *shapesState )fill (_fdeb *[]pathSection ){_gaaf :=pathSection {_ecf :_bcad ._cddf ,Color :_bcad ._cfe .getFillColor ()};*_fdeb =append (*_fdeb ,_gaaf );if _bdf {_ebee :=_gaaf .bbox ();_fg .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 (*_fdeb ),len (_gaaf ._ecf ),_bcad ,_gaaf .Color ,_ebee ,_ebee .Width (),_ebee .Height ());if _beebe {for _baae ,_ffe :=range _gaaf ._ecf {_fg .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_baae ,_ffe );if _baae ==10{break ;};};};};};func (_ebce *textTable )getRight ()paraList {_agbba :=make (paraList ,_ebce ._eagaa );for _bgcabg :=0;_bgcabg < _ebce ._eagaa ;_bgcabg ++{_abdcf :=_ebce .get (_ebce ._gdgf -1,_bgcabg )._dgfe ;if _abdcf ==nil ||_abdcf ._gaef {return nil ;};_agbba [_bgcabg ]=_abdcf ;};for _dceg :=0;_dceg < _ebce ._eagaa -1;_dceg ++{if _agbba [_dceg ]._ggdd !=_agbba [_dceg +1]{return nil ;};};return _agbba ;};func (_dge *shapesState )moveTo (_fbd ,_fge float64 ){_dge ._gdca =true ;_dge ._bgbd =_dge .devicePoint (_fbd ,_fge );if _fcdb {_cg .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",_fbd ,_fge ,_dge ._bgbd );};};func (_aeg *stateStack )pop ()*textState {if _aeg .empty (){return nil ;};_daeb :=*(*_aeg )[len (*_aeg )-1];*_aeg =(*_aeg )[:len (*_aeg )-1];return &_daeb ;};type gridTiling struct{_eb .PdfRectangle ;_gcdb []float64 ;_dfdf []float64 ;_ddggg map[float64 ]map[float64 ]gridTile ;};func _eecg (_cdgd ,_ebada _eb .PdfRectangle )bool {return _cdgd .Llx <=_ebada .Llx &&_ebada .Urx <=_cdgd .Urx &&_cdgd .Lly <=_ebada .Lly &&_ebada .Ury <=_cdgd .Ury ;};type bounded interface{bbox ()_eb .PdfRectangle };func _dfgb (_cfgca []TextMark ,_fbef *int )[]TextMark {_fdabe :=_cfgca [len (_cfgca )-1];_fgfb :=[]rune (_fdabe .Text );if len (_fgfb )==1{_cfgca =_cfgca [:len (_cfgca )-1];_dcec :=_cfgca [len (_cfgca )-1];*_fbef =_dcec .Offset +len (_dcec .Text );}else {_ceaf :=_bbgf (_fdabe .Text );*_fbef +=len (_ceaf )-len (_fdabe .Text );_fdabe .Text =_ceaf ;};return _cfgca ;};func _ddaea (_cfdff ,_baabg int )int {if _cfdff > _baabg {return _cfdff ;};return _baabg ;};func (_agga *textObject )getFillColor ()_e .Color {return _aecbc (_agga ._abb .ColorspaceNonStroking ,_agga ._abb .ColorNonStroking );};type wordBag struct{_eb .PdfRectangle ;_ebbb float64 ;_fcab ,_gegg rulingList ;_eaga float64 ;_fccg map[int ][]*textWord ;};func (_fdge intSet )has (_feafd int )bool {_ ,_bedfe :=_fdge [_feafd ];return _bedfe };func (_cf *imageExtractContext )processOperand (_ed *_acb .ContentStreamOperation ,_fda _acb .GraphicsState ,_dg *_eb .PdfPageResources )error {if _ed .Operand =="\u0042\u0049"&&len (_ed .Params )==1{_beb ,_bea :=_ed .Params [0].(*_acb .ContentStreamInlineImage );if !_bea {return nil ;};if _aea ,_bcf :=_dfc .GetBoolVal (_beb .ImageMask );_bcf {if _aea &&!_cf ._ae .IncludeInlineStencilMasks {return nil ;};};return _cf .extractInlineImage (_beb ,_fda ,_dg );}else if _ed .Operand =="\u0044\u006f"&&len (_ed .Params )==1{_ea ,_fcf :=_dfc .GetName (_ed .Params [0]);if !_fcf {_cg .Log .Debug ("E\u0052\u0052\u004f\u0052\u003a\u0020\u0054\u0079\u0070\u0065");return _bc ;};_ ,_gg :=_dg .GetXObjectByName (*_ea );switch _gg {case _eb .XObjectTypeImage :return _cf .extractXObjectImage (_ea ,_fda ,_dg );case _eb .XObjectTypeForm :return _cf .extractFormImages (_ea ,_fda ,_dg );};};return nil ;};func (_aegb paraList )reorder (_eecgf []int ){_ccgg :=make (paraList ,len (_aegb ));for _dedf ,_fdabc :=range _eecgf {_ccgg [_dedf ]=_aegb [_fdabc ];};copy (_aegb ,_ccgg );};func (_eccd paraList )log (_fcbg string ){if !_adbg {return ;};_cg .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",_fcbg ,len (_eccd ));for _accea ,_cfadd :=range _eccd {if _cfadd ==nil {continue ;};_gaea :=_cfadd .text ();_ggcfe :="\u0020\u0020";if _cfadd ._deec !=nil {_ggcfe =_fg .Sprintf ("\u005b%\u0064\u0078\u0025\u0064\u005d",_cfadd ._deec ._gdgf ,_cfadd ._deec ._eagaa );};_fg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u0025s\u0020\u0025\u0071\u000a",_accea ,_cfadd .PdfRectangle ,_ggcfe ,_cacb (_gaea ,50));};};func (_bcddc *textTable )getComposite (_aggea ,_cdab int )(paraList ,_eb .PdfRectangle ){_bbac ,_ebcf :=_bcddc ._gdea [_cdfa (_aggea ,_cdab )];if _egfe {_fg .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",_aggea ,_cdab ,_bbac .String ());};if !_ebcf {return nil ,_eb .PdfRectangle {};};return _bbac .parasBBox ();};func (_afdg *textObject )renderText (_ecga []byte )error {if _afdg ._gfbge {_cg .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 ;};_gdc :=_afdg .getCurrentFont ();_ecaad :=_gdc .BytesToCharcodes (_ecga );_fbgcd ,_eab ,_afae :=_gdc .CharcodesToStrings (_ecaad );if _afae > 0{_cg .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",_eab ,_afae );};_afdg ._ddd ._eecc +=_eab ;_afdg ._ddd ._def +=_afae ;_ddgg :=_afdg ._ddd ;_fcd :=_ddgg ._dcb ;_acaf :=_ddgg ._ada /100.0;_ffbc ,_cfc :=_gdc .GetRuneMetrics (' ');if !_cfc {_ffbc ,_cfc =_gdc .GetCharMetrics (32);};if !_cfc {_ffbc ,_ =_eb .DefaultFont ().GetRuneMetrics (' ');};_cbg :=_ffbc .Wx *_cebd ;_cg .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",_cbg ,_fbgcd ,_gdc ,_fcd );_gdbg :=_ce .NewMatrix (_fcd *_acaf ,0,0,_fcd ,0,_ddgg ._ccag );if _fdegg {_cg .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 (_ecaad ),_ecaad ,_fbgcd );};_cg .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 (_ecaad ),_ecaad ,len (_fbgcd ));_geb :=_afdg .getFillColor ();_cabg :=_afdg .getStrokeColor ();for _ecdd ,_gdff :=range _fbgcd {_dbaf :=[]rune (_gdff );if len (_dbaf )==1&&_dbaf [0]=='\x00'{continue ;};_cdea :=_ecaad [_ecdd ];_abc :=_afdg ._abb .CTM .Mult (_afdg ._fafg ).Mult (_gdbg );_fgf :=0.0;if len (_dbaf )==1&&_dbaf [0]==32{_fgf =_ddgg ._fac ;};_ccg ,_fab :=_gdc .GetCharMetrics (_cdea );if !_fab {_cg .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",_cdea ,_dbaf ,_dbaf ,_gdc );return _fg .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",_gdc .String (),_cdea );};_cbed :=_ce .Point {X :_ccg .Wx *_cebd ,Y :_ccg .Wy *_cebd };_eacf :=_ce .Point {X :(_cbed .X *_fcd +_fgf )*_acaf };_cffb :=_ce .Point {X :(_cbed .X *_fcd +_ddgg ._effg +_fgf )*_acaf };if _fdegg {_cg .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",_fcd ,_ddgg ._effg ,_ddgg ._fac ,_acaf );_cg .Log .Info ("\u0064x\u002c\u0064\u0079\u003d%\u002e\u0033\u0066\u0020\u00740\u003d%\u002e3\u0066\u0020\u0074\u003d\u0025\u002e\u0033f",_cbed ,_eacf ,_cffb );};_dca :=_fgag (_eacf );_bbbb :=_fgag (_cffb );_fca :=_afdg ._abb .CTM .Mult (_afdg ._fafg ).Mult (_dca );if _aecfa {_cg .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",_afdg ._abb .CTM ,_afdg ._fafg ,_bbbb ,_fcae (_afdg ._abb .CTM .Mult (_afdg ._fafg ).Mult (_bbbb )),_dca ,_fca ,_fcae (_fca ));};_fad ,_ecce :=_afdg .newTextMark (_be .ExpandLigatures (_dbaf ),_abc ,_fcae (_fca ),_c .Abs (_cbg *_abc .ScalingFactorX ()),_gdc ,_afdg ._ddd ._effg ,_geb ,_cabg );if !_ecce {_cg .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 _gdc ==nil {_cg .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u004e\u006f\u0020\u0066\u006f\u006e\u0074\u002e");}else if _gdc .Encoder ()==nil {_cg .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",_gdc );}else {if _fga ,_cce :=_gdc .Encoder ().CharcodeToRune (_cdea );_cce {_fad ._gebf =string (_fga );};};_cg .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",_ecdd ,_cdea ,_fad ,_abc );_afdg ._geg =append (_afdg ._geg ,&_fad );_afdg ._fafg .Concat (_bbbb );};return nil ;};
// String returns a description of `state`.
func (_fdbe *textState )String ()string {_cgf :="\u005bN\u004f\u0054\u0020\u0053\u0045\u0054]";if _fdbe ._ded !=nil {_cgf =_fdbe ._ded .BaseFont ();};return _fg .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",_fdbe ._effg ,_fdbe ._fac ,_fdbe ._dcb ,_cgf );};func _ecbdb (_agaf *wordBag ,_ggc *textWord ,_fgga float64 )bool {return _agaf .Urx <=_ggc .Llx &&_ggc .Llx < _agaf .Urx +_fgga ;};func (_fabb *textPara )writeCellText (_bbdd _bf .Writer ){for _dadgf ,_agcag :=range _fabb ._ffac {_ggcf :=_agcag .text ();_bafee :=_aebd &&_agcag .endsInHyphen ()&&_dadgf !=len (_fabb ._ffac )-1;if _bafee {_ggcf =_bbgf (_ggcf );};_bbdd .Write ([]byte (_ggcf ));if !(_bafee ||_dadgf ==len (_fabb ._ffac )-1){_bbdd .Write ([]byte (_aabg (_agcag ._cfaa ,_fabb ._ffac [_dadgf +1]._cfaa )));};};};func (_cdbg *wordBag )firstWord (_baca int )*textWord {return _cdbg ._fccg [_baca ][0]};
// String returns a string describing `ma`.
func (_bdd TextMarkArray )String ()string {_ecgf :=len (_bdd ._dcae );if _ecgf ==0{return "\u0045\u004d\u0050T\u0059";};_fceb :=_bdd ._dcae [0];_gea :=_bdd ._dcae [_ecgf -1];return _fg .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",_ecgf ,_fceb ,_gea );};func _cfee (_geae []*textMark ,_ega _eb .PdfRectangle ,_ddbf rulingList ,_defg []gridTiling )paraList {_cg .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 (_geae ),_ega );if len (_geae )==0{return nil ;};_fgea :=_ggef (_geae ,_ega );if len (_fgea )==0{return nil ;};_ddbf .log ("\u006d\u0061\u006be\u0054\u0065\u0078\u0074\u0050\u0061\u0067\u0065");_fabc ,_bbefc :=_ddbf .vertsHorzs ();_abff :=_ecddf (_fgea ,_ega .Ury ,_fabc ,_bbefc );_fcca :=_egfeg (_abff ,_ega .Ury ,_fabc ,_bbefc );_fcca =_cbc (_fcca );_bcbf :=make (paraList ,0,len (_fcca ));for _ ,_eafe :=range _fcca {_gagd :=_eafe .arrangeText ();if _gagd !=nil {_bcbf =append (_bcbf ,_gagd );};};if len (_bcbf )>=_gdbf {_bcbf =_bcbf .extractTables (_defg );};_bcbf .sortReadingOrder ();_bcbf .log ("\u0073\u006f\u0072te\u0064\u0020\u0069\u006e\u0020\u0072\u0065\u0061\u0064\u0069\u006e\u0067\u0020\u006f\u0072\u0064\u0065\u0072");return _bcbf ;};func (_cagd *textPara )isAtom ()*textTable {_gebc :=_cagd ;_edga :=_cagd ._dgfe ;_fcfgg :=_cagd ._ggdd ;if !(_edga !=nil &&!_edga ._gaef &&_fcfgg !=nil &&!_fcfgg ._gaef ){return nil ;};_acdcb :=_edga ._ggdd ;if !(_acdcb !=nil &&!_acdcb ._gaef &&_acdcb ==_fcfgg ._dgfe ){return nil ;};return _egea (_gebc ,_edga ,_fcfgg ,_acdcb );};
// String returns a string describing the current state of the textState stack.
func (_egb *stateStack )String ()string {_dae :=[]string {_fg .Sprintf ("\u002d\u002d\u002d\u002d f\u006f\u006e\u0074\u0020\u0073\u0074\u0061\u0063\u006b\u003a\u0020\u0025\u0064",len (*_egb ))};for _gbg ,_bdg :=range *_egb {_dfbb :="\u003c\u006e\u0069l\u003e";if _bdg !=nil {_dfbb =_bdg .String ();};_dae =append (_dae ,_fg .Sprintf ("\u0009\u0025\u0032\u0064\u003a\u0020\u0025\u0073",_gbg ,_dfbb ));};return _fc .Join (_dae ,"\u000a");};func _fba (_gbce *_acb .ContentStreamOperation )(float64 ,error ){if len (_gbce .Params )!=1{_aggc :=_f .New ("\u0069n\u0063\u006f\u0072\u0072e\u0063\u0074\u0020\u0070\u0061r\u0061m\u0065t\u0065\u0072\u0020\u0063\u006f\u0075\u006et");_cg .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",_gbce .Operand ,1,len (_gbce .Params ),_gbce .Params );return 0.0,_aggc ;};return _dfc .GetNumberAsFloat (_gbce .Params [0]);};func _aeeb (_ffgc *PageText )error {_eebce :=_fd .GetLicenseKey ();if _eebce !=nil &&_eebce .IsLicensed ()||_ad {return nil ;};_fg .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");_fg .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 _f .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 _abec (_bddg ,_eage _ce .Point )rulingKind {_bbfb :=_c .Abs (_bddg .X -_eage .X );_gdbfb :=_c .Abs (_bddg .Y -_eage .Y );return _caae (_bbfb ,_gdbfb ,_bgdfd );};func (_cedbfa gridTile )complete ()bool {return _cedbfa .numBorders ()==4};func (_gfg paraList )sortReadingOrder (){_cg .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 (_gfg ));if len (_gfg )<=1{return ;};_gfg .computeEBBoxes ();_a .Slice (_gfg ,func (_gdfe ,_bfbc int )bool {return _gacg (_gfg [_gdfe ],_gfg [_bfbc ])<=0});_ece :=_gfg .topoOrder ();_gfg .reorder (_ece );};func (_fbbe rulingList )bbox ()_eb .PdfRectangle {var _ddcca _eb .PdfRectangle ;if len (_fbbe )==0{_cg .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 _eb .PdfRectangle {};};if _fbbe [0]._dbgef ==_gcbe {_ddcca .Llx ,_ddcca .Urx =_fbbe .secMinMax ();_ddcca .Lly ,_ddcca .Ury =_fbbe .primMinMax ();}else {_ddcca .Llx ,_ddcca .Urx =_fbbe .primMinMax ();_ddcca .Lly ,_ddcca .Ury =_fbbe .secMinMax ();};return _ddcca ;};func (_bgca *textObject )setTextRenderMode (_bbef int ){if _bgca ==nil {return ;};_bgca ._ddd ._dcd =RenderMode (_bbef );};func (_ggff rulingList )toTilings ()(rulingList ,[]gridTiling ){_ggff .log ("\u0074o\u0054\u0069\u006c\u0069\u006e\u0067s");if len (_ggff )==0{return nil ,nil ;};_ggff =_ggff .tidied ("\u0061\u006c\u006c");_ggff .log ("\u0074\u0069\u0064\u0069\u0065\u0064");_dcdca :=_ggff .toGrids ();_fcgac :=make ([]gridTiling ,len (_dcdca ));for _gfeb ,_ecbfg :=range _dcdca {_fcgac [_gfeb ]=_ecbfg .asTiling ();};return _ggff ,_fcgac ;};
// 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 (_dga PageText )ToText ()string {return _dga .Text ()};func (_fefd paraList )readBefore (_dfbg []int ,_edbg ,_gde int )bool {_ddbd ,_dddb :=_fefd [_edbg ],_fefd [_gde ];if _gcga (_ddbd ,_dddb )&&_ddbd .Lly > _dddb .Lly {return true ;};if !(_ddbd ._eead .Urx < _dddb ._eead .Llx ){return false ;};_gcde ,_cdbd :=_ddbd .Lly ,_dddb .Lly ;if _gcde > _cdbd {_cdbd ,_gcde =_gcde ,_cdbd ;};_gfefd :=_c .Max (_ddbd ._eead .Llx ,_dddb ._eead .Llx );_cdeg :=_c .Min (_ddbd ._eead .Urx ,_dddb ._eead .Urx );_gdgcc :=_fefd .llyRange (_dfbg ,_gcde ,_cdbd );for _ ,_degf :=range _gdgcc {if _degf ==_edbg ||_degf ==_gde {continue ;};_fcecc :=_fefd [_degf ];if _fcecc ._eead .Llx <=_cdeg &&_gfefd <=_fcecc ._eead .Urx {return false ;};};return true ;};
// Extractor stores and offers functionality for extracting content from PDF pages.
type Extractor struct{_de string ;_ebd *_eb .PdfPageResources ;_ef _eb .PdfRectangle ;_ebf map[string ]fontEntry ;_efe map[string ]textResult ;_gad int64 ;_fce int ;};func _cdfa (_fgfge ,_faacg int )uint64 {return uint64 (_fgfge )*0x1000000+uint64 (_faacg )};
// ToTextMark returns the public view of `tm`.
func (_bega *textMark )ToTextMark ()TextMark {return TextMark {Text :_bega ._ffab ,Original :_bega ._gebf ,BBox :_bega ._bcff ,Font :_bega ._egde ,FontSize :_bega ._ebec ,FillColor :_bega ._gaac ,StrokeColor :_bega ._cbd ,Orientation :_bega ._ccce };};func (_gbgd rulingList )sortStrict (){_a .Slice (_gbgd ,func (_aeeed ,_fcee int )bool {_bdgd ,_dcdee :=_gbgd [_aeeed ],_gbgd [_fcee ];_ccbab ,_cbcb :=_bdgd ._dbgef ,_dcdee ._dbgef ;if _ccbab !=_cbcb {return _ccbab > _cbcb ;};_ffaee ,_adbf :=_bdgd ._dbaac ,_dcdee ._dbaac ;if !_gaabc (_ffaee -_adbf ){return _ffaee < _adbf ;};_ffaee ,_adbf =_bdgd ._dafad ,_dcdee ._dafad ;if _ffaee !=_adbf {return _ffaee < _adbf ;};return _bdgd ._bacb < _dcdee ._bacb ;});};const (_acge markKind =iota ;_cdgf ;_dead ;_bagg ;);func (_beead *textTable )reduce ()*textTable {_cggb :=make ([]int ,0,_beead ._eagaa );_cbaff :=make ([]int ,0,_beead ._gdgf );for _afbf :=0;_afbf < _beead ._eagaa ;_afbf ++{if !_beead .emptyRow (_afbf ){_cggb =append (_cggb ,_afbf );};};for _egbf :=0;_egbf < _beead ._gdgf ;_egbf ++{if !_beead .emptyColumn (_egbf ){_cbaff =append (_cbaff ,_egbf );};};if len (_cggb )==_beead ._eagaa &&len (_cbaff )==_beead ._gdgf {return _beead ;};_afcc :=textTable {_aead :_beead ._aead ,_gdgf :len (_cbaff ),_eagaa :len (_cggb ),_edeac :make (map[uint64 ]*textPara ,len (_cbaff )*len (_cggb ))};if _egfe {_cg .Log .Info ("\u0072\u0065\u0064\u0075ce\u003a\u0020\u0025\u0064\u0078\u0025\u0064\u0020\u002d\u003e\u0020\u0025\u0064\u0078%\u0064",_beead ._gdgf ,_beead ._eagaa ,len (_cbaff ),len (_cggb ));_cg .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0043\u006f\u006c\u0073\u003a\u0020\u0025\u002b\u0076",_cbaff );_cg .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0052\u006f\u0077\u0073\u003a\u0020\u0025\u002b\u0076",_cggb );};for _gagaa ,_aabee :=range _cggb {for _fgded ,_acgdf :=range _cbaff {_cabd :=_beead .get (_acgdf ,_aabee );if _cabd ==nil {continue ;};if _egfe {_fg .Printf ("\u0020 \u0025\u0032\u0064\u002c \u0025\u0032\u0064\u0020\u0028%\u0032d\u002c \u0025\u0032\u0064\u0029\u0020\u0025\u0071\n",_fgded ,_gagaa ,_acgdf ,_aabee ,_cacb (_cabd .text (),50));};_afcc .put (_fgded ,_gagaa ,_cabd );};};return &_afcc ;};func _eefdf (_cbgab []*textWord ,_cfdeb *textWord )[]*textWord {for _bdgdf ,_egba :=range _cbgab {if _egba ==_cfdeb {return _abde (_cbgab ,_bdgdf );};};_cg .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",_cfdeb );return nil ;};func _cdeab (_gfdf []TextMark ,_bgae *int ,_aafd TextMark )[]TextMark {_aafd .Offset =*_bgae ;_gfdf =append (_gfdf ,_aafd );*_bgae +=len (_aafd .Text );return _gfdf ;};func (_gdcfe paraList )tables ()[]TextTable {var _dbge []TextTable ;if _egfe {_cg .Log .Info ("\u0070\u0061\u0072\u0061\u0073\u002e\u0074\u0061\u0062\u006c\u0065\u0073\u003a");};for _ ,_ebba :=range _gdcfe {_gcg :=_ebba ._deec ;if _gcg !=nil &&_gcg .isExportable (){_dbge =append (_dbge ,_gcg .toTextTable ());};};return _dbge ;};func (_aaaaa rulingList )aligned ()bool {if len (_aaaaa )< 2{return false ;};_bgbef :=make (map[*ruling ]int );_bgbef [_aaaaa [0]]=0;for _ ,_cgaeb :=range _aaaaa [1:]{_bffa :=false ;for _cdcd :=range _bgbef {if _cgaeb .gridIntersecting (_cdcd ){_bgbef [_cdcd ]++;_bffa =true ;break ;};};if !_bffa {_bgbef [_cgaeb ]=0;};};_bbea :=0;for _ ,_aafa :=range _bgbef {if _aafa ==0{_bbea ++;};};_efbge :=float64 (_bbea )/float64 (len (_aaaaa ));_cbecd :=_efbge <=1.0-_ddfe ;if _bdf {_cg .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",_cbecd ,_efbge ,_bbea ,len (_aaaaa ),_aaaaa .String ());};return _cbecd ;};func _bbdc (_dbad []compositeCell )[]float64 {var _cdaf []*textLine ;_acfg :=0;for _ ,_cefb :=range _dbad {_acfg +=len (_cefb .paraList );_cdaf =append (_cdaf ,_cefb .lines ()...);};_a .Slice (_cdaf ,func (_egad ,_ccabf int )bool {_cdedf ,_gdffa :=_cdaf [_egad ],_cdaf [_ccabf ];_fgdcb ,_eeag :=_cdedf ._cfaa ,_gdffa ._cfaa ;if !_gaabc (_fgdcb -_eeag ){return _fgdcb < _eeag ;};return _cdedf .Llx < _gdffa .Llx ;});if _egfe {_fg .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",_acfg ,len (_cdaf ));for _dcgb ,_cfddd :=range _cdaf {_fg .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_dcgb ,_cfddd );};};var _bdfa []float64 ;_fbcf :=_cdaf [0];var _gcdfb [][]*textLine ;_bbcd :=[]*textLine {_fbcf };for _afde ,_ggfb :=range _cdaf [1:]{if _ggfb .Ury < _fbcf .Lly {_aedc :=0.5*(_ggfb .Ury +_fbcf .Lly );if _egfe {_fg .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",_afde ,_ggfb .Ury ,_fbcf .Lly ,_aedc ,_fbcf ,_ggfb );};_bdfa =append (_bdfa ,_aedc );_gcdfb =append (_gcdfb ,_bbcd );_bbcd =nil ;};_bbcd =append (_bbcd ,_ggfb );if _ggfb .Lly < _fbcf .Lly {_fbcf =_ggfb ;};};if len (_bbcd )> 0{_gcdfb =append (_gcdfb ,_bbcd );};if _egfe {_fg .Printf (" \u0020\u0020\u0020\u0020\u0020\u0020 \u0072\u006f\u0077\u0043\u006f\u0072\u0072\u0069\u0064o\u0072\u0073\u003d%\u0036.\u0032\u0066\u000a",_bdfa );};if _egfe {_cg .Log .Info ("\u0072\u006f\u0077\u003d\u0025\u0064",len (_dbad ));for _fbddg ,_ecgba :=range _dbad {_fg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_fbddg ,_ecgba );};_cg .Log .Info ("\u0067r\u006f\u0075\u0070\u0073\u003d\u0025d",len (_gcdfb ));for _agagd ,_cbba :=range _gcdfb {_fg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0064\u000a",_agagd ,len (_cbba ));for _aadde ,_ceae :=range _cbba {_fg .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_aadde ,_ceae );};};};_cdedg :=true ;for _fagf ,_aaef :=range _gcdfb {_ffcd :=true ;for _cbdac ,_abce :=range _dbad {if _egfe {_fg .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",_fagf ,len (_gcdfb ),_cbdac ,len (_dbad ),_abce );};if !_abce .hasLines (_aaef ){if _egfe {_fg .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",_fagf ,len (_gcdfb ),_cbdac ,len (_dbad ));};_ffcd =false ;break ;};};if !_ffcd {_cdedg =false ;break ;};};if !_cdedg {if _egfe {_cg .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");};_bdfa =nil ;};if _egfe &&_bdfa !=nil {_fg .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",_bdfa );};return _bdfa ;};func (_adace rulingList )vertsHorzs ()(rulingList ,rulingList ){var _dfedc ,_fgbg rulingList ;for _ ,_agef :=range _adace {switch _agef ._dbgef {case _ebga :_dfedc =append (_dfedc ,_agef );case _gcbe :_fgbg =append (_fgbg ,_agef );};};return _dfedc ,_fgbg ;};func (_cga *textPara )toTextMarks (_ecgb *int )[]TextMark {if _cga ._deec ==nil {return _cga .toCellTextMarks (_ecgb );};var _dffaf []TextMark ;for _ccdc :=0;_ccdc < _cga ._deec ._eagaa ;_ccdc ++{for _aded :=0;_aded < _cga ._deec ._gdgf ;_aded ++{_cgac :=_cga ._deec .get (_aded ,_ccdc );if _cgac ==nil {_dffaf =_aeec (_dffaf ,_ecgb ,"\u0009");}else {_agge :=_cgac .toCellTextMarks (_ecgb );_dffaf =append (_dffaf ,_agge ...);};_dffaf =_aeec (_dffaf ,_ecgb ,"\u0020");};if _ccdc < _cga ._deec ._eagaa -1{_dffaf =_aeec (_dffaf ,_ecgb ,"\u000a");};};return _dffaf ;};func (_cbeg *textObject )setTextLeading (_dgd float64 ){if _cbeg ==nil {return ;};_cbeg ._ddd ._ccc =_dgd ;};func (_edd *textObject )getCurrentFont ()*_eb .PdfFont {var _bed *_eb .PdfFont ;if !_edd ._ddcg .empty (){_bed =_edd ._ddcg .top ()._ded ;};if _bed ==nil {_cg .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 _eb .DefaultFont ();};return _bed ;};func (_eabg paraList )computeEBBoxes (){if _eaag {_cg .Log .Info ("\u0063o\u006dp\u0075\u0074\u0065\u0045\u0042\u0042\u006f\u0078\u0065\u0073\u003a");};for _ ,_ebda :=range _eabg {_ebda ._eead =_ebda .PdfRectangle ;};_begc :=_eabg .yNeighbours (0);for _faga ,_gbfb :=range _eabg {_ecfeb :=_gbfb ._eead ;_dffa ,_ceaa :=-1.0e9,+1.0e9;for _ ,_feaf :=range _begc [_gbfb ]{_ddbgd :=_eabg [_feaf ]._eead ;if _ddbgd .Urx < _ecfeb .Llx {_dffa =_c .Max (_dffa ,_ddbgd .Urx );}else if _ecfeb .Urx < _ddbgd .Llx {_ceaa =_c .Min (_ceaa ,_ddbgd .Llx );};};for _eddg ,_abcfd :=range _eabg {_cdda :=_abcfd ._eead ;if _faga ==_eddg ||_cdda .Ury > _ecfeb .Lly {continue ;};if _dffa <=_cdda .Llx &&_cdda .Llx < _ecfeb .Llx {_ecfeb .Llx =_cdda .Llx ;}else if _cdda .Urx <=_ceaa &&_ecfeb .Urx < _cdda .Urx {_ecfeb .Urx =_cdda .Urx ;};};if _eaag {_fg .Printf ("\u0025\u0034\u0064\u003a %\u0036\u002e\u0032\u0066\u2192\u0025\u0036\u002e\u0032\u0066\u0020\u0025\u0071\u000a",_faga ,_gbfb ._eead ,_ecfeb ,_cacb (_gbfb .text (),50));};_gbfb ._eead =_ecfeb ;};if _ceca {for _ ,_caaf :=range _eabg {_caaf .PdfRectangle =_caaf ._eead ;};};};func _fcag (_egff ,_ecda _ce .Point ,_dfdb _e .Color )(*ruling ,bool ){_eebb :=lineRuling {_ecbef :_egff ,_fagb :_ecda ,_degfd :_abec (_egff ,_ecda ),Color :_dfdb };if _eebb ._degfd ==_gbab {return nil ,false ;};return _eebb .asRuling ();};func (_gdgg *textLine )toTextMarks (_gedef *int )[]TextMark {var _efbc []TextMark ;for _ ,_fbeaa :=range _gdgg ._edgc {if _fbeaa ._gdba {_efbc =_aeec (_efbc ,_gedef ,"\u0020");};_baba :=_fbeaa .toTextMarks (_gedef );_efbc =append (_efbc ,_baba ...);};return _efbc ;};func (_cdbf *textTable )compositeColCorridors ()map[int ][]float64 {_cbefc :=make (map[int ][]float64 ,_cdbf ._gdgf );if _egfe {_cg .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",_cdbf ._gdgf );};for _edec :=0;_edec < _cdbf ._gdgf ;_edec ++{_cbefc [_edec ]=nil ;};return _cbefc ;};type cachedImage struct{_fbgb *_eb .Image ;_eff _eb .PdfColorspace ;};func _cffff (_fdgd ,_dcbgg float64 )bool {return _c .Abs (_fdgd -_dcbgg )<=_bbeb };func _fbfd (_cdceb float64 )bool {return _c .Abs (_cdceb )< _gdcf };func (_egbfg paraList )xNeighbours (_gbbbb float64 )map[*textPara ][]int {_cdded :=make ([]event ,2*len (_egbfg ));if _gbbbb ==0{for _cgfaf ,_ddff :=range _egbfg {_cdded [2*_cgfaf ]=event {_ddff .Llx ,true ,_cgfaf };_cdded [2*_cgfaf +1]=event {_ddff .Urx ,false ,_cgfaf };};}else {for _ceced ,_fcgd :=range _egbfg {_cdded [2*_ceced ]=event {_fcgd .Llx -_gbbbb *_fcgd .fontsize (),true ,_ceced };_cdded [2*_ceced +1]=event {_fcgd .Urx +_gbbbb *_fcgd .fontsize (),false ,_ceced };};};return _egbfg .eventNeighbours (_cdded );};func (_dagdf *wordBag )depthRange (_gebb ,_adce int )[]int {var _aaaa []int ;for _afb :=range _dagdf ._fccg {if _gebb <=_afb &&_afb <=_adce {_aaaa =append (_aaaa ,_afb );};};if len (_aaaa )==0{return nil ;};_a .Ints (_aaaa );return _aaaa ;};func _deggb (_dceag _ce .Point )*subpath {return &subpath {_eadd :[]_ce .Point {_dceag }}};func (_gaacd paraList )yNeighbours (_afec float64 )map[*textPara ][]int {_efbcgb :=make ([]event ,2*len (_gaacd ));if _afec ==0{for _bacd ,_ggebf :=range _gaacd {_efbcgb [2*_bacd ]=event {_ggebf .Lly ,true ,_bacd };_efbcgb [2*_bacd +1]=event {_ggebf .Ury ,false ,_bacd };};}else {for _fdabf ,_ddbac :=range _gaacd {_efbcgb [2*_fdabf ]=event {_ddbac .Lly -_afec *_ddbac .fontsize (),true ,_fdabf };_efbcgb [2*_fdabf +1]=event {_ddbac .Ury +_afec *_ddbac .fontsize (),false ,_fdabf };};};return _gaacd .eventNeighbours (_efbcgb );};func (_cfag *wordBag )removeDuplicates (){if _gfea {_cg .Log .Info ("r\u0065m\u006f\u0076\u0065\u0044\u0075\u0070\u006c\u0069c\u0061\u0074\u0065\u0073: \u0025\u0071",_cfag .text ());};for _ ,_agbb :=range _cfag .depthIndexes (){if len (_cfag ._fccg [_agbb ])==0{continue ;};_gcfb :=_cfag ._fccg [_agbb ][0];_feab :=_ecbfc *_gcfb ._cbbbc ;_fcfca :=_gcfb ._dfgg ;for _ ,_aega :=range _cfag .depthBand (_fcfca ,_fcfca +_feab ){_cdbb :=map[*textWord ]struct{}{};_aeaf :=_cfag ._fccg [_aega ];for _ ,_bcfe :=range _aeaf {if _ ,_efef :=_cdbb [_bcfe ];_efef {continue ;};for _ ,_fcgag :=range _aeaf {if _ ,_ecaf :=_cdbb [_fcgag ];_ecaf {continue ;};if _fcgag !=_bcfe &&_fcgag ._dfgdd ==_bcfe ._dfgdd &&_c .Abs (_fcgag .Llx -_bcfe .Llx )< _feab &&_c .Abs (_fcgag .Urx -_bcfe .Urx )< _feab &&_c .Abs (_fcgag .Lly -_bcfe .Lly )< _feab &&_c .Abs (_fcgag .Ury -_bcfe .Ury )< _feab {_cdbb [_fcgag ]=struct{}{};};};};if len (_cdbb )> 0{_daec :=0;for _ ,_caed :=range _aeaf {if _ ,_cbega :=_cdbb [_caed ];!_cbega {_aeaf [_daec ]=_caed ;_daec ++;};};_cfag ._fccg [_aega ]=_aeaf [:len (_aeaf )-len (_cdbb )];if len (_cfag ._fccg [_aega ])==0{delete (_cfag ._fccg ,_aega );};};};};};var (_bc =_f .New ("\u0074\u0079p\u0065\u0020\u0063h\u0065\u0063\u006b\u0020\u0065\u0072\u0072\u006f\u0072");_fb =_f .New ("\u0072\u0061\u006e\u0067\u0065\u0020\u0063\u0068\u0065\u0063\u006b\u0020e\u0072\u0072\u006f\u0072"););func (_fdad rulingList )primaries ()[]float64 {_dcgf :=make (map[float64 ]struct{},len (_fdad ));for _ ,_faea :=range _fdad {_dcgf [_faea ._dbaac ]=struct{}{};};_gfbb :=make ([]float64 ,len (_dcgf ));_dcde :=0;for _eebd :=range _dcgf {_gfbb [_dcde ]=_eebd ;_dcde ++;};_a .Float64s (_gfbb );return _gfbb ;};func (_fgfa *ruling )gridIntersecting (_eefa *ruling )bool {return _cffff (_fgfa ._dafad ,_eefa ._dafad )&&_cffff (_fgfa ._bacb ,_eefa ._bacb );};func (_gbaa rulingList )tidied (_gbed string )rulingList {_dcad :=_gbaa .removeDuplicates ();_dcad .log ("\u0075n\u0069\u0071\u0075\u0065\u0073");_eecf :=_dcad .snapToGroups ();if _eecf ==nil {return nil ;};_eecf .sort ();if _bdf {_cg .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",_gbed ,len (_gbaa ),len (_dcad ),len (_eecf ));};_eecf .log ("\u0063o\u0061\u006c\u0065\u0073\u0063\u0065d");return _eecf ;};func (_dbf *wordBag )empty (_bfbg int )bool {_ ,_gdgd :=_dbf ._fccg [_bfbg ];return !_gdgd };func (_gbfg *textObject )moveText (_gfca ,_effb float64 ){_gbfg .moveLP (_gfca ,_effb )};func _cagcd (_bbdaf map[int ][]float64 )[]int {_fdbb :=make ([]int ,len (_bbdaf ));_baegf :=0;for _abgacd :=range _bbdaf {_fdbb [_baegf ]=_abgacd ;_baegf ++;};_a .Ints (_fdbb );return _fdbb ;};
// String returns a description of `k`.
func (_abgd markKind )String ()string {_gbef ,_cgfc :=_dadff [_abgd ];if !_cgfc {return _fg .Sprintf ("\u004e\u006f\u0074\u0020\u0061\u0020\u006d\u0061\u0072k\u003a\u0020\u0025\u0064",_abgd );};return _gbef ;};func (_efec *subpath )makeRectRuling (_cgaf _e .Color )(*ruling ,bool ){if _cbb {_cg .Log .Info ("\u006d\u0061\u006beR\u0065\u0063\u0074\u0052\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0070\u0061\u0074\u0068\u003d\u0025\u0076",_efec );};_edeea :=_efec ._eadd [:4];_fced :=make (map[int ]rulingKind ,len (_edeea ));for _afef ,_fdbfd :=range _edeea {_ebdd :=_efec ._eadd [(_afef +1)%4];_fced [_afef ]=_ccdee (_fdbfd ,_ebdd );if _cbb {_fg .Printf ("\u0025\u0034\u0064: \u0025\u0073\u0020\u003d\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u002d\u0020\u0025\u0036\u002e\u0032\u0066",_afef ,_fced [_afef ],_fdbfd ,_ebdd );};};if _cbb {_fg .Printf ("\u0020\u0020\u0020\u006b\u0069\u006e\u0064\u0073\u003d\u0025\u002b\u0076\u000a",_fced );};var _fgecb ,_deff []int ;for _edbaf ,_gfec :=range _fced {switch _gfec {case _gcbe :_deff =append (_deff ,_edbaf );case _ebga :_fgecb =append (_fgecb ,_edbaf );};};if _cbb {_fg .Printf ("\u0020\u0020 \u0068\u006f\u0072z\u0073\u003d\u0025\u0064\u0020\u0025\u002b\u0076\u000a",len (_deff ),_deff );_fg .Printf ("\u0020\u0020 \u0076\u0065\u0072t\u0073\u003d\u0025\u0064\u0020\u0025\u002b\u0076\u000a",len (_fgecb ),_fgecb );};_bcacb :=(len (_deff )==2&&len (_fgecb )==2)||(len (_deff )==2&&len (_fgecb )==0&&_bec (_edeea [_deff [0]],_edeea [_deff [1]]))||(len (_fgecb )==2&&len (_deff )==0&&_degc (_edeea [_fgecb [0]],_edeea [_fgecb [1]]));if _cbb {_fg .Printf (" \u0020\u0020\u0068\u006f\u0072\u007as\u003d\u0025\u0064\u0020\u0076\u0065\u0072\u0074\u0073=\u0025\u0064\u0020o\u006b=\u0025\u0074\u000a",len (_deff ),len (_fgecb ),_bcacb );};if !_bcacb {if _cbb {_cg .Log .Error ("\u0021!\u006d\u0061\u006b\u0065R\u0065\u0063\u0074\u0052\u0075l\u0069n\u0067:\u0020\u0070\u0061\u0074\u0068\u003d\u0025v",_efec );_fg .Printf (" \u0020\u0020\u0068\u006f\u0072\u007as\u003d\u0025\u0064\u0020\u0076\u0065\u0072\u0074\u0073=\u0025\u0064\u0020o\u006b=\u0025\u0074\u000a",len (_deff ),len (_fgecb ),_bcacb );};return &ruling {},false ;};if len (_fgecb )==0{for _afea ,_bagaf :=range _fced {if _bagaf !=_gcbe {_fgecb =append (_fgecb ,_afea );};};};if len (_deff )==0{for _baeg ,_gcce :=range _fced {if _gcce !=_ebga {_deff =append (_deff ,_baeg );};};};if _cbb {_cg .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 (_deff ),len (_fgecb ),len (_edeea ),_deff ,_fgecb ,_edeea );};var _bfbce ,_aagca ,_gceed ,_fdba _ce .Point ;if _edeea [_deff [0]].Y > _edeea [_deff [1]].Y {_gceed ,_fdba =_edeea [_deff [0]],_edeea [_deff [1]];}else {_gceed ,_fdba =_edeea [_deff [1]],_edeea [_deff [0]];};if _edeea [_fgecb [0]].X > _edeea [_fgecb [1]].X {_bfbce ,_aagca =_edeea [_fgecb [0]],_edeea [_fgecb [1]];}else {_bfbce ,_aagca =_edeea [_fgecb [1]],_edeea [_fgecb [0]];};_agaa :=_eb .PdfRectangle {Llx :_bfbce .X ,Urx :_aagca .X ,Lly :_fdba .Y ,Ury :_gceed .Y };if _agaa .Llx > _agaa .Urx {_agaa .Llx ,_agaa .Urx =_agaa .Urx ,_agaa .Llx ;};if _agaa .Lly > _agaa .Ury {_agaa .Lly ,_agaa .Ury =_agaa .Ury ,_agaa .Lly ;};_bbfc :=rectRuling {PdfRectangle :_agaa ,_ebef :_cgbbd (_agaa ),Color :_cgaf };if _bbfc ._ebef ==_gbab {if _cbb {_cg .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 ;};_cbebg ,_acdf :=_bbfc .asRuling ();if !_acdf {if _cbb {_cg .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 _bdf {_fg .Printf ("\u0020\u0020\u0020\u0072\u003d\u0025\u0073\u000a",_cbebg .String ());};return _cbebg ,true ;};func (_bdga *ruling )alignsSec (_dbba *ruling )bool {const _gfbca =_gdcf +1.0;return _bdga ._dafad -_gfbca <=_dbba ._bacb &&_dbba ._dafad -_gfbca <=_bdga ._bacb ;};func (_gcffg *textLine )endsInHyphen ()bool {_gagg :=_gcffg ._edgc [len (_gcffg ._edgc )-1];_gffb :=_gagg ._dfgdd ;_eaagd ,_fbbb :=_d .DecodeLastRuneInString (_gffb );if _fbbb <=0||!_df .Is (_df .Hyphen ,_eaagd ){return false ;};if _gagg ._gdba &&_ffbg (_gffb ){return true ;};return _ffbg (_gcffg .text ());};func (_ffc rulingList )intersections ()map[int ]intSet {var _cgae ,_feae []int ;for _ggddf ,_fggf :=range _ffc {switch _fggf ._dbgef {case _ebga :_cgae =append (_cgae ,_ggddf );case _gcbe :_feae =append (_feae ,_ggddf );};};if len (_cgae )< _daa +1||len (_feae )< _eaec +1{return nil ;};if len (_cgae )+len (_feae )> _gaaa {_cg .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 (_ffc ),len (_cgae ),len (_feae ));return nil ;};_cgbbc :=make (map[int ]intSet ,len (_cgae )+len (_feae ));for _ ,_fagad :=range _cgae {for _ ,_bacc :=range _feae {if _ffc [_fagad ].intersects (_ffc [_bacc ]){if _ ,_cfbf :=_cgbbc [_fagad ];!_cfbf {_cgbbc [_fagad ]=make (intSet );};if _ ,_ddacf :=_cgbbc [_bacc ];!_ddacf {_cgbbc [_bacc ]=make (intSet );};_cgbbc [_fagad ].add (_bacc );_cgbbc [_bacc ].add (_fagad );};};};return _cgbbc ;};func _ccdee (_afedd ,_dfad _ce .Point )rulingKind {_bebc :=_c .Abs (_afedd .X -_dfad .X );_cecb :=_c .Abs (_afedd .Y -_dfad .Y );return _caae (_bebc ,_cecb ,_ceab );};
// String returns a description of `k`.
func (_fedg rulingKind )String ()string {_feeee ,_dfgd :=_deaff [_fedg ];if !_dfgd {return _fg .Sprintf ("\u004e\u006ft\u0020\u0061\u0020r\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0025\u0064",_fedg );};return _feeee ;};func (_fdfe paraList )extractTables (_acdc []gridTiling )paraList {if _egfe {_cg .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 (_fdfe ));};if len (_fdfe )< _gdbf {return _fdfe ;};_bgaag :=_fdfe .findTables (_acdc );if _egfe {_cg .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 (_bgaag ));for _bebad ,_bbbbd :=range _bgaag {_bbbbd .log (_fg .Sprintf ("c\u006f\u006d\u0062\u0069\u006e\u0065\u0064\u0020\u0025\u0064",_bebad ));};};return _fdfe .applyTables (_bgaag );};func _acgd (_ccfa float64 ,_eagdd int )int {if _eagdd ==0{_eagdd =1;};_ccfb :=float64 (_eagdd );return int (_c .Round (_ccfa /_ccfb )*_ccfb );};func (_deef lineRuling )xMean ()float64 {return 0.5*(_deef ._ecbef .X +_deef ._fagb .X )};func (_gfbgc rectRuling )checkWidth (_ccba ,_eccc float64 )(float64 ,bool ){_fgeee :=_eccc -_ccba ;_ffff :=_fgeee <=_gdcf ;return _fgeee ,_ffff ;};func (_add *textObject )setTextRise (_ge float64 ){if _add ==nil {return ;};_add ._ddd ._ccag =_ge ;};func (_gef *textObject )moveLP (_efgf ,_edf float64 ){_gef ._cffg .Concat (_ce .NewMatrix (1,0,0,1,_efgf ,_edf ));_gef ._fafg =_gef ._cffg ;};func (_cgfg paraList )inTile (_dfaaa gridTile )paraList {var _bcba paraList ;for _ ,_fcegd :=range _cgfg {if _dfaaa .contains (_fcegd .PdfRectangle ){_bcba =append (_bcba ,_fcegd );};};if _egfe {_fg .Printf ("\u0020 \u0020\u0069\u006e\u0054i\u006c\u0065\u003a\u0020\u0020%\u0073 \u0069n\u0073\u0069\u0064\u0065\u003d\u0025\u0064\n",_dfaaa ,len (_bcba ));for _acec ,_gcaba :=range _bcba {_fg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_acec ,_gcaba );};_fg .Println ("");};return _bcba ;};func (_gbdc rulingList )snapToGroups ()rulingList {_febb ,_eebe :=_gbdc .vertsHorzs ();if len (_febb )> 0{_febb =_febb .snapToGroupsDirection ();};if len (_eebe )> 0{_eebe =_eebe .snapToGroupsDirection ();};_gdbb :=append (_febb ,_eebe ...);_gdbb .log ("\u0073\u006e\u0061p\u0054\u006f\u0047\u0072\u006f\u0075\u0070\u0073");return _gdbb ;};func (_dadb *textPara )depth ()float64 {if _dadb ._cfbg {return -1.0;};if len (_dadb ._ffac )> 0{return _dadb ._ffac [0]._cfaa ;};return _dadb ._deec .depth ();};func (_dfcb *textObject )setTextMatrix (_fddg []float64 ){if len (_fddg )!=6{_cg .Log .Debug ("\u0045\u0052\u0052OR\u003a\u0020\u006c\u0065\u006e\u0028\u0066\u0029\u0020\u0021\u003d\u0020\u0036\u0020\u0028\u0025\u0064\u0029",len (_fddg ));return ;};_dgg ,_ffg ,_aga ,_bgg ,_cca ,_ccb :=_fddg [0],_fddg [1],_fddg [2],_fddg [3],_fddg [4],_fddg [5];_dfcb ._fafg =_ce .NewMatrix (_dgg ,_ffg ,_aga ,_bgg ,_cca ,_ccb );_dfcb ._cffg =_dfcb ._fafg ;};func (_cdf *subpath )last ()_ce .Point {return _cdf ._eadd [len (_cdf ._eadd )-1]};const _dc =20;type textWord struct{_eb .PdfRectangle ;_dfgg float64 ;_dfgdd string ;_dfea []*textMark ;_cbbbc float64 ;_gdba bool ;};func (_fgdce *stateStack )top ()*textState {if _fgdce .empty (){return nil ;};return (*_fgdce )[_fgdce .size ()-1];};func _egfeg (_baga *wordBag ,_ddcc float64 ,_dbgd ,_ddac rulingList )[]*wordBag {var _cegc []*wordBag ;for _ ,_dbec :=range _baga .depthIndexes (){_bfcc :=false ;for !_baga .empty (_dbec ){_dafg :=_baga .firstReadingIndex (_dbec );_cgcae :=_baga .firstWord (_dafg );_cbec :=_gfbcd (_cgcae ,_ddcc ,_dbgd ,_ddac );_baga .removeWord (_cgcae ,_dafg );if _dgee {_cg .Log .Info ("\u0066\u0069\u0072\u0073\u0074\u0057\u006f\u0072\u0064\u0020\u005e\u005e^\u005e\u0020\u0025\u0073",_cgcae .String ());};for _gabd :=true ;_gabd ;_gabd =_bfcc {_bfcc =false ;_bcfa :=_bfdcd *_cbec ._ebbb ;_dgae :=_dadf *_cbec ._ebbb ;_faad :=_bde *_cbec ._ebbb ;if _dgee {_cg .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",_cbec .minDepth (),_cbec .maxDepth (),_faad ,_dgae );};if _baga .scanBand ("\u0076\u0065\u0072\u0074\u0069\u0063\u0061\u006c",_cbec ,_bedf (_ggda ,0),_cbec .minDepth ()-_faad ,_cbec .maxDepth ()+_faad ,_fdef ,false ,false )> 0{_bfcc =true ;};if _baga .scanBand ("\u0068\u006f\u0072\u0069\u007a\u006f\u006e\u0074\u0061\u006c",_cbec ,_bedf (_ggda ,_dgae ),_cbec .minDepth (),_cbec .maxDepth (),_bgecb ,false ,false )> 0{_bfcc =true ;};if _bfcc {continue ;};_bfgd :=_baga .scanBand ("",_cbec ,_bedf (_ecbdb ,_bcfa ),_cbec .minDepth (),_cbec .maxDepth (),_ebccb ,true ,false );if _bfgd > 0{_aagg :=(_cbec .maxDepth ()-_cbec .minDepth ())/_cbec ._ebbb ;if (_bfgd > 1&&float64 (_bfgd )> 0.3*_aagg )||_bfgd <=10{if _baga .scanBand ("\u006f\u0074\u0068e\u0072",_cbec ,_bedf (_ecbdb ,_bcfa ),_cbec .minDepth (),_cbec .maxDepth (),_ebccb ,false ,true )> 0{_bfcc =true ;};};};};_cegc =append (_cegc ,_cbec );};};return _cegc ;};func _degc (_ecgd ,_fgc _ce .Point )bool {_ddbe :=_c .Abs (_ecgd .X -_fgc .X );_fdbc :=_c .Abs (_ecgd .Y -_fgc .Y );return _bgcab (_ddbe ,_fdbc );};func (_aceeb intSet )del (_eggga int ){delete (_aceeb ,_eggga )};func _geadc (_eaf ,_acba _eb .PdfRectangle )bool {return _cgdf (_eaf ,_acba )&&_eee (_eaf ,_acba )};func (_dcfbe *textPara )writeText (_fddfd _bf .Writer ){if _dcfbe ._deec ==nil {_dcfbe .writeCellText (_fddfd );return ;};for _gedc :=0;_gedc < _dcfbe ._deec ._eagaa ;_gedc ++{for _deag :=0;_deag < _dcfbe ._deec ._gdgf ;_deag ++{_acga :=_dcfbe ._deec .get (_deag ,_gedc );if _acga ==nil {_fddfd .Write ([]byte ("\u0009"));}else {_acga .writeCellText (_fddfd );};_fddfd .Write ([]byte ("\u0020"));};if _gedc < _dcfbe ._deec ._eagaa -1{_fddfd .Write ([]byte ("\u000a"));};};};func (_cbfg *textTable )get (_fggag ,_babg int )*textPara {return _cbfg ._edeac [_cdfa (_fggag ,_babg )]};func (_dcaa rulingList )primMinMax ()(float64 ,float64 ){_edbe ,_agaag :=_dcaa [0]._dbaac ,_dcaa [0]._dbaac ;for _ ,_cbede :=range _dcaa [1:]{if _cbede ._dbaac < _edbe {_edbe =_cbede ._dbaac ;}else if _cbede ._dbaac > _agaag {_agaag =_cbede ._dbaac ;};};return _edbe ,_agaag ;};func (_abcfc *textTable )computeBbox ()_eb .PdfRectangle {var _cecfg _eb .PdfRectangle ;_ffbeb :=false ;for _fdcg :=0;_fdcg < _abcfc ._eagaa ;_fdcg ++{for _gcfd :=0;_gcfd < _abcfc ._gdgf ;_gcfd ++{_gcfa :=_abcfc .get (_gcfd ,_fdcg );if _gcfa ==nil {continue ;};if !_ffbeb {_cecfg =_gcfa .PdfRectangle ;_ffbeb =true ;}else {_cecfg =_cbcc (_cecfg ,_gcfa .PdfRectangle );};};};return _cecfg ;};func (_bbaa paraList )llyOrdering ()[]int {_cdfg :=make ([]int ,len (_bbaa ));for _efcbc :=range _bbaa {_cdfg [_efcbc ]=_efcbc ;};_a .SliceStable (_cdfg ,func (_dfae ,_agbcf int )bool {_acegd ,_bccb :=_cdfg [_dfae ],_cdfg [_agbcf ];return _bbaa [_acegd ].Lly < _bbaa [_bccb ].Lly ;});return _cdfg ;};func (_edbfc rulingList )toGrids ()[]rulingList {if _bdf {_cg .Log .Info ("t\u006f\u0047\u0072\u0069\u0064\u0073\u003a\u0020\u0025\u0073",_edbfc );};_gbec :=_edbfc .intersections ();if _bdf {_cg .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 (_edbfc ),len (_gbec ));for _ ,_fcfb :=range _dadgd (_gbec ){_fg .Printf ("\u00254\u0064\u003a\u0020\u0025\u002b\u0076\n",_fcfb ,_gbec [_fcfb ]);};};_fdec :=make (map[int ]intSet ,len (_edbfc ));for _bgag :=range _edbfc {_affg :=_edbfc .connections (_gbec ,_bgag );if len (_affg )> 0{_fdec [_bgag ]=_affg ;};};if _bdf {_cg .Log .Info ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u0063\u006fn\u006e\u0065\u0063\u0074s=\u0025\u0064",len (_fdec ));for _ ,_baddf :=range _dadgd (_fdec ){_fg .Printf ("\u00254\u0064\u003a\u0020\u0025\u002b\u0076\n",_baddf ,_fdec [_baddf ]);};};_badbc :=_deac (len (_edbfc ),func (_ggeb ,_dfbba int )bool {_cecbd ,_ecfc :=len (_fdec [_ggeb ]),len (_fdec [_dfbba ]);if _cecbd !=_ecfc {return _cecbd > _ecfc ;};return _edbfc .comp (_ggeb ,_dfbba );});if _bdf {_cg .Log .Info ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u006f\u0072d\u0065\u0072\u0069\u006eg=\u0025\u0076",_badbc );};_gecde :=[][]int {{_badbc [0]}};_cfba :for _ ,_deea :=range _badbc [1:]{for _bggc ,_ffge :=range _gecde {for _ ,_cgeg :=range _ffge {if _fdec [_cgeg ].has (_deea ){_gecde [_bggc ]=append (_ffge ,_deea );continue _cfba ;};};};_gecde =append (_gecde ,[]int {_deea });};if _bdf {_cg .Log .Info ("\u0074o\u0047r\u0069\u0064\u0073\u003a\u0020i\u0067\u0072i\u0064\u0073\u003d\u0025\u0076",_gecde );};_a .SliceStable (_gecde ,func (_ebeaf ,_edgd int )bool {return len (_gecde [_ebeaf ])> len (_gecde [_edgd ])});for _ ,_feeed :=range _gecde {_a .Slice (_feeed ,func (_fbdd ,_abae int )bool {return _edbfc .comp (_feeed [_fbdd ],_feeed [_abae ])});};_afbbc :=make ([]rulingList ,len (_gecde ));for _aedb ,_beec :=range _gecde {_adbc :=make (rulingList ,len (_beec ));for _dffcg ,_aeac :=range _beec {_adbc [_dffcg ]=_edbfc [_aeac ];};_afbbc [_aedb ]=_adbc ;};if _bdf {_cg .Log .Info ("\u0074o\u0047r\u0069\u0064\u0073\u003a\u0020g\u0072\u0069d\u0073\u003d\u0025\u002b\u0076",_afbbc );};var _egbb []rulingList ;for _ ,_cegca :=range _afbbc {if _agccb ,_agfc :=_cegca .isActualGrid ();_agfc {_cegca =_agccb ;_cegca =_cegca .snapToGroups ();_egbb =append (_egbb ,_cegca );};};if _bdf {_gcef ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u0061\u0063t\u0075\u0061\u006c\u0047ri\u0064\u0073",_egbb );_cg .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 (_afbbc ),len (_egbb ));};return _egbb ;};
// String returns a string describing `pt`.
func (_fgb PageText )String ()string {_egf :=_fg .Sprintf ("P\u0061\u0067\u0065\u0054ex\u0074:\u0020\u0025\u0064\u0020\u0065l\u0065\u006d\u0065\u006e\u0074\u0073",len (_fgb ._cabf ));_bfc :=[]string {"\u002d"+_egf };for _ ,_fae :=range _fgb ._cabf {_bfc =append (_bfc ,_fae .String ());};_bfc =append (_bfc ,"\u002b"+_egf );return _fc .Join (_bfc ,"\u000a");};func (_bbdf *wordBag )absorb (_bcaa *wordBag ){_ggge :=_bcaa .makeRemovals ();for _aecfd ,_cafg :=range _bcaa ._fccg {for _ ,_bfgb :=range _cafg {_bbdf .pullWord (_bfgb ,_aecfd ,_ggge );};};_bcaa .applyRemovals (_ggge );};type ruling struct{_dbgef rulingKind ;_badd markKind ;_e .Color ;_dbaac float64 ;_dafad float64 ;_bacb float64 ;_bcacf float64 ;};func (_eafg *ruling )alignsPrimary (_eeee *ruling )bool {return _eafg ._dbgef ==_eeee ._dbgef &&_c .Abs (_eafg ._dbaac -_eeee ._dbaac )< _gdcf *0.5;};func (_beab rulingList )isActualGrid ()(rulingList ,bool ){_fafad ,_bbec :=_beab .augmentGrid ();if !(len (_fafad )>=_daa +1&&len (_bbec )>=_eaec +1){if _bdf {_cg .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 (_fafad ),len (_bbec ),_daa +1,_eaec +1);};return nil ,false ;};if _bdf {_cg .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",_beab ,len (_fafad )>=2,len (_bbec )>=2,len (_fafad )>=2&&len (_bbec )>=2);for _gfff ,_geca :=range _beab {_fg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0076\u000a",_gfff ,_geca );};};if _cced {_geed ,_fbcd :=_fafad [0],_fafad [len (_fafad )-1];_agddc ,_acgb :=_bbec [0],_bbec [len (_bbec )-1];if !(_fbfd (_geed ._dbaac -_agddc ._dafad )&&_fbfd (_fbcd ._dbaac -_agddc ._bacb )&&_fbfd (_agddc ._dbaac -_geed ._bacb )&&_fbfd (_acgb ._dbaac -_geed ._dafad )){if _bdf {_cg .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",_geed ,_fbcd ,_agddc ,_acgb );};return nil ,false ;};}else {if !_fafad .aligned (){if _cgfe {_cg .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 (_fafad ));};return nil ,false ;};if !_bbec .aligned (){if _bdf {_cg .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 (_bbec ));};return nil ,false ;};};_fgacg :=append (_fafad ,_bbec ...);return _fgacg ,true ;};func (_bfdfa *subpath )clear (){*_bfdfa =subpath {}};func (_ffecb *textPara )taken ()bool {return _ffecb ==nil ||_ffecb ._gaef };func (_acdaf *textWord )computeText ()string {_febga :=make ([]string ,len (_acdaf ._dfea ));for _dfdff ,_cebg :=range _acdaf ._dfea {_febga [_dfdff ]=_cebg ._ffab ;};return _fc .Join (_febga ,"");};func (_adgf *textLine )text ()string {var _fgdceb []string ;for _ ,_abag :=range _adgf ._edgc {if _abag ._gdba {_fgdceb =append (_fgdceb ,"\u0020");};_fgdceb =append (_fgdceb ,_abag ._dfgdd );};return _fc .Join (_fgdceb ,"");};func (_dffc *subpath )add (_fbc ..._ce .Point ){_dffc ._eadd =append (_dffc ._eadd ,_fbc ...)};const (_aebd =true ;_ebea =true ;_cgbf =true ;_ceca =false ;_acee =false ;_cfad =6;_gcafc =3.0;_afee =200;_dcgg =true ;_fefa =true ;_aafg =true ;_aefa =true ;_cced =false ;);func _gbgaf (_acfd []pathSection )rulingList {_fccab (_acfd );if _bdf {_cg .Log .Info ("\u006da\u006b\u0065\u0046\u0069l\u006c\u0052\u0075\u006c\u0069n\u0067s\u003a \u0025\u0064\u0020\u0066\u0069\u006c\u006cs",len (_acfd ));};var _cbdg rulingList ;for _ ,_fecdd :=range _acfd {for _ ,_ebggd :=range _fecdd ._ecf {if !_ebggd .isQuadrilateral (){if _bdf {_cg .Log .Error ("!\u0069s\u0051\u0075\u0061\u0064\u0072\u0069\u006c\u0061t\u0065\u0072\u0061\u006c: \u0025\u0073",_ebggd );};continue ;};if _ddfcf ,_cgec :=_ebggd .makeRectRuling (_fecdd .Color );_cgec {_cbdg =append (_cbdg ,_ddfcf );}else {if _cbb {_cg .Log .Error ("\u0021\u006d\u0061\u006beR\u0065\u0063\u0074\u0052\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0025\u0073",_ebggd );};};};};if _bdf {_cg .Log .Info ("\u006d\u0061\u006b\u0065Fi\u006c\u006c\u0052\u0075\u006c\u0069\u006e\u0067\u0073\u003a\u0020\u0025\u0073",_cbdg .String ());};return _cbdg ;};const (_gbab rulingKind =iota ;_gcbe ;_ebga ;);func (_efcb *shapesState )newSubPath (){_efcb .clearPath ();if _fcdb {_cg .Log .Info ("\u006e\u0065\u0077\u0053\u0075\u0062\u0050\u0061\u0074h\u003a\u0020\u0025\u0073",_efcb );};};func _bec (_gfgf ,_cfcc _ce .Point )bool {_cgbg :=_c .Abs (_gfgf .X -_cfcc .X );_fegg :=_c .Abs (_gfgf .Y -_cfcc .Y );return _bgcab (_fegg ,_cgbg );};
// 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 (_bbgg *PageText )ApplyArea (bbox _eb .PdfRectangle ){_eefbd :=make ([]*textMark ,0,len (_bbgg ._cabf ));for _ ,_afg :=range _bbgg ._cabf {if _geadc (_afg .bbox (),bbox ){_eefbd =append (_eefbd ,_afg );};};var _edeg paraList ;_eaed :=len (_eefbd );for _fcef :=0;_fcef < 360&&_eaed > 0;_fcef +=90{_aee :=make ([]*textMark ,0,len (_eefbd )-_eaed );for _ ,_fafa :=range _eefbd {if _fafa ._ccce ==_fcef {_aee =append (_aee ,_fafa );};};if len (_aee )> 0{_fgdb :=_cfee (_aee ,_bbgg ._cfg ,nil ,nil );_edeg =append (_edeg ,_fgdb ...);_eaed -=len (_aee );};};_cfca :=new (_ac .Buffer );_edeg .writeText (_cfca );_bbgg ._bgbbb =_cfca .String ();_bbgg ._bge =_edeg .toTextMarks ();_bbgg ._accee =_edeg .tables ();};func _degfe (_dbcf string )(string ,bool ){_eecd :=[]rune (_dbcf );if len (_eecd )!=1{return "",false ;};_dafdea ,_abcef :=_adga [_eecd [0]];return _dafdea ,_abcef ;};func (_dgfd rulingList )splitSec ()[]rulingList {_a .Slice (_dgfd ,func (_cgg ,_gcffc int )bool {_facec ,_cbaa :=_dgfd [_cgg ],_dgfd [_gcffc ];if _facec ._dafad !=_cbaa ._dafad {return _facec ._dafad < _cbaa ._dafad ;};return _facec ._bacb < _cbaa ._bacb ;});_efae :=make (map[*ruling ]struct{},len (_dgfd ));_baab :=func (_cbga *ruling )rulingList {_cafc :=rulingList {_cbga };_efae [_cbga ]=struct{}{};for _ ,_adbgf :=range _dgfd {if _ ,_bcfad :=_efae [_adbgf ];_bcfad {continue ;};for _ ,_bgdc :=range _cafc {if _adbgf .alignsSec (_bgdc ){_cafc =append (_cafc ,_adbgf );_efae [_adbgf ]=struct{}{};break ;};};};return _cafc ;};_gcec :=[]rulingList {_baab (_dgfd [0])};for _ ,_eecb :=range _dgfd [1:]{if _ ,_beaga :=_efae [_eecb ];_beaga {continue ;};_gcec =append (_gcec ,_baab (_eecb ));};return _gcec ;};func (_cdce compositeCell )parasBBox ()(paraList ,_eb .PdfRectangle ){return _cdce .paraList ,_cdce .PdfRectangle ;};func _ggec (_agdd _eb .PdfRectangle ,_cefa []*textLine )*textPara {return &textPara {PdfRectangle :_agdd ,_ffac :_cefa };};type textState struct{_effg float64 ;_fac float64 ;_ada float64 ;_ccc float64 ;_dcb float64 ;_dcd RenderMode ;_ccag float64 ;_ded *_eb .PdfFont ;_dbef _eb .PdfRectangle ;_eecc int ;_def int ;};func (_fdab *shapesState )stroke (_cecf *[]pathSection ){_acea :=pathSection {_ecf :_fdab ._cddf ,Color :_fdab ._cfe .getStrokeColor ()};*_cecf =append (*_cecf ,_acea );if _bdf {_fg .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 (*_cecf ),_fdab ,_fdab ._cfe .getStrokeColor (),_acea .bbox ());if _beebe {for _baa ,_ddfd :=range _fdab ._cddf {_fg .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_baa ,_ddfd );if _baa ==10{break ;};};};};};func (_egfb rulingList )connections (_faag map[int ]intSet ,_efcbd int )intSet {_cfdc :=make (intSet );_aaee :=make (intSet );var _ccgf func (int );_ccgf =func (_edfa int ){if !_aaee .has (_edfa ){_aaee .add (_edfa );for _egfd :=range _egfb {if _faag [_egfd ].has (_edfa ){_cfdc .add (_egfd );};};for _dgdbe :=range _egfb {if _cfdc .has (_dgdbe ){_ccgf (_dgdbe );};};};};_ccgf (_efcbd );return _cfdc ;};func _bgcab (_fece ,_dcdf float64 )bool {return _fece /_c .Max (_ebbbf ,_dcdf )< _ceab };
// String returns a description of `v`.
func (_bgda *ruling )String ()string {if _bgda ._dbgef ==_gbab {return "\u004e\u004f\u0054\u0020\u0052\u0055\u004c\u0049\u004e\u0047";};_bedcf ,_ccagd :="\u0078","\u0079";if _bgda ._dbgef ==_gcbe {_bedcf ,_ccagd ="\u0079","\u0078";};_cfcfg :="";if _bgda ._bcacf !=0.0{_cfcfg =_fg .Sprintf (" \u0077\u0069\u0064\u0074\u0068\u003d\u0025\u002e\u0032\u0066",_bgda ._bcacf );};return _fg .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",_bgda ._dbgef ,_bedcf ,_bgda ._dbaac ,_ccagd ,_bgda ._dafad ,_bgda ._bacb ,_bgda ._bacb -_bgda ._dafad ,_bgda ._badd ,_bgda .Color ,_cfcfg );};const (_eaag =false ;_gecd =false ;_dbce =false ;_aecfa =false ;_fcdb =false ;_fdegg =false ;_dgee =false ;_adbg =false ;_bdba =false ;_eaca =_bdba &&true ;_gcaf =_eaca &&false ;_gfea =_bdba &&true ;_egfe =false ;_abgc =_egfe &&false ;_fagg =_egfe &&true ;_bdf =false ;_beebe =_bdf &&false ;_cgfe =_bdf &&false ;_dac =_bdf &&true ;_cbb =_bdf &&false ;_dfgc =_bdf &&false ;);
// BBox returns the smallest axis-aligned rectangle that encloses all the TextMarks in `ma`.
func (_fcgg *TextMarkArray )BBox ()(_eb .PdfRectangle ,bool ){var _ecbc _eb .PdfRectangle ;_dbb :=false ;for _ ,_cdd :=range _fcgg ._dcae {if _cdd .Meta ||_fbccb (_cdd .Text ){continue ;};if _dbb {_ecbc =_cbcc (_ecbc ,_cdd .BBox );}else {_ecbc =_cdd .BBox ;_dbb =true ;};};return _ecbc ,_dbb ;};func (_cac compositeCell )split (_agba ,_gagb []float64 )*textTable {_bfbf :=len (_agba )+1;_fdfa :=len (_gagb )+1;if _egfe {_cg .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",_fdfa ,_bfbf ,_cac ,_agba ,_gagb );_fg .Printf ("\u0020\u0020\u0020\u0020\u0025\u0064\u0020\u0070\u0061\u0072\u0061\u0073\u000a",len (_cac .paraList ));for _dbbf ,_fdbfbg :=range _cac .paraList {_fg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_dbbf ,_fdbfbg .String ());};_fg .Printf ("\u0020\u0020\u0020\u0020\u0025\u0064\u0020\u006c\u0069\u006e\u0065\u0073\u000a",len (_cac .lines ()));for _cgbb ,_bbeff :=range _cac .lines (){_fg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_cgbb ,_bbeff );};};_agba =_cdec (_agba ,_cac .Ury ,_cac .Lly );_gagb =_cdec (_gagb ,_cac .Llx ,_cac .Urx );_fgee :=make (map[uint64 ]*textPara ,_fdfa *_bfbf );_ceag :=textTable {_gdgf :_fdfa ,_eagaa :_bfbf ,_edeac :_fgee };_bged :=_cac .paraList ;_a .Slice (_bged ,func (_abgcb ,_eedg int )bool {_caba ,_bdcag :=_bged [_abgcb ],_bged [_eedg ];_aaagd ,_dgedg :=_caba .Lly ,_bdcag .Lly ;if _aaagd !=_dgedg {return _aaagd < _dgedg ;};return _caba .Llx < _bdcag .Llx ;});_dfgf :=make (map[uint64 ]_eb .PdfRectangle ,_fdfa *_bfbf );for _ccgef ,_gdag :=range _agba [1:]{_cfada :=_agba [_ccgef ];for _ccde ,_dbag :=range _gagb [1:]{_eeafe :=_gagb [_ccde ];_dfgf [_cdfa (_ccde ,_ccgef )]=_eb .PdfRectangle {Llx :_eeafe ,Urx :_dbag ,Lly :_gdag ,Ury :_cfada };};};if _egfe {_cg .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");_fg .Printf ("\u0020\u0020\u0020\u0020");for _febe :=0;_febe < _fdfa ;_febe ++{_fg .Printf ("\u0025\u0033\u0030\u0064\u002c\u0020",_febe );};_fg .Println ();for _ebdf :=0;_ebdf < _bfbf ;_ebdf ++{_fg .Printf ("\u0020\u0020\u0025\u0032\u0064\u003a",_ebdf );for _dbcb :=0;_dbcb < _fdfa ;_dbcb ++{_fg .Printf ("\u00256\u002e\u0032\u0066\u002c\u0020",_dfgf [_cdfa (_dbcb ,_ebdf )]);};_fg .Println ();};};_gfce :=func (_dddff *textLine )(int ,int ){for _cbee :=0;_cbee < _bfbf ;_cbee ++{for _ecbdc :=0;_ecbdc < _fdfa ;_ecbdc ++{if _eecg (_dfgf [_cdfa (_ecbdc ,_cbee )],_dddff .PdfRectangle ){return _ecbdc ,_cbee ;};};};return -1,-1;};_cdfc :=make (map[uint64 ][]*textLine ,_fdfa *_bfbf );for _ ,_dafab :=range _bged .lines (){_gfdg ,_cfgga :=_gfce (_dafab );if _gfdg < 0{continue ;};_cdfc [_cdfa (_gfdg ,_cfgga )]=append (_cdfc [_cdfa (_gfdg ,_cfgga )],_dafab );};for _gcdd :=0;_gcdd < len (_agba )-1;_gcdd ++{_gfge :=_agba [_gcdd ];_cfdd :=_agba [_gcdd +1];for _ddba :=0;_ddba < len (_gagb )-1;_ddba ++{_fbcb :=_gagb [_ddba ];_cecg :=_gagb [_ddba +1];_ggee :=_eb .PdfRectangle {Llx :_fbcb ,Urx :_cecg ,Lly :_cfdd ,Ury :_gfge };_caee :=_cdfc [_cdfa (_ddba ,_gcdd )];if len (_caee )==0{continue ;};_abcg :=_ggec (_ggee ,_caee );_ceag .put (_ddba ,_gcdd ,_abcg );};};return &_ceag ;};func (_cdddc *textWord )absorb (_bedcg *textWord ){_cdddc .PdfRectangle =_cbcc (_cdddc .PdfRectangle ,_bedcg .PdfRectangle );_cdddc ._dfea =append (_cdddc ._dfea ,_bedcg ._dfea ...);};
// Text returns the extracted page text.
func (_dccd PageText )Text ()string {return _dccd ._bgbbb };func (_eccfd *textWord )addDiacritic (_dfedae string ){_dgbcf :=_eccfd ._dfea [len (_eccfd ._dfea )-1];_dgbcf ._ffab +=_dfedae ;_dgbcf ._ffab =_fe .NFKC .String (_dgbcf ._ffab );};func (_cfb *imageExtractContext )extractInlineImage (_aec *_acb .ContentStreamInlineImage ,_dfcc _acb .GraphicsState ,_ecb *_eb .PdfPageResources )error {_gbf ,_ade :=_aec .ToImage (_ecb );if _ade !=nil {return _ade ;};_eg ,_ade :=_aec .GetColorSpace (_ecb );if _ade !=nil {return _ade ;};if _eg ==nil {_eg =_eb .NewPdfColorspaceDeviceGray ();};_eac ,_ade :=_eg .ImageToRGB (*_gbf );if _ade !=nil {return _ade ;};_aed :=ImageMark {Image :&_eac ,Width :_dfcc .CTM .ScalingFactorX (),Height :_dfcc .CTM .ScalingFactorY (),Angle :_dfcc .CTM .Angle ()};_aed .X ,_aed .Y =_dfcc .CTM .Translation ();_cfb ._ag =append (_cfb ._ag ,_aed );_cfb ._eca ++;return nil ;};
// String returns a human readable description of `ss`.
func (_deg *shapesState )String ()string {return _fg .Sprintf ("\u007b\u0025\u0064\u0020su\u0062\u0070\u0061\u0074\u0068\u0073\u0020\u0066\u0072\u0065\u0073\u0068\u003d\u0025t\u007d",len (_deg ._cddf ),_deg ._gdca );};func _eee (_dbgc ,_adba _eb .PdfRectangle )bool {return _dbgc .Lly <=_adba .Ury &&_adba .Lly <=_dbgc .Ury ;};func _fbccb (_eccf string )bool {for _ ,_bdffb :=range _eccf {if !_df .IsSpace (_bdffb ){return false ;};};return true ;};func (_aebb *shapesState )addPoint (_fbaa ,_bfdc float64 ){_efcbb :=_aebb .establishSubpath ();_adge :=_aebb .devicePoint (_fbaa ,_bfdc );if _efcbb ==nil {_aebb ._gdca =true ;_aebb ._bgbd =_adge ;}else {_efcbb .add (_adge );};};type markKind int ;
// Marks returns the TextMark collection for a page. It represents all the text on the page.
func (_bfba PageText )Marks ()*TextMarkArray {return &TextMarkArray {_dcae :_bfba ._bge }};func _cacb (_dedb string ,_fecfg int )string {if len (_dedb )< _fecfg {return _dedb ;};return _dedb [:_fecfg ];};func (_ffec *wordBag )applyRemovals (_ecbdf map[int ]map[*textWord ]struct{}){for _aaa ,_agfd :=range _ecbdf {if len (_agfd )==0{continue ;};_agca :=_ffec ._fccg [_aaa ];_babe :=len (_agca )-len (_agfd );if _babe ==0{delete (_ffec ._fccg ,_aaa );continue ;};_gdgc :=make ([]*textWord ,_babe );_efbe :=0;for _ ,_deeb :=range _agca {if _ ,_ccga :=_agfd [_deeb ];!_ccga {_gdgc [_efbe ]=_deeb ;_efbe ++;};};_ffec ._fccg [_aaa ]=_gdgc ;};};func (_dgba *subpath )removeDuplicates (){if len (_dgba ._eadd )==0{return ;};_ebc :=[]_ce .Point {_dgba ._eadd [0]};for _ ,_gcb :=range _dgba ._eadd [1:]{if !_cdfb (_gcb ,_ebc [len (_ebc )-1]){_ebc =append (_ebc ,_gcb );};};_dgba ._eadd =_ebc ;};func (_fcfc *textObject )checkOp (_gfef *_acb .ContentStreamOperation ,_eaad int ,_caf bool )(_fde bool ,_cbab error ){if _fcfc ==nil {var _fee []_dfc .PdfObject ;if _eaad > 0{_fee =_gfef .Params ;if len (_fee )> _eaad {_fee =_fee [:_eaad ];};};_cg .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",_gfef .Operand ,_fee );};if _eaad >=0{if len (_gfef .Params )!=_eaad {if _caf {_cbab =_f .New ("\u0069n\u0063\u006f\u0072\u0072e\u0063\u0074\u0020\u0070\u0061r\u0061m\u0065t\u0065\u0072\u0020\u0063\u006f\u0075\u006et");};_cg .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",_gfef .Operand ,_eaad ,len (_gfef .Params ),_gfef .Params );return false ,_cbab ;};};return true ,nil ;};func (_eafa rulingList )blocks (_gbbf ,_fabg *ruling )bool {if _gbbf ._dafad > _fabg ._bacb ||_fabg ._dafad > _gbbf ._bacb {return false ;};_eeade :=_c .Max (_gbbf ._dafad ,_fabg ._dafad );_ggcd :=_c .Min (_gbbf ._bacb ,_fabg ._bacb );if _gbbf ._dbaac > _fabg ._dbaac {_gbbf ,_fabg =_fabg ,_gbbf ;};for _ ,_degge :=range _eafa {if _gbbf ._dbaac <=_degge ._dbaac +_gdcf &&_degge ._dbaac <=_fabg ._dbaac +_gdcf &&_degge ._dafad <=_ggcd &&_eeade <=_degge ._bacb {return true ;};};return false ;};func (_efda *textLine )markWordBoundaries (){_ffed :=_aadb *_efda ._gcff ;for _fcba ,_aagc :=range _efda ._edgc [1:]{if _bgba (_aagc ,_efda ._edgc [_fcba ])>=_ffed {_aagc ._gdba =true ;};};};func _aebcc (_bcdd _eb .PdfRectangle ,_fggdf ,_bfcd ,_bbee ,_effe *ruling )gridTile {_ccee :=_bcdd .Llx ;_cega :=_bcdd .Urx ;_agaef :=_bcdd .Lly ;_gdfea :=_bcdd .Ury ;return gridTile {PdfRectangle :_bcdd ,_ebed :_fggdf !=nil &&_fggdf .encloses (_agaef ,_gdfea ),_bbc :_bfcd !=nil &&_bfcd .encloses (_agaef ,_gdfea ),_beag :_bbee !=nil &&_bbee .encloses (_ccee ,_cega ),_dgbba :_effe !=nil &&_effe .encloses (_ccee ,_cega )};};func _dadgd (_dada map[int ]intSet )[]int {_dfaaf :=make ([]int ,0,len (_dada ));for _eebbe :=range _dada {_dfaaf =append (_dfaaf ,_eebbe );};_a .Ints (_dfaaf );return _dfaaf ;};func _ggef (_bgedf []*textMark ,_cccc _eb .PdfRectangle )[]*textWord {var _aggdd []*textWord ;var _degaa *textWord ;if _gecd {_cg .Log .Info ("\u006d\u0061\u006beT\u0065\u0078\u0074\u0057\u006f\u0072\u0064\u0073\u003a\u0020\u0025\u0064\u0020\u006d\u0061\u0072\u006b\u0073",len (_bgedf ));};_cfcdf :=func (){if _degaa !=nil {_gfegf :=_degaa .computeText ();if !_fbccb (_gfegf ){_degaa ._dfgdd =_gfegf ;_aggdd =append (_aggdd ,_degaa );if _gecd {_cg .Log .Info ("\u0061\u0064\u0064Ne\u0077\u0057\u006f\u0072\u0064\u003a\u0020\u0025\u0064\u003a\u0020\u0077\u006f\u0072\u0064\u003d\u0025\u0073",len (_aggdd )-1,_degaa .String ());for _ebcce ,_ccbd :=range _degaa ._dfea {_fg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_ebcce ,_ccbd .String ());};};};_degaa =nil ;};};for _ ,_gdfc :=range _bgedf {if _cgbf &&_degaa !=nil &&len (_degaa ._dfea )> 0{_acgge :=_degaa ._dfea [len (_degaa ._dfea )-1];_bafc ,_bfgbb :=_degfe (_gdfc ._ffab );_fgacc ,_abgag :=_degfe (_acgge ._ffab );if _bfgbb &&!_abgag &&_acgge .inDiacriticArea (_gdfc ){_degaa .addDiacritic (_bafc );continue ;};if _abgag &&!_bfgbb &&_gdfc .inDiacriticArea (_acgge ){_degaa ._dfea =_degaa ._dfea [:len (_degaa ._dfea )-1];_degaa .appendMark (_gdfc ,_cccc );_degaa .addDiacritic (_fgacc );continue ;};};_eccca :=_fbccb (_gdfc ._ffab );if _eccca {_cfcdf ();continue ;};if _degaa ==nil &&!_eccca {_degaa =_ecgfd ([]*textMark {_gdfc },_cccc );continue ;};_feac :=_degaa ._cbbbc ;_agdea :=_c .Abs (_abfcd (_cccc ,_gdfc )-_degaa ._dfgg )/_feac ;_adab :=_bgba (_gdfc ,_degaa )/_feac ;if _adab >=_edee ||!(-_ceg <=_adab &&_agdea <=_adbab ){_cfcdf ();_degaa =_ecgfd ([]*textMark {_gdfc },_cccc );continue ;};_degaa .appendMark (_gdfc ,_cccc );};_cfcdf ();return _aggdd ;};func (_cbaf *shapesState )closePath (){if _cbaf ._gdca {_cbaf ._cddf =append (_cbaf ._cddf ,_deggb (_cbaf ._bgbd ));_cbaf ._gdca =false ;}else if len (_cbaf ._cddf )==0{if _fcdb {_cg .Log .Debug ("\u0063\u006c\u006f\u0073eP\u0061\u0074\u0068\u0020\u0077\u0069\u0074\u0068\u0020\u006e\u006f\u0020\u0070\u0061t\u0068");};_cbaf ._gdca =false ;return ;};_cbaf ._cddf [len (_cbaf ._cddf )-1].close ();if _fcdb {_cg .Log .Info ("\u0063\u006c\u006f\u0073\u0065\u0050\u0061\u0074\u0068\u003a\u0020\u0025\u0073",_cbaf );};};
// String returns a description of `b`.
func (_fddf *wordBag )String ()string {var _edg []string ;for _ ,_dfac :=range _fddf .depthIndexes (){_gaga :=_fddf ._fccg [_dfac ];for _ ,_efag :=range _gaga {_edg =append (_edg ,_efag ._dfgdd );};};return _fg .Sprintf ("\u0025.\u0032\u0066\u0020\u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065=\u0025\u002e\u0032\u0066\u0020\u0025\u0064\u0020\u0025\u0071",_fddf .PdfRectangle ,_fddf ._ebbb ,len (_edg ),_edg );};func (_aagf *textObject )reset (){_aagf ._fafg =_ce .IdentityMatrix ();_aagf ._cffg =_ce .IdentityMatrix ();_aagf ._geg =nil ;};
// New returns an Extractor instance for extracting content from the input PDF page.
func New (page *_eb .PdfPage )(*Extractor ,error ){const _ec ="\u0065\u0078\u0074\u0072\u0061\u0063\u0074\u006f\u0072\u002e\u004e\u0065\u0077";_cb ,_aa :=page .GetAllContentStreams ();if _aa !=nil {return nil ,_aa ;};_fbg ,_aa :=page .GetMediaBox ();if _aa !=nil {return nil ,_fg .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",_aa );};_bg :=&Extractor {_de :_cb ,_ebd :page .Resources ,_ef :*_fbg ,_ebf :map[string ]fontEntry {},_efe :map[string ]textResult {}};if _bg ._ef .Llx > _bg ._ef .Urx {_cg .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",_bg ._ef );_bg ._ef .Llx ,_bg ._ef .Urx =_bg ._ef .Urx ,_bg ._ef .Llx ;};if _bg ._ef .Lly > _bg ._ef .Ury {_cg .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",_bg ._ef );_bg ._ef .Lly ,_bg ._ef .Ury =_bg ._ef .Ury ,_bg ._ef .Lly ;};_fd .TrackUse (_ec );return _bg ,nil ;};func (_dagd *textObject )setHorizScaling (_dgfa float64 ){if _dagd ==nil {return ;};_dagd ._ddd ._ada =_dgfa ;};func (_degg *shapesState )quadraticTo (_gede ,_bba ,_fcaa ,_feee float64 ){if _fcdb {_cg .Log .Info ("\u0071\u0075\u0061d\u0072\u0061\u0074\u0069\u0063\u0054\u006f\u003a");};_degg .addPoint (_fcaa ,_feee );};func (_aaagg rulingList )mergePrimary ()float64 {_ffbf :=_aaagg [0]._dbaac ;for _ ,_aaad :=range _aaagg [1:]{_ffbf +=_aaad ._dbaac ;};return _ffbf /float64 (len (_aaagg ));};func (_fgdbf *wordBag )depthBand (_ebbf ,_aaeg float64 )[]int {if len (_fgdbf ._fccg )==0{return nil ;};return _fgdbf .depthRange (_fgdbf .getDepthIdx (_ebbf ),_fgdbf .getDepthIdx (_aaeg ));};
// String returns a human readable description of `vecs`.
func (_gcfe rulingList )String ()string {if len (_gcfe )==0{return "\u007b \u0045\u004d\u0050\u0054\u0059\u0020}";};_ecae ,_beea :=_gcfe .vertsHorzs ();_bbda :=len (_ecae );_fggd :=len (_beea );if _bbda ==0||_fggd ==0{return _fg .Sprintf ("\u007b%\u0064\u0020\u0078\u0020\u0025\u0064}",_bbda ,_fggd );};_dcbge :=_eb .PdfRectangle {Llx :_ecae [0]._dbaac ,Urx :_ecae [_bbda -1]._dbaac ,Lly :_beea [_fggd -1]._dbaac ,Ury :_beea [0]._dbaac };return _fg .Sprintf ("\u007b\u0025d\u0020\u0078\u0020%\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u007d",_bbda ,_fggd ,_dcbge );};func (_gefga rulingList )findPrimSec (_bfgcg ,_febd float64 )*ruling {for _ ,_dfab :=range _gefga {if _gaabc (_dfab ._dbaac -_bfgcg )&&_dfab ._dafad -_bbeb <=_febd &&_febd <=_dfab ._bacb +_bbeb {return _dfab ;};};return nil ;};type gridTile struct{_eb .PdfRectangle ;_dgbba ,_ebed ,_beag ,_bbc bool ;};
// String returns a description of `tm`.
func (_dbdg *textMark )String ()string {return _fg .Sprintf ("\u0025\u002e\u0032f \u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065\u003d\u0025\u002e\u0032\u0066\u0020\u0022\u0025\u0073\u0022",_dbdg .PdfRectangle ,_dbdg ._ebec ,_dbdg ._ffab );};func (_ace *textObject )showText (_eaa []byte )error {return _ace .renderText (_eaa )};func _ecgfd (_afbc []*textMark ,_abed _eb .PdfRectangle )*textWord {_cdgg :=_afbc [0].PdfRectangle ;_ebcfd :=_afbc [0]._ebec ;for _ ,_ceaeg :=range _afbc [1:]{_cdgg =_cbcc (_cdgg ,_ceaeg .PdfRectangle );if _ceaeg ._ebec > _ebcfd {_ebcfd =_ceaeg ._ebec ;};};return &textWord {PdfRectangle :_cdgg ,_dfea :_afbc ,_dfgg :_abed .Ury -_cdgg .Lly ,_cbbbc :_ebcfd };};func _ceb (_gfda _eb .PdfRectangle )textState {return textState {_ada :100,_dcd :RenderModeFill ,_dbef :_gfda };};
// String returns a string describing `tm`.
func (_gega TextMark )String ()string {_eaba :=_gega .BBox ;var _agb string ;if _gega .Font !=nil {_agb =_gega .Font .String ();if len (_agb )> 50{_agb =_agb [:50]+"\u002e\u002e\u002e";};};var _dee string ;if _gega .Meta {_dee ="\u0020\u002a\u004d\u002a";};return _fg .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",_gega .Offset ,_gega .Text ,[]rune (_gega .Text ),_eaba .Llx ,_eaba .Lly ,_eaba .Urx ,_eaba .Ury ,_agb ,_dee );};func _cgbbd (_gdgcf _eb .PdfRectangle )rulingKind {_gcfc :=_gdgcf .Width ();_dacd :=_gdgcf .Height ();if _gcfc > _dacd {if _gcfc >=_bgdfd {return _gcbe ;};}else {if _dacd >=_bgdfd {return _ebga ;};};return _gbab ;};func (_fcgbc *textLine )appendWord (_cedb *textWord ){_fcgbc ._edgc =append (_fcgbc ._edgc ,_cedb );_fcgbc .PdfRectangle =_cbcc (_fcgbc .PdfRectangle ,_cedb .PdfRectangle );if _cedb ._cbbbc > _fcgbc ._gcff {_fcgbc ._gcff =_cedb ._cbbbc ;};if _cedb ._dfgg > _fcgbc ._cfaa {_fcgbc ._cfaa =_cedb ._dfgg ;};};func (_gfgc paraList )topoOrder ()[]int {if _adbg {_cg .Log .Info ("\u0074\u006f\u0070\u006f\u004f\u0072\u0064\u0065\u0072\u003a");};_eadf :=len (_gfgc );_ebbc :=make ([]bool ,_eadf );_fade :=make ([]int ,0,_eadf );_affc :=_gfgc .llyOrdering ();var _cfde func (_cad int );_cfde =func (_bfdcgc int ){_ebbc [_bfdcgc ]=true ;for _cgfb :=0;_cgfb < _eadf ;_cgfb ++{if !_ebbc [_cgfb ]{if _gfgc .readBefore (_affc ,_bfdcgc ,_cgfb ){_cfde (_cgfb );};};};_fade =append (_fade ,_bfdcgc );};for _dcef :=0;_dcef < _eadf ;_dcef ++{if !_ebbc [_dcef ]{_cfde (_dcef );};};return _egca (_fade );};func _bbgf (_efagd string )string {_egggc :=[]rune (_efagd );return string (_egggc [:len (_egggc )-1])};func (_bcfae rulingList )sort (){_a .Slice (_bcfae ,_bcfae .comp )};func (_fadbc *textTable )depth ()float64 {_ecgc :=1e10;for _cacee :=0;_cacee < _fadbc ._gdgf ;_cacee ++{_gbeb :=_fadbc .get (_cacee ,0);if _gbeb ==nil ||_gbeb ._cfbg {continue ;};_ecgc =_c .Min (_ecgc ,_gbeb .depth ());};return _ecgc ;};type stateStack []*textState ;func (_ddae rulingList )log (_bebbc string ){if !_bdf {return ;};_cg .Log .Info ("\u0023\u0023\u0023\u0020\u0025\u0031\u0030\u0073\u003a\u0020\u0076\u0065c\u0073\u003d\u0025\u0073",_bebbc ,_ddae .String ());for _deece ,_cbcd :=range _ddae {_fg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_deece ,_cbcd .String ());};};func _gcef (_ggfa string ,_ffacg []rulingList ){_cg .Log .Info ("\u0024\u0024 \u0025\u0064\u0020g\u0072\u0069\u0064\u0073\u0020\u002d\u0020\u0025\u0073",len (_ffacg ),_ggfa );for _ecea ,_abba :=range _ffacg {_fg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_ecea ,_abba .String ());};};func (_ggggb rulingList )merge ()*ruling {_gbde :=_ggggb [0]._dbaac ;_bfce :=_ggggb [0]._dafad ;_fdbaf :=_ggggb [0]._bacb ;for _ ,_aacg :=range _ggggb [1:]{_gbde +=_aacg ._dbaac ;if _aacg ._dafad < _bfce {_bfce =_aacg ._dafad ;};if _aacg ._bacb > _fdbaf {_fdbaf =_aacg ._bacb ;};};_eebca :=&ruling {_dbgef :_ggggb [0]._dbgef ,_badd :_ggggb [0]._badd ,Color :_ggggb [0].Color ,_dbaac :_gbde /float64 (len (_ggggb )),_dafad :_bfce ,_bacb :_fdbaf };if _cgfe {_cg .Log .Info ("\u006de\u0072g\u0065\u003a\u0020\u0025\u0032d\u0020\u0076e\u0063\u0073\u0020\u0025\u0073",len (_ggggb ),_eebca );for _ccfaf ,_ddab :=range _ggggb {_fg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_ccfaf ,_ddab );};};return _eebca ;};func (_ffag paraList )eventNeighbours (_cdad []event )map[*textPara ][]int {_a .Slice (_cdad ,func (_efffc ,_deaca int )bool {_bbag ,_abea :=_cdad [_efffc ],_cdad [_deaca ];_abeb ,_febgb :=_bbag ._dgbfg ,_abea ._dgbfg ;if _abeb !=_febgb {return _abeb < _febgb ;};if _bbag ._bcea !=_abea ._bcea {return _bbag ._bcea ;};return _efffc < _deaca ;});_facca :=make (map[int ]intSet );_gafad :=make (intSet );for _ ,_fgda :=range _cdad {if _fgda ._bcea {_facca [_fgda ._febgg ]=make (intSet );for _adafd :=range _gafad {if _adafd !=_fgda ._febgg {_facca [_fgda ._febgg ].add (_adafd );_facca [_adafd ].add (_fgda ._febgg );};};_gafad .add (_fgda ._febgg );}else {_gafad .del (_fgda ._febgg );};};_dgbcg :=map[*textPara ][]int {};for _ggfc ,_cadc :=range _facca {_caeee :=_ffag [_ggfc ];if len (_cadc )==0{_dgbcg [_caeee ]=nil ;continue ;};_eege :=make ([]int ,len (_cadc ));_dcca :=0;for _aeeeg :=range _cadc {_eege [_dcca ]=_aeeeg ;_dcca ++;};_dgbcg [_caeee ]=_eege ;};return _dgbcg ;};func (_gege *textTable )toTextTable ()TextTable {if _egfe {_cg .Log .Info ("t\u006fT\u0065\u0078\u0074\u0054\u0061\u0062\u006c\u0065:\u0020\u0025\u0064\u0020x \u0025\u0064",_gege ._gdgf ,_gege ._eagaa );};_egeg :=make ([][]TableCell ,_gege ._eagaa );for _dbcd :=0;_dbcd < _gege ._eagaa ;_dbcd ++{_egeg [_dbcd ]=make ([]TableCell ,_gege ._gdgf );for _baegc :=0;_baegc < _gege ._gdgf ;_baegc ++{_edcgf :=_gege .get (_baegc ,_dbcd );if _edcgf ==nil {continue ;};if _egfe {_fg .Printf ("\u0025\u0034\u0064 \u0025\u0032\u0064\u003a\u0020\u0025\u0073\u000a",_baegc ,_dbcd ,_edcgf );};_egeg [_dbcd ][_baegc ].Text =_edcgf .text ();_cbebgf :=0;_egeg [_dbcd ][_baegc ].Marks ._dcae =_edcgf .toTextMarks (&_cbebgf );};};return TextTable {W :_gege ._gdgf ,H :_gege ._eagaa ,Cells :_egeg };};func _acgg (_gdbgd _eb .PdfRectangle )*ruling {return &ruling {_dbgef :_gcbe ,_dbaac :_gdbgd .Ury ,_dafad :_gdbgd .Llx ,_bacb :_gdbgd .Urx };};func (_ebdb *textObject )getFontDirect (_geffg string )(*_eb .PdfFont ,error ){_dede ,_feb :=_ebdb .getFontDict (_geffg );if _feb !=nil {return nil ,_feb ;};_gge ,_feb :=_eb .NewPdfFontFromPdfObject (_dede );if _feb !=nil {_cg .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",_geffg ,_feb );};return _gge ,_feb ;};func _eggd (_fffae _eb .PdfRectangle )*ruling {return &ruling {_dbgef :_ebga ,_dbaac :_fffae .Urx ,_dafad :_fffae .Lly ,_bacb :_fffae .Ury };};func (_eggf paraList )findTables (_cddac []gridTiling )[]*textTable {_eggf .addNeighbours ();_a .Slice (_eggf ,func (_febf ,_cecaf int )bool {return _fdbf (_eggf [_febf ],_eggf [_cecaf ])< 0});var _edffg []*textTable ;if _dcgg {_dgad :=_eggf .findGridTables (_cddac );_edffg =append (_edffg ,_dgad ...);};if _fefa {_fabbd :=_eggf .findTextTables ();_edffg =append (_edffg ,_fabbd ...);};return _edffg ;};type shapesState struct{_gcdf _ce .Matrix ;_bagf _ce .Matrix ;_cddf []*subpath ;_gdca bool ;_bgbd _ce .Point ;_cfe *textObject ;};var _ad =false ;func (_bbed *textMark )bbox ()_eb .PdfRectangle {return _bbed .PdfRectangle };func _cffe (_deeba ,_fea bounded )float64 {return _deeba .bbox ().Llx -_fea .bbox ().Llx };func _fccab (_cfdg []pathSection ){if _bfgfd < 0.0{return ;};if _bdf {_cg .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 (_cfdg ));};for _adegg ,_afeb :=range _cfdg {for _efaa ,_baagc :=range _afeb ._ecf {for _cegda ,_cfbc :=range _baagc ._eadd {_baagc ._eadd [_cegda ]=_ce .Point {X :_bcfc (_cfbc .X ),Y :_bcfc (_cfbc .Y )};if _bdf {_aeace :=_baagc ._eadd [_cegda ];if !_cdfb (_cfbc ,_aeace ){_bfcb :=_ce .Point {X :_aeace .X -_cfbc .X ,Y :_aeace .Y -_cfbc .Y };_fg .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",_adegg ,_efaa ,_cegda ,_cfbc ,_aeace ,_bfcb );};};};};};};func (_bfa *textObject )setCharSpacing (_affd float64 ){if _bfa ==nil {return ;};_bfa ._ddd ._effg =_affd ;if _fdegg {_cg .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",_affd ,_bfa ._ddd .String ());};};func (_acg *wordBag )scanBand (_dadd string ,_bggb *wordBag ,_eagc func (_bcgf *wordBag ,_acca *textWord )bool ,_bdae ,_gcab ,_fdc float64 ,_agcf ,_dgdb bool )int {_gfeff :=_bggb ._ebbb ;var _agde map[int ]map[*textWord ]struct{};if !_agcf {_agde =_acg .makeRemovals ();};_fbea :=_fcdbe *_gfeff ;_fgggb :=0;for _ ,_fdde :=range _acg .depthBand (_bdae -_fbea ,_gcab +_fbea ){if len (_acg ._fccg [_fdde ])==0{continue ;};for _ ,_geadg :=range _acg ._fccg [_fdde ]{if !(_bdae -_fbea <=_geadg ._dfgg &&_geadg ._dfgg <=_gcab +_fbea ){continue ;};if !_eagc (_bggb ,_geadg ){continue ;};_begd :=2.0*_c .Abs (_geadg ._cbbbc -_bggb ._ebbb )/(_geadg ._cbbbc +_bggb ._ebbb );_agbf :=_c .Max (_geadg ._cbbbc /_bggb ._ebbb ,_bggb ._ebbb /_geadg ._cbbbc );_eea :=_c .Min (_begd ,_agbf );if _fdc > 0&&_eea > _fdc {continue ;};if _bggb .blocked (_geadg ){continue ;};if !_agcf {_bggb .pullWord (_geadg ,_fdde ,_agde );};_fgggb ++;if !_dgdb {if _geadg ._dfgg < _bdae {_bdae =_geadg ._dfgg ;};if _geadg ._dfgg > _gcab {_gcab =_geadg ._dfgg ;};};if _agcf {break ;};};};if !_agcf {_acg .applyRemovals (_agde );};return _fgggb ;};func _dfed (_fgec ,_bfdcg *textPara )bool {if _fgec ._cfbg ||_bfdcg ._cfbg {return true ;};return _gaabc (_fgec .depth ()-_bfdcg .depth ());};func (_edc *shapesState )drawRectangle (_cdde ,_gaad ,_aegg ,_dgec float64 ){if _fcdb {_acfe :=_edc .devicePoint (_cdde ,_gaad );_adac :=_edc .devicePoint (_cdde +_aegg ,_gaad +_dgec );_fdeg :=_eb .PdfRectangle {Llx :_acfe .X ,Lly :_acfe .Y ,Urx :_adac .X ,Ury :_adac .Y };_cg .Log .Info ("d\u0072a\u0077\u0052\u0065\u0063\u0074\u0061\u006e\u0067l\u0065\u003a\u0020\u00256.\u0032\u0066",_fdeg );};_edc .newSubPath ();_edc .moveTo (_cdde ,_gaad );_edc .lineTo (_cdde +_aegg ,_gaad );_edc .lineTo (_cdde +_aegg ,_gaad +_dgec );_edc .lineTo (_cdde ,_gaad +_dgec );_edc .closePath ();};func _abde (_effgb []*textWord ,_agbeg int )[]*textWord {_fbgcb :=len (_effgb );copy (_effgb [_agbeg :],_effgb [_agbeg +1:]);return _effgb [:_fbgcb -1];};
// ImageMark represents an image drawn on a page and its position in device coordinates.
// All coordinates are in device coordinates.
type ImageMark struct{Image *_eb .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 ;};
// Elements returns the TextMarks in `ma`.
func (_gec *TextMarkArray )Elements ()[]TextMark {return _gec ._dcae };func (_aaag *wordBag )arrangeText ()*textPara {_aaag .sort ();if _ebea {_aaag .removeDuplicates ();};var _fcdf []*textLine ;for _ ,_gbba :=range _aaag .depthIndexes (){for !_aaag .empty (_gbba ){_abda :=_aaag .firstReadingIndex (_gbba );_gbge :=_aaag .firstWord (_abda );_dffca :=_ebgc (_aaag ,_abda );_ccab :=_gbge ._cbbbc ;_dfeg :=_gbge ._dfgg -_fcdbe *_ccab ;_fcdbeg :=_gbge ._dfgg +_fcdbe *_ccab ;_fffe :=_eace *_ccab ;_caeg :=_fccc *_ccab ;_bgea :for {var _bcac *textWord ;_dgdc :=0;for _ ,_aaga :=range _aaag .depthBand (_dfeg ,_fcdbeg ){_beda :=_aaag .highestWord (_aaga ,_dfeg ,_fcdbeg );if _beda ==nil {continue ;};_dgbb :=_bgba (_beda ,_dffca ._edgc [len (_dffca ._edgc )-1]);if _dgbb < -_caeg {break _bgea ;};if _dgbb > _fffe {continue ;};if _bcac !=nil &&_cffe (_beda ,_bcac )>=0{continue ;};_bcac =_beda ;_dgdc =_aaga ;};if _bcac ==nil {break ;};_dffca .pullWord (_aaag ,_bcac ,_dgdc );};_dffca .markWordBoundaries ();_fcdf =append (_fcdf ,_dffca );};};if len (_fcdf )==0{return nil ;};_a .Slice (_fcdf ,func (_efff ,_edbfg int )bool {return _gacg (_fcdf [_efff ],_fcdf [_edbfg ])< 0});_efdd :=_ggec (_aaag .PdfRectangle ,_fcdf );if _bdba {_cg .Log .Info ("\u0061\u0072\u0072an\u0067\u0065\u0054\u0065\u0078\u0074\u0020\u0021\u0021\u0021\u0020\u0070\u0061\u0072\u0061\u003d\u0025\u0073",_efdd .String ());if _eaca {for _fcaf ,_gacd :=range _efdd ._ffac {_fg .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_fcaf ,_gacd .String ());if _gcaf {for _ffbe ,_fffa :=range _gacd ._edgc {_fg .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_ffbe ,_fffa .String ());for _dgfg ,_afab :=range _fffa ._dfea {_fg .Printf ("\u00251\u0032\u0064\u003a\u0020\u0025\u0073\n",_dgfg ,_afab .String ());};};};};};};return _efdd ;};type subpath struct{_eadd []_ce .Point ;_dff bool ;};
// TextTable represents a table.
// Cells are ordered top-to-bottom, left-to-right.
// Cells[y] is the (0-offset) y'th row in the table.
// Cells[y][x] is the (0-offset) x'th column in the table.
type TextTable struct{W ,H int ;Cells [][]TableCell ;};type paraList []*textPara ;type rectRuling struct{_ebef rulingKind ;_ggf markKind ;_e .Color ;_eb .PdfRectangle ;};func (_edfe *textObject )getFont (_ebe string )(*_eb .PdfFont ,error ){if _edfe ._adfa ._ebf !=nil {_edfe ._adfa ._gad ++;_gcad ,_dcfb :=_edfe ._adfa ._ebf [_ebe ];if _dcfb {_gcad ._dcce =_edfe ._adfa ._gad ;return _gcad ._bgd ,nil ;};};_dde ,_edbd :=_edfe .getFontDirect (_ebe );if _edbd !=nil {return nil ,_edbd ;};if _edfe ._adfa ._ebf !=nil {_bcd :=fontEntry {_dde ,_edfe ._adfa ._gad };if len (_edfe ._adfa ._ebf )>=_edae {var _ccec []string ;for _afed :=range _edfe ._adfa ._ebf {_ccec =append (_ccec ,_afed );};_a .Slice (_ccec ,func (_dddd ,_aeed int )bool {return _edfe ._adfa ._ebf [_ccec [_dddd ]]._dcce < _edfe ._adfa ._ebf [_ccec [_aeed ]]._dcce ;});delete (_edfe ._adfa ._ebf ,_ccec [0]);};_edfe ._adfa ._ebf [_ebe ]=_bcd ;};return _dde ,nil ;};func (_ccdec gridTile )numBorders ()int {_ceee :=0;if _ccdec ._ebed {_ceee ++;};if _ccdec ._bbc {_ceee ++;};if _ccdec ._beag {_ceee ++;};if _ccdec ._dgbba {_ceee ++;};return _ceee ;};func (_caef compositeCell )String ()string {_cbea :="";if len (_caef .paraList )> 0{_cbea =_cacb (_caef .paraList .merge ().text (),50);};return _fg .Sprintf ("\u0025\u0036\u002e\u0032\u0066\u0020\u0025\u0064\u0020\u0070\u0061\u0072a\u0073\u0020\u0025\u0071",_caef .PdfRectangle ,len (_caef .paraList ),_cbea );};func (_bafd rulingList )removeDuplicates ()rulingList {if len (_bafd )==0{return nil ;};_bafd .sort ();_dabg :=rulingList {_bafd [0]};for _ ,_aeae :=range _bafd [1:]{if _aeae .equals (_dabg [len (_dabg )-1]){continue ;};_dabg =append (_dabg ,_aeae );};return _dabg ;};type intSet map[int ]struct{};func (_bebe *subpath )close (){if !_cdfb (_bebe ._eadd [0],_bebe .last ()){_bebe .add (_bebe ._eadd [0]);};_bebe ._dff =true ;_bebe .removeDuplicates ();};func _gaabc (_dgaed float64 )bool {return _c .Abs (_dgaed )< _ccf };type textPara struct{_eb .PdfRectangle ;_eead _eb .PdfRectangle ;_ffac []*textLine ;_deec *textTable ;_gaef bool ;_cfbg bool ;_gdbe *textPara ;_dgfe *textPara ;_aeef *textPara ;_ggdd *textPara ;};func (_bdaa *textObject )moveTextSetLeading (_agg ,_gca float64 ){_bdaa ._ddd ._ccc =-_gca ;_bdaa .moveLP (_agg ,_gca );};func _fcdbc (_fgabg []_dfc .PdfObject )(_ebcg ,_efaga float64 ,_cabc error ){if len (_fgabg )!=2{return 0,0,_fg .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 (_fgabg ));};_daaa ,_cabc :=_dfc .GetNumbersAsFloat (_fgabg );if _cabc !=nil {return 0,0,_cabc ;};return _daaa [0],_daaa [1],nil ;};func (_eeaa *textTable )logComposite (_decf string ){if !_egfe {return ;};_cg .Log .Info ("\u007e~\u007eP\u0061\u0072\u0061\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0073",_eeaa ._gdgf ,_eeaa ._eagaa ,_decf );_fg .Printf ("\u0025\u0035\u0073 \u007c","");for _adbb :=0;_adbb < _eeaa ._gdgf ;_adbb ++{_fg .Printf ("\u0025\u0033\u0064 \u007c",_adbb );};_fg .Println ("");_fg .Printf ("\u0025\u0035\u0073 \u002b","");for _dega :=0;_dega < _eeaa ._gdgf ;_dega ++{_fg .Printf ("\u0025\u0033\u0073 \u002b","\u002d\u002d\u002d");};_fg .Println ("");for _gfcfb :=0;_gfcfb < _eeaa ._eagaa ;_gfcfb ++{_fg .Printf ("\u0025\u0035\u0064 \u007c",_gfcfb );for _ebdde :=0;_ebdde < _eeaa ._gdgf ;_ebdde ++{_cfggf ,_ :=_eeaa ._gdea [_cdfa (_ebdde ,_gfcfb )].parasBBox ();_fg .Printf ("\u0025\u0033\u0064 \u007c",len (_cfggf ));};_fg .Println ("");};_cg .Log .Info ("\u007e~\u007eT\u0065\u0078\u0074\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0073",_eeaa ._gdgf ,_eeaa ._eagaa ,_decf );_fg .Printf ("\u0025\u0035\u0073 \u007c","");for _cdff :=0;_cdff < _eeaa ._gdgf ;_cdff ++{_fg .Printf ("\u0025\u0031\u0032\u0064\u0020\u007c",_cdff );};_fg .Println ("");_fg .Printf ("\u0025\u0035\u0073 \u002b","");for _decd :=0;_decd < _eeaa ._gdgf ;_decd ++{_fg .Print ("\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d-\u002d\u002d\u002d\u002b");};_fg .Println ("");for _fdce :=0;_fdce < _eeaa ._eagaa ;_fdce ++{_fg .Printf ("\u0025\u0035\u0064 \u007c",_fdce );for _bggf :=0;_bggf < _eeaa ._gdgf ;_bggf ++{_abcfdd ,_ :=_eeaa ._gdea [_cdfa (_bggf ,_fdce )].parasBBox ();_dgbc :="";_bebd :=_abcfdd .merge ();if _bebd !=nil {_dgbc =_bebd .text ();};_dgbc =_fg .Sprintf ("\u0025\u0071",_cacb (_dgbc ,12));_dgbc =_dgbc [1:len (_dgbc )-1];_fg .Printf ("\u0025\u0031\u0032\u0073\u0020\u007c",_dgbc );};_fg .Println ("");};};func _gfaa (_bacea map[float64 ]gridTile )[]float64 {_feda :=make ([]float64 ,0,len (_bacea ));for _aegga :=range _bacea {_feda =append (_feda ,_aegga );};_a .Float64s (_feda );return _feda ;};
// 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 (_bfb *Extractor )ExtractPageImages (options *ImageExtractOptions )(*PageImages ,error ){_gf :=&imageExtractContext {_ae :options };_gfd :=_gf .extractContentStreamImages (_bfb ._de ,_bfb ._ebd );if _gfd !=nil {return nil ,_gfd ;};return &PageImages {Images :_gf ._ag },nil ;};func (_fdee paraList )findTextTables ()[]*textTable {var _fdgae []*textTable ;for _ ,_adfad :=range _fdee {if _adfad .taken ()||_adfad .Width ()==0{continue ;};_cddd :=_adfad .isAtom ();if _cddd ==nil {continue ;};_cddd .growTable ();if _cddd ._gdgf *_cddd ._eagaa < _gdbf {continue ;};_cddd .markCells ();_cddd .log ("\u0067\u0072\u006fw\u006e");_fdgae =append (_fdgae ,_cddd );};return _fdgae ;};func (_degae paraList )addNeighbours (){_dgbfc :=func (_dacga []int ,_acadf *textPara )([]*textPara ,[]*textPara ){_bgdb :=make ([]*textPara ,0,len (_dacga )-1);_daebfa :=make ([]*textPara ,0,len (_dacga )-1);for _ ,_aafbb :=range _dacga {_bbff :=_degae [_aafbb ];if _bbff .Urx <=_acadf .Llx {_bgdb =append (_bgdb ,_bbff );}else if _bbff .Llx >=_acadf .Urx {_daebfa =append (_daebfa ,_bbff );};};return _bgdb ,_daebfa ;};_gcefbb :=func (_febdc []int ,_bbbbc *textPara )([]*textPara ,[]*textPara ){_gga :=make ([]*textPara ,0,len (_febdc )-1);_fcad :=make ([]*textPara ,0,len (_febdc )-1);for _ ,_dccf :=range _febdc {_cada :=_degae [_dccf ];if _cada .Ury <=_bbbbc .Lly {_fcad =append (_fcad ,_cada );}else if _cada .Lly >=_bbbbc .Ury {_gga =append (_gga ,_cada );};};return _gga ,_fcad ;};_bagab :=_degae .yNeighbours (_gaae );for _ ,_adcaa :=range _degae {_faed :=_bagab [_adcaa ];if len (_faed )==0{continue ;};_feed ,_ecge :=_dgbfc (_faed ,_adcaa );if len (_feed )==0&&len (_ecge )==0{continue ;};if len (_feed )> 0{_dfcd :=_feed [0];for _ ,_cffgd :=range _feed [1:]{if _cffgd .Urx >=_dfcd .Urx {_dfcd =_cffgd ;};};for _ ,_egdce :=range _feed {if _egdce !=_dfcd &&_egdce .Urx > _dfcd .Llx {_dfcd =nil ;break ;};};if _dfcd !=nil &&_eee (_adcaa .PdfRectangle ,_dfcd .PdfRectangle ){_adcaa ._gdbe =_dfcd ;};};if len (_ecge )> 0{_bcda :=_ecge [0];for _ ,_ffad :=range _ecge [1:]{if _ffad .Llx <=_bcda .Llx {_bcda =_ffad ;};};for _ ,_adeab :=range _ecge {if _adeab !=_bcda &&_adeab .Llx < _bcda .Urx {_bcda =nil ;break ;};};if _bcda !=nil &&_eee (_adcaa .PdfRectangle ,_bcda .PdfRectangle ){_adcaa ._dgfe =_bcda ;};};};_bagab =_degae .xNeighbours (_gda );for _ ,_ceceb :=range _degae {_dgbe :=_bagab [_ceceb ];if len (_dgbe )==0{continue ;};_cafe ,_bgcd :=_gcefbb (_dgbe ,_ceceb );if len (_cafe )==0&&len (_bgcd )==0{continue ;};if len (_bgcd )> 0{_fgebd :=_bgcd [0];for _ ,_begf :=range _bgcd [1:]{if _begf .Ury >=_fgebd .Ury {_fgebd =_begf ;};};for _ ,_edcfg :=range _bgcd {if _edcfg !=_fgebd &&_edcfg .Ury > _fgebd .Lly {_fgebd =nil ;break ;};};if _fgebd !=nil &&_cgdf (_ceceb .PdfRectangle ,_fgebd .PdfRectangle ){_ceceb ._ggdd =_fgebd ;};};if len (_cafe )> 0{_ceebd :=_cafe [0];for _ ,_egge :=range _cafe [1:]{if _egge .Lly <=_ceebd .Lly {_ceebd =_egge ;};};for _ ,_gbdd :=range _cafe {if _gbdd !=_ceebd &&_gbdd .Lly < _ceebd .Ury {_ceebd =nil ;break ;};};if _ceebd !=nil &&_cgdf (_ceceb .PdfRectangle ,_ceebd .PdfRectangle ){_ceceb ._aeef =_ceebd ;};};};for _ ,_gaabe :=range _degae {if _gaabe ._gdbe !=nil &&_gaabe ._gdbe ._dgfe !=_gaabe {_gaabe ._gdbe =nil ;};if _gaabe ._aeef !=nil &&_gaabe ._aeef ._ggdd !=_gaabe {_gaabe ._aeef =nil ;};if _gaabe ._dgfe !=nil &&_gaabe ._dgfe ._gdbe !=_gaabe {_gaabe ._dgfe =nil ;};if _gaabe ._ggdd !=nil &&_gaabe ._ggdd ._aeef !=_gaabe {_gaabe ._ggdd =nil ;};};};const _cebd =1.0/1000.0;func (_gdf *Extractor )extractPageText (_dec string ,_ecaa *_eb .PdfPageResources ,_afa _ce .Matrix ,_eba int )(*PageText ,int ,int ,error ){_cg .Log .Trace ("\u0065x\u0074\u0072\u0061\u0063t\u0050\u0061\u0067\u0065\u0054e\u0078t\u003a \u006c\u0065\u0076\u0065\u006c\u003d\u0025d",_eba );_gfbc :=&PageText {_cfg :_gdf ._ef };_edb :=_ceb (_gdf ._ef );_bbf :=stateStack {&_edb };_acc :=_beg (_gdf ,_ecaa ,_acb .GraphicsState {},&_edb ,&_bbf );_gcd :=shapesState {_bagf :_afa ,_gcdf :_ce .IdentityMatrix (),_cfe :_acc };var _fbf bool ;if _eba > _dc {_ca :=_f .New ("\u0066\u006f\u0072\u006d s\u0074\u0061\u0063\u006b\u0020\u006f\u0076\u0065\u0072\u0066\u006c\u006f\u0077");_cg .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",_eba ,_ca );return _gfbc ,_edb ._eecc ,_edb ._def ,_ca ;};_agd :=_acb .NewContentStreamParser (_dec );_bcb ,_dgf :=_agd .Parse ();if _dgf !=nil {_cg .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",_dgf );return _gfbc ,_edb ._eecc ,_edb ._def ,_dgf ;};_abf :=_acb .NewContentStreamProcessor (*_bcb );_abf .AddHandler (_acb .HandlerConditionEnumAllOperands ,"",func (_acf *_acb .ContentStreamOperation ,_aeb _acb .GraphicsState ,_ecde *_eb .PdfPageResources )error {_fdb :=_acf .Operand ;if _dbce {_cg .Log .Info ("\u0026&\u0026\u0020\u006f\u0070\u003d\u0025s",_acf );};switch _fdb {case "\u0071":if _fcdb {_cg .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_gcd ._gcdf );};_bbf .push (&_edb );case "\u0051":if !_bbf .empty (){if len (_bbf )>=2{_bbf .pop ();};_edb =*_bbf .top ();};_gcd ._gcdf =_aeb .CTM ;if _fcdb {_cg .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_gcd ._gcdf );};case "\u0042\u0054":if _fbf {_cg .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");_gfbc ._cabf =append (_gfbc ._cabf ,_acc ._geg ...);};_fbf =true ;_bbb :=_aeb ;_bbb .CTM =_afa .Mult (_bbb .CTM );_acc =_beg (_gdf ,_ecde ,_bbb ,&_edb ,&_bbf );_gcd ._cfe =_acc ;case "\u0045\u0054":if !_fbf {_cg .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");};_fbf =false ;_gfbc ._cabf =append (_gfbc ._cabf ,_acc ._geg ...);_acc .reset ();case "\u0054\u002a":_acc .nextLine ();case "\u0054\u0064":if _aag ,_ee :=_acc .checkOp (_acf ,2,true );!_aag {_cg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_ee );return _ee ;};_aaf ,_acce ,_effc :=_fcdbc (_acf .Params );if _effc !=nil {return _effc ;};_acc .moveText (_aaf ,_acce );case "\u0054\u0044":if _bbe ,_efd :=_acc .checkOp (_acf ,2,true );!_bbe {_cg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_efd );return _efd ;};_eef ,_ecc ,_bbg :=_fcdbc (_acf .Params );if _bbg !=nil {_cg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_bbg );return _bbg ;};_acc .moveTextSetLeading (_eef ,_ecc );case "\u0054\u006a":if _eacc ,_gbd :=_acc .checkOp (_acf ,1,true );!_eacc {_cg .Log .Debug ("\u0045\u0052\u0052\u004fR:\u0020\u0054\u006a\u0020\u006f\u0070\u003d\u0025\u0073\u0020\u0065\u0072\u0072\u003d%\u0076",_acf ,_gbd );return _gbd ;};_aecc ,_abfc :=_dfc .GetStringBytes (_acf .Params [0]);if !_abfc {_cg .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",_acf );return _dfc .ErrTypeError ;};return _acc .showText (_aecc );case "\u0054\u004a":if _gdg ,_bga :=_acc .checkOp (_acf ,1,true );!_gdg {_cg .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u004a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_bga );return _bga ;};_fgg ,_eeb :=_dfc .GetArray (_acf .Params [0]);if !_eeb {_cg .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",_acf );return _dgf ;};return _acc .showTextAdjusted (_fgg );case "\u0027":if _ead ,_bfec :=_acc .checkOp (_acf ,1,true );!_ead {_cg .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u0027\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_bfec );return _bfec ;};_gfe ,_bdca :=_dfc .GetStringBytes (_acf .Params [0]);if !_bdca {_cg .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",_acf );return _dfc .ErrTypeError ;};_acc .nextLine ();return _acc .showText (_gfe );case "\u0022":if _ecbd ,_aecf :=_acc .checkOp (_acf ,3,true );!_ecbd {_cg .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u0022\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_aecf );return _aecf ;};_bfea ,_fcg ,_abg :=_fcdbc (_acf .Params [:2]);if _abg !=nil {return _abg ;};_fgdc ,_eadc :=_dfc .GetStringBytes (_acf .Params [2]);if !_eadc {_cg .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",_acf );return _dfc .ErrTypeError ;};_acc .setCharSpacing (_bfea );_acc .setWordSpacing (_fcg );_acc .nextLine ();return _acc .showText (_fgdc );case "\u0054\u004c":_dba ,_fdg :=_fba (_acf );if _fdg !=nil {_cg .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u004c\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_fdg );return _fdg ;};_acc .setTextLeading (_dba );case "\u0054\u0063":_da ,_agf :=_fba (_acf );if _agf !=nil {_cg .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0063\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_agf );return _agf ;};_acc .setCharSpacing (_da );case "\u0054\u0066":if _bgc ,_feg :=_acc .checkOp (_acf ,2,true );!_bgc {_cg .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0066\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_feg );return _feg ;};_gbfe ,_gae :=_dfc .GetNameVal (_acf .Params [0]);if !_gae {_cg .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",_acf );return _dfc .ErrTypeError ;};_gfcc ,_aca :=_dfc .GetNumberAsFloat (_acf .Params [1]);if !_gae {_cg .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",_acf ,_aca );return _aca ;};_aca =_acc .setFont (_gbfe ,_gfcc );_acc ._gfbge =_ga .Is (_aca ,_dfc .ErrNotSupported );if _aca !=nil &&!_acc ._gfbge {return _aca ;};case "\u0054\u006d":if _bgb ,_aae :=_acc .checkOp (_acf ,6,true );!_bgb {_cg .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u006d\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_aae );return _aae ;};_fcfd ,_eefb :=_dfc .GetNumbersAsFloat (_acf .Params );if _eefb !=nil {_cg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_eefb );return _eefb ;};_acc .setTextMatrix (_fcfd );case "\u0054\u0072":if _cd ,_ede :=_acc .checkOp (_acf ,1,true );!_cd {_cg .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0072\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_ede );return _ede ;};_dag ,_cc :=_dfc .GetIntVal (_acf .Params [0]);if !_cc {_cg .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",_acf );return _dfc .ErrTypeError ;};_acc .setTextRenderMode (_dag );case "\u0054\u0073":if _fa ,_aafb :=_acc .checkOp (_acf ,1,true );!_fa {_cg .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0073\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_aafb );return _aafb ;};_cgb ,_fag :=_dfc .GetNumberAsFloat (_acf .Params [0]);if _fag !=nil {_cg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_fag );return _fag ;};_acc .setTextRise (_cgb );case "\u0054\u0077":if _cec ,_dbg :=_acc .checkOp (_acf ,1,true );!_cec {_cg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_dbg );return _dbg ;};_cbe ,_ecg :=_dfc .GetNumberAsFloat (_acf .Params [0]);if _ecg !=nil {_cg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_ecg );return _ecg ;};_acc .setWordSpacing (_cbe );case "\u0054\u007a":if _acff ,_cab :=_acc .checkOp (_acf ,1,true );!_acff {_cg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_cab );return _cab ;};_dcf ,_gag :=_dfc .GetNumberAsFloat (_acf .Params [0]);if _gag !=nil {_cg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_gag );return _gag ;};_acc .setHorizScaling (_dcf );case "\u0063\u006d":_gcd ._gcdf =_aeb .CTM ;if _gcd ._gcdf .Singular (){_aff :=_ce .IdentityMatrix ().Translate (_gcd ._gcdf .Translation ());_cg .Log .Debug ("S\u0069n\u0067\u0075\u006c\u0061\u0072\u0020\u0063\u0074m\u003d\u0025\u0073\u2192%s",_gcd ._gcdf ,_aff );_gcd ._gcdf =_aff ;};if _fcdb {_cg .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_gcd ._gcdf );};case "\u006d":if len (_acf .Params )!=2{_cg .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",_fb );return nil ;};_gff ,_ff :=_dfc .GetNumbersAsFloat (_acf .Params );if _ff !=nil {return _ff ;};_cg .Log .Debug ("\u004d\u006f\u0076\u0065\u0020\u0074\u006f\u003a\u0020\u0025\u002e\u0032\u0066",_gff );_gcd .moveTo (_gff [0],_gff [1]);case "\u006c":if len (_acf .Params )!=2{_cg .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",_fb );return nil ;};_gdb ,_fggg :=_dfc .GetNumbersAsFloat (_acf .Params );if _fggg !=nil {return _fggg ;};_gcd .lineTo (_gdb [0],_gdb [1]);case "\u0063":if len (_acf .Params )!=6{return _fb ;};_gbc ,_fegb :=_dfc .GetNumbersAsFloat (_acf .Params );if _fegb !=nil {return _fegb ;};_cg .Log .Debug ("\u0043u\u0062\u0069\u0063\u0020b\u0065\u007a\u0069\u0065\u0072 \u0070a\u0072a\u006d\u0073\u003a\u0020\u0025\u002e\u0032f",_gbc );_gcd .cubicTo (_gbc [0],_gbc [1],_gbc [2],_gbc [3],_gbc [4],_gbc [5]);case "\u0076","\u0079":if len (_acf .Params )!=4{return _fb ;};_fcc ,_gfcd :=_dfc .GetNumbersAsFloat (_acf .Params );if _gfcd !=nil {return _gfcd ;};_cg .Log .Debug ("\u0043u\u0062\u0069\u0063\u0020b\u0065\u007a\u0069\u0065\u0072 \u0070a\u0072a\u006d\u0073\u003a\u0020\u0025\u002e\u0032f",_fcc );_gcd .quadraticTo (_fcc [0],_fcc [1],_fcc [2],_fcc [3]);case "\u0068":_gcd .closePath ();case "\u0072\u0065":if len (_acf .Params )!=4{return _fb ;};_fcec ,_bagc :=_dfc .GetNumbersAsFloat (_acf .Params );if _bagc !=nil {return _bagc ;};_gcd .drawRectangle (_fcec [0],_fcec [1],_fcec [2],_fcec [3]);_gcd .closePath ();case "\u0053":_gcd .stroke (&_gfbc ._gaee );_gcd .clearPath ();case "\u0073":_gcd .closePath ();_gcd .stroke (&_gfbc ._gaee );_gcd .clearPath ();case "\u0046":_gcd .fill (&_gfbc ._egg );_gcd .clearPath ();case "\u0066","\u0066\u002a":_gcd .closePath ();_gcd .fill (&_gfbc ._egg );_gcd .clearPath ();case "\u0042","\u0042\u002a":_gcd .fill (&_gfbc ._egg );_gcd .stroke (&_gfbc ._gaee );_gcd .clearPath ();case "\u0062","\u0062\u002a":_gcd .closePath ();_gcd .fill (&_gfbc ._egg );_gcd .stroke (&_gfbc ._gaee );_gcd .clearPath ();case "\u006e":_gcd .clearPath ();case "\u0044\u006f":if len (_acf .Params )==0{_cg .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",_acf .Params );return _dfc .ErrRangeError ;};_gfcb ,_bff :=_dfc .GetName (_acf .Params [0]);if !_bff {_cg .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",_acf .Params [0]);return _dfc .ErrTypeError ;};_ ,_cefd :=_ecde .GetXObjectByName (*_gfcb );if _cefd !=_eb .XObjectTypeForm {break ;};_faa ,_bff :=_gdf ._efe [_gfcb .String ()];if !_bff {_ddg ,_dfb :=_ecde .GetXObjectFormByName (*_gfcb );if _dfb !=nil {_cg .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_dfb );return _dfb ;};_cbef ,_dfb :=_ddg .GetContentStream ();if _dfb !=nil {_cg .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_dfb );return _dfb ;};_efa :=_ddg .Resources ;if _efa ==nil {_efa =_ecde ;};_edea ,_eefg ,_aebf ,_dfb :=_gdf .extractPageText (string (_cbef ),_efa ,_afa .Mult (_aeb .CTM ),_eba +1);if _dfb !=nil {_cg .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_dfb );return _dfb ;};_faa =textResult {*_edea ,_eefg ,_aebf };_gdf ._efe [_gfcb .String ()]=_faa ;};_gcd ._gcdf =_aeb .CTM ;if _fcdb {_cg .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_gcd ._gcdf );};_gfbc ._cabf =append (_gfbc ._cabf ,_faa ._daf ._cabf ...);_gfbc ._gaee =append (_gfbc ._gaee ,_faa ._daf ._gaee ...);_gfbc ._egg =append (_gfbc ._egg ,_faa ._daf ._egg ...);_edb ._eecc +=_faa ._adeg ;_edb ._def +=_faa ._gbe ;case "\u0072\u0067","\u0067","\u006b","\u0063\u0073","\u0073\u0063","\u0073\u0063\u006e":_acc ._abb .ColorspaceNonStroking =_aeb .ColorspaceNonStroking ;_acc ._abb .ColorNonStroking =_aeb .ColorNonStroking ;case "\u0052\u0047","\u0047","\u004b","\u0043\u0053","\u0053\u0043","\u0053\u0043\u004e":_acc ._abb .ColorspaceStroking =_aeb .ColorspaceStroking ;_acc ._abb .ColorStroking =_aeb .ColorStroking ;};return nil ;});_dgf =_abf .Process (_ecaa );return _gfbc ,_edb ._eecc ,_edb ._def ,_dgf ;};func _aabg (_gccd ,_dfgcf float64 )string {_dagf :=!_gaabc (_gccd -_dfgcf );if _dagf {return "\u000a";};return "\u0020";};func _cdec (_abac []float64 ,_ccfba ,_gcae float64 )[]float64 {_cbcg ,_acda :=_ccfba ,_gcae ;if _acda < _cbcg {_cbcg ,_acda =_acda ,_cbcg ;};_dffb :=make ([]float64 ,0,len (_abac )+2);_dffb =append (_dffb ,_ccfba );for _ ,_cgba :=range _abac {if _cgba <=_cbcg {continue ;}else if _cgba >=_acda {break ;};_dffb =append (_dffb ,_cgba );};_dffb =append (_dffb ,_gcae );return _dffb ;};
// NewFromContents creates a new extractor from contents and page resources.
func NewFromContents (contents string ,resources *_eb .PdfPageResources )(*Extractor ,error ){const _gb ="\u0065x\u0074\u0072\u0061\u0063t\u006f\u0072\u002e\u004e\u0065w\u0046r\u006fm\u0043\u006f\u006e\u0074\u0065\u006e\u0074s";_bd :=&Extractor {_de :contents ,_ebd :resources ,_ebf :map[string ]fontEntry {},_efe :map[string ]textResult {}};_fd .TrackUse (_gb );return _bd ,nil ;};func (_gaeg lineRuling )yMean ()float64 {return 0.5*(_gaeg ._ecbef .Y +_gaeg ._fagb .Y )};func _debe (_daea bounded )float64 {return -_daea .bbox ().Lly };func _aabb (_dgfcc []pathSection )rulingList {_fccab (_dgfcc );if _bdf {_cg .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 (_dgfcc ));};var _abe rulingList ;for _ ,_ebefd :=range _dgfcc {for _ ,_fbda :=range _ebefd ._ecf {if len (_fbda ._eadd )< 2{continue ;};_eefgf :=_fbda ._eadd [0];for _ ,_geab :=range _fbda ._eadd [1:]{if _bggd ,_ffbb :=_fcag (_eefgf ,_geab ,_ebefd .Color );_ffbb {_abe =append (_abe ,_bggd );};_eefgf =_geab ;};};};if _bdf {_cg .Log .Info ("m\u0061\u006b\u0065\u0053tr\u006fk\u0065\u0052\u0075\u006c\u0069n\u0067\u0073\u003a\u0020\u0025\u0073",_abe );};return _abe ;};func _cdfb (_ceeb ,_egef _ce .Point )bool {return _ceeb .X ==_egef .X &&_ceeb .Y ==_egef .Y };func (_fecc pathSection )bbox ()_eb .PdfRectangle {_beeb :=_fecc ._ecf [0]._eadd [0];_ggga :=_eb .PdfRectangle {Llx :_beeb .X ,Urx :_beeb .X ,Lly :_beeb .Y ,Ury :_beeb .Y };_debf :=func (_ggd _ce .Point ){if _ggd .X < _ggga .Llx {_ggga .Llx =_ggd .X ;}else if _ggd .X > _ggga .Urx {_ggga .Urx =_ggd .X ;};if _ggd .Y < _ggga .Lly {_ggga .Lly =_ggd .Y ;}else if _ggd .Y > _ggga .Ury {_ggga .Ury =_ggd .Y ;};};for _ ,_gbga :=range _fecc ._ecf [0]._eadd [1:]{_debf (_gbga );};for _ ,_cgde :=range _fecc ._ecf [1:]{for _ ,_gaag :=range _cgde ._eadd {_debf (_gaag );};};return _ggga ;};
// 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 _eb .PdfRectangle ;
// Font is the font the text was drawn with.
Font *_eb .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 _e .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 _e .Color ;
// Orientation is the text orientation
Orientation int ;};func (_gcefb *ruling )intersects (_aeee *ruling )bool {_ggde :=(_gcefb ._dbgef ==_ebga &&_aeee ._dbgef ==_gcbe )||(_aeee ._dbgef ==_ebga &&_gcefb ._dbgef ==_gcbe );_fbfc :=func (_aeeee ,_bgdd *ruling )bool {return _aeeee ._dafad -_bbeb <=_bgdd ._dbaac &&_bgdd ._dbaac <=_aeeee ._bacb +_bbeb ;};_ccbeb :=_fbfc (_gcefb ,_aeee );_cade :=_fbfc (_aeee ,_gcefb );if _bdf {_fg .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",_ggde ,_ccbeb ,_cade ,_ggde &&_ccbeb &&_cade ,_gcefb ,_aeee );};return _ggde &&_ccbeb &&_cade ;};func (_ddee *textLine )bbox ()_eb .PdfRectangle {return _ddee .PdfRectangle };func _ecddf (_bgee []*textWord ,_fccd float64 ,_cfgc ,_dadg rulingList )*wordBag {_ddbg :=_gfbcd (_bgee [0],_fccd ,_cfgc ,_dadg );for _ ,_edbf :=range _bgee [1:]{_cfab :=_ddfb (_edbf ._dfgg );_ddbg ._fccg [_cfab ]=append (_ddbg ._fccg [_cfab ],_edbf );_ddbg .PdfRectangle =_cbcc (_ddbg .PdfRectangle ,_edbf .PdfRectangle );};_ddbg .sort ();return _ddbg ;};
// String returns a description of `l`.
func (_aggd *textLine )String ()string {return _fg .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",_aggd ._cfaa ,_aggd .PdfRectangle ,_aggd ._gcff ,_aggd .text ());};func (_ddf *stateStack )empty ()bool {return len (*_ddf )==0};func (_agag rulingList )comp (_bgeab ,_gdgb int )bool {_acde ,_gaegg :=_agag [_bgeab ],_agag [_gdgb ];_edff ,_ffeg :=_acde ._dbgef ,_gaegg ._dbgef ;if _edff !=_ffeg {return _edff > _ffeg ;};if _edff ==_gbab {return false ;};_geabg :=func (_efeb bool )bool {if _edff ==_gcbe {return _efeb ;};return !_efeb ;};_ggbg ,_fecda :=_acde ._dbaac ,_gaegg ._dbaac ;if _ggbg !=_fecda {return _geabg (_ggbg > _fecda );};_ggbg ,_fecda =_acde ._dafad ,_gaegg ._dafad ;if _ggbg !=_fecda {return _geabg (_ggbg < _fecda );};return _geabg (_acde ._bacb < _gaegg ._bacb );};
// String returns a description of `w`.
func (_gdd *textWord )String ()string {return _fg .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",_gdd ._dfgg ,_gdd .PdfRectangle ,_gdd ._cbbbc ,_gdd ._dfgdd );};func (_dccdf *wordBag )blocked (_gead *textWord )bool {if _gead .Urx < _dccdf .Llx {_bdgc :=_eggd (_gead .PdfRectangle );_ccea :=_bfdg (_dccdf .PdfRectangle );if _dccdf ._fcab .blocks (_bdgc ,_ccea ){if _dfgc {_cg .Log .Info ("\u0062\u006c\u006f\u0063ke\u0064\u0020\u2190\u0078\u003a\u0020\u0025\u0073\u0020\u0025\u0073",_gead ,_dccdf );};return true ;};}else if _dccdf .Urx < _gead .Llx {_gafb :=_eggd (_dccdf .PdfRectangle );_cdc :=_bfdg (_gead .PdfRectangle );if _dccdf ._fcab .blocks (_gafb ,_cdc ){if _dfgc {_cg .Log .Info ("b\u006co\u0063\u006b\u0065\u0064\u0020\u0078\u2192\u0020:\u0020\u0025\u0073\u0020%s",_gead ,_dccdf );};return true ;};};if _gead .Ury < _dccdf .Lly {_abcf :=_acgg (_gead .PdfRectangle );_cdb :=_adeb (_dccdf .PdfRectangle );if _dccdf ._gegg .blocks (_abcf ,_cdb ){if _dfgc {_cg .Log .Info ("\u0062\u006c\u006f\u0063ke\u0064\u0020\u2190\u0079\u003a\u0020\u0025\u0073\u0020\u0025\u0073",_gead ,_dccdf );};return true ;};}else if _dccdf .Ury < _gead .Lly {_fbcg :=_acgg (_dccdf .PdfRectangle );_cge :=_adeb (_gead .PdfRectangle );if _dccdf ._gegg .blocks (_fbcg ,_cge ){if _dfgc {_cg .Log .Info ("b\u006co\u0063\u006b\u0065\u0064\u0020\u0079\u2192\u0020:\u0020\u0025\u0073\u0020%s",_gead ,_dccdf );};return true ;};};return false ;};func _gdge (_gabg ,_caca int )int {if _gabg < _caca {return _gabg ;};return _caca ;};func _bgba (_gab ,_feeg bounded )float64 {return _gab .bbox ().Llx -_feeg .bbox ().Urx };func _ggda (_bgf *wordBag ,_gbdg *textWord ,_fgac float64 )bool {return _gbdg .Llx < _bgf .Urx +_fgac &&_bgf .Llx -_fgac < _gbdg .Urx ;};func (_ffa *shapesState )devicePoint (_ebdc ,_bedc float64 )_ce .Point {_fdf :=_ffa ._bagf .Mult (_ffa ._gcdf );_ebdc ,_bedc =_fdf .Transform (_ebdc ,_bedc );return _ce .NewPoint (_ebdc ,_bedc );};func (_cbgdf *wordBag )depthIndexes ()[]int {if len (_cbgdf ._fccg )==0{return nil ;};_fdcb :=make ([]int ,len (_cbgdf ._fccg ));_aebfd :=0;for _adcc :=range _cbgdf ._fccg {_fdcb [_aebfd ]=_adcc ;_aebfd ++;};_a .Ints (_fdcb );return _fdcb ;};func (_feggg *textTable )getDown ()paraList {_gbbc :=make (paraList ,_feggg ._gdgf );for _aced :=0;_aced < _feggg ._gdgf ;_aced ++{_gfgb :=_feggg .get (_aced ,_feggg ._eagaa -1)._ggdd ;if _gfgb ==nil ||_gfgb ._gaef {return nil ;};_gbbc [_aced ]=_gfgb ;};for _affea :=0;_affea < _feggg ._gdgf -1;_affea ++{if _gbbc [_affea ]._dgfe !=_gbbc [_affea +1]{return nil ;};};return _gbbc ;};func _adeb (_bfdfb _eb .PdfRectangle )*ruling {return &ruling {_dbgef :_gcbe ,_dbaac :_bfdfb .Lly ,_dafad :_bfdfb .Llx ,_bacb :_bfdfb .Urx };};func (_acd *shapesState )cubicTo (_dgc ,_ddcb ,_adcd ,_dbd ,_dcea ,_daebf float64 ){if _fcdb {_cg .Log .Info ("\u0063\u0075\u0062\u0069\u0063\u0054\u006f\u003a");};_acd .addPoint (_dcea ,_daebf );};func (_bace *textObject )setWordSpacing (_fdga float64 ){if _bace ==nil {return ;};_bace ._ddd ._fac =_fdga ;};func (_bgbb *textObject )getStrokeColor ()_e .Color {return _aecbc (_bgbb ._abb .ColorspaceStroking ,_bgbb ._abb .ColorStroking );};func (_dcgd rulingList )augmentGrid ()(rulingList ,rulingList ){_dgef ,_bagff :=_dcgd .vertsHorzs ();if len (_dgef )==0||len (_bagff )==0{return _dgef ,_bagff ;};_deba ,_edbfgb :=_dgef ,_bagff ;_ddef :=_dgef .bbox ();_acegf :=_bagff .bbox ();if _bdf {_cg .Log .Info ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0047\u0072\u0069\u0064\u003a\u0020b\u0062\u006f\u0078\u0056\u003d\u0025\u0036\u002e\u0032\u0066",_ddef );_cg .Log .Info ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0047\u0072\u0069\u0064\u003a\u0020b\u0062\u006f\u0078\u0048\u003d\u0025\u0036\u002e\u0032\u0066",_acegf );};var _bce ,_gaab ,_fffc ,_fccad *ruling ;if _acegf .Llx < _ddef .Llx -_bbeb {_bce =&ruling {_badd :_bagg ,_dbgef :_ebga ,_dbaac :_acegf .Llx ,_dafad :_ddef .Lly ,_bacb :_ddef .Ury };_dgef =append (rulingList {_bce },_dgef ...);};if _acegf .Urx > _ddef .Urx +_bbeb {_gaab =&ruling {_badd :_bagg ,_dbgef :_ebga ,_dbaac :_acegf .Urx ,_dafad :_ddef .Lly ,_bacb :_ddef .Ury };_dgef =append (_dgef ,_gaab );};if _ddef .Lly < _acegf .Lly -_bbeb {_fffc =&ruling {_badd :_bagg ,_dbgef :_gcbe ,_dbaac :_ddef .Lly ,_dafad :_acegf .Llx ,_bacb :_acegf .Urx };_bagff =append (rulingList {_fffc },_bagff ...);};if _ddef .Ury > _acegf .Ury +_bbeb {_fccad =&ruling {_badd :_bagg ,_dbgef :_gcbe ,_dbaac :_ddef .Ury ,_dafad :_acegf .Llx ,_bacb :_acegf .Urx };_bagff =append (_bagff ,_fccad );};if len (_dgef )+len (_bagff )==len (_dcgd ){return _deba ,_edbfgb ;};_geaa :=append (_dgef ,_bagff ...);_dcgd .log ("u\u006e\u0061\u0075\u0067\u006d\u0065\u006e\u0074\u0065\u0064");_geaa .log ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0065d");return _dgef ,_bagff ;};func (_aedd paraList )merge ()*textPara {_cg .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 (_aedd ));if len (_aedd )==0{return nil ;};_aedd .sortReadingOrder ();_deab :=_aedd [0].PdfRectangle ;_effba :=_aedd [0]._ffac ;for _ ,_bfff :=range _aedd [1:]{_deab =_cbcc (_deab ,_bfff .PdfRectangle );_effba =append (_effba ,_bfff ._ffac ...);};return _ggec (_deab ,_effba );};func (_aadd paraList )writeText (_efbg _bf .Writer ){for _agec ,_affde :=range _aadd {if _affde ._cfbg {continue ;};_affde .writeText (_efbg );if _agec !=len (_aadd )-1{if _dfed (_affde ,_aadd [_agec +1]){_efbg .Write ([]byte ("\u0020"));}else {_efbg .Write ([]byte ("\u000a"));_efbg .Write ([]byte ("\u000a"));};};};_efbg .Write ([]byte ("\u000a"));_efbg .Write ([]byte ("\u000a"));};
// String returns a description of `p`.
func (_cbbb *textPara )String ()string {if _cbbb ._cfbg {return _fg .Sprintf ("\u0025\u0036\u002e\u0032\u0066\u0020\u005b\u0045\u004d\u0050\u0054\u0059\u005d",_cbbb .PdfRectangle );};_deaf :="";if _cbbb ._deec !=nil {_deaf =_fg .Sprintf ("\u005b\u0025\u0064\u0078\u0025\u0064\u005d\u0020",_cbbb ._deec ._gdgf ,_cbbb ._deec ._eagaa );};return _fg .Sprintf ("\u0025\u0036\u002e\u0032f \u0025\u0073\u0025\u0064\u0020\u006c\u0069\u006e\u0065\u0073\u0020\u0025\u0071",_cbbb .PdfRectangle ,_deaf ,len (_cbbb ._ffac ),_cacb (_cbbb .text (),50));};func (_ecdb *textLine )pullWord (_bgaa *wordBag ,_gfccf *textWord ,_ebgg int ){_ecdb .appendWord (_gfccf );_bgaa .removeWord (_gfccf ,_ebgg );};func (_ccfd *textTable )bbox ()_eb .PdfRectangle {return _ccfd .PdfRectangle };func (_dea *wordBag )maxDepth ()float64 {return _dea ._eaga -_dea .Lly };
// ImageExtractOptions contains options for controlling image extraction from
// PDF pages.
type ImageExtractOptions struct{IncludeInlineStencilMasks bool ;};
// 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 (_cba *Extractor )ExtractText ()(string ,error ){_aad ,_ ,_ ,_bag :=_cba .ExtractTextWithStats ();return _aad ,_bag ;};func _deac (_cfbd int ,_aaea func (int ,int )bool )[]int {_cbbg :=make ([]int ,_cfbd );for _ebfca :=range _cbbg {_cbbg [_ebfca ]=_ebfca ;};_a .Slice (_cbbg ,func (_egbd ,_cccd int )bool {return _aaea (_cbbg [_egbd ],_cbbg [_cccd ])});return _cbbg ;};func _egca (_cbac []int )[]int {_agae :=make ([]int ,len (_cbac ));for _bffb ,_ddda :=range _cbac {_agae [len (_cbac )-1-_bffb ]=_ddda ;};return _agae ;};type pathSection struct{_ecf []*subpath ;_e .Color ;};func (_dagc *textWord )toTextMarks (_bbbgb *int )[]TextMark {var _egbfgb []TextMark ;for _ ,_agfdb :=range _dagc ._dfea {_egbfgb =_cdeab (_egbfgb ,_bbbgb ,_agfdb .ToTextMark ());};return _egbfgb ;};type textResult struct{_daf PageText ;_adeg int ;_gbe int ;};func (_caa *wordBag )highestWord (_acaa int ,_ecbf ,_agab float64 )*textWord {for _ ,_eggg :=range _caa ._fccg [_acaa ]{if _ecbf <=_eggg ._dfgg &&_eggg ._dfgg <=_agab {return _eggg ;};};return nil ;};func (_bcag rulingList )secMinMax ()(float64 ,float64 ){_cbbd ,_dfgfc :=_bcag [0]._dafad ,_bcag [0]._bacb ;for _ ,_cace :=range _bcag [1:]{if _cace ._dafad < _cbbd {_cbbd =_cace ._dafad ;};if _cace ._bacb > _dfgfc {_dfgfc =_cace ._bacb ;};};return _cbbd ,_dfgfc ;};func (_gbccg rectRuling )asRuling ()(*ruling ,bool ){_aacb :=ruling {_dbgef :_gbccg ._ebef ,Color :_gbccg .Color ,_badd :_dead };switch _gbccg ._ebef {case _ebga :_aacb ._dbaac =0.5*(_gbccg .Llx +_gbccg .Urx );_aacb ._dafad =_gbccg .Lly ;_aacb ._bacb =_gbccg .Ury ;_bbbf ,_ecdaa :=_gbccg .checkWidth (_gbccg .Llx ,_gbccg .Urx );if !_ecdaa {if _cbb {_cg .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",_gbccg );};return nil ,false ;};_aacb ._bcacf =_bbbf ;case _gcbe :_aacb ._dbaac =0.5*(_gbccg .Lly +_gbccg .Ury );_aacb ._dafad =_gbccg .Llx ;_aacb ._bacb =_gbccg .Urx ;_aece ,_fbgbd :=_gbccg .checkWidth (_gbccg .Lly ,_gbccg .Ury );if !_fbgbd {if _cbb {_cg .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",_gbccg );};return nil ,false ;};_aacb ._bcacf =_aece ;default:_cg .Log .Error ("\u0062\u0061\u0064\u0020pr\u0069\u006d\u0061\u0072\u0079\u0020\u006b\u0069\u006e\u0064\u003d\u0025\u0064",_gbccg ._ebef );return nil ,false ;};return &_aacb ,true ;};
// 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 (_gc *Extractor )ExtractPageText ()(*PageText ,int ,int ,error ){_bfe ,_efg ,_gd ,_acbg :=_gc .extractPageText (_gc ._de ,_gc ._ebd ,_ce .IdentityMatrix (),0);if _acbg !=nil {return nil ,0,0,_acbg ;};_bfe .computeViews ();_acbg =_aeeb (_bfe );if _acbg !=nil {return nil ,0,0,_acbg ;};return _bfe ,_efg ,_gd ,nil ;};func _dfba (_faff int ,_gdcg map[int ][]float64 )([]int ,int ){_bbadc :=make ([]int ,_faff );_gaed :=0;for _baee :=0;_baee < _faff ;_baee ++{_bbadc [_baee ]=_gaed ;_gaed +=len (_gdcg [_baee ])+1;};return _bbadc ,_gaed ;};func (_adbcg gridTiling )log (_gcba string ){if !_dac {return ;};_cg .Log .Info ("\u0074i\u006ci\u006e\u0067\u003a\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0071",len (_adbcg ._gcdb ),len (_adbcg ._dfdf ),_gcba );_fg .Printf ("\u0020\u0020\u0020l\u006c\u0078\u003d\u0025\u002e\u0032\u0066\u000a",_adbcg ._gcdb );_fg .Printf ("\u0020\u0020\u0020l\u006c\u0079\u003d\u0025\u002e\u0032\u0066\u000a",_adbcg ._dfdf );for _ebfg ,_abgg :=range _adbcg ._dfdf {_cbdaf ,_cdaa :=_adbcg ._ddggg [_abgg ];if !_cdaa {continue ;};_fg .Printf ("%\u0034\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u000a",_ebfg ,_abgg );for _cfcdb ,_cgfa :=range _adbcg ._gcdb {_fdbea ,_fdbeg :=_cbdaf [_cgfa ];if !_fdbeg {continue ;};_fg .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_cfcdb ,_fdbea .String ());};};};
// PageText represents the layout of text on a device page.
type PageText struct{_cabf []*textMark ;_bgbbb string ;_bge []TextMark ;_accee []TextTable ;_cfg _eb .PdfRectangle ;_gaee []pathSection ;_egg []pathSection ;};const (_ccf =1.0e-6;_bfgfd =1.0e-4;_bgfc =10;_dafd =6;_fcdbe =0.5;_edee =0.12;_ceg =0.19;_adbab =0.04;_babed =0.04;_bde =1.0;_fdef =0.04;_dadf =0.4;_bgecb =0.7;_bfdcd =1.0;_ebccb =0.1;_eace =1.4;_fccc =0.46;_aadb =0.02;_ecbfc =0.2;_eagg =0.5;_cfd =4;_cbeb =4.0;_gdbf =6;_befb =0.3;_gda =0.01;_gaae =0.02;_daa =2;_eaec =2;_gaaa =500;_bgdfd =4.0;_edaf =4.0;_ceab =0.05;_ebbbf =0.1;_bbeb =2.0;_gdcf =2.0;_gfega =1.5;_fbdf =3.0;_ddfe =0.25;);func (_faf *stateStack )push (_ggbd *textState ){_ccbe :=*_ggbd ;*_faf =append (*_faf ,&_ccbe )};func _bcfc (_aeedd float64 )float64 {return _bfgfd *_c .Round (_aeedd /_bfgfd )};func (_bedb *textWord )appendMark (_ccdbc *textMark ,_agdgc _eb .PdfRectangle ){_bedb ._dfea =append (_bedb ._dfea ,_ccdbc );_bedb .PdfRectangle =_cbcc (_bedb .PdfRectangle ,_ccdbc .PdfRectangle );if _ccdbc ._ebec > _bedb ._cbbbc {_bedb ._cbbbc =_ccdbc ._ebec ;};_bedb ._dfgg =_agdgc .Ury -_bedb .PdfRectangle .Lly ;};func (_bgec *wordBag )makeRemovals ()map[int ]map[*textWord ]struct{}{_gfcf :=make (map[int ]map[*textWord ]struct{},len (_bgec ._fccg ));for _cag :=range _bgec ._fccg {_gfcf [_cag ]=make (map[*textWord ]struct{});};return _gfcf ;};func _fgdf (_bcdc []rulingList )(rulingList ,rulingList ){var _fffee rulingList ;for _ ,_gade :=range _bcdc {_fffee =append (_fffee ,_gade ...);};return _fffee .vertsHorzs ();};func (_cddff rulingList )snapToGroupsDirection ()rulingList {_cddff .sortStrict ();_eabc :=make (map[*ruling ]rulingList ,len (_cddff ));_affe :=_cddff [0];_ggfd :=func (_bdff *ruling ){_affe =_bdff ;_eabc [_affe ]=rulingList {_bdff }};_ggfd (_cddff [0]);for _ ,_abcfe :=range _cddff [1:]{if _abcfe ._dbaac < _affe ._dbaac -_ccf {_cg .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",_affe ,_abcfe );};if _abcfe ._dbaac > _affe ._dbaac +_gdcf {_ggfd (_abcfe );}else {_eabc [_affe ]=append (_eabc [_affe ],_abcfe );};};_cabe :=make (map[*ruling ]float64 ,len (_eabc ));_adgb :=make (map[*ruling ]*ruling ,len (_cddff ));for _cfdf ,_aagff :=range _eabc {_cabe [_cfdf ]=_aagff .mergePrimary ();for _ ,_ffecg :=range _aagff {_adgb [_ffecg ]=_cfdf ;};};for _ ,_efdab :=range _cddff {_efdab ._dbaac =_cabe [_adgb [_efdab ]];};_bbceb :=make (rulingList ,0,len (_cddff ));for _ ,_egcc :=range _eabc {_ddbfc :=_egcc .splitSec ();for _bbde ,_abbag :=range _ddbfc {_gefgg :=_abbag .merge ();if len (_bbceb )> 0{_aecb :=_bbceb [len (_bbceb )-1];if _aecb .alignsPrimary (_gefgg )&&_aecb .alignsSec (_gefgg ){_cg .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",_bbde ,_aecb ,_gefgg );continue ;};};_bbceb =append (_bbceb ,_gefgg );};};_bbceb .sortStrict ();return _bbceb ;};func (_efbea *wordBag )minDepth ()float64 {return _efbea ._eaga -(_efbea .Ury -_efbea ._ebbb )};