unipdf/extractor/extractor.go
2021-08-13 01:33:42 +00:00

787 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 (_ga "bytes";_d "errors";_a "fmt";_c "github.com/unidoc/unipdf/v3/common";_ae "github.com/unidoc/unipdf/v3/contentstream";_ca "github.com/unidoc/unipdf/v3/core";_ffb "github.com/unidoc/unipdf/v3/internal/license";_gbe "github.com/unidoc/unipdf/v3/internal/textencoding";
_eg "github.com/unidoc/unipdf/v3/internal/transform";_da "github.com/unidoc/unipdf/v3/model";_ce "golang.org/x/text/unicode/norm";_af "golang.org/x/xerrors";_b "image/color";_ee "io";_dc "math";_g "regexp";_fa "sort";_gb "strings";_ff "unicode";_f "unicode/utf8";
);func (_fcgc *wordBag )allWords ()[]*textWord {var _fgg []*textWord ;for _ ,_bcff :=range _fcgc ._edag {_fgg =append (_fgg ,_bcff ...);};return _fgg ;};func (_cfbe *textMark )inDiacriticArea (_cdd *textMark )bool {_gefa :=_cfbe .Llx -_cdd .Llx ;_addff :=_cfbe .Urx -_cdd .Urx ;
_cggb :=_cfbe .Lly -_cdd .Lly ;return _dc .Abs (_gefa +_addff )< _cfbe .Width ()*_dgaa &&_dc .Abs (_cggb )< _cfbe .Height ()*_dgaa ;};func (_aeeg *textLine )bbox ()_da .PdfRectangle {return _aeeg .PdfRectangle };
// String returns a human readable description of `path`.
func (_bagb *subpath )String ()string {_gdef :=_bagb ._fgbe ;_gaeg :=len (_gdef );if _gaeg <=5{return _a .Sprintf ("\u0025d\u003a\u0020\u0025\u0036\u002e\u0032f",_gaeg ,_gdef );};return _a .Sprintf ("\u0025d\u003a\u0020\u0025\u0036.\u0032\u0066\u0020\u0025\u0036.\u0032f\u0020.\u002e\u002e\u0020\u0025\u0036\u002e\u0032f",_gaeg ,_gdef [0],_gdef [1],_gdef [_gaeg -1]);
};func _ffbe (_gedc []rulingList )(rulingList ,rulingList ){var _cdedae rulingList ;for _ ,_caf :=range _gedc {_cdedae =append (_cdedae ,_caf ...);};return _cdedae .vertsHorzs ();};type compositeCell struct{_da .PdfRectangle ;paraList ;};func _cfag (_fccf _da .PdfRectangle )*ruling {return &ruling {_bfce :_edecb ,_gace :_fccf .Llx ,_cfeee :_fccf .Lly ,_fdfa :_fccf .Ury };
};func (_fdgd *shapesState )lastpointEstablished ()(_eg .Point ,bool ){if _fdgd ._febcd {return _fdgd ._bbd ,false ;};_faef :=len (_fdgd ._aebg );if _faef > 0&&_fdgd ._aebg [_faef -1]._bdbe {return _fdgd ._aebg [_faef -1].last (),false ;};return _eg .Point {},true ;
};func (_gffad gridTile )contains (_agfe _da .PdfRectangle )bool {if _gffad .numBorders ()< 3{return false ;};if _gffad ._degfg &&_agfe .Llx < _gffad .Llx -_bbee {return false ;};if _gffad ._ecef &&_agfe .Urx > _gffad .Urx +_bbee {return false ;};if _gffad ._befb &&_agfe .Lly < _gffad .Lly -_bbee {return false ;
};if _gffad ._bggdf &&_agfe .Ury > _gffad .Ury +_bbee {return false ;};return true ;};func (_acb *textObject )setTextRenderMode (_dce int ){if _acb ==nil {return ;};_acb ._ecbd ._ddfb =RenderMode (_dce );};func (_adfb *textObject )setTextRise (_ffa float64 ){if _adfb ==nil {return ;
};_adfb ._ecbd ._egdb =_ffa ;};func (_gdcf *shapesState )newSubPath (){_gdcf .clearPath ();if _badab {_c .Log .Info ("\u006e\u0065\u0077\u0053\u0075\u0062\u0050\u0061\u0074h\u003a\u0020\u0025\u0073",_gdcf );};};func _bebf (_ceb []*textWord ,_eef float64 ,_adag ,_fafc rulingList )*wordBag {_feaf :=_dfcg (_ceb [0],_eef ,_adag ,_fafc );
for _ ,_bgfb :=range _ceb [1:]{_cbca :=_acce (_bgfb ._bgeca );_feaf ._edag [_cbca ]=append (_feaf ._edag [_cbca ],_bgfb );_feaf .PdfRectangle =_cfga (_feaf .PdfRectangle ,_bgfb .PdfRectangle );};_feaf .sort ();return _feaf ;};func _cgag (_edbg []*textMark ,_eeeg _da .PdfRectangle ,_dfgaf rulingList ,_gfaa []gridTiling )paraList {_c .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 (_edbg ),_eeeg );
if len (_edbg )==0{return nil ;};_cgef :=_aefdg (_edbg ,_eeeg );if len (_cgef )==0{return nil ;};_dfgaf .log ("\u006d\u0061\u006be\u0054\u0065\u0078\u0074\u0050\u0061\u0067\u0065");_ddfa ,_eggg :=_dfgaf .vertsHorzs ();_cgbb :=_bebf (_cgef ,_eeeg .Ury ,_ddfa ,_eggg );
_fadd :=_dfgf (_cgbb ,_eeeg .Ury ,_ddfa ,_eggg );_fadd =_bafg (_fadd );_aacb :=make (paraList ,0,len (_fadd ));for _ ,_ffc :=range _fadd {_fdgbf :=_ffc .arrangeText ();if _fdgbf !=nil {_aacb =append (_aacb ,_fdgbf );};};if len (_aacb )>=_afda {_aacb =_aacb .extractTables (_gfaa );
};_aacb .sortReadingOrder ();_aacb .log ("\u0073\u006f\u0072te\u0064\u0020\u0069\u006e\u0020\u0072\u0065\u0061\u0064\u0069\u006e\u0067\u0020\u006f\u0072\u0064\u0065\u0072");return _aacb ;};
// String returns a description of `tm`.
func (_fccg *textMark )String ()string {return _a .Sprintf ("\u0025\u002e\u0032f \u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065\u003d\u0025\u002e\u0032\u0066\u0020\u0022\u0025\u0073\u0022",_fccg .PdfRectangle ,_fccg ._ffbb ,_fccg ._fbag );};
// 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 (_aeff *PageText )ApplyArea (bbox _da .PdfRectangle ){_egf :=make ([]*textMark ,0,len (_aeff ._adca ));for _ ,_acc :=range _aeff ._adca {if _fdeg (_acc .bbox (),bbox ){_egf =append (_egf ,_acc );};};var _gag paraList ;_gfbb :=len (_egf );for _dga :=0;
_dga < 360&&_gfbb > 0;_dga +=90{_fbc :=make ([]*textMark ,0,len (_egf )-_gfbb );for _ ,_gac :=range _egf {if _gac ._adfa ==_dga {_fbc =append (_fbc ,_gac );};};if len (_fbc )> 0{_bbe :=_cgag (_fbc ,_aeff ._aca ,nil ,nil );_gag =append (_gag ,_bbe ...);
_gfbb -=len (_fbc );};};_aeae :=new (_ga .Buffer );_gag .writeText (_aeae );_aeff ._fdee =_aeae .String ();_aeff ._gdb =_gag .toTextMarks ();_aeff ._ecf =_gag .tables ();};func (_fcgef *textTable )compositeColCorridors ()map[int ][]float64 {_gdcbe :=make (map[int ][]float64 ,_fcgef ._ebcg );
if _feg {_c .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",_fcgef ._ebcg );};for _bdeab :=0;_bdeab < _fcgef ._ebcg ;_bdeab ++{_gdcbe [_bdeab ]=nil ;
};return _gdcbe ;};func _bgdb (_fdae string )string {_bgde :=[]rune (_fdae );return string (_bgde [:len (_bgde )-1])};func (_bec *subpath )last ()_eg .Point {return _bec ._fgbe [len (_bec ._fgbe )-1]};func (_bbeb *textPara )text ()string {_cddg :=new (_ga .Buffer );
_bbeb .writeText (_cddg );return _cddg .String ();};
// Marks returns the TextMark collection for a page. It represents all the text on the page.
func (_gcce PageText )Marks ()*TextMarkArray {return &TextMarkArray {_acd :_gcce ._gdb }};func (_adcae paraList )inTile (_aebc gridTile )paraList {var _gdbbc paraList ;for _ ,_fgcdb :=range _adcae {if _aebc .contains (_fgcdb .PdfRectangle ){_gdbbc =append (_gdbbc ,_fgcdb );
};};if _feg {_a .Printf ("\u0020 \u0020\u0069\u006e\u0054i\u006c\u0065\u003a\u0020\u0020%\u0073 \u0069n\u0073\u0069\u0064\u0065\u003d\u0025\u0064\n",_aebc ,len (_gdbbc ));for _acfab ,_cddgb :=range _gdbbc {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_acfab ,_cddgb );
};_a .Println ("");};return _gdbbc ;};func (_aegf paraList )reorder (_gcfe []int ){_efe :=make (paraList ,len (_aegf ));for _ebbgf ,_cbggb :=range _gcfe {_efe [_ebbgf ]=_aegf [_cbggb ];};copy (_aegf ,_efe );};func (_ebd *textObject )getFont (_dbfce string )(*_da .PdfFont ,error ){if _ebd ._bdce ._cb !=nil {_ebd ._bdce ._cbc ++;
_adgf ,_ccba :=_ebd ._bdce ._cb [_dbfce ];if _ccba {_adgf ._dcgd =_ebd ._bdce ._cbc ;return _adgf ._dcef ,nil ;};};_ecfe ,_eda :=_ebd .getFontDirect (_dbfce );if _eda !=nil {return nil ,_eda ;};if _ebd ._bdce ._cb !=nil {_bgbc :=fontEntry {_ecfe ,_ebd ._bdce ._cbc };
if len (_ebd ._bdce ._cb )>=_abec {var _deff []string ;for _faf :=range _ebd ._bdce ._cb {_deff =append (_deff ,_faf );};_fa .Slice (_deff ,func (_dge ,_cda int )bool {return _ebd ._bdce ._cb [_deff [_dge ]]._dcgd < _ebd ._bdce ._cb [_deff [_cda ]]._dcgd ;
});delete (_ebd ._bdce ._cb ,_deff [0]);};_ebd ._bdce ._cb [_dbfce ]=_bgbc ;};return _ecfe ,nil ;};func _acce (_aeagf float64 )int {var _eggd int ;if _aeagf >=0{_eggd =int (_aeagf /_cdgd );}else {_eggd =int (_aeagf /_cdgd )-1;};return _eggd ;};type rectRuling struct{_dedf rulingKind ;
_cbcef markKind ;_b .Color ;_da .PdfRectangle ;};func (_gabac paraList )findGridTables (_fdege []gridTiling )[]*textTable {if _feg {_c .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 (_gabac ));
for _cfbc ,_daac :=range _gabac {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_cfbc ,_daac );};};var _fegb []*textTable ;for _ebeaa ,_gbfe :=range _fdege {_bbba ,_fdcg :=_gabac .findTableGrid (_gbfe );if _bbba !=nil {_bbba .log (_a .Sprintf ("\u0066\u0069\u006e\u0064Ta\u0062\u006c\u0065\u0057\u0069\u0074\u0068\u0047\u0072\u0069\u0064\u0073\u003a\u0020%\u0064",_ebeaa ));
_fegb =append (_fegb ,_bbba );_bbba .markCells ();};for _eefc :=range _fdcg {_eefc ._cbgaa =true ;};};if _feg {_c .Log .Info ("\u0066i\u006e\u0064\u0047\u0072i\u0064\u0054\u0061\u0062\u006ce\u0073:\u0020%\u0064\u0020\u0074\u0061\u0062\u006c\u0065s",len (_fegb ));
};return _fegb ;};func (_facd *textObject )getFillColor ()_b .Color {return _bfcdc (_facd ._ece .ColorspaceNonStroking ,_facd ._ece .ColorNonStroking );};func (_beff *textPara )fontsize ()float64 {return _beff ._fbge [0]._fcda };func (_gcb *shapesState )establishSubpath ()*subpath {_eagf ,_abc :=_gcb .lastpointEstablished ();
if !_abc {_gcb ._aebg =append (_gcb ._aebg ,_bdfg (_eagf ));};if len (_gcb ._aebg )==0{return nil ;};_gcb ._febcd =false ;return _gcb ._aebg [len (_gcb ._aebg )-1];};func (_dfbe rectRuling )checkWidth (_gbcc ,_debg float64 )(float64 ,bool ){_ffddd :=_debg -_gbcc ;
_cbcc :=_ffddd <=_dgaaa ;return _ffddd ,_cbcc ;};func _acccc (_eegg _da .PdfRectangle )*ruling {return &ruling {_bfce :_bcdff ,_gace :_eegg .Lly ,_cfeee :_eegg .Llx ,_fdfa :_eegg .Urx };};func _bgacf (_bbdee _da .PdfRectangle ,_edeb ,_aadg ,_bfff ,_fdbb *ruling )gridTile {_degfc :=_bbdee .Llx ;
_afae :=_bbdee .Urx ;_faca :=_bbdee .Lly ;_cadg :=_bbdee .Ury ;return gridTile {PdfRectangle :_bbdee ,_degfg :_edeb !=nil &&_edeb .encloses (_faca ,_cadg ),_ecef :_aadg !=nil &&_aadg .encloses (_faca ,_cadg ),_befb :_bfff !=nil &&_bfff .encloses (_degfc ,_afae ),_bggdf :_fdbb !=nil &&_fdbb .encloses (_degfc ,_afae )};
};func (_cbce *wordBag )removeWord (_fbfa *textWord ,_ccbbc int ){_bcda :=_cbce ._edag [_ccbbc ];_bcda =_febfb (_bcda ,_fbfa );if len (_bcda )==0{delete (_cbce ._edag ,_ccbbc );}else {_cbce ._edag [_ccbbc ]=_bcda ;};};func (_ggdca rulingList )primMinMax ()(float64 ,float64 ){_cfgc ,_egcd :=_ggdca [0]._gace ,_ggdca [0]._gace ;
for _ ,_abecb :=range _ggdca [1:]{if _abecb ._gace < _cfgc {_cfgc =_abecb ._gace ;}else if _abecb ._gace > _egcd {_egcd =_abecb ._gace ;};};return _cfgc ,_egcd ;};func (_fgca paraList )topoOrder ()[]int {if _cbgg {_c .Log .Info ("\u0074\u006f\u0070\u006f\u004f\u0072\u0064\u0065\u0072\u003a");
};_dafa :=len (_fgca );_ecab :=make ([]bool ,_dafa );_eegd :=make ([]int ,0,_dafa );_bcab :=_fgca .llyOrdering ();var _bfgd func (_ebec int );_bfgd =func (_cad int ){_ecab [_cad ]=true ;for _cabg :=0;_cabg < _dafa ;_cabg ++{if !_ecab [_cabg ]{if _fgca .readBefore (_bcab ,_cad ,_cabg ){_bfgd (_cabg );
};};};_eegd =append (_eegd ,_cad );};for _cecd :=0;_cecd < _dafa ;_cecd ++{if !_ecab [_cecd ]{_bfgd (_cecd );};};return _dbaf (_eegd );};
// String returns a human readable description of `ss`.
func (_dcc *shapesState )String ()string {return _a .Sprintf ("\u007b\u0025\u0064\u0020su\u0062\u0070\u0061\u0074\u0068\u0073\u0020\u0066\u0072\u0065\u0073\u0068\u003d\u0025t\u007d",len (_dcc ._aebg ),_dcc ._febcd );};func _baeg (_ddag ,_dafga _eg .Point )bool {_afadb :=_dc .Abs (_ddag .X -_dafga .X );
_fcbac :=_dc .Abs (_ddag .Y -_dafga .Y );return _daedc (_fcbac ,_afadb );};func (_agcf paraList )tables ()[]TextTable {var _cbbf []TextTable ;if _feg {_c .Log .Info ("\u0070\u0061\u0072\u0061\u0073\u002e\u0074\u0061\u0062\u006c\u0065\u0073\u003a");};for _ ,_daecc :=range _agcf {_ggba :=_daecc ._aecg ;
if _ggba !=nil &&_ggba .isExportable (){_cbbf =append (_cbbf ,_ggba .toTextTable ());};};return _cbbf ;};func (_cgcb paraList )lines ()[]*textLine {var _dfaf []*textLine ;for _ ,_agfc :=range _cgcb {_dfaf =append (_dfaf ,_agfc ._fbge ...);};return _dfaf ;
};func (_bgbf *wordBag )getDepthIdx (_ebcb float64 )int {_bdad :=_bgbf .depthIndexes ();_ddgc :=_acce (_ebcb );if _ddgc < _bdad [0]{return _bdad [0];};if _ddgc > _bdad [len (_bdad )-1]{return _bdad [len (_bdad )-1];};return _ddgc ;};func (_ggdc paraList )readBefore (_cdfg []int ,_aegdg ,_bfca int )bool {_bbbb ,_gad :=_ggdc [_aegdg ],_ggdc [_bfca ];
if _efab (_bbbb ,_gad )&&_bbbb .Lly > _gad .Lly {return true ;};if !(_bbbb ._ebbd .Urx < _gad ._ebbd .Llx ){return false ;};_afgg ,_dec :=_bbbb .Lly ,_gad .Lly ;if _afgg > _dec {_dec ,_afgg =_afgg ,_dec ;};_baab :=_dc .Max (_bbbb ._ebbd .Llx ,_gad ._ebbd .Llx );
_addd :=_dc .Min (_bbbb ._ebbd .Urx ,_gad ._ebbd .Urx );_ccc :=_ggdc .llyRange (_cdfg ,_afgg ,_dec );for _ ,_dadc :=range _ccc {if _dadc ==_aegdg ||_dadc ==_bfca {continue ;};_gcdg :=_ggdc [_dadc ];if _gcdg ._ebbd .Llx <=_addd &&_baab <=_gcdg ._ebbd .Urx {return false ;
};};return true ;};func _dgd (_gbcb _da .PdfRectangle )textState {return textState {_dfeg :100,_ddfb :RenderModeFill ,_adaf :_gbcb };};func _ggdcaf (_eaaa ,_agccd int )uint64 {return uint64 (_eaaa )*0x1000000+uint64 (_agccd )};func (_fdc *wordBag )scanBand (_edge string ,_afag *wordBag ,_ebf func (_bbfe *wordBag ,_eaa *textWord )bool ,_eceb ,_dgfd ,_fddf float64 ,_bga ,_edad bool )int {_fgfe :=_afag ._febf ;
var _dfae map[int ]map[*textWord ]struct{};if !_bga {_dfae =_fdc .makeRemovals ();};_eec :=_cbef *_fgfe ;_cbd :=0;for _ ,_ggde :=range _fdc .depthBand (_eceb -_eec ,_dgfd +_eec ){if len (_fdc ._edag [_ggde ])==0{continue ;};for _ ,_acgb :=range _fdc ._edag [_ggde ]{if !(_eceb -_eec <=_acgb ._bgeca &&_acgb ._bgeca <=_dgfd +_eec ){continue ;
};if !_ebf (_afag ,_acgb ){continue ;};_bfec :=2.0*_dc .Abs (_acgb ._deadf -_afag ._febf )/(_acgb ._deadf +_afag ._febf );_aeef :=_dc .Max (_acgb ._deadf /_afag ._febf ,_afag ._febf /_acgb ._deadf );_gage :=_dc .Min (_bfec ,_aeef );if _fddf > 0&&_gage > _fddf {continue ;
};if _afag .blocked (_acgb ){continue ;};if !_bga {_afag .pullWord (_acgb ,_ggde ,_dfae );};_cbd ++;if !_edad {if _acgb ._bgeca < _eceb {_eceb =_acgb ._bgeca ;};if _acgb ._bgeca > _dgfd {_dgfd =_acgb ._bgeca ;};};if _bga {break ;};};};if !_bga {_fdc .applyRemovals (_dfae );
};return _cbd ;};func (_ceae *textWord )appendMark (_agfa *textMark ,_geaf _da .PdfRectangle ){_ceae ._cbebd =append (_ceae ._cbebd ,_agfa );_ceae .PdfRectangle =_cfga (_ceae .PdfRectangle ,_agfa .PdfRectangle );if _agfa ._ffbb > _ceae ._deadf {_ceae ._deadf =_agfa ._ffbb ;
};_ceae ._bgeca =_geaf .Ury -_ceae .PdfRectangle .Lly ;};func (_eagd rulingList )asTiling ()gridTiling {if _affd {_c .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 (_eagd ));
};for _abda ,_fbed :=range _eagd [1:]{_gbcfc :=_eagd [_abda ];if _gbcfc .alignsPrimary (_fbed )&&_gbcfc .alignsSec (_fbed ){_c .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",_fbed ,_gbcfc );
};};_eagd .sortStrict ();_eagd .log ("\u0073n\u0061\u0070\u0070\u0065\u0064");_badade ,_adbg :=_eagd .vertsHorzs ();_gebc :=_badade .primaries ();_cceb :=_adbg .primaries ();_bdegf :=len (_gebc )-1;_cffef :=len (_cceb )-1;if _bdegf ==0||_cffef ==0{return gridTiling {};
};_gfcc :=_da .PdfRectangle {Llx :_gebc [0],Urx :_gebc [_bdegf ],Lly :_cceb [0],Ury :_cceb [_cffef ]};if _affd {_c .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 (_badade ));
for _fefd ,_aebff :=range _badade {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_fefd ,_aebff );};_c .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 (_adbg ));
for _dgga ,_gcbe :=range _adbg {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_dgga ,_gcbe );};_c .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",_bdegf ,_cffef ,_gebc ,_cceb );
};_dcbc :=make ([]gridTile ,_bdegf *_cffef );for _aeaa :=_cffef -1;_aeaa >=0;_aeaa --{_aaaa :=_cceb [_aeaa ];_eefa :=_cceb [_aeaa +1];for _ebdf :=0;_ebdf < _bdegf ;_ebdf ++{_adbcb :=_gebc [_ebdf ];_efbf :=_gebc [_ebdf +1];_ddad :=_badade .findPrimSec (_adbcb ,_aaaa );
_bbbf :=_badade .findPrimSec (_efbf ,_aaaa );_egbd :=_adbg .findPrimSec (_aaaa ,_adbcb );_ccgee :=_adbg .findPrimSec (_eefa ,_adbcb );_bgdff :=_da .PdfRectangle {Llx :_adbcb ,Urx :_efbf ,Lly :_aaaa ,Ury :_eefa };_ccbfe :=_bgacf (_bgdff ,_ddad ,_bbbf ,_egbd ,_ccgee );
_dcbc [_aeaa *_bdegf +_ebdf ]=_ccbfe ;if _affd {_a .Printf ("\u0020\u0020\u0078\u003d\u0025\u0032\u0064\u0020\u0079\u003d\u0025\u0032\u0064\u003a\u0020%\u0073 \u0025\u0036\u002e\u0032\u0066\u0020\u0078\u0020\u0025\u0036\u002e\u0032\u0066\u000a",_ebdf ,_aeaa ,_ccbfe .String (),_ccbfe .Width (),_ccbfe .Height ());
};};};if _affd {_c .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",_gfcc );
};_cdcd :=make ([]map[float64 ]gridTile ,_cffef );for _daaa :=_cffef -1;_daaa >=0;_daaa --{if _affd {_a .Printf ("\u0020\u0020\u0079\u003d\u0025\u0032\u0064\u000a",_daaa );};_cdcd [_daaa ]=make (map[float64 ]gridTile ,_bdegf );for _gbbdc :=0;_gbbdc < _bdegf ;
_gbbdc ++{_dgaag :=_dcbc [_daaa *_bdegf +_gbbdc ];if _affd {_a .Printf ("\u0020\u0020\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_gbbdc ,_dgaag );};if !_dgaag ._degfg {continue ;};_fgdb :=_gbbdc ;for _afgd :=_gbbdc +1;!_dgaag ._ecef &&_afgd < _bdegf ;
_afgd ++{_eaeec :=_dcbc [_daaa *_bdegf +_afgd ];_dgaag .Urx =_eaeec .Urx ;_dgaag ._bggdf =_dgaag ._bggdf ||_eaeec ._bggdf ;_dgaag ._befb =_dgaag ._befb ||_eaeec ._befb ;_dgaag ._ecef =_eaeec ._ecef ;if _affd {_a .Printf ("\u0020 \u0020%\u0034\u0064\u003a\u0020\u0025s\u0020\u2192 \u0025\u0073\u000a",_afgd ,_eaeec ,_dgaag );
};_fgdb =_afgd ;};if _affd {_a .Printf (" \u0020 \u0025\u0032\u0064\u0020\u002d\u0020\u0025\u0032d\u0020\u2192\u0020\u0025s\n",_gbbdc ,_fgdb ,_dgaag );};_gbbdc =_fgdb ;_cdcd [_daaa ][_dgaag .Llx ]=_dgaag ;};};_caae :=make (map[float64 ]map[float64 ]gridTile ,_cffef );
_cffd :=make (map[float64 ]map[float64 ]struct{},_cffef );for _becfef :=_cffef -1;_becfef >=0;_becfef --{_adfc :=_dcbc [_becfef *_bdegf ].Lly ;_caae [_adfc ]=make (map[float64 ]gridTile ,_bdegf );_cffd [_adfc ]=make (map[float64 ]struct{},_bdegf );};if _affd {_c .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",_gfcc );
};for _becef :=_cffef -1;_becef >=0;_becef --{_abgd :=_dcbc [_becef *_bdegf ].Lly ;_cgbce :=_cdcd [_becef ];if _affd {_a .Printf ("\u0020\u0020\u0079\u003d\u0025\u0032\u0064\u000a",_becef );};for _ ,_ebcaa :=range _ggdd (_cgbce ){if _ ,_fdaabf :=_cffd [_abgd ][_ebcaa ];
_fdaabf {continue ;};_bgbcd :=_cgbce [_ebcaa ];if _affd {_a .Printf (" \u0020\u0020\u0020\u0020\u0076\u0030\u003d\u0025\u0073\u000a",_bgbcd .String ());};for _cgbe :=_becef -1;_cgbe >=0;_cgbe --{if _bgbcd ._befb {break ;};_ecbc :=_cdcd [_cgbe ];_ccab ,_fffbe :=_ecbc [_ebcaa ];
if !_fffbe {break ;};if _ccab .Urx !=_bgbcd .Urx {break ;};_bgbcd ._befb =_ccab ._befb ;_bgbcd .Lly =_ccab .Lly ;if _affd {_a .Printf ("\u0020\u0020\u0020\u0020 \u0020\u0020\u0076\u003d\u0025\u0073\u0020\u0076\u0030\u003d\u0025\u0073\u000a",_ccab .String (),_bgbcd .String ());
};_cffd [_ccab .Lly ][_ccab .Llx ]=struct{}{};};if _becef ==0{_bgbcd ._befb =true ;};if _bgbcd .complete (){_caae [_abgd ][_ebcaa ]=_bgbcd ;};};};_abbba :=gridTiling {PdfRectangle :_gfcc ,_fabc :_cgeafa (_caae ),_cdgc :_fceg (_caae ),_bcada :_caae };_abbba .log ("\u0043r\u0065\u0061\u0074\u0065\u0064");
return _abbba ;};type imageExtractContext struct{_cf []ImageMark ;_bdc int ;_ba int ;_dg int ;_eb map[*_ca .PdfObjectStream ]*cachedImage ;_dd *ImageExtractOptions ;};func (_bbdf *shapesState )devicePoint (_dced ,_fad float64 )_eg .Point {_ebb :=_bbdf ._adce .Mult (_bbdf ._bac );
_dced ,_fad =_ebb .Transform (_dced ,_fad );return _eg .NewPoint (_dced ,_fad );};func _adbge (_fdfd []compositeCell )[]float64 {var _dffcf []*textLine ;_geca :=0;for _ ,_aecdd :=range _fdfd {_geca +=len (_aecdd .paraList );_dffcf =append (_dffcf ,_aecdd .lines ()...);
};_fa .Slice (_dffcf ,func (_affaa ,_acga int )bool {_bfgc ,_gfafd :=_dffcf [_affaa ],_dffcf [_acga ];_ggab ,_addad :=_bfgc ._fgee ,_gfafd ._fgee ;if !_bfdbe (_ggab -_addad ){return _ggab < _addad ;};return _bfgc .Llx < _gfafd .Llx ;});if _feg {_a .Printf ("\u0020\u0020\u0020 r\u006f\u0077\u0042\u006f\u0072\u0064\u0065\u0072\u0073:\u0020%\u0064 \u0070a\u0072\u0061\u0073\u0020\u0025\u0064\u0020\u006c\u0069\u006e\u0065\u0073\u000a",_geca ,len (_dffcf ));
for _dbeec ,_addba :=range _dffcf {_a .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_dbeec ,_addba );};};var _acage []float64 ;_ebce :=_dffcf [0];var _bfffd [][]*textLine ;_ggdb :=[]*textLine {_ebce };for _bgbd ,_fcacc :=range _dffcf [1:]{if _fcacc .Ury < _ebce .Lly {_cgga :=0.5*(_fcacc .Ury +_ebce .Lly );
if _feg {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u003c\u0020\u0025\u0036.\u0032f\u0020\u0062\u006f\u0072\u0064\u0065\u0072\u003d\u0025\u0036\u002e\u0032\u0066\u000a"+"\u0009\u0020\u0071\u003d\u0025\u0073\u000a\u0009\u0020p\u003d\u0025\u0073\u000a",_bgbd ,_fcacc .Ury ,_ebce .Lly ,_cgga ,_ebce ,_fcacc );
};_acage =append (_acage ,_cgga );_bfffd =append (_bfffd ,_ggdb );_ggdb =nil ;};_ggdb =append (_ggdb ,_fcacc );if _fcacc .Lly < _ebce .Lly {_ebce =_fcacc ;};};if len (_ggdb )> 0{_bfffd =append (_bfffd ,_ggdb );};if _feg {_a .Printf (" \u0020\u0020\u0020\u0020\u0020\u0020 \u0072\u006f\u0077\u0043\u006f\u0072\u0072\u0069\u0064o\u0072\u0073\u003d%\u0036.\u0032\u0066\u000a",_acage );
};if _feg {_c .Log .Info ("\u0072\u006f\u0077\u003d\u0025\u0064",len (_fdfd ));for _dfcd ,_acgf :=range _fdfd {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_dfcd ,_acgf );};_c .Log .Info ("\u0067r\u006f\u0075\u0070\u0073\u003d\u0025d",len (_bfffd ));
for _agbfa ,_gccfb :=range _bfffd {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0064\u000a",_agbfa ,len (_gccfb ));for _aedge ,_adba :=range _gccfb {_a .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_aedge ,_adba );};};};_eedcg :=true ;
for _cacc ,_gfeg :=range _bfffd {_ggef :=true ;for _ggecc ,_geff :=range _fdfd {if _feg {_a .Printf ("\u0020\u0020\u0020\u007e\u007e\u007e\u0067\u0072\u006f\u0075\u0070\u0020\u0025\u0064\u0020\u006f\u0066\u0020\u0025\u0064\u0020\u0063\u0065\u006cl\u0020\u0025\u0064\u0020\u006ff\u0020\u0025d\u0020\u0025\u0073\u000a",_cacc ,len (_bfffd ),_ggecc ,len (_fdfd ),_geff );
};if !_geff .hasLines (_gfeg ){if _feg {_a .Printf ("\u0020\u0020\u0020\u0021\u0021\u0021\u0067\u0072\u006f\u0075\u0070\u0020\u0025d\u0020\u006f\u0066\u0020\u0025\u0064 \u0063\u0065\u006c\u006c\u0020\u0025\u0064\u0020\u006f\u0066\u0020\u0025\u0064 \u004f\u0055\u0054\u000a",_cacc ,len (_bfffd ),_ggecc ,len (_fdfd ));
};_ggef =false ;break ;};};if !_ggef {_eedcg =false ;break ;};};if !_eedcg {if _feg {_c .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");
};_acage =nil ;};if _feg &&_acage !=nil {_a .Printf ("\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u002a\u002a*\u0072\u006f\u0077\u0043\u006f\u0072\u0072i\u0064\u006f\u0072\u0073\u003d\u0025\u0036\u002e\u0032\u0066\u000a",_acage );};return _acage ;
};func (_becb lineRuling )yMean ()float64 {return 0.5*(_becb ._cdca .Y +_becb ._cdfa .Y )};type textObject struct{_bdce *Extractor ;_bfc *_da .PdfPageResources ;_ece _ae .GraphicsState ;_ecbd *textState ;_dee *stateStack ;_bcbc _eg .Matrix ;_dbfc _eg .Matrix ;
_bcgd []*textMark ;_gda bool ;};func (_db *imageExtractContext )extractContentStreamImages (_adc string ,_bgg *_da .PdfPageResources )error {_ggg :=_ae .NewContentStreamParser (_adc );_ag ,_dcf :=_ggg .Parse ();if _dcf !=nil {return _dcf ;};if _db ._eb ==nil {_db ._eb =map[*_ca .PdfObjectStream ]*cachedImage {};
};if _db ._dd ==nil {_db ._dd =&ImageExtractOptions {};};_de :=_ae .NewContentStreamProcessor (*_ag );_de .AddHandler (_ae .HandlerConditionEnumAllOperands ,"",_db .processOperand );return _de .Process (_bgg );};func _cadc (_dbacc int ,_cgbed func (int ,int )bool )[]int {_fdaabb :=make ([]int ,_dbacc );
for _bfdc :=range _fdaabb {_fdaabb [_bfdc ]=_bfdc ;};_fa .Slice (_fdaabb ,func (_ffaeg ,_fffeag int )bool {return _cgbed (_fdaabb [_ffaeg ],_fdaabb [_fffeag ])});return _fdaabb ;};func (_cgd *textObject )getFontDirect (_gagf string )(*_da .PdfFont ,error ){_cggg ,_afd :=_cgd .getFontDict (_gagf );
if _afd !=nil {return nil ,_afd ;};_gabb ,_afd :=_da .NewPdfFontFromPdfObject (_cggg );if _afd !=nil {_c .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",_gagf ,_afd );
};return _gabb ,_afd ;};func (_ffde *wordBag )highestWord (_cgdd int ,_edaa ,_fcf float64 )*textWord {for _ ,_cgeb :=range _ffde ._edag [_cgdd ]{if _edaa <=_cgeb ._bgeca &&_cgeb ._bgeca <=_fcf {return _cgeb ;};};return nil ;};func (_cfeb *subpath )clear (){*_cfeb =subpath {}};
var (_dfce =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"};
);
// Tables returns the tables extracted from the page.
func (_dcbd PageText )Tables ()[]TextTable {if _feg {_c .Log .Info ("\u0054\u0061\u0062\u006c\u0065\u0073\u003a\u0020\u0025\u0064",len (_dcbd ._ecf ));};return _dcbd ._ecf ;};func (_edfaa *ruling )gridIntersecting (_bded *ruling )bool {return _ggec (_edfaa ._cfeee ,_bded ._cfeee )&&_ggec (_edfaa ._fdfa ,_bded ._fdfa );
};type ruling struct{_bfce rulingKind ;_gcacd markKind ;_b .Color ;_gace float64 ;_cfeee float64 ;_fdfa float64 ;_eaadd float64 ;};
// 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 (_eceg *TextMarkArray )RangeOffset (start ,end int )(*TextMarkArray ,error ){if _eceg ==nil {return nil ,_d .New ("\u006da\u003d\u003d\u006e\u0069\u006c");};if end < start {return nil ,_a .Errorf ("\u0065\u006e\u0064\u0020\u003c\u0020\u0073\u0074\u0061\u0072\u0074\u002e\u0020\u0052\u0061n\u0067\u0065\u004f\u0066\u0066\u0073\u0065\u0074\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064\u002e\u0020\u0073\u0074\u0061\u0072t=\u0025\u0064\u0020\u0065\u006e\u0064\u003d\u0025\u0064\u0020",start ,end );
};_dac :=len (_eceg ._acd );if _dac ==0{return _eceg ,nil ;};if start < _eceg ._acd [0].Offset {start =_eceg ._acd [0].Offset ;};if end > _eceg ._acd [_dac -1].Offset +1{end =_eceg ._acd [_dac -1].Offset +1;};_aacg :=_fa .Search (_dac ,func (_ffe int )bool {return _eceg ._acd [_ffe ].Offset +len (_eceg ._acd [_ffe ].Text )-1>=start });
if !(0<=_aacg &&_aacg < _dac ){_bbcg :=_a .Errorf ("\u004f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u002e\u0020\u0073\u0074\u0061\u0072\u0074\u003d%\u0064\u0020\u0069\u0053\u0074\u0061\u0072\u0074\u003d\u0025\u0064\u0020\u006c\u0065\u006e\u003d\u0025\u0064\u000a\u0009\u0066\u0069\u0072\u0073\u0074\u003d\u0025\u0076\u000a\u0009 \u006c\u0061\u0073\u0074\u003d%\u0076",start ,_aacg ,_dac ,_eceg ._acd [0],_eceg ._acd [_dac -1]);
return nil ,_bbcg ;};_cffb :=_fa .Search (_dac ,func (_acgg int )bool {return _eceg ._acd [_acgg ].Offset > end -1});if !(0<=_cffb &&_cffb < _dac ){_cbba :=_a .Errorf ("\u004f\u0075\u0074\u0020\u006f\u0066\u0020r\u0061\u006e\u0067e\u002e\u0020\u0065n\u0064\u003d%\u0064\u0020\u0069\u0045\u006e\u0064=\u0025d \u006c\u0065\u006e\u003d\u0025\u0064\u000a\u0009\u0066\u0069\u0072\u0073\u0074\u003d\u0025\u0076\u000a\u0009\u0020\u006c\u0061\u0073\u0074\u003d\u0025\u0076",end ,_cffb ,_dac ,_eceg ._acd [0],_eceg ._acd [_dac -1]);
return nil ,_cbba ;};if _cffb <=_aacg {return nil ,_a .Errorf ("\u0069\u0045\u006e\u0064\u0020\u003c=\u0020\u0069\u0053\u0074\u0061\u0072\u0074\u003a\u0020\u0073\u0074\u0061\u0072\u0074\u003d\u0025\u0064\u0020\u0065\u006ed\u003d\u0025\u0064\u0020\u0069\u0053\u0074\u0061\u0072\u0074\u003d\u0025\u0064\u0020i\u0045n\u0064\u003d\u0025\u0064",start ,end ,_aacg ,_cffb );
};return &TextMarkArray {_acd :_eceg ._acd [_aacg :_cffb ]},nil ;};
// String returns a description of `b`.
func (_beda *wordBag )String ()string {var _bbce []string ;for _ ,_bcfb :=range _beda .depthIndexes (){_bcge :=_beda ._edag [_bcfb ];for _ ,_ebe :=range _bcge {_bbce =append (_bbce ,_ebe ._ffbf );};};return _a .Sprintf ("\u0025.\u0032\u0066\u0020\u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065=\u0025\u002e\u0032\u0066\u0020\u0025\u0064\u0020\u0025\u0071",_beda .PdfRectangle ,_beda ._febf ,len (_bbce ),_bbce );
};
// BBox returns the smallest axis-aligned rectangle that encloses all the TextMarks in `ma`.
func (_aab *TextMarkArray )BBox ()(_da .PdfRectangle ,bool ){var _gacg _da .PdfRectangle ;_aade :=false ;for _ ,_eabc :=range _aab ._acd {if _eabc .Meta ||_fdbc (_eabc .Text ){continue ;};if _aade {_gacg =_cfga (_gacg ,_eabc .BBox );}else {_gacg =_eabc .BBox ;
_aade =true ;};};return _gacg ,_aade ;};func (_gbag *textLine )appendWord (_bafc *textWord ){_gbag ._efbd =append (_gbag ._efbd ,_bafc );_gbag .PdfRectangle =_cfga (_gbag .PdfRectangle ,_bafc .PdfRectangle );if _bafc ._deadf > _gbag ._fcda {_gbag ._fcda =_bafc ._deadf ;
};if _bafc ._bgeca > _gbag ._fgee {_gbag ._fgee =_bafc ._bgeca ;};};var _bccf =map[rulingKind ]string {_gada :"\u006e\u006f\u006e\u0065",_bcdff :"\u0068\u006f\u0072\u0069\u007a\u006f\u006e\u0074\u0061\u006c",_edecb :"\u0076\u0065\u0072\u0074\u0069\u0063\u0061\u006c"};
func (_ffac *wordBag )depthIndexes ()[]int {if len (_ffac ._edag )==0{return nil ;};_aeec :=make ([]int ,len (_ffac ._edag ));_dgc :=0;for _aggc :=range _ffac ._edag {_aeec [_dgc ]=_aggc ;_dgc ++;};_fa .Ints (_aeec );return _aeec ;};func (_dbee rulingList )bbox ()_da .PdfRectangle {var _accf _da .PdfRectangle ;
if len (_dbee )==0{_c .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 _da .PdfRectangle {};};if _dbee [0]._bfce ==_bcdff {_accf .Llx ,_accf .Urx =_dbee .secMinMax ();
_accf .Lly ,_accf .Ury =_dbee .primMinMax ();}else {_accf .Llx ,_accf .Urx =_dbee .primMinMax ();_accf .Lly ,_accf .Ury =_dbee .secMinMax ();};return _accf ;};func (_fgaa *wordBag )blocked (_gabc *textWord )bool {if _gabc .Urx < _fgaa .Llx {_bfbd :=_bgcf (_gabc .PdfRectangle );
_bbca :=_cfag (_fgaa .PdfRectangle );if _fgaa ._gdae .blocks (_bfbd ,_bbca ){if _efga {_c .Log .Info ("\u0062\u006c\u006f\u0063ke\u0064\u0020\u2190\u0078\u003a\u0020\u0025\u0073\u0020\u0025\u0073",_gabc ,_fgaa );};return true ;};}else if _fgaa .Urx < _gabc .Llx {_deed :=_bgcf (_fgaa .PdfRectangle );
_adb :=_cfag (_gabc .PdfRectangle );if _fgaa ._gdae .blocks (_deed ,_adb ){if _efga {_c .Log .Info ("b\u006co\u0063\u006b\u0065\u0064\u0020\u0078\u2192\u0020:\u0020\u0025\u0073\u0020%s",_gabc ,_fgaa );};return true ;};};if _gabc .Ury < _fgaa .Lly {_gef :=_becf (_gabc .PdfRectangle );
_fgff :=_acccc (_fgaa .PdfRectangle );if _fgaa ._gaecb .blocks (_gef ,_fgff ){if _efga {_c .Log .Info ("\u0062\u006c\u006f\u0063ke\u0064\u0020\u2190\u0079\u003a\u0020\u0025\u0073\u0020\u0025\u0073",_gabc ,_fgaa );};return true ;};}else if _fgaa .Ury < _gabc .Lly {_bcdd :=_becf (_fgaa .PdfRectangle );
_cfba :=_acccc (_gabc .PdfRectangle );if _fgaa ._gaecb .blocks (_bcdd ,_cfba ){if _efga {_c .Log .Info ("b\u006co\u0063\u006b\u0065\u0064\u0020\u0079\u2192\u0020:\u0020\u0025\u0073\u0020%s",_gabc ,_fgaa );};return true ;};};return false ;};func (_gfg *imageExtractContext )extractXObjectImage (_fed *_ca .PdfObjectName ,_fdd _ae .GraphicsState ,_dfb *_da .PdfPageResources )error {_egba ,_ :=_dfb .GetXObjectByName (*_fed );
if _egba ==nil {return nil ;};_ged ,_dea :=_gfg ._eb [_egba ];if !_dea {_cc ,_edd :=_dfb .GetXObjectImageByName (*_fed );if _edd !=nil {return _edd ;};if _cc ==nil {return nil ;};_ccd ,_edd :=_cc .ToImage ();if _edd !=nil {return _edd ;};_ged =&cachedImage {_fdb :_ccd ,_gg :_cc .ColorSpace };
_gfg ._eb [_egba ]=_ged ;};_aea :=_ged ._fdb ;_fdg :=_ged ._gg ;_eac ,_fc :=_fdg .ImageToRGB (*_aea );if _fc !=nil {return _fc ;};_c .Log .Debug ("@\u0044\u006f\u0020\u0043\u0054\u004d\u003a\u0020\u0025\u0073",_fdd .CTM .String ());_agb :=ImageMark {Image :&_eac ,Width :_fdd .CTM .ScalingFactorX (),Height :_fdd .CTM .ScalingFactorY (),Angle :_fdd .CTM .Angle ()};
_agb .X ,_agb .Y =_fdd .CTM .Translation ();_gfg ._cf =append (_gfg ._cf ,_agb );_gfg ._ba ++;return nil ;};type markKind int ;var _fefg =TextMark {Text :"\u005b\u0058\u005d",Original :"\u0020",Meta :true ,FillColor :_b .White ,StrokeColor :_b .White };
// ImageExtractOptions contains options for controlling image extraction from
// PDF pages.
type ImageExtractOptions struct{IncludeInlineStencilMasks bool ;};func (_baec gridTile )numBorders ()int {_bfcf :=0;if _baec ._degfg {_bfcf ++;};if _baec ._ecef {_bfcf ++;};if _baec ._befb {_bfcf ++;};if _baec ._bggdf {_bfcf ++;};return _bfcf ;};func (_ffdf rulingList )snapToGroupsDirection ()rulingList {_ffdf .sortStrict ();
_beca :=make (map[*ruling ]rulingList ,len (_ffdf ));_ffae :=_ffdf [0];_cdb :=func (_bbbff *ruling ){_ffae =_bbbff ;_beca [_ffae ]=rulingList {_bbbff }};_cdb (_ffdf [0]);for _ ,_cdcgd :=range _ffdf [1:]{if _cdcgd ._gace < _ffae ._gace -_dcdb {_c .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",_ffae ,_cdcgd );
};if _cdcgd ._gace > _ffae ._gace +_dgaaa {_cdb (_cdcgd );}else {_beca [_ffae ]=append (_beca [_ffae ],_cdcgd );};};_eabd :=make (map[*ruling ]float64 ,len (_beca ));_ggee :=make (map[*ruling ]*ruling ,len (_ffdf ));for _ceab ,_feaegc :=range _beca {_eabd [_ceab ]=_feaegc .mergePrimary ();
for _ ,_adbce :=range _feaegc {_ggee [_adbce ]=_ceab ;};};for _ ,_efbgd :=range _ffdf {_efbgd ._gace =_eabd [_ggee [_efbgd ]];};_efcf :=make (rulingList ,0,len (_ffdf ));for _ ,_eedc :=range _beca {_fdeeb :=_eedc .splitSec ();for _fbef ,_agfbf :=range _fdeeb {_egcfc :=_agfbf .merge ();
if len (_efcf )> 0{_bgdg :=_efcf [len (_efcf )-1];if _bgdg .alignsPrimary (_egcfc )&&_bgdg .alignsSec (_egcfc ){_c .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",_fbef ,_bgdg ,_egcfc );
continue ;};};_efcf =append (_efcf ,_egcfc );};};_efcf .sortStrict ();return _efcf ;};func (_afba gridTiling )complete ()bool {for _ ,_gdcff :=range _afba ._bcada {for _ ,_aadef :=range _gdcff {if !_aadef .complete (){return false ;};};};return true ;};
func (_eegce compositeCell )hasLines (_aegaf []*textLine )bool {for _ebcbg ,_ecedb :=range _aegaf {_cgdf :=_fdeg (_eegce .PdfRectangle ,_ecedb .PdfRectangle );if _feg {_a .Printf ("\u0020\u0020\u0020\u0020\u0020\u0020\u005e\u005e\u005e\u0069\u006e\u0074\u0065\u0072\u0073e\u0063t\u0073\u003d\u0025\u0074\u0020\u0025\u0064\u0020\u006f\u0066\u0020\u0025\u0064\u000a",_cgdf ,_ebcbg ,len (_aegaf ));
_a .Printf ("\u0020\u0020\u0020\u0020 \u005e\u005e\u005e\u0063\u006f\u006d\u0070\u006f\u0073\u0069\u0074\u0065\u003d\u0025s\u000a",_eegce );_a .Printf ("\u0020 \u0020 \u0020\u0020\u0020\u006c\u0069\u006e\u0065\u003d\u0025\u0073\u000a",_ecedb );};if _cgdf {return true ;
};};return false ;};func _ecba (_fabb string )bool {if _f .RuneCountInString (_fabb )< _egeg {return false ;};_fade ,_acbe :=_f .DecodeLastRuneInString (_fabb );if _acbe <=0||!_ff .Is (_ff .Hyphen ,_fade ){return false ;};_fade ,_acbe =_f .DecodeLastRuneInString (_fabb [:len (_fabb )-_acbe ]);
return _acbe > 0&&!_ff .IsSpace (_fade );};func (_aaace *textPara )bbox ()_da .PdfRectangle {return _aaace .PdfRectangle };func _ggec (_egge ,_geadd float64 )bool {return _dc .Abs (_egge -_geadd )<=_fcaff };func (_cfdfc paraList )eventNeighbours (_cace []event )map[*textPara ][]int {_fa .Slice (_cace ,func (_fcbe ,_gabec int )bool {_egee ,_gaafe :=_cace [_fcbe ],_cace [_gabec ];
_daffe ,_ffeeb :=_egee ._bfaab ,_gaafe ._bfaab ;if _daffe !=_ffeeb {return _daffe < _ffeeb ;};if _egee ._fddd !=_gaafe ._fddd {return _egee ._fddd ;};return _fcbe < _gabec ;});_cdacc :=make (map[int ]intSet );_fccb :=make (intSet );for _ ,_gafg :=range _cace {if _gafg ._fddd {_cdacc [_gafg ._edef ]=make (intSet );
for _deeb :=range _fccb {if _deeb !=_gafg ._edef {_cdacc [_gafg ._edef ].add (_deeb );_cdacc [_deeb ].add (_gafg ._edef );};};_fccb .add (_gafg ._edef );}else {_fccb .del (_gafg ._edef );};};_cbefc :=map[*textPara ][]int {};for _bgbff ,_ddggd :=range _cdacc {_ffabd :=_cfdfc [_bgbff ];
if len (_ddggd )==0{_cbefc [_ffabd ]=nil ;continue ;};_gfdg :=make ([]int ,len (_ddggd ));_dccf :=0;for _fdbgb :=range _ddggd {_gfdg [_dccf ]=_fdbgb ;_dccf ++;};_cbefc [_ffabd ]=_gfdg ;};return _cbefc ;};func (_edac *textLine )pullWord (_dab *wordBag ,_bdef *textWord ,_fcc int ){_edac .appendWord (_bdef );
_dab .removeWord (_bdef ,_fcc );};func (_abcd *wordBag )maxDepth ()float64 {return _abcd ._cfed -_abcd .Lly };func (_bca *wordBag )depthRange (_ccbb ,_cca int )[]int {var _gffa []int ;for _baee :=range _bca ._edag {if _ccbb <=_baee &&_baee <=_cca {_gffa =append (_gffa ,_baee );
};};if len (_gffa )==0{return nil ;};_fa .Ints (_gffa );return _gffa ;};func (_afefe *textTable )getDown ()paraList {_efbcf :=make (paraList ,_afefe ._ebcg );for _bbff :=0;_bbff < _afefe ._ebcg ;_bbff ++{_eafa :=_afefe .get (_bbff ,_afefe ._cfgdb -1)._dbef ;
if _eafa ==nil ||_eafa ._cbgaa {return nil ;};_efbcf [_bbff ]=_eafa ;};for _accd :=0;_accd < _afefe ._ebcg -1;_accd ++{if _efbcf [_accd ]._eaec !=_efbcf [_accd +1]{return nil ;};};return _efbcf ;};type bounded interface{bbox ()_da .PdfRectangle };type intSet map[int ]struct{};
func (_ebea *textPara )writeText (_ddb _ee .Writer ){if _ebea ._aecg ==nil {_ebea .writeCellText (_ddb );return ;};for _acbd :=0;_acbd < _ebea ._aecg ._cfgdb ;_acbd ++{for _acbdf :=0;_acbdf < _ebea ._aecg ._ebcg ;_acbdf ++{_fceff :=_ebea ._aecg .get (_acbdf ,_acbd );
if _fceff ==nil {_ddb .Write ([]byte ("\u0009"));}else {_fceff .writeCellText (_ddb );};_ddb .Write ([]byte ("\u0020"));};if _acbd < _ebea ._aecg ._cfgdb -1{_ddb .Write ([]byte ("\u000a"));};};};const _abec =10;func _gcgf (_eag _eg .Point )_eg .Matrix {return _eg .TranslationMatrix (_eag .X ,_eag .Y )};
func (_cfaf *subpath )removeDuplicates (){if len (_cfaf ._fgbe )==0{return ;};_fddg :=[]_eg .Point {_cfaf ._fgbe [0]};for _ ,_eadf :=range _cfaf ._fgbe [1:]{if !_ecfae (_eadf ,_fddg [len (_fddg )-1]){_fddg =append (_fddg ,_eadf );};};_cfaf ._fgbe =_fddg ;
};func _bdcd (_bfcd _da .PdfRectangle ,_degf []*textLine )*textPara {return &textPara {PdfRectangle :_bfcd ,_fbge :_degf };};func (_dded *textObject )reset (){_dded ._bcbc =_eg .IdentityMatrix ();_dded ._dbfc =_eg .IdentityMatrix ();_dded ._bcgd =nil ;
};func (_gdage *textTable )reduce ()*textTable {_adcea :=make ([]int ,0,_gdage ._cfgdb );_fdfc :=make ([]int ,0,_gdage ._ebcg );for _ggeb :=0;_ggeb < _gdage ._cfgdb ;_ggeb ++{if !_gdage .emptyRow (_ggeb ){_adcea =append (_adcea ,_ggeb );};};for _dcada :=0;
_dcada < _gdage ._ebcg ;_dcada ++{if !_gdage .emptyColumn (_dcada ){_fdfc =append (_fdfc ,_dcada );};};if len (_adcea )==_gdage ._cfgdb &&len (_fdfc )==_gdage ._ebcg {return _gdage ;};_fdab :=textTable {_fgece :_gdage ._fgece ,_ebcg :len (_fdfc ),_cfgdb :len (_adcea ),_gdbg :make (map[uint64 ]*textPara ,len (_fdfc )*len (_adcea ))};
if _feg {_c .Log .Info ("\u0072\u0065\u0064\u0075ce\u003a\u0020\u0025\u0064\u0078\u0025\u0064\u0020\u002d\u003e\u0020\u0025\u0064\u0078%\u0064",_gdage ._ebcg ,_gdage ._cfgdb ,len (_fdfc ),len (_adcea ));_c .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0043\u006f\u006c\u0073\u003a\u0020\u0025\u002b\u0076",_fdfc );
_c .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0052\u006f\u0077\u0073\u003a\u0020\u0025\u002b\u0076",_adcea );};for _dbcd ,_eeegd :=range _adcea {for _cfef ,_dbca :=range _fdfc {_fggc :=_gdage .get (_dbca ,_eeegd );if _fggc ==nil {continue ;};if _feg {_a .Printf ("\u0020 \u0025\u0032\u0064\u002c \u0025\u0032\u0064\u0020\u0028%\u0032d\u002c \u0025\u0032\u0064\u0029\u0020\u0025\u0071\n",_cfef ,_dbcd ,_dbca ,_eeegd ,_aecc (_fggc .text (),50));
};_fdab .put (_cfef ,_dbcd ,_fggc );};};return &_fdab ;};func _cddge (_decd int ,_bffe map[int ][]float64 )([]int ,int ){_adeda :=make ([]int ,_decd );_beefc :=0;for _cabf :=0;_cabf < _decd ;_cabf ++{_adeda [_cabf ]=_beefc ;_beefc +=len (_bffe [_cabf ])+1;
};return _adeda ,_beefc ;};func (_defg rulingList )tidied (_dcdad string )rulingList {_dcggb :=_defg .removeDuplicates ();_dcggb .log ("\u0075n\u0069\u0071\u0075\u0065\u0073");_afcd :=_dcggb .snapToGroups ();if _afcd ==nil {return nil ;};_afcd .sort ();
if _ageg {_c .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",_dcdad ,len (_defg ),len (_dcggb ),len (_afcd ));
};_afcd .log ("\u0063o\u0061\u006c\u0065\u0073\u0063\u0065d");return _afcd ;};
// String returns a string descibing `i`.
func (_daedg gridTile )String ()string {_effg :=func (_afdc bool ,_cgbcc string )string {if _afdc {return _cgbcc ;};return "\u005f";};return _a .Sprintf ("\u00256\u002e2\u0066\u0020\u0025\u0031\u0073%\u0031\u0073%\u0031\u0073\u0025\u0031\u0073",_daedg .PdfRectangle ,_effg (_daedg ._degfg ,"\u004c"),_effg (_daedg ._ecef ,"\u0052"),_effg (_daedg ._befb ,"\u0042"),_effg (_daedg ._bggdf ,"\u0054"));
};func (_gafe *wordBag )minDepth ()float64 {return _gafe ._cfed -(_gafe .Ury -_gafe ._febf )};func (_cbgba paraList )addNeighbours (){_bbeef :=func (_bcdbb []int ,_cbfg *textPara )([]*textPara ,[]*textPara ){_bgbg :=make ([]*textPara ,0,len (_bcdbb )-1);
_bdcf :=make ([]*textPara ,0,len (_bcdbb )-1);for _ ,_ddacb :=range _bcdbb {_cfafd :=_cbgba [_ddacb ];if _cfafd .Urx <=_cbfg .Llx {_bgbg =append (_bgbg ,_cfafd );}else if _cfafd .Llx >=_cbfg .Urx {_bdcf =append (_bdcf ,_cfafd );};};return _bgbg ,_bdcf ;
};_dfab :=func (_ccca []int ,_ceed *textPara )([]*textPara ,[]*textPara ){_bfgcb :=make ([]*textPara ,0,len (_ccca )-1);_ccfg :=make ([]*textPara ,0,len (_ccca )-1);for _ ,_eaab :=range _ccca {_ddfdb :=_cbgba [_eaab ];if _ddfdb .Ury <=_ceed .Lly {_ccfg =append (_ccfg ,_ddfdb );
}else if _ddfdb .Lly >=_ceed .Ury {_bfgcb =append (_bfgcb ,_ddfdb );};};return _bfgcb ,_ccfg ;};_bfbaa :=_cbgba .yNeighbours (_dbfd );for _ ,_deedcg :=range _cbgba {_aggcc :=_bfbaa [_deedcg ];if len (_aggcc )==0{continue ;};_eggea ,_ecbf :=_bbeef (_aggcc ,_deedcg );
if len (_eggea )==0&&len (_ecbf )==0{continue ;};if len (_eggea )> 0{_edbda :=_eggea [0];for _ ,_dbaed :=range _eggea [1:]{if _dbaed .Urx >=_edbda .Urx {_edbda =_dbaed ;};};for _ ,_gaacb :=range _eggea {if _gaacb !=_edbda &&_gaacb .Urx > _edbda .Llx {_edbda =nil ;
break ;};};if _edbda !=nil &&_dcaec (_deedcg .PdfRectangle ,_edbda .PdfRectangle ){_deedcg ._ddfac =_edbda ;};};if len (_ecbf )> 0{_eccab :=_ecbf [0];for _ ,_gbdfc :=range _ecbf [1:]{if _gbdfc .Llx <=_eccab .Llx {_eccab =_gbdfc ;};};for _ ,_cfebag :=range _ecbf {if _cfebag !=_eccab &&_cfebag .Llx < _eccab .Urx {_eccab =nil ;
break ;};};if _eccab !=nil &&_dcaec (_deedcg .PdfRectangle ,_eccab .PdfRectangle ){_deedcg ._eaec =_eccab ;};};};_bfbaa =_cbgba .xNeighbours (_degg );for _ ,_agae :=range _cbgba {_cgdcd :=_bfbaa [_agae ];if len (_cgdcd )==0{continue ;};_cgac ,_gadga :=_dfab (_cgdcd ,_agae );
if len (_cgac )==0&&len (_gadga )==0{continue ;};if len (_gadga )> 0{_bbfd :=_gadga [0];for _ ,_cecdf :=range _gadga [1:]{if _cecdf .Ury >=_bbfd .Ury {_bbfd =_cecdf ;};};for _ ,_fcag :=range _gadga {if _fcag !=_bbfd &&_fcag .Ury > _bbfd .Lly {_bbfd =nil ;
break ;};};if _bbfd !=nil &&_ddaed (_agae .PdfRectangle ,_bbfd .PdfRectangle ){_agae ._dbef =_bbfd ;};};if len (_cgac )> 0{_cdgf :=_cgac [0];for _ ,_fdeaf :=range _cgac [1:]{if _fdeaf .Lly <=_cdgf .Lly {_cdgf =_fdeaf ;};};for _ ,_bfea :=range _cgac {if _bfea !=_cdgf &&_bfea .Lly < _cdgf .Ury {_cdgf =nil ;
break ;};};if _cdgf !=nil &&_ddaed (_agae .PdfRectangle ,_cdgf .PdfRectangle ){_agae ._ddfd =_cdgf ;};};};for _ ,_gcege :=range _cbgba {if _gcege ._ddfac !=nil &&_gcege ._ddfac ._eaec !=_gcege {_gcege ._ddfac =nil ;};if _gcege ._ddfd !=nil &&_gcege ._ddfd ._dbef !=_gcege {_gcege ._ddfd =nil ;
};if _gcege ._eaec !=nil &&_gcege ._eaec ._ddfac !=_gcege {_gcege ._eaec =nil ;};if _gcege ._dbef !=nil &&_gcege ._dbef ._ddfd !=_gcege {_gcege ._dbef =nil ;};};};func (_afc pathSection )bbox ()_da .PdfRectangle {_eagg :=_afc ._fbg [0]._fgbe [0];_dfg :=_da .PdfRectangle {Llx :_eagg .X ,Urx :_eagg .X ,Lly :_eagg .Y ,Ury :_eagg .Y };
_adea :=func (_ffea _eg .Point ){if _ffea .X < _dfg .Llx {_dfg .Llx =_ffea .X ;}else if _ffea .X > _dfg .Urx {_dfg .Urx =_ffea .X ;};if _ffea .Y < _dfg .Lly {_dfg .Lly =_ffea .Y ;}else if _ffea .Y > _dfg .Ury {_dfg .Ury =_ffea .Y ;};};for _ ,_caeb :=range _afc ._fbg [0]._fgbe [1:]{_adea (_caeb );
};for _ ,_fgac :=range _afc ._fbg [1:]{for _ ,_ecfc :=range _fgac ._fgbe {_adea (_ecfc );};};return _dfg ;};const _eacb =20;func _ddaac (_dgee ,_gecb bounded )float64 {return _dgee .bbox ().Llx -_gecb .bbox ().Llx };type rulingList []*ruling ;func (_febbd *compositeCell )updateBBox (){for _ ,_ffgf :=range _febbd .paraList {_febbd .PdfRectangle =_cfga (_febbd .PdfRectangle ,_ffgf .PdfRectangle );
};};func (_geb *wordBag )text ()string {_agcd :=_geb .allWords ();_dacc :=make ([]string ,len (_agcd ));for _febg ,_gdcd :=range _agcd {_dacc [_febg ]=_gdcd ._ffbf ;};return _gb .Join (_dacc ,"\u0020");};func _bba (_bcgb ,_gdda _eg .Point ,_agce _b .Color )(*ruling ,bool ){_abfe :=lineRuling {_cdca :_bcgb ,_cdfa :_gdda ,_dacf :_acbdb (_bcgb ,_gdda ),Color :_agce };
if _abfe ._dacf ==_gada {return nil ,false ;};return _abfe .asRuling ();};func _bbbg (_dfgfc []pathSection )rulingList {_eacbd (_dfgfc );if _ageg {_c .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 (_dfgfc ));
};var _eddae rulingList ;for _ ,_bbde :=range _dfgfc {for _ ,_abed :=range _bbde ._fbg {if len (_abed ._fgbe )< 2{continue ;};_dacfe :=_abed ._fgbe [0];for _ ,_caba :=range _abed ._fgbe [1:]{if _dcge ,_deab :=_bba (_dacfe ,_caba ,_bbde .Color );_deab {_eddae =append (_eddae ,_dcge );
};_dacfe =_caba ;};};};if _ageg {_c .Log .Info ("m\u0061\u006b\u0065\u0053tr\u006fk\u0065\u0052\u0075\u006c\u0069n\u0067\u0073\u003a\u0020\u0025\u0073",_eddae );};return _eddae ;};func (_cffe paraList )sortReadingOrder (){_c .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 (_cffe ));
if len (_cffe )<=1{return ;};_cffe .computeEBBoxes ();_fa .Slice (_cffe ,func (_dbae ,_cfde int )bool {return _agbf (_cffe [_dbae ],_cffe [_cfde ])<=0});_cefe :=_cffe .topoOrder ();_cffe .reorder (_cefe );};func (_babb *textPara )toTextMarks (_gdbb *int )[]TextMark {if _babb ._aecg ==nil {return _babb .toCellTextMarks (_gdbb );
};var _dfgfg []TextMark ;for _afaf :=0;_afaf < _babb ._aecg ._cfgdb ;_afaf ++{for _fafg :=0;_fafg < _babb ._aecg ._ebcg ;_fafg ++{_efbc :=_babb ._aecg .get (_fafg ,_afaf );if _efbc ==nil {_dfgfg =_dcacc (_dfgfg ,_gdbb ,"\u0009");}else {_eddce :=_efbc .toCellTextMarks (_gdbb );
_dfgfg =append (_dfgfg ,_eddce ...);};_dfgfg =_dcacc (_dfgfg ,_gdbb ,"\u0020");};if _afaf < _babb ._aecg ._cfgdb -1{_dfgfg =_dcacc (_dfgfg ,_gdbb ,"\u000a");};};return _dfgfg ;};func _gcgd (_cdfeg map[int ][]float64 ){if len (_cdfeg )<=1{return ;};_bdaea :=_efbb (_cdfeg );
if _feg {_c .Log .Info ("\u0066i\u0078C\u0065\u006c\u006c\u0073\u003a \u006b\u0065y\u0073\u003d\u0025\u002b\u0076",_bdaea );};var _cfafc ,_bfecg int ;for _cfafc ,_bfecg =range _bdaea {if _cdfeg [_bfecg ]!=nil {break ;};};for _dcege ,_dadd :=range _bdaea [_cfafc :]{_gcde :=_cdfeg [_dadd ];
if _gcde ==nil {continue ;};if _feg {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u006b\u0030\u003d\u0025\u0064\u0020\u006b1\u003d\u0025\u0064\u000a",_cfafc +_dcege ,_bfecg ,_dadd );};_cabge :=_cdfeg [_dadd ];if _cabge [len (_cabge )-1]> _gcde [0]{_cabge [len (_cabge )-1]=_gcde [0];
_cdfeg [_bfecg ]=_cabge ;};_bfecg =_dadd ;};};const (_cgf =true ;_abgc =true ;_caa =true ;_ffdee =false ;_gfde =false ;_egae =6;_febgd =3.0;_effc =200;_degd =true ;_bdggf =true ;_eaag =true ;_cffca =true ;_degc =false ;);func (_gcd *textObject )setTextMatrix (_dca []float64 ){if len (_dca )!=6{_c .Log .Debug ("\u0045\u0052\u0052OR\u003a\u0020\u006c\u0065\u006e\u0028\u0066\u0029\u0020\u0021\u003d\u0020\u0036\u0020\u0028\u0025\u0064\u0029",len (_dca ));
return ;};_edc ,_gcg ,_daeg ,_cbga ,_dda ,_bef :=_dca [0],_dca [1],_dca [2],_dca [3],_dca [4],_dca [5];_gcd ._bcbc =_eg .NewMatrix (_edc ,_gcg ,_daeg ,_cbga ,_dda ,_bef );_gcd ._dbfc =_gcd ._bcbc ;};func (_gdag *subpath )makeRectRuling (_ccfb _b .Color )(*ruling ,bool ){if _gegd {_c .Log .Info ("\u006d\u0061\u006beR\u0065\u0063\u0074\u0052\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0070\u0061\u0074\u0068\u003d\u0025\u0076",_gdag );
};_cffcc :=_gdag ._fgbe [:4];_fefc :=make (map[int ]rulingKind ,len (_cffcc ));for _adee ,_faaa :=range _cffcc {_bgec :=_gdag ._fgbe [(_adee +1)%4];_fefc [_adee ]=_cgdc (_faaa ,_bgec );if _gegd {_a .Printf ("\u0025\u0034\u0064: \u0025\u0073\u0020\u003d\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u002d\u0020\u0025\u0036\u002e\u0032\u0066",_adee ,_fefc [_adee ],_faaa ,_bgec );
};};if _gegd {_a .Printf ("\u0020\u0020\u0020\u006b\u0069\u006e\u0064\u0073\u003d\u0025\u002b\u0076\u000a",_fefc );};var _dcab ,_gcbg []int ;for _bbdfe ,_gdfc :=range _fefc {switch _gdfc {case _bcdff :_gcbg =append (_gcbg ,_bbdfe );case _edecb :_dcab =append (_dcab ,_bbdfe );
};};if _gegd {_a .Printf ("\u0020\u0020 \u0068\u006f\u0072z\u0073\u003d\u0025\u0064\u0020\u0025\u002b\u0076\u000a",len (_gcbg ),_gcbg );_a .Printf ("\u0020\u0020 \u0076\u0065\u0072t\u0073\u003d\u0025\u0064\u0020\u0025\u002b\u0076\u000a",len (_dcab ),_dcab );
};_eabf :=(len (_gcbg )==2&&len (_dcab )==2)||(len (_gcbg )==2&&len (_dcab )==0&&_baeg (_cffcc [_gcbg [0]],_cffcc [_gcbg [1]]))||(len (_dcab )==2&&len (_gcbg )==0&&_cgeaf (_cffcc [_dcab [0]],_cffcc [_dcab [1]]));if _gegd {_a .Printf (" \u0020\u0020\u0068\u006f\u0072\u007as\u003d\u0025\u0064\u0020\u0076\u0065\u0072\u0074\u0073=\u0025\u0064\u0020o\u006b=\u0025\u0074\u000a",len (_gcbg ),len (_dcab ),_eabf );
};if !_eabf {if _gegd {_c .Log .Error ("\u0021!\u006d\u0061\u006b\u0065R\u0065\u0063\u0074\u0052\u0075l\u0069n\u0067:\u0020\u0070\u0061\u0074\u0068\u003d\u0025v",_gdag );_a .Printf (" \u0020\u0020\u0068\u006f\u0072\u007as\u003d\u0025\u0064\u0020\u0076\u0065\u0072\u0074\u0073=\u0025\u0064\u0020o\u006b=\u0025\u0074\u000a",len (_gcbg ),len (_dcab ),_eabf );
};return &ruling {},false ;};if len (_dcab )==0{for _dcgg ,_gfacg :=range _fefc {if _gfacg !=_bcdff {_dcab =append (_dcab ,_dcgg );};};};if len (_gcbg )==0{for _fcdag ,_gbgc :=range _fefc {if _gbgc !=_edecb {_gcbg =append (_gcbg ,_fcdag );};};};if _gegd {_c .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 (_gcbg ),len (_dcab ),len (_cffcc ),_gcbg ,_dcab ,_cffcc );
};var _ffbd ,_ffee ,_ggce ,_gagd _eg .Point ;if _cffcc [_gcbg [0]].Y > _cffcc [_gcbg [1]].Y {_ggce ,_gagd =_cffcc [_gcbg [0]],_cffcc [_gcbg [1]];}else {_ggce ,_gagd =_cffcc [_gcbg [1]],_cffcc [_gcbg [0]];};if _cffcc [_dcab [0]].X > _cffcc [_dcab [1]].X {_ffbd ,_ffee =_cffcc [_dcab [0]],_cffcc [_dcab [1]];
}else {_ffbd ,_ffee =_cffcc [_dcab [1]],_cffcc [_dcab [0]];};_agdc :=_da .PdfRectangle {Llx :_ffbd .X ,Urx :_ffee .X ,Lly :_gagd .Y ,Ury :_ggce .Y };if _agdc .Llx > _agdc .Urx {_agdc .Llx ,_agdc .Urx =_agdc .Urx ,_agdc .Llx ;};if _agdc .Lly > _agdc .Ury {_agdc .Lly ,_agdc .Ury =_agdc .Ury ,_agdc .Lly ;
};_agfb :=rectRuling {PdfRectangle :_agdc ,_dedf :_gffae (_agdc ),Color :_ccfb };if _agfb ._dedf ==_gada {if _gegd {_c .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 ;};_bbegg ,_eacff :=_agfb .asRuling ();if !_eacff {if _gegd {_c .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 _ageg {_a .Printf ("\u0020\u0020\u0020\u0072\u003d\u0025\u0073\u000a",_bbegg .String ());
};return _bbegg ,true ;};func (_gca *stateStack )size ()int {return len (*_gca )};func _ddaed (_fcd ,_fddgf _da .PdfRectangle )bool {return _fddgf .Llx <=_fcd .Urx &&_fcd .Llx <=_fddgf .Urx ;};func (_egegg *textTable )get (_eagdb ,_ecgb int )*textPara {return _egegg ._gdbg [_ggdcaf (_eagdb ,_ecgb )];
};type lineRuling struct{_dacf rulingKind ;_efcb markKind ;_b .Color ;_cdca ,_cdfa _eg .Point ;};
// Text returns the extracted page text.
func (_fefb PageText )Text ()string {return _fefb ._fdee };func (_fdaf *textTable )compositeRowCorridors ()map[int ][]float64 {_egfb :=make (map[int ][]float64 ,_fdaf ._cfgdb );if _feg {_c .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",_fdaf ._cfgdb );
};for _ecbaf :=1;_ecbaf < _fdaf ._cfgdb ;_ecbaf ++{var _aabe []compositeCell ;for _fdeb :=0;_fdeb < _fdaf ._ebcg ;_fdeb ++{if _bbgb ,_ddbf :=_fdaf ._efcd [_ggdcaf (_fdeb ,_ecbaf )];_ddbf {_aabe =append (_aabe ,_bbgb );};};if len (_aabe )==0{continue ;};
_ggaaf :=_adbge (_aabe );_egfb [_ecbaf ]=_ggaaf ;if _feg {_a .Printf ("\u0020\u0020\u0020\u0025\u0032\u0064\u003a\u0020\u00256\u002e\u0032\u0066\u000a",_ecbaf ,_ggaaf );};};return _egfb ;};func _dcfe (_eaged string )(string ,bool ){_cgaf :=[]rune (_eaged );
if len (_cgaf )!=1{return "",false ;};_efgfd ,_agda :=_dfce [_cgaf [0]];return _efgfd ,_agda ;};func _cffg (_fede ,_cdga bounded )float64 {return _caee (_fede )-_caee (_cdga )};func (_dafdd *textWord )computeText ()string {_babg :=make ([]string ,len (_dafdd ._cbebd ));
for _gaggd ,_ecgbb :=range _dafdd ._cbebd {_babg [_gaggd ]=_ecgbb ._fbag ;};return _gb .Join (_babg ,"");};
// Elements returns the TextMarks in `ma`.
func (_eae *TextMarkArray )Elements ()[]TextMark {return _eae ._acd };func (_acge *shapesState )drawRectangle (_cfc ,_aebb ,_cef ,_agd float64 ){if _badab {_eced :=_acge .devicePoint (_cfc ,_aebb );_ffda :=_acge .devicePoint (_cfc +_cef ,_aebb +_agd );
_gdec :=_da .PdfRectangle {Llx :_eced .X ,Lly :_eced .Y ,Urx :_ffda .X ,Ury :_ffda .Y };_c .Log .Info ("d\u0072a\u0077\u0052\u0065\u0063\u0074\u0061\u006e\u0067l\u0065\u003a\u0020\u00256.\u0032\u0066",_gdec );};_acge .newSubPath ();_acge .moveTo (_cfc ,_aebb );
_acge .lineTo (_cfc +_cef ,_aebb );_acge .lineTo (_cfc +_cef ,_aebb +_agd );_acge .lineTo (_cfc ,_aebb +_agd );_acge .closePath ();};func (_dgba *textTable )reduceTiling (_cgead gridTiling ,_fbbaa float64 )*textTable {_gadf :=make ([]int ,0,_dgba ._cfgdb );
_cgeff :=make ([]int ,0,_dgba ._ebcg );_cdcf :=_cgead ._fabc ;_bfefb :=_cgead ._cdgc ;for _ffce :=0;_ffce < _dgba ._cfgdb ;_ffce ++{_gcaec :=_ffce > 0&&_dc .Abs (_bfefb [_ffce -1]-_bfefb [_ffce ])< _fbbaa &&_dgba .emptyRow (_ffce );if !_gcaec {_gadf =append (_gadf ,_ffce );
};};for _dfcgf :=0;_dfcgf < _dgba ._ebcg ;_dfcgf ++{_efgf :=_dfcgf < _dgba ._ebcg -1&&_dc .Abs (_cdcf [_dfcgf +1]-_cdcf [_dfcgf ])< _fbbaa &&_dgba .emptyColumn (_dfcgf );if !_efgf {_cgeff =append (_cgeff ,_dfcgf );};};if len (_gadf )==_dgba ._cfgdb &&len (_cgeff )==_dgba ._ebcg {return _dgba ;
};_bdffa :=textTable {_fgece :_dgba ._fgece ,_ebcg :len (_cgeff ),_cfgdb :len (_gadf ),_efcd :make (map[uint64 ]compositeCell ,len (_cgeff )*len (_gadf ))};if _feg {_c .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",_dgba ._ebcg ,_dgba ._cfgdb ,len (_cgeff ),len (_gadf ));
_c .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0043\u006f\u006c\u0073\u003a\u0020\u0025\u002b\u0076",_cgeff );_c .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0052\u006f\u0077\u0073\u003a\u0020\u0025\u002b\u0076",_gadf );};for _fddfb ,_eaafa :=range _gadf {for _gfcbb ,_dcefb :=range _cgeff {_beafe ,_befa :=_dgba .getComposite (_dcefb ,_eaafa );
if len (_beafe )==0{continue ;};if _feg {_a .Printf ("\u0020 \u0025\u0032\u0064\u002c \u0025\u0032\u0064\u0020\u0028%\u0032d\u002c \u0025\u0032\u0064\u0029\u0020\u0025\u0071\n",_gfcbb ,_fddfb ,_dcefb ,_eaafa ,_aecc (_beafe .merge ().text (),50));};_bdffa .putComposite (_gfcbb ,_fddfb ,_beafe ,_befa );
};};return &_bdffa ;};func (_deea *wordBag )empty (_bgaa int )bool {_ ,_bfgba :=_deea ._edag [_bgaa ];return !_bfgba };func _dcacc (_dbbgb []TextMark ,_acbc *int ,_dafg string )[]TextMark {_dcda :=_fefg ;_dcda .Text =_dafg ;return _eaef (_dbbgb ,_acbc ,_dcda );
};func (_edfb *textObject )moveLP (_gec ,_dgbg float64 ){_edfb ._dbfc .Concat (_eg .NewMatrix (1,0,0,1,_gec ,_dgbg ));_edfb ._bcbc =_edfb ._dbfc ;};func _aefdg (_fafecg []*textMark ,_addfc _da .PdfRectangle )[]*textWord {var _ebcad []*textWord ;var _ddeb *textWord ;
if _aebgc {_c .Log .Info ("\u006d\u0061\u006beT\u0065\u0078\u0074\u0057\u006f\u0072\u0064\u0073\u003a\u0020\u0025\u0064\u0020\u006d\u0061\u0072\u006b\u0073",len (_fafecg ));};_gfbd :=func (){if _ddeb !=nil {_abdae :=_ddeb .computeText ();if !_fdbc (_abdae ){_ddeb ._ffbf =_abdae ;
_ebcad =append (_ebcad ,_ddeb );if _aebgc {_c .Log .Info ("\u0061\u0064\u0064Ne\u0077\u0057\u006f\u0072\u0064\u003a\u0020\u0025\u0064\u003a\u0020\u0077\u006f\u0072\u0064\u003d\u0025\u0073",len (_ebcad )-1,_ddeb .String ());for _gabacb ,_afee :=range _ddeb ._cbebd {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_gabacb ,_afee .String ());
};};};_ddeb =nil ;};};for _ ,_gfbac :=range _fafecg {if _caa &&_ddeb !=nil &&len (_ddeb ._cbebd )> 0{_cabde :=_ddeb ._cbebd [len (_ddeb ._cbebd )-1];_ebcd ,_cgdda :=_dcfe (_gfbac ._fbag );_agdf ,_beee :=_dcfe (_cabde ._fbag );if _cgdda &&!_beee &&_cabde .inDiacriticArea (_gfbac ){_ddeb .addDiacritic (_ebcd );
continue ;};if _beee &&!_cgdda &&_gfbac .inDiacriticArea (_cabde ){_ddeb ._cbebd =_ddeb ._cbebd [:len (_ddeb ._cbebd )-1];_ddeb .appendMark (_gfbac ,_addfc );_ddeb .addDiacritic (_agdf );continue ;};};_ffgg :=_fdbc (_gfbac ._fbag );if _ffgg {_gfbd ();continue ;
};if _ddeb ==nil &&!_ffgg {_ddeb =_cabddb ([]*textMark {_gfbac },_addfc );continue ;};_fefbc :=_ddeb ._deadf ;_caca :=_dc .Abs (_abfgd (_addfc ,_gfbac )-_ddeb ._bgeca )/_fefbc ;_fdccgc :=_dbda (_gfbac ,_ddeb )/_fefbc ;if _fdccgc >=_ecfd ||!(-_cfge <=_fdccgc &&_caca <=_gfba ){_gfbd ();
_ddeb =_cabddb ([]*textMark {_gfbac },_addfc );continue ;};_ddeb .appendMark (_gfbac ,_addfc );};_gfbd ();return _ebcad ;};func (_dgdgg *textLine )markWordBoundaries (){_caad :=_egef *_dgdgg ._fcda ;for _bdff ,_bbcb :=range _dgdgg ._efbd [1:]{if _dbda (_bbcb ,_dgdgg ._efbd [_bdff ])>=_caad {_bbcb ._eagda =true ;
};};};type textMark struct{_da .PdfRectangle ;_adfa int ;_fbag string ;_bafe string ;_fbbc *_da .PdfFont ;_ffbb float64 ;_fgaf float64 ;_cabbd _eg .Matrix ;_dgfe _eg .Point ;_ddcg _da .PdfRectangle ;_ebbg _b .Color ;_bbeg _b .Color ;};func _ccgc (_ccece *PageText )error {_afbe :=_ffb .GetLicenseKey ();
if _afbe !=nil &&_afbe .IsLicensed ()||_ad {return nil ;};_a .Printf ("\u0055\u006e\u006c\u0069\u0063\u0065\u006e\u0073\u0065\u0064\u0020c\u006f\u0070\u0079\u0020\u006f\u0066\u0020\u0055\u006e\u0069P\u0044\u0046\u000a");_a .Println ("-\u0020\u0047\u0065\u0074\u0020\u0061\u0020\u0066\u0072e\u0065\u0020\u0074\u0072\u0069\u0061\u006c l\u0069\u0063\u0065\u006es\u0065\u0020\u006f\u006e\u0020\u0068\u0074\u0074\u0070s:\u002f\u002fu\u006e\u0069\u0064\u006f\u0063\u002e\u0069\u006f");
return _d .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 (_cdfac *textTable )markCells (){for _ddac :=0;_ddac < _cdfac ._cfgdb ;_ddac ++{for _acfe :=0;
_acfe < _cdfac ._ebcg ;_acfe ++{_afgae :=_cdfac .get (_acfe ,_ddac );if _afgae !=nil {_afgae ._cbgaa =true ;};};};};func _ecfae (_ecedbd ,_ebag _eg .Point )bool {return _ecedbd .X ==_ebag .X &&_ecedbd .Y ==_ebag .Y };func (_adfg *textTable )toTextTable ()TextTable {if _feg {_c .Log .Info ("t\u006fT\u0065\u0078\u0074\u0054\u0061\u0062\u006c\u0065:\u0020\u0025\u0064\u0020x \u0025\u0064",_adfg ._ebcg ,_adfg ._cfgdb );
};_fggd :=make ([][]TableCell ,_adfg ._cfgdb );for _bdbc :=0;_bdbc < _adfg ._cfgdb ;_bdbc ++{_fggd [_bdbc ]=make ([]TableCell ,_adfg ._ebcg );for _gaef :=0;_gaef < _adfg ._ebcg ;_gaef ++{_faaf :=_adfg .get (_gaef ,_bdbc );if _faaf ==nil {continue ;};if _feg {_a .Printf ("\u0025\u0034\u0064 \u0025\u0032\u0064\u003a\u0020\u0025\u0073\u000a",_gaef ,_bdbc ,_faaf );
};_fggd [_bdbc ][_gaef ].Text =_faaf .text ();_gceb :=0;_fggd [_bdbc ][_gaef ].Marks ._acd =_faaf .toTextMarks (&_gceb );};};return TextTable {W :_adfg ._ebcg ,H :_adfg ._cfgdb ,Cells :_fggd };};func (_cdag *textTable )emptyRow (_bebc int )bool {for _cdbg :=0;
_cdbg < _cdag ._ebcg ;_cdbg ++{_ggfg :=_cdag .get (_cdbg ,_bebc );if _ggfg !=nil &&_ggfg .text ()!=""{return false ;};};return true ;};func (_bfgdd *textTable )logComposite (_ebbe string ){if !_feg {return ;};_c .Log .Info ("\u007e~\u007eP\u0061\u0072\u0061\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0073",_bfgdd ._ebcg ,_bfgdd ._cfgdb ,_ebbe );
_a .Printf ("\u0025\u0035\u0073 \u007c","");for _aeegf :=0;_aeegf < _bfgdd ._ebcg ;_aeegf ++{_a .Printf ("\u0025\u0033\u0064 \u007c",_aeegf );};_a .Println ("");_a .Printf ("\u0025\u0035\u0073 \u002b","");for _gfab :=0;_gfab < _bfgdd ._ebcg ;_gfab ++{_a .Printf ("\u0025\u0033\u0073 \u002b","\u002d\u002d\u002d");
};_a .Println ("");for _fgead :=0;_fgead < _bfgdd ._cfgdb ;_fgead ++{_a .Printf ("\u0025\u0035\u0064 \u007c",_fgead );for _dfef :=0;_dfef < _bfgdd ._ebcg ;_dfef ++{_ccda ,_ :=_bfgdd ._efcd [_ggdcaf (_dfef ,_fgead )].parasBBox ();_a .Printf ("\u0025\u0033\u0064 \u007c",len (_ccda ));
};_a .Println ("");};_c .Log .Info ("\u007e~\u007eT\u0065\u0078\u0074\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0073",_bfgdd ._ebcg ,_bfgdd ._cfgdb ,_ebbe );_a .Printf ("\u0025\u0035\u0073 \u007c","");for _cebd :=0;_cebd < _bfgdd ._ebcg ;_cebd ++{_a .Printf ("\u0025\u0031\u0032\u0064\u0020\u007c",_cebd );
};_a .Println ("");_a .Printf ("\u0025\u0035\u0073 \u002b","");for _bfda :=0;_bfda < _bfgdd ._ebcg ;_bfda ++{_a .Print ("\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d-\u002d\u002d\u002d\u002b");};_a .Println ("");for _dgabgg :=0;_dgabgg < _bfgdd ._cfgdb ;
_dgabgg ++{_a .Printf ("\u0025\u0035\u0064 \u007c",_dgabgg );for _bbdc :=0;_bbdc < _bfgdd ._ebcg ;_bbdc ++{_cddf ,_ :=_bfgdd ._efcd [_ggdcaf (_bbdc ,_dgabgg )].parasBBox ();_dffcff :="";_ffdfd :=_cddf .merge ();if _ffdfd !=nil {_dffcff =_ffdfd .text ();
};_dffcff =_a .Sprintf ("\u0025\u0071",_aecc (_dffcff ,12));_dffcff =_dffcff [1:len (_dffcff )-1];_a .Printf ("\u0025\u0031\u0032\u0073\u0020\u007c",_dffcff );};_a .Println ("");};};func _cgdg (_gcag []_ca .PdfObject )(_aabab ,_adga float64 ,_aadb error ){if len (_gcag )!=2{return 0,0,_a .Errorf ("\u0069\u006e\u0076\u0061l\u0069\u0064\u0020\u006e\u0075\u006d\u0062\u0065\u0072\u0020o\u0066 \u0070\u0061\u0072\u0061\u006d\u0073\u003a \u0025\u0064",len (_gcag ));
};_dcccd ,_aadb :=_ca .GetNumbersAsFloat (_gcag );if _aadb !=nil {return 0,0,_aadb ;};return _dcccd [0],_dcccd [1],nil ;};func (_ddae *subpath )add (_cfdf ..._eg .Point ){_ddae ._fgbe =append (_ddae ._fgbe ,_cfdf ...)};func (_gdaf paraList )toTextMarks ()[]TextMark {_ggga :=0;
var _adgc []TextMark ;for _ccdd ,_cded :=range _gdaf {if _cded ._eaeb {continue ;};_bdea :=_cded .toTextMarks (&_ggga );_adgc =append (_adgc ,_bdea ...);if _ccdd !=len (_gdaf )-1{if _cdge (_cded ,_gdaf [_ccdd +1]){_adgc =_dcacc (_adgc ,&_ggga ,"\u0020");
}else {_adgc =_dcacc (_adgc ,&_ggga ,"\u000a");_adgc =_dcacc (_adgc ,&_ggga ,"\u000a");};};};_adgc =_dcacc (_adgc ,&_ggga ,"\u000a");_adgc =_dcacc (_adgc ,&_ggga ,"\u000a");return _adgc ;};func (_bbegb *wordBag )arrangeText ()*textPara {_bbegb .sort ();
if _abgc {_bbegb .removeDuplicates ();};var _bge []*textLine ;for _ ,_gcfd :=range _bbegb .depthIndexes (){for !_bbegb .empty (_gcfd ){_bcbf :=_bbegb .firstReadingIndex (_gcfd );_adda :=_bbegb .firstWord (_bcbf );_ebfa :=_fbca (_bbegb ,_bcbf );_cdafb :=_adda ._deadf ;
_cfeaa :=_adda ._bgeca -_cbef *_cdafb ;_bcfa :=_adda ._bgeca +_cbef *_cdafb ;_aafg :=_fafd *_cdafb ;_adbc :=_eafe *_cdafb ;_agfdf :for {var _cccc *textWord ;_aadc :=0;for _ ,_fafb :=range _bbegb .depthBand (_cfeaa ,_bcfa ){_dafd :=_bbegb .highestWord (_fafb ,_cfeaa ,_bcfa );
if _dafd ==nil {continue ;};_cbgdb :=_dbda (_dafd ,_ebfa ._efbd [len (_ebfa ._efbd )-1]);if _cbgdb < -_adbc {break _agfdf ;};if _cbgdb > _aafg {continue ;};if _cccc !=nil &&_ddaac (_dafd ,_cccc )>=0{continue ;};_cccc =_dafd ;_aadc =_fafb ;};if _cccc ==nil {break ;
};_ebfa .pullWord (_bbegb ,_cccc ,_aadc );};_ebfa .markWordBoundaries ();_bge =append (_bge ,_ebfa );};};if len (_bge )==0{return nil ;};_fa .Slice (_bge ,func (_beg ,_dgad int )bool {return _agbf (_bge [_beg ],_bge [_dgad ])< 0});_fcge :=_bdcd (_bbegb .PdfRectangle ,_bge );
if _gbbd {_c .Log .Info ("\u0061\u0072\u0072an\u0067\u0065\u0054\u0065\u0078\u0074\u0020\u0021\u0021\u0021\u0020\u0070\u0061\u0072\u0061\u003d\u0025\u0073",_fcge .String ());if _dfde {for _gaeb ,_gefc :=range _fcge ._fbge {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_gaeb ,_gefc .String ());
if _dcga {for _facg ,_faed :=range _gefc ._efbd {_a .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_facg ,_faed .String ());for _cdac ,_dcaf :=range _faed ._cbebd {_a .Printf ("\u00251\u0032\u0064\u003a\u0020\u0025\u0073\n",_cdac ,_dcaf .String ());
};};};};};};return _fcge ;};
// Append appends `mark` to the mark array.
func (_bcdb *TextMarkArray )Append (mark TextMark ){_bcdb ._acd =append (_bcdb ._acd ,mark )};
// 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 (_edb *Extractor )ExtractPageText ()(*PageText ,int ,int ,error ){_eba ,_feda ,_ceg ,_cegf :=_edb .extractPageText (_edb ._bc ,_edb ._bg ,_eg .IdentityMatrix (),0);if _cegf !=nil {return nil ,0,0,_cegf ;};_eba .computeViews ();_cegf =_ccgc (_eba );
if _cegf !=nil {return nil ,0,0,_cegf ;};return _eba ,_feda ,_ceg ,nil ;};func (_bbdff intSet )has (_eagea int )bool {_ ,_fffc :=_bbdff [_eagea ];return _fffc };func (_ecgf rulingList )primaries ()[]float64 {_agad :=make (map[float64 ]struct{},len (_ecgf ));
for _ ,_cbaff :=range _ecgf {_agad [_cbaff ._gace ]=struct{}{};};_bcgf :=make ([]float64 ,len (_agad ));_ebca :=0;for _gbdf :=range _agad {_bcgf [_ebca ]=_gbdf ;_ebca ++;};_fa .Float64s (_bcgf );return _bcgf ;};
// 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 (_ef *Extractor )ExtractPageImages (options *ImageExtractOptions )(*PageImages ,error ){_fgb :=&imageExtractContext {_dd :options };_efg :=_fgb .extractContentStreamImages (_ef ._bc ,_ef ._bg );if _efg !=nil {return nil ,_efg ;};return &PageImages {Images :_fgb ._cf },nil ;
};
// String returns a human readable description of `vecs`.
func (_acfa rulingList )String ()string {if len (_acfa )==0{return "\u007b \u0045\u004d\u0050\u0054\u0059\u0020}";};_fffg ,_ggcba :=_acfa .vertsHorzs ();_dcaed :=len (_fffg );_baggc :=len (_ggcba );if _dcaed ==0||_baggc ==0{return _a .Sprintf ("\u007b%\u0064\u0020\u0078\u0020\u0025\u0064}",_dcaed ,_baggc );
};_ceaf :=_da .PdfRectangle {Llx :_fffg [0]._gace ,Urx :_fffg [_dcaed -1]._gace ,Lly :_ggcba [_baggc -1]._gace ,Ury :_ggcba [0]._gace };return _a .Sprintf ("\u007b\u0025d\u0020\u0078\u0020%\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u007d",_dcaed ,_baggc ,_ceaf );
};func _acbdb (_aacdg ,_ebgfe _eg .Point )rulingKind {_gecf :=_dc .Abs (_aacdg .X -_ebgfe .X );_eecd :=_dc .Abs (_aacdg .Y -_ebgfe .Y );return _bfdfd (_gecf ,_eecd ,_cabb );};func _gbgcd (_cfaa float64 )bool {return _dc .Abs (_cfaa )< _dgaaa };func _agaf (_ggfgc ,_fbfd int )int {if _ggfgc < _fbfd {return _ggfgc ;
};return _fbfd ;};func (_bbfb *textObject )getStrokeColor ()_b .Color {return _bfcdc (_bbfb ._ece .ColorspaceStroking ,_bbfb ._ece .ColorStroking );};func (_dfea *textObject )setWordSpacing (_cfa float64 ){if _dfea ==nil {return ;};_dfea ._ecbd ._fgf =_cfa ;
};
// 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 (_aad PageText )ToText ()string {return _aad .Text ()};type rulingKind int ;func (_ceag *subpath )close (){if !_ecfae (_ceag ._fgbe [0],_ceag .last ()){_ceag .add (_ceag ._fgbe [0]);};_ceag ._bdbe =true ;_ceag .removeDuplicates ();};type textPara struct{_da .PdfRectangle ;
_ebbd _da .PdfRectangle ;_fbge []*textLine ;_aecg *textTable ;_cbgaa bool ;_eaeb bool ;_ddfac *textPara ;_eaec *textPara ;_ddfd *textPara ;_dbef *textPara ;};func (_edfg *textLine )toTextMarks (_dfaa *int )[]TextMark {var _geea []TextMark ;for _ ,_cedeb :=range _edfg ._efbd {if _cedeb ._eagda {_geea =_dcacc (_geea ,_dfaa ,"\u0020");
};_gfaf :=_cedeb .toTextMarks (_dfaa );_geea =append (_geea ,_gfaf ...);};return _geea ;};
// TableCell is a cell in a TextTable.
type TableCell struct{
// Text is the extracted text.
Text string ;
// Marks returns the TextMarks corresponding to the text in Text.
Marks TextMarkArray ;};func (_aaga *textTable )log (_abdg string ){if !_feg {return ;};_c .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",_abdg ,_aaga ._ebcg ,_aaga ._cfgdb ,_aaga ._fgece ,_aaga .PdfRectangle );
for _abeb :=0;_abeb < _aaga ._cfgdb ;_abeb ++{for _bcdbf :=0;_bcdbf < _aaga ._ebcg ;_bcdbf ++{_bgag :=_aaga .get (_bcdbf ,_abeb );if _bgag ==nil {continue ;};_a .Printf ("%\u0034\u0064\u0020\u00252d\u003a \u0025\u0036\u002e\u0032\u0066 \u0025\u0071\u0020\u0025\u0064\u000a",_bcdbf ,_abeb ,_bgag .PdfRectangle ,_aecc (_bgag .text (),50),_f .RuneCountInString (_bgag .text ()));
};};};
// 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 ;};func (_afad paraList )llyRange (_ccgd []int ,_bgba ,_gabf float64 )[]int {_dfbg :=len (_afad );if _gabf < _afad [_ccgd [0]].Lly ||_bgba > _afad [_ccgd [_dfbg -1]].Lly {return nil ;};_bcabd :=_fa .Search (_dfbg ,func (_fadcg int )bool {return _afad [_ccgd [_fadcg ]].Lly >=_bgba });
_dgab :=_fa .Search (_dfbg ,func (_cba int )bool {return _afad [_ccgd [_cba ]].Lly > _gabf });return _ccgd [_bcabd :_dgab ];};type shapesState struct{_bac _eg .Matrix ;_adce _eg .Matrix ;_aebg []*subpath ;_febcd bool ;_bbd _eg .Point ;_aedg *textObject ;
};
// String returns a description of `t`.
func (_eadb *textTable )String ()string {return _a .Sprintf ("\u0025\u0064\u0020\u0078\u0020\u0025\u0064\u0020\u0025\u0074",_eadb ._ebcg ,_eadb ._cfgdb ,_eadb ._fgece );};func _ccec (_cged ,_addf _da .PdfRectangle )(_da .PdfRectangle ,bool ){if !_fdeg (_cged ,_addf ){return _da .PdfRectangle {},false ;
};return _da .PdfRectangle {Llx :_dc .Max (_cged .Llx ,_addf .Llx ),Urx :_dc .Min (_cged .Urx ,_addf .Urx ),Lly :_dc .Max (_cged .Lly ,_addf .Lly ),Ury :_dc .Min (_cged .Ury ,_addf .Ury )},true ;};func _efbb (_ggddc map[int ][]float64 )[]int {_gcegd :=make ([]int ,len (_ggddc ));
_cfdce :=0;for _efea :=range _ggddc {_gcegd [_cfdce ]=_efea ;_cfdce ++;};_fa .Ints (_gcegd );return _gcegd ;};func _fceg (_deaeg map[float64 ]map[float64 ]gridTile )[]float64 {_feaeg :=make ([]float64 ,0,len (_deaeg ));for _aeegd :=range _deaeg {_feaeg =append (_feaeg ,_aeegd );
};_fa .Float64s (_feaeg );_cdad :=len (_feaeg );for _ddaeg :=0;_ddaeg < _cdad /2;_ddaeg ++{_feaeg [_ddaeg ],_feaeg [_cdad -1-_ddaeg ]=_feaeg [_cdad -1-_ddaeg ],_feaeg [_ddaeg ];};return _feaeg ;};
// String returns a description of `p`.
func (_ecgd *textPara )String ()string {if _ecgd ._eaeb {return _a .Sprintf ("\u0025\u0036\u002e\u0032\u0066\u0020\u005b\u0045\u004d\u0050\u0054\u0059\u005d",_ecgd .PdfRectangle );};_deedc :="";if _ecgd ._aecg !=nil {_deedc =_a .Sprintf ("\u005b\u0025\u0064\u0078\u0025\u0064\u005d\u0020",_ecgd ._aecg ._ebcg ,_ecgd ._aecg ._cfgdb );
};return _a .Sprintf ("\u0025\u0036\u002e\u0032f \u0025\u0073\u0025\u0064\u0020\u006c\u0069\u006e\u0065\u0073\u0020\u0025\u0071",_ecgd .PdfRectangle ,_deedc ,len (_ecgd ._fbge ),_aecc (_ecgd .text (),50));};func (_aafc *wordBag )sort (){for _ ,_bcea :=range _aafc ._edag {_fa .Slice (_bcea ,func (_dbbc ,_eff int )bool {return _ddaac (_bcea [_dbbc ],_bcea [_eff ])< 0});
};};func (_dggff paraList )yNeighbours (_gfbc float64 )map[*textPara ][]int {_dage :=make ([]event ,2*len (_dggff ));if _gfbc ==0{for _dbdcb ,_gcdd :=range _dggff {_dage [2*_dbdcb ]=event {_gcdd .Lly ,true ,_dbdcb };_dage [2*_dbdcb +1]=event {_gcdd .Ury ,false ,_dbdcb };
};}else {for _agfgg ,_egdbc :=range _dggff {_dage [2*_agfgg ]=event {_egdbc .Lly -_gfbc *_egdbc .fontsize (),true ,_agfgg };_dage [2*_agfgg +1]=event {_egdbc .Ury +_gfbc *_egdbc .fontsize (),false ,_agfgg };};};return _dggff .eventNeighbours (_dage );};
type gridTile struct{_da .PdfRectangle ;_bggdf ,_degfg ,_befb ,_ecef bool ;};func _cgdc (_bddegc ,_dffc _eg .Point )rulingKind {_gedg :=_dc .Abs (_bddegc .X -_dffc .X );_bbdfc :=_dc .Abs (_bddegc .Y -_dffc .Y );return _bfdfd (_gedg ,_bbdfc ,_dbc );};func (_cffa *textObject )setFont (_bae string ,_fabg float64 )error {if _cffa ==nil {return nil ;
};_cffa ._ecbd ._bea =_fabg ;_bfaa ,_cfe :=_cffa .getFont (_bae );if _cfe !=nil {return _cfe ;};_cffa ._ecbd ._gfga =_bfaa ;return nil ;};func (_abae rulingList )augmentGrid ()(rulingList ,rulingList ){_gfcbg ,_abfb :=_abae .vertsHorzs ();if len (_gfcbg )==0||len (_abfb )==0{return _gfcbg ,_abfb ;
};_gcfdc ,_egggd :=_gfcbg ,_abfb ;_bggd :=_gfcbg .bbox ();_eaebe :=_abfb .bbox ();if _ageg {_c .Log .Info ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0047\u0072\u0069\u0064\u003a\u0020b\u0062\u006f\u0078\u0056\u003d\u0025\u0036\u002e\u0032\u0066",_bggd );
_c .Log .Info ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0047\u0072\u0069\u0064\u003a\u0020b\u0062\u006f\u0078\u0048\u003d\u0025\u0036\u002e\u0032\u0066",_eaebe );};var _ebga ,_dggc ,_bfba ,_dcbef *ruling ;if _eaebe .Llx < _bggd .Llx -_fcaff {_ebga =&ruling {_gcacd :_cbdd ,_bfce :_edecb ,_gace :_eaebe .Llx ,_cfeee :_bggd .Lly ,_fdfa :_bggd .Ury };
_gfcbg =append (rulingList {_ebga },_gfcbg ...);};if _eaebe .Urx > _bggd .Urx +_fcaff {_dggc =&ruling {_gcacd :_cbdd ,_bfce :_edecb ,_gace :_eaebe .Urx ,_cfeee :_bggd .Lly ,_fdfa :_bggd .Ury };_gfcbg =append (_gfcbg ,_dggc );};if _bggd .Lly < _eaebe .Lly -_fcaff {_bfba =&ruling {_gcacd :_cbdd ,_bfce :_bcdff ,_gace :_bggd .Lly ,_cfeee :_eaebe .Llx ,_fdfa :_eaebe .Urx };
_abfb =append (rulingList {_bfba },_abfb ...);};if _bggd .Ury > _eaebe .Ury +_fcaff {_dcbef =&ruling {_gcacd :_cbdd ,_bfce :_bcdff ,_gace :_bggd .Ury ,_cfeee :_eaebe .Llx ,_fdfa :_eaebe .Urx };_abfb =append (_abfb ,_dcbef );};if len (_gfcbg )+len (_abfb )==len (_abae ){return _gcfdc ,_egggd ;
};_cgfe :=append (_gfcbg ,_abfb ...);_abae .log ("u\u006e\u0061\u0075\u0067\u006d\u0065\u006e\u0074\u0065\u0064");_cgfe .log ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0065d");return _gfcbg ,_abfb ;};func (_dbcg *wordBag )removeDuplicates (){if _bgac {_c .Log .Info ("r\u0065m\u006f\u0076\u0065\u0044\u0075\u0070\u006c\u0069c\u0061\u0074\u0065\u0073: \u0025\u0071",_dbcg .text ());
};for _ ,_dgbd :=range _dbcg .depthIndexes (){if len (_dbcg ._edag [_dgbd ])==0{continue ;};_bgfe :=_dbcg ._edag [_dgbd ][0];_daae :=_ceac *_bgfe ._deadf ;_eagfb :=_bgfe ._bgeca ;for _ ,_gbff :=range _dbcg .depthBand (_eagfb ,_eagfb +_daae ){_ecdg :=map[*textWord ]struct{}{};
_cedc :=_dbcg ._edag [_gbff ];for _ ,_eafc :=range _cedc {if _ ,_fbcb :=_ecdg [_eafc ];_fbcb {continue ;};for _ ,_gegc :=range _cedc {if _ ,_bede :=_ecdg [_gegc ];_bede {continue ;};if _gegc !=_eafc &&_gegc ._ffbf ==_eafc ._ffbf &&_dc .Abs (_gegc .Llx -_eafc .Llx )< _daae &&_dc .Abs (_gegc .Urx -_eafc .Urx )< _daae &&_dc .Abs (_gegc .Lly -_eafc .Lly )< _daae &&_dc .Abs (_gegc .Ury -_eafc .Ury )< _daae {_ecdg [_gegc ]=struct{}{};
};};};if len (_ecdg )> 0{_efce :=0;for _ ,_baeed :=range _cedc {if _ ,_cgcg :=_ecdg [_baeed ];!_cgcg {_cedc [_efce ]=_baeed ;_efce ++;};};_dbcg ._edag [_gbff ]=_cedc [:len (_cedc )-len (_ecdg )];if len (_dbcg ._edag [_gbff ])==0{delete (_dbcg ._edag ,_gbff );
};};};};};func (_cgbcb rulingList )blocks (_becfe ,_fdec *ruling )bool {if _becfe ._cfeee > _fdec ._fdfa ||_fdec ._cfeee > _becfe ._fdfa {return false ;};_dgcc :=_dc .Max (_becfe ._cfeee ,_fdec ._cfeee );_faaaf :=_dc .Min (_becfe ._fdfa ,_fdec ._fdfa );
if _becfe ._gace > _fdec ._gace {_becfe ,_fdec =_fdec ,_becfe ;};for _ ,_ffgc :=range _cgbcb {if _becfe ._gace <=_ffgc ._gace +_dgaaa &&_ffgc ._gace <=_fdec ._gace +_dgaaa &&_ffgc ._cfeee <=_faaaf &&_dgcc <=_ffgc ._fdfa {return true ;};};return false ;
};
// Len returns the number of TextMarks in `ma`.
func (_dbfb *TextMarkArray )Len ()int {if _dbfb ==nil {return 0;};return len (_dbfb ._acd );};func _aeagb (_aaec float64 )float64 {return _gaaf *_dc .Round (_aaec /_gaaf )};var _afadbc =_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 (_gddg *textTable )subdivide ()*textTable {_gddg .logComposite ("\u0073u\u0062\u0064\u0069\u0076\u0069\u0064e");_dceg :=_gddg .compositeRowCorridors ();_fgeef :=_gddg .compositeColCorridors ();if _feg {_c .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",_aacgc (_dceg ),_aacgc (_fgeef ));
};if len (_dceg )==0||len (_fgeef )==0{return _gddg ;};_gcgd (_dceg );_gcgd (_fgeef );if _feg {_c .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",_aacgc (_dceg ),_aacgc (_fgeef ));
};_gega ,_aabc :=_cddge (_gddg ._cfgdb ,_dceg );_gecce ,_agcg :=_cddge (_gddg ._ebcg ,_fgeef );_edagad :=make (map[uint64 ]*textPara ,_agcg *_aabc );_dccc :=&textTable {PdfRectangle :_gddg .PdfRectangle ,_fgece :_gddg ._fgece ,_cfgdb :_aabc ,_ebcg :_agcg ,_gdbg :_edagad };
if _feg {_c .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",_gddg ._ebcg ,_gddg ._cfgdb ,_agcg ,_aabc ,_aacgc (_dceg ),_aacgc (_fgeef ),_gega ,_gecce );
};for _bdadb :=0;_bdadb < _gddg ._cfgdb ;_bdadb ++{_ebba :=_gega [_bdadb ];for _cfad :=0;_cfad < _gddg ._ebcg ;_cfad ++{_addfe :=_gecce [_cfad ];if _feg {_a .Printf ("\u0025\u0036\u0064\u002c %\u0032\u0064\u003a\u0020\u0078\u0030\u003d\u0025\u0064\u0020\u0079\u0030\u003d\u0025d\u000a",_cfad ,_bdadb ,_addfe ,_ebba );
};_acag ,_ebdcg :=_gddg ._efcd [_ggdcaf (_cfad ,_bdadb )];if !_ebdcg {continue ;};_eceef :=_acag .split (_dceg [_bdadb ],_fgeef [_cfad ]);for _eedb :=0;_eedb < _eceef ._cfgdb ;_eedb ++{for _ddgga :=0;_ddgga < _eceef ._ebcg ;_ddgga ++{_bbbfc :=_eceef .get (_ddgga ,_eedb );
_dccc .put (_addfe +_ddgga ,_ebba +_eedb ,_bbbfc );if _feg {_a .Printf ("\u0025\u0038\u0064\u002c\u0020\u0025\u0032\u0064\u003a\u0020\u0025\u0073\u000a",_addfe +_ddgga ,_ebba +_eedb ,_bbbfc );};};};};};return _dccc ;};func (_ccde *textObject )moveTextSetLeading (_dgb ,_abea float64 ){_ccde ._ecbd ._bee =-_abea ;
_ccde .moveLP (_dgb ,_abea );};func (_bfeg paraList )merge ()*textPara {_c .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 (_bfeg ));
if len (_bfeg )==0{return nil ;};_bfeg .sortReadingOrder ();_fgaae :=_bfeg [0].PdfRectangle ;_agfd :=_bfeg [0]._fbge ;for _ ,_dfbc :=range _bfeg [1:]{_fgaae =_cfga (_fgaae ,_dfbc .PdfRectangle );_agfd =append (_agfd ,_dfbc ._fbge ...);};return _bdcd (_fgaae ,_agfd );
};func _dcaec (_bdde ,_aead _da .PdfRectangle )bool {return _bdde .Lly <=_aead .Ury &&_aead .Lly <=_bdde .Ury ;};func (_eafd *textWord )toTextMarks (_bgdd *int )[]TextMark {var _gedgb []TextMark ;for _ ,_ggebe :=range _eafd ._cbebd {_gedgb =_eaef (_gedgb ,_bgdd ,_ggebe .ToTextMark ());
};return _gedgb ;};func _bgcf (_eddd _da .PdfRectangle )*ruling {return &ruling {_bfce :_edecb ,_gace :_eddd .Urx ,_cfeee :_eddd .Lly ,_fdfa :_eddd .Ury };};func _gffae (_ffeee _da .PdfRectangle )rulingKind {_aeaef :=_ffeee .Width ();_cfdd :=_ffeee .Height ();
if _aeaef > _cfdd {if _aeaef >=_cabb {return _bcdff ;};}else {if _cfdd >=_cabb {return _edecb ;};};return _gada ;};type textResult struct{_ddc PageText ;_cggd int ;_deaa int ;};func (_abfa *textWord )absorb (_ggaf *textWord ){_abfa .PdfRectangle =_cfga (_abfa .PdfRectangle ,_ggaf .PdfRectangle );
_abfa ._cbebd =append (_abfa ._cbebd ,_ggaf ._cbebd ...);};func (_aeddd *textTable )getComposite (_bgffb ,_bbcga int )(paraList ,_da .PdfRectangle ){_bffd ,_ebdfa :=_aeddd ._efcd [_ggdcaf (_bgffb ,_bbcga )];if _feg {_a .Printf ("\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0067\u0065\u0074\u0043\u006f\u006d\u0070o\u0073i\u0074\u0065\u0028\u0025\u0064\u002c\u0025\u0064\u0029\u002d\u003e\u0025\u0073\u000a",_bgffb ,_bbcga ,_bffd .String ());
};if !_ebdfa {return nil ,_da .PdfRectangle {};};return _bffd .parasBBox ();};func (_gbbcd *textLine )text ()string {var _dbfcd []string ;for _ ,_bcdfa :=range _gbbcd ._efbd {if _bcdfa ._eagda {_dbfcd =append (_dbfcd ,"\u0020");};_dbfcd =append (_dbfcd ,_bcdfa ._ffbf );
};return _gb .Join (_dbfcd ,"");};func (_dfcdf intSet )del (_gdea int ){delete (_dfcdf ,_gdea )};func (_agf *shapesState )lineTo (_fcg ,_bfgb float64 ){if _badab {_c .Log .Info ("\u006c\u0069\u006eeT\u006f\u0028\u0025\u002e\u0032\u0066\u002c\u0025\u002e\u0032\u0066\u0020\u0070\u003d\u0025\u002e\u0032\u0066",_fcg ,_bfgb ,_agf .devicePoint (_fcg ,_bfgb ));
};_agf .addPoint (_fcg ,_bfgb );};func (_egcf rulingList )removeDuplicates ()rulingList {if len (_egcf )==0{return nil ;};_egcf .sort ();_baga :=rulingList {_egcf [0]};for _ ,_dcdf :=range _egcf [1:]{if _dcdf .equals (_baga [len (_baga )-1]){continue ;
};_baga =append (_baga ,_dcdf );};return _baga ;};type event struct{_bfaab float64 ;_fddd bool ;_edef int ;};func (_edec paraList )log (_cdae string ){if !_cbgg {return ;};_c .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",_cdae ,len (_edec ));
for _deag ,_bbfea :=range _edec {if _bbfea ==nil {continue ;};_adcb :=_bbfea .text ();_ccecg :="\u0020\u0020";if _bbfea ._aecg !=nil {_ccecg =_a .Sprintf ("\u005b%\u0064\u0078\u0025\u0064\u005d",_bbfea ._aecg ._ebcg ,_bbfea ._aecg ._cfgdb );};_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u0025s\u0020\u0025\u0071\u000a",_deag ,_bbfea .PdfRectangle ,_ccecg ,_aecc (_adcb ,50));
};};type textWord struct{_da .PdfRectangle ;_bgeca float64 ;_ffbf string ;_cbebd []*textMark ;_deadf float64 ;_eagda bool ;};func (_abgf compositeCell )split (_fgfec ,_gfeb []float64 )*textTable {_ggbe :=len (_fgfec )+1;_gabe :=len (_gfeb )+1;if _feg {_c .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",_gabe ,_ggbe ,_abgf ,_fgfec ,_gfeb );
_a .Printf ("\u0020\u0020\u0020\u0020\u0025\u0064\u0020\u0070\u0061\u0072\u0061\u0073\u000a",len (_abgf .paraList ));for _dfcf ,_edca :=range _abgf .paraList {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_dfcf ,_edca .String ());};_a .Printf ("\u0020\u0020\u0020\u0020\u0025\u0064\u0020\u006c\u0069\u006e\u0065\u0073\u000a",len (_abgf .lines ()));
for _ffabc ,_fgeb :=range _abgf .lines (){_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_ffabc ,_fgeb );};};_fgfec =_ecefg (_fgfec ,_abgf .Ury ,_abgf .Lly );_gfeb =_ecefg (_gfeb ,_abgf .Llx ,_abgf .Urx );_caaa :=make (map[uint64 ]*textPara ,_gabe *_ggbe );
_ecdc :=textTable {_ebcg :_gabe ,_cfgdb :_ggbe ,_gdbg :_caaa };_cgbc :=_abgf .paraList ;_fa .Slice (_cgbc ,func (_fcdc ,_cdgb int )bool {_fcaab ,_bfcag :=_cgbc [_fcdc ],_cgbc [_cdgb ];_cfdb ,_egafa :=_fcaab .Lly ,_bfcag .Lly ;if _cfdb !=_egafa {return _cfdb < _egafa ;
};return _fcaab .Llx < _bfcag .Llx ;});_ecad :=make (map[uint64 ]_da .PdfRectangle ,_gabe *_ggbe );for _fcfae ,_cacf :=range _fgfec [1:]{_gfcdg :=_fgfec [_fcfae ];for _fbaf ,_bcee :=range _gfeb [1:]{_cgda :=_gfeb [_fbaf ];_ecad [_ggdcaf (_fbaf ,_fcfae )]=_da .PdfRectangle {Llx :_cgda ,Urx :_bcee ,Lly :_cacf ,Ury :_gfcdg };
};};if _feg {_c .Log .Info ("\u0063\u006f\u006d\u0070\u006f\u0073\u0069\u0074\u0065\u0043\u0065l\u006c\u002e\u0073\u0070\u006c\u0069\u0074\u003a\u0020\u0072e\u0063\u0074\u0073");_a .Printf ("\u0020\u0020\u0020\u0020");for _dcgb :=0;_dcgb < _gabe ;_dcgb ++{_a .Printf ("\u0025\u0033\u0030\u0064\u002c\u0020",_dcgb );
};_a .Println ();for _cddd :=0;_cddd < _ggbe ;_cddd ++{_a .Printf ("\u0020\u0020\u0025\u0032\u0064\u003a",_cddd );for _decbd :=0;_decbd < _gabe ;_decbd ++{_a .Printf ("\u00256\u002e\u0032\u0066\u002c\u0020",_ecad [_ggdcaf (_decbd ,_cddd )]);};_a .Println ();
};};_cggbd :=func (_adde *textLine )(int ,int ){for _bbcee :=0;_bbcee < _ggbe ;_bbcee ++{for _aagd :=0;_aagd < _gabe ;_aagd ++{if _fcba (_ecad [_ggdcaf (_aagd ,_bbcee )],_adde .PdfRectangle ){return _aagd ,_bbcee ;};};};return -1,-1;};_fagd :=make (map[uint64 ][]*textLine ,_gabe *_ggbe );
for _ ,_ffga :=range _cgbc .lines (){_cbfe ,_dgeg :=_cggbd (_ffga );if _cbfe < 0{continue ;};_fagd [_ggdcaf (_cbfe ,_dgeg )]=append (_fagd [_ggdcaf (_cbfe ,_dgeg )],_ffga );};for _ebgf :=0;_ebgf < len (_fgfec )-1;_ebgf ++{_eddcc :=_fgfec [_ebgf ];_dgadc :=_fgfec [_ebgf +1];
for _fdaab :=0;_fdaab < len (_gfeb )-1;_fdaab ++{_gfag :=_gfeb [_fdaab ];_dfad :=_gfeb [_fdaab +1];_cdcg :=_da .PdfRectangle {Llx :_gfag ,Urx :_dfad ,Lly :_dgadc ,Ury :_eddcc };_aebfb :=_fagd [_ggdcaf (_fdaab ,_ebgf )];if len (_aebfb )==0{continue ;};_cagd :=_bdcd (_cdcg ,_aebfb );
_ecdc .put (_fdaab ,_ebgf ,_cagd );};};return &_ecdc ;};func (_agga *shapesState )addPoint (_eega ,_eadg float64 ){_fbeg :=_agga .establishSubpath ();_bfaag :=_agga .devicePoint (_eega ,_eadg );if _fbeg ==nil {_agga ._febcd =true ;_agga ._bbd =_bfaag ;
}else {_fbeg .add (_bfaag );};};func (_gfbae rectRuling )asRuling ()(*ruling ,bool ){_cdeda :=ruling {_bfce :_gfbae ._dedf ,Color :_gfbae .Color ,_gcacd :_baebe };switch _gfbae ._dedf {case _edecb :_cdeda ._gace =0.5*(_gfbae .Llx +_gfbae .Urx );_cdeda ._cfeee =_gfbae .Lly ;
_cdeda ._fdfa =_gfbae .Ury ;_ccbbb ,_dbgf :=_gfbae .checkWidth (_gfbae .Llx ,_gfbae .Urx );if !_dbgf {if _gegd {_c .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",_gfbae );
};return nil ,false ;};_cdeda ._eaadd =_ccbbb ;case _bcdff :_cdeda ._gace =0.5*(_gfbae .Lly +_gfbae .Ury );_cdeda ._cfeee =_gfbae .Llx ;_cdeda ._fdfa =_gfbae .Urx ;_acac ,_afff :=_gfbae .checkWidth (_gfbae .Lly ,_gfbae .Ury );if !_afff {if _gegd {_c .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",_gfbae );
};return nil ,false ;};_cdeda ._eaadd =_acac ;default:_c .Log .Error ("\u0062\u0061\u0064\u0020pr\u0069\u006d\u0061\u0072\u0079\u0020\u006b\u0069\u006e\u0064\u003d\u0025\u0064",_gfbae ._dedf );return nil ,false ;};return &_cdeda ,true ;};func (_dbaa *textTable )newTablePara ()*textPara {_fbbad :=_dbaa .computeBbox ();
_gedcg :=&textPara {PdfRectangle :_fbbad ,_ebbd :_fbbad ,_aecg :_dbaa };if _feg {_c .Log .Info ("\u006e\u0065w\u0054\u0061\u0062l\u0065\u0050\u0061\u0072\u0061\u003a\u0020\u0025\u0073",_gedcg );};return _gedcg ;};
// 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 (_aed *Extractor )ExtractTextWithStats ()(_deg string ,_bda int ,_fde int ,_gae error ){_gbeb ,_bda ,_fde ,_gae :=_aed .ExtractPageText ();if _gae !=nil {return "",_bda ,_fde ,_gae ;};return _gbeb .Text (),_bda ,_fde ,nil ;};func (_egfee *ruling )alignsSec (_acaed *ruling )bool {const _ebacg =_dgaaa +1.0;
return _egfee ._cfeee -_ebacg <=_acaed ._fdfa &&_acaed ._cfeee -_ebacg <=_egfee ._fdfa ;};func _bfcdc (_bbga _da .PdfColorspace ,_aacef _da .PdfColor )_b .Color {if _bbga ==nil ||_aacef ==nil {return _b .Black ;};_ecec ,_gece :=_bbga .ColorToRGB (_aacef );
if _gece !=nil {_c .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",_aacef ,_bbga ,_gece );
return _b .Black ;};_agac ,_bccb :=_ecec .(*_da .PdfColorDeviceRGB );if !_bccb {_c .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",_ecec );
return _b .Black ;};return _b .NRGBA {R :uint8 (_agac .R ()*255),G :uint8 (_agac .G ()*255),B :uint8 (_agac .B ()*255),A :uint8 (255)};};func (_aedb *textLine )endsInHyphen ()bool {_bgaad :=_aedb ._efbd [len (_aedb ._efbd )-1];_aba :=_bgaad ._ffbf ;_ecg ,_gfddg :=_f .DecodeLastRuneInString (_aba );
if _gfddg <=0||!_ff .Is (_ff .Hyphen ,_ecg ){return false ;};if _bgaad ._eagda &&_ecba (_aba ){return true ;};return _ecba (_aedb .text ());};func (_gefg *textPara )depth ()float64 {if _gefg ._eaeb {return -1.0;};if len (_gefg ._fbge )> 0{return _gefg ._fbge [0]._fgee ;
};return _gefg ._aecg .depth ();};type pathSection struct{_fbg []*subpath ;_b .Color ;};
// NewFromContents creates a new extractor from contents and page resources.
func NewFromContents (contents string ,resources *_da .PdfPageResources )(*Extractor ,error ){const _eee ="\u0065x\u0074\u0072\u0061\u0063t\u006f\u0072\u002e\u004e\u0065w\u0046r\u006fm\u0043\u006f\u006e\u0074\u0065\u006e\u0074s";_fg :=&Extractor {_bc :contents ,_bg :resources ,_cb :map[string ]fontEntry {},_fb :map[string ]textResult {}};
_ffb .TrackUse (_eee );return _fg ,nil ;};
// ImageMark represents an image drawn on a page and its position in device coordinates.
// All coordinates are in device coordinates.
type ImageMark struct{Image *_da .Image ;
// Dimensions of the image as displayed in the PDF.
Width float64 ;Height float64 ;
// Position of the image in PDF coordinates (lower left corner).
X float64 ;Y float64 ;
// Angle in degrees, if rotated.
Angle float64 ;};func (_eddcb rulingList )intersections ()map[int ]intSet {var _feeg ,_dead []int ;for _ccgdc ,_ggfa :=range _eddcb {switch _ggfa ._bfce {case _edecb :_feeg =append (_feeg ,_ccgdc );case _bcdff :_dead =append (_dead ,_ccgdc );};};if len (_feeg )< _aegc +1||len (_dead )< _bdcef +1{return nil ;
};if len (_feeg )+len (_dead )> _gecc {_c .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 (_eddcb ),len (_feeg ),len (_dead ));
return nil ;};_gead :=make (map[int ]intSet ,len (_feeg )+len (_dead ));for _ ,_gaeab :=range _feeg {for _ ,_facgg :=range _dead {if _eddcb [_gaeab ].intersects (_eddcb [_facgg ]){if _ ,_bedd :=_gead [_gaeab ];!_bedd {_gead [_gaeab ]=make (intSet );};if _ ,_bddb :=_gead [_facgg ];
!_bddb {_gead [_facgg ]=make (intSet );};_gead [_gaeab ].add (_facgg );_gead [_facgg ].add (_gaeab );};};};return _gead ;};func _fdeg (_cgb ,_adbe _da .PdfRectangle )bool {return _ddaed (_cgb ,_adbe )&&_dcaec (_cgb ,_adbe )};func (_cagce rulingList )aligned ()bool {if len (_cagce )< 2{return false ;
};_becg :=make (map[*ruling ]int );_becg [_cagce [0]]=0;for _ ,_fcca :=range _cagce [1:]{_edaga :=false ;for _gabef :=range _becg {if _fcca .gridIntersecting (_gabef ){_becg [_gabef ]++;_edaga =true ;break ;};};if !_edaga {_becg [_fcca ]=0;};};_ffbbg :=0;
for _ ,_gaac :=range _becg {if _gaac ==0{_ffbbg ++;};};_edbc :=float64 (_ffbbg )/float64 (len (_cagce ));_dbeb :=_edbc <=1.0-_ddd ;if _ageg {_c .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",_dbeb ,_edbc ,_ffbbg ,len (_cagce ),_cagce .String ());
};return _dbeb ;};func (_agg *shapesState )stroke (_gfae *[]pathSection ){_ebdg :=pathSection {_fbg :_agg ._aebg ,Color :_agg ._aedg .getStrokeColor ()};*_gfae =append (*_gfae ,_ebdg );if _ageg {_a .Printf ("\u0020 \u0020\u0020S\u0054\u0052\u004fK\u0045\u003a\u0020\u0025\u0064\u0020\u0073t\u0072\u006f\u006b\u0065\u0073\u0020s\u0073\u003d\u0025\u0073\u0020\u0063\u006f\u006c\u006f\u0072\u003d%\u002b\u0076\u0020\u0025\u0036\u002e\u0032\u0066\u000a",len (*_gfae ),_agg ,_agg ._aedg .getStrokeColor (),_ebdg .bbox ());
if _gfac {for _ddcf ,_baa :=range _agg ._aebg {_a .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_ddcf ,_baa );if _ddcf ==10{break ;};};};};};func (_ea *imageExtractContext )processOperand (_fee *_ae .ContentStreamOperation ,_cfd _ae .GraphicsState ,_gf *_da .PdfPageResources )error {if _fee .Operand =="\u0042\u0049"&&len (_fee .Params )==1{_bcf ,_ed :=_fee .Params [0].(*_ae .ContentStreamInlineImage );
if !_ed {return nil ;};if _gfd ,_fff :=_ca .GetBoolVal (_bcf .ImageMask );_fff {if _gfd &&!_ea ._dd .IncludeInlineStencilMasks {return nil ;};};return _ea .extractInlineImage (_bcf ,_cfd ,_gf );}else if _fee .Operand =="\u0044\u006f"&&len (_fee .Params )==1{_fgbd ,_egb :=_ca .GetName (_fee .Params [0]);
if !_egb {_c .Log .Debug ("E\u0052\u0052\u004f\u0052\u003a\u0020\u0054\u0079\u0070\u0065");return _dae ;};_ ,_fffe :=_gf .GetXObjectByName (*_fgbd );switch _fffe {case _da .XObjectTypeImage :return _ea .extractXObjectImage (_fgbd ,_cfd ,_gf );case _da .XObjectTypeForm :return _ea .extractFormImages (_fgbd ,_cfd ,_gf );
};};return nil ;};func (_bcbg rulingList )toGrids ()[]rulingList {if _ageg {_c .Log .Info ("t\u006f\u0047\u0072\u0069\u0064\u0073\u003a\u0020\u0025\u0073",_bcbg );};_gbbb :=_bcbg .intersections ();if _ageg {_c .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 (_bcbg ),len (_gbbb ));
for _ ,_abcc :=range _ddgcd (_gbbb ){_a .Printf ("\u00254\u0064\u003a\u0020\u0025\u002b\u0076\n",_abcc ,_gbbb [_abcc ]);};};_bedec :=make (map[int ]intSet ,len (_bcbg ));for _bcgdc :=range _bcbg {_gbgab :=_bcbg .connections (_gbbb ,_bcgdc );if len (_gbgab )> 0{_bedec [_bcgdc ]=_gbgab ;
};};if _ageg {_c .Log .Info ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u0063\u006fn\u006e\u0065\u0063\u0074s=\u0025\u0064",len (_bedec ));for _ ,_fggb :=range _ddgcd (_bedec ){_a .Printf ("\u00254\u0064\u003a\u0020\u0025\u002b\u0076\n",_fggb ,_bedec [_fggb ]);
};};_bccc :=_cadc (len (_bcbg ),func (_daad ,_gbcca int )bool {_bcfe ,_gcdf :=len (_bedec [_daad ]),len (_bedec [_gbcca ]);if _bcfe !=_gcdf {return _bcfe > _gcdf ;};return _bcbg .comp (_daad ,_gbcca );});if _ageg {_c .Log .Info ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u006f\u0072d\u0065\u0072\u0069\u006eg=\u0025\u0076",_bccc );
};_edfbg :=[][]int {{_bccc [0]}};_edde :for _ ,_dccb :=range _bccc [1:]{for _fddeb ,_ecbdc :=range _edfbg {for _ ,_eegfd :=range _ecbdc {if _bedec [_eegfd ].has (_dccb ){_edfbg [_fddeb ]=append (_ecbdc ,_dccb );continue _edde ;};};};_edfbg =append (_edfbg ,[]int {_dccb });
};if _ageg {_c .Log .Info ("\u0074o\u0047r\u0069\u0064\u0073\u003a\u0020i\u0067\u0072i\u0064\u0073\u003d\u0025\u0076",_edfbg );};_fa .SliceStable (_edfbg ,func (_egfe ,_fafe int )bool {return len (_edfbg [_egfe ])> len (_edfbg [_fafe ])});for _ ,_dccg :=range _edfbg {_fa .Slice (_dccg ,func (_cbde ,_bbg int )bool {return _bcbg .comp (_dccg [_cbde ],_dccg [_bbg ])});
};_gccf :=make ([]rulingList ,len (_edfbg ));for _gagb ,_dega :=range _edfbg {_dgcg :=make (rulingList ,len (_dega ));for _fbcdc ,_fafec :=range _dega {_dgcg [_fbcdc ]=_bcbg [_fafec ];};_gccf [_gagb ]=_dgcg ;};if _ageg {_c .Log .Info ("\u0074o\u0047r\u0069\u0064\u0073\u003a\u0020g\u0072\u0069d\u0073\u003d\u0025\u002b\u0076",_gccf );
};var _fefcb []rulingList ;for _ ,_bfeff :=range _gccf {if _ebgc ,_aeed :=_bfeff .isActualGrid ();_aeed {_bfeff =_ebgc ;_bfeff =_bfeff .snapToGroups ();_fefcb =append (_fefcb ,_bfeff );};};if _ageg {_gabg ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u0061\u0063t\u0075\u0061\u006c\u0047ri\u0064\u0073",_fefcb );
_c .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 (_gccf ),len (_fefcb ));};return _fefcb ;};func (_dfgd *subpath )isQuadrilateral ()bool {if len (_dfgd ._fgbe )< 4||len (_dfgd ._fgbe )> 5{return false ;
};if len (_dfgd ._fgbe )==5{_cabec :=_dfgd ._fgbe [0];_edbe :=_dfgd ._fgbe [4];if _cabec .X !=_edbe .X ||_cabec .Y !=_edbe .Y {return false ;};};return true ;};func (_dgde intSet )add (_bcgdd int ){_dgde [_bcgdd ]=struct{}{}};func _fdgae (_eegbc *wordBag ,_aafd *textWord ,_egcb float64 )bool {return _aafd .Llx < _eegbc .Urx +_egcb &&_eegbc .Llx -_egcb < _aafd .Urx ;
};func (_ebg *textObject )setTextLeading (_gbgg float64 ){if _ebg ==nil {return ;};_ebg ._ecbd ._bee =_gbgg ;};func (_gfddb *textObject )newTextMark (_abcdd string ,_abbd _eg .Matrix ,_ebed _eg .Point ,_bddeg float64 ,_fecb *_da .PdfFont ,_gdcb float64 ,_fbac ,_efa _b .Color )(textMark ,bool ){_dbce :=_abbd .Angle ();
_ccdc :=_bcc (_dbce ,_dfdd );var _cegbb float64 ;if _ccdc %180!=90{_cegbb =_abbd .ScalingFactorY ();}else {_cegbb =_abbd .ScalingFactorX ();};_gaecd :=_ggaa (_abbd );_gfbe :=_da .PdfRectangle {Llx :_gaecd .X ,Lly :_gaecd .Y ,Urx :_ebed .X ,Ury :_ebed .Y };
switch _ccdc %360{case 90:_gfbe .Urx -=_cegbb ;case 180:_gfbe .Ury -=_cegbb ;case 270:_gfbe .Urx +=_cegbb ;case 0:_gfbe .Ury +=_cegbb ;default:_ccdc =0;_gfbe .Ury +=_cegbb ;};if _gfbe .Llx > _gfbe .Urx {_gfbe .Llx ,_gfbe .Urx =_gfbe .Urx ,_gfbe .Llx ;};
if _gfbe .Lly > _gfbe .Ury {_gfbe .Lly ,_gfbe .Ury =_gfbe .Ury ,_gfbe .Lly ;};_gdf :=true ;if _gfddb ._bdce ._bd .Width ()> 0{_cdaf ,_ffdc :=_ccec (_gfbe ,_gfddb ._bdce ._bd );if !_ffdc {_gdf =false ;_c .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",_gfbe ,_gfddb ._bdce ._bd ,_abcdd );
};_gfbe =_cdaf ;};_bcec :=_gfbe ;_dbdb :=_gfddb ._bdce ._bd ;switch _ccdc %360{case 90:_dbdb .Urx ,_dbdb .Ury =_dbdb .Ury ,_dbdb .Urx ;_bcec =_da .PdfRectangle {Llx :_dbdb .Urx -_gfbe .Ury ,Urx :_dbdb .Urx -_gfbe .Lly ,Lly :_gfbe .Llx ,Ury :_gfbe .Urx };
case 180:_bcec =_da .PdfRectangle {Llx :_dbdb .Urx -_gfbe .Llx ,Urx :_dbdb .Urx -_gfbe .Urx ,Lly :_dbdb .Ury -_gfbe .Lly ,Ury :_dbdb .Ury -_gfbe .Ury };case 270:_dbdb .Urx ,_dbdb .Ury =_dbdb .Ury ,_dbdb .Urx ;_bcec =_da .PdfRectangle {Llx :_gfbe .Ury ,Urx :_gfbe .Lly ,Lly :_dbdb .Ury -_gfbe .Llx ,Ury :_dbdb .Ury -_gfbe .Urx };
};if _bcec .Llx > _bcec .Urx {_bcec .Llx ,_bcec .Urx =_bcec .Urx ,_bcec .Llx ;};if _bcec .Lly > _bcec .Ury {_bcec .Lly ,_bcec .Ury =_bcec .Ury ,_bcec .Lly ;};_gfdb :=textMark {_fbag :_abcdd ,PdfRectangle :_bcec ,_ddcg :_gfbe ,_fbbc :_fecb ,_ffbb :_cegbb ,_fgaf :_gdcb ,_cabbd :_abbd ,_dgfe :_ebed ,_adfa :_ccdc ,_ebbg :_fbac ,_bbeg :_efa };
if _aebgc {_c .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",_gaecd ,_ebed ,_gfdb .String ());};return _gfdb ,_gdf ;
};func (_fgaba paraList )extractTables (_egbga []gridTiling )paraList {if _feg {_c .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 (_fgaba ));
};if len (_fgaba )< _afda {return _fgaba ;};_cgdcb :=_fgaba .findTables (_egbga );if _feg {_c .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 (_cgdcb ));
for _cgba ,_degdc :=range _cgdcb {_degdc .log (_a .Sprintf ("c\u006f\u006d\u0062\u0069\u006e\u0065\u0064\u0020\u0025\u0064",_cgba ));};};return _fgaba .applyTables (_cgdcb );};const (RenderModeStroke RenderMode =1<<iota ;RenderModeFill ;RenderModeClip ;
);var _ad =false ;func _cgeaf (_agddd ,_acec _eg .Point )bool {_gbdg :=_dc .Abs (_agddd .X -_acec .X );_bfgbc :=_dc .Abs (_agddd .Y -_acec .Y );return _daedc (_gbdg ,_bfgbc );};func (_cbgd paraList )llyOrdering ()[]int {_afea :=make ([]int ,len (_cbgd ));
for _fcfa :=range _cbgd {_afea [_fcfa ]=_fcfa ;};_fa .SliceStable (_afea ,func (_ddgcc ,_decb int )bool {_dcad ,_cdcb :=_afea [_ddgcc ],_afea [_decb ];return _cbgd [_dcad ].Lly < _cbgd [_cdcb ].Lly ;});return _afea ;};func _agbf (_fadc ,_accc bounded )float64 {_gbf :=_cffg (_fadc ,_accc );
if !_bfdbe (_gbf ){return _gbf ;};return _ddaac (_fadc ,_accc );};func _aaac (_fbba ,_adgg float64 )string {_dbdd :=!_bfdbe (_fbba -_adgg );if _dbdd {return "\u000a";};return "\u0020";};func (_ebc *imageExtractContext )extractInlineImage (_adcf *_ae .ContentStreamInlineImage ,_gga _ae .GraphicsState ,_daed *_da .PdfPageResources )error {_df ,_aa :=_adcf .ToImage (_daed );
if _aa !=nil {return _aa ;};_cfb ,_aa :=_adcf .GetColorSpace (_daed );if _aa !=nil {return _aa ;};if _cfb ==nil {_cfb =_da .NewPdfColorspaceDeviceGray ();};_afb ,_aa :=_cfb .ImageToRGB (*_df );if _aa !=nil {return _aa ;};_cae :=ImageMark {Image :&_afb ,Width :_gga .CTM .ScalingFactorX (),Height :_gga .CTM .ScalingFactorY (),Angle :_gga .CTM .Angle ()};
_cae .X ,_cae .Y =_gga .CTM .Translation ();_ebc ._cf =append (_ebc ._cf ,_cae );_ebc ._bdc ++;return nil ;};func (_bfb *textObject )checkOp (_eaca *_ae .ContentStreamOperation ,_afbb int ,_fca bool )(_dgf bool ,_afga error ){if _bfb ==nil {var _gcf []_ca .PdfObject ;
if _afbb > 0{_gcf =_eaca .Params ;if len (_gcf )> _afbb {_gcf =_gcf [:_afbb ];};};_c .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",_eaca .Operand ,_gcf );
};if _afbb >=0{if len (_eaca .Params )!=_afbb {if _fca {_afga =_d .New ("\u0069n\u0063\u006f\u0072\u0072e\u0063\u0074\u0020\u0070\u0061r\u0061m\u0065t\u0065\u0072\u0020\u0063\u006f\u0075\u006et");};_c .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",_eaca .Operand ,_afbb ,len (_eaca .Params ),_eaca .Params );
return false ,_afga ;};};return true ,nil ;};type stateStack []*textState ;func (_fef *imageExtractContext )extractFormImages (_gaf *_ca .PdfObjectName ,_cff _ae .GraphicsState ,_aeg *_da .PdfPageResources )error {_ega ,_bdcc :=_aeg .GetXObjectFormByName (*_gaf );
if _bdcc !=nil {return _bdcc ;};if _ega ==nil {return nil ;};_gfc ,_bdcc :=_ega .GetContentStream ();if _bdcc !=nil {return _bdcc ;};_caec :=_ega .Resources ;if _caec ==nil {_caec =_aeg ;};_bdcc =_fef .extractContentStreamImages (string (_gfc ),_caec );
if _bdcc !=nil {return _bdcc ;};_fef ._dg ++;return nil ;};var (_dae =_d .New ("\u0074\u0079p\u0065\u0020\u0063h\u0065\u0063\u006b\u0020\u0065\u0072\u0072\u006f\u0072");_bb =_d .New ("\u0072\u0061\u006e\u0067\u0065\u0020\u0063\u0068\u0065\u0063\u006b\u0020e\u0072\u0072\u006f\u0072");
);func (_cbe *textObject )setHorizScaling (_gfbg float64 ){if _cbe ==nil {return ;};_cbe ._ecbd ._dfeg =_gfbg ;};func (_dfcb lineRuling )xMean ()float64 {return 0.5*(_dfcb ._cdca .X +_dfcb ._cdfa .X )};type cachedImage struct{_fdb *_da .Image ;_gg _da .PdfColorspace ;
};func _afg (_dfa *_ae .ContentStreamOperation )(float64 ,error ){if len (_dfa .Params )!=1{_ggcb :=_d .New ("\u0069n\u0063\u006f\u0072\u0072e\u0063\u0074\u0020\u0070\u0061r\u0061m\u0065t\u0065\u0072\u0020\u0063\u006f\u0075\u006et");_c .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",_dfa .Operand ,1,len (_dfa .Params ),_dfa .Params );
return 0.0,_ggcb ;};return _ca .GetNumberAsFloat (_dfa .Params [0]);};type gridTiling struct{_da .PdfRectangle ;_fabc []float64 ;_cdgc []float64 ;_bcada map[float64 ]map[float64 ]gridTile ;};
// String returns a human readable description of `s`.
func (_gggb intSet )String ()string {var _cfcfb []int ;for _dedg :=range _gggb {if _gggb .has (_dedg ){_cfcfb =append (_cfcfb ,_dedg );};};_fa .Ints (_cfcfb );return _a .Sprintf ("\u0025\u002b\u0076",_cfcfb );};
// String returns a description of `k`.
func (_ffdb markKind )String ()string {_ffacd ,_abeg :=_cbcab [_ffdb ];if !_abeg {return _a .Sprintf ("\u004e\u006f\u0074\u0020\u0061\u0020\u006d\u0061\u0072k\u003a\u0020\u0025\u0064",_ffdb );};return _ffacd ;};type textTable struct{_da .PdfRectangle ;
_ebcg ,_cfgdb int ;_fgece bool ;_gdbg map[uint64 ]*textPara ;_efcd map[uint64 ]compositeCell ;};func (_bfgbf *wordBag )firstWord (_edbd int )*textWord {return _bfgbf ._edag [_edbd ][0]};func (_afcb rulingList )sort (){_fa .Slice (_afcb ,_afcb .comp )};
// String returns a string describing `pt`.
func (_ade PageText )String ()string {_fdgb :=_a .Sprintf ("P\u0061\u0067\u0065\u0054ex\u0074:\u0020\u0025\u0064\u0020\u0065l\u0065\u006d\u0065\u006e\u0074\u0073",len (_ade ._adca ));_edg :=[]string {"\u002d"+_fdgb };for _ ,_gcc :=range _ade ._adca {_edg =append (_edg ,_gcc .String ());
};_edg =append (_edg ,"\u002b"+_fdgb );return _gb .Join (_edg ,"\u000a");};func (_ggad gridTiling )log (_feae string ){if !_affd {return ;};_c .Log .Info ("\u0074i\u006ci\u006e\u0067\u003a\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0071",len (_ggad ._fabc ),len (_ggad ._cdgc ),_feae );
_a .Printf ("\u0020\u0020\u0020l\u006c\u0078\u003d\u0025\u002e\u0032\u0066\u000a",_ggad ._fabc );_a .Printf ("\u0020\u0020\u0020l\u006c\u0079\u003d\u0025\u002e\u0032\u0066\u000a",_ggad ._cdgc );for _eccc ,_ebedg :=range _ggad ._cdgc {_bfae ,_aded :=_ggad ._bcada [_ebedg ];
if !_aded {continue ;};_a .Printf ("%\u0034\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u000a",_eccc ,_ebedg );for _dcbce ,_ceacb :=range _ggad ._fabc {_fcee ,_efae :=_bfae [_ceacb ];if !_efae {continue ;};_a .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_dcbce ,_fcee .String ());
};};};func (_dcbdb *textTable )bbox ()_da .PdfRectangle {return _dcbdb .PdfRectangle };func (_fbd *stateStack )empty ()bool {return len (*_fbd )==0};func _dbda (_deffb ,_ebcbf bounded )float64 {return _deffb .bbox ().Llx -_ebcbf .bbox ().Urx };
// PageImages represents extracted images on a PDF page with spatial information:
// display position and size.
type PageImages struct{Images []ImageMark ;};func (_efef compositeCell )parasBBox ()(paraList ,_da .PdfRectangle ){return _efef .paraList ,_efef .PdfRectangle ;};func (_agdgb rulingList )log (_ebdc string ){if !_ageg {return ;};_c .Log .Info ("\u0023\u0023\u0023\u0020\u0025\u0031\u0030\u0073\u003a\u0020\u0076\u0065c\u0073\u003d\u0025\u0073",_ebdc ,_agdgb .String ());
for _addb ,_bddg :=range _agdgb {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_addb ,_bddg .String ());};};func (_bbab rulingList )vertsHorzs ()(rulingList ,rulingList ){var _aaae ,_daee rulingList ;for _ ,_ceff :=range _bbab {switch _ceff ._bfce {case _edecb :_aaae =append (_aaae ,_ceff );
case _bcdff :_daee =append (_daee ,_ceff );};};return _aaae ,_daee ;};func (_bff rulingList )isActualGrid ()(rulingList ,bool ){_ggag ,_ccge :=_bff .augmentGrid ();if !(len (_ggag )>=_aegc +1&&len (_ccge )>=_bdcef +1){if _ageg {_c .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 (_ggag ),len (_ccge ),_aegc +1,_bdcef +1);
};return nil ,false ;};if _ageg {_c .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",_bff ,len (_ggag )>=2,len (_ccge )>=2,len (_ggag )>=2&&len (_ccge )>=2);
for _faccc ,_eggdc :=range _bff {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0076\u000a",_faccc ,_eggdc );};};if _degc {_cabdd ,_acgbf :=_ggag [0],_ggag [len (_ggag )-1];_bfdba ,_gfdc :=_ccge [0],_ccge [len (_ccge )-1];if !(_gbgcd (_cabdd ._gace -_bfdba ._cfeee )&&_gbgcd (_acgbf ._gace -_bfdba ._fdfa )&&_gbgcd (_bfdba ._gace -_cabdd ._fdfa )&&_gbgcd (_gfdc ._gace -_cabdd ._cfeee )){if _ageg {_c .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",_cabdd ,_acgbf ,_bfdba ,_gfdc );
};return nil ,false ;};}else {if !_ggag .aligned (){if _gcae {_c .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 (_ggag ));
};return nil ,false ;};if !_ccge .aligned (){if _ageg {_c .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 (_ccge ));
};return nil ,false ;};};_ffeg :=append (_ggag ,_ccge ...);return _ffeg ,true ;};
// 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 (_ac *Extractor )ExtractText ()(string ,error ){_dfc ,_ ,_ ,_fffa :=_ac .ExtractTextWithStats ();return _dfc ,_fffa ;};func (_ddg *textObject )getCurrentFont ()*_da .PdfFont {_efde :=_ddg ._ecbd ._gfga ;if _efde ==nil {_c .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 _da .DefaultFont ();};return _efde ;};func (_ecac *ruling )alignsPrimary (_eggf *ruling )bool {return _ecac ._bfce ==_eggf ._bfce &&_dc .Abs (_ecac ._gace -_eggf ._gace )< _dgaaa *0.5;};func (_egde paraList )findTables (_fbee []gridTiling )[]*textTable {_egde .addNeighbours ();
_fa .Slice (_egde ,func (_fbeb ,_bdge int )bool {return _dgbe (_egde [_fbeb ],_egde [_bdge ])< 0});var _defe []*textTable ;if _degd {_cgce :=_egde .findGridTables (_fbee );_defe =append (_defe ,_cgce ...);};if _bdggf {_fefcg :=_egde .findTextTables ();
_defe =append (_defe ,_fefcg ...);};return _defe ;};
// String returns a string describing `ma`.
func (_eeee TextMarkArray )String ()string {_fdbf :=len (_eeee ._acd );if _fdbf ==0{return "\u0045\u004d\u0050T\u0059";};_fgde :=_eeee ._acd [0];_aefc :=_eeee ._acd [_fdbf -1];return _a .Sprintf ("\u007b\u0054\u0045\u0058\u0054\u004d\u0041\u0052K\u0041\u0052\u0052AY\u003a\u0020\u0025\u0064\u0020\u0065l\u0065\u006d\u0065\u006e\u0074\u0073\u000a\u0009\u0066\u0069\u0072\u0073\u0074\u003d\u0025s\u000a\u0009\u0020\u006c\u0061\u0073\u0074\u003d%\u0073\u007d",_fdbf ,_fgde ,_aefc );
};func _dfcg (_facb *textWord ,_dbg float64 ,_eebb ,_fcad rulingList )*wordBag {_fba :=_acce (_facb ._bgeca );_fgbdf :=[]*textWord {_facb };_fbf :=wordBag {_edag :map[int ][]*textWord {_fba :_fgbdf },PdfRectangle :_facb .PdfRectangle ,_febf :_facb ._deadf ,_cfed :_dbg ,_gdae :_eebb ,_gaecb :_fcad };
return &_fbf ;};func _ggaa (_aefe _eg .Matrix )_eg .Point {_aefd ,_dba :=_aefe .Translation ();return _eg .Point {X :_aefd ,Y :_dba };};func (_ecb *textObject )nextLine (){_ecb .moveLP (0,-_ecb ._ecbd ._bee )};func (_efeb paraList )xNeighbours (_gege float64 )map[*textPara ][]int {_cbgab :=make ([]event ,2*len (_efeb ));
if _gege ==0{for _bceb ,_bbdcg :=range _efeb {_cbgab [2*_bceb ]=event {_bbdcg .Llx ,true ,_bceb };_cbgab [2*_bceb +1]=event {_bbdcg .Urx ,false ,_bceb };};}else {for _ggdcb ,_cffgg :=range _efeb {_cbgab [2*_ggdcb ]=event {_cffgg .Llx -_gege *_cffgg .fontsize (),true ,_ggdcb };
_cbgab [2*_ggdcb +1]=event {_cffgg .Urx +_gege *_cffgg .fontsize (),false ,_ggdcb };};};return _efeb .eventNeighbours (_cbgab );};func _aecc (_bced string ,_ageea int )string {if len (_bced )< _ageea {return _bced ;};return _bced [:_ageea ];};func _fcba (_cbgb ,_cbdc _da .PdfRectangle )bool {return _cbgb .Llx <=_cbdc .Llx &&_cbdc .Urx <=_cbgb .Urx &&_cbgb .Lly <=_cbdc .Lly &&_cbdc .Ury <=_cbgb .Ury ;
};func (_gce compositeCell )String ()string {_dgdc :="";if len (_gce .paraList )> 0{_dgdc =_aecc (_gce .paraList .merge ().text (),50);};return _a .Sprintf ("\u0025\u0036\u002e\u0032\u0066\u0020\u0025\u0064\u0020\u0070\u0061\u0072a\u0073\u0020\u0025\u0071",_gce .PdfRectangle ,len (_gce .paraList ),_dgdc );
};func (_dgdg *PageText )computeViews (){var _caeg rulingList ;if _eaag {_gdg :=_bbbg (_dgdg ._afef );_caeg =append (_caeg ,_gdg ...);};if _cffca {_ffag :=_eage (_dgdg ._ddcd );_caeg =append (_caeg ,_ffag ...);};_caeg ,_ffdg :=_caeg .toTilings ();var _befd paraList ;
_cabd :=len (_dgdg ._adca );for _agef :=0;_agef < 360&&_cabd > 0;_agef +=90{_ead :=make ([]*textMark ,0,len (_dgdg ._adca )-_cabd );for _ ,_afec :=range _dgdg ._adca {if _afec ._adfa ==_agef {_ead =append (_ead ,_afec );};};if len (_ead )> 0{_eddba :=_cgag (_ead ,_dgdg ._aca ,_caeg ,_ffdg );
_befd =append (_befd ,_eddba ...);_cabd -=len (_ead );};};_aecd :=new (_ga .Buffer );_befd .writeText (_aecd );_dgdg ._fdee =_aecd .String ();_dgdg ._gdb =_befd .toTextMarks ();_dgdg ._ecf =_befd .tables ();if _feg {_c .Log .Info ("\u0063\u006f\u006dpu\u0074\u0065\u0056\u0069\u0065\u0077\u0073\u003a\u0020\u0074\u0061\u0062\u006c\u0065\u0073\u003d\u0025\u0064",len (_dgdg ._ecf ));
};};
// Extractor stores and offers functionality for extracting content from PDF pages.
type Extractor struct{_bc string ;_bg *_da .PdfPageResources ;_bd _da .PdfRectangle ;_cb map[string ]fontEntry ;_fb map[string ]textResult ;_cbc int64 ;_fe int ;};func (_dggf *textTable )depth ()float64 {_deffe :=1e10;for _agfg :=0;_agfg < _dggf ._ebcg ;
_agfg ++{_gacbg :=_dggf .get (_agfg ,0);if _gacbg ==nil ||_gacbg ._eaeb {continue ;};_deffe =_dc .Min (_deffe ,_gacbg .depth ());};return _deffe ;};func (_bage rulingList )secMinMax ()(float64 ,float64 ){_ddbc ,_gefb :=_bage [0]._cfeee ,_bage [0]._fdfa ;
for _ ,_ffbc :=range _bage [1:]{if _ffbc ._cfeee < _ddbc {_ddbc =_ffbc ._cfeee ;};if _ffbc ._fdfa > _gefb {_gefb =_ffbc ._fdfa ;};};return _ddbc ,_gefb ;};func _ggdd (_aagdc map[float64 ]gridTile )[]float64 {_agee :=make ([]float64 ,0,len (_aagdc ));for _bdcdf :=range _aagdc {_agee =append (_agee ,_bdcdf );
};_fa .Float64s (_agee );return _agee ;};func (_abfeg rulingList )findPrimSec (_cgad ,_ccgf float64 )*ruling {for _ ,_eeefd :=range _abfeg {if _bfdbe (_eeefd ._gace -_cgad )&&_eeefd ._cfeee -_fcaff <=_ccgf &&_ccgf <=_eeefd ._fdfa +_fcaff {return _eeefd ;
};};return nil ;};func _bfdbe (_afge float64 )bool {return _dc .Abs (_afge )< _dcdb };func (_aeeb gridTile )complete ()bool {return _aeeb .numBorders ()==4};func (_agdd *textMark )bbox ()_da .PdfRectangle {return _agdd .PdfRectangle };func _bfdfd (_cfgdd ,_cgeda ,_acbef float64 )rulingKind {if _cfgdd >=_acbef &&_daedc (_cgeda ,_cfgdd ){return _bcdff ;
};if _cgeda >=_acbef &&_daedc (_cfgdd ,_cgeda ){return _edecb ;};return _gada ;};func _bdfg (_bada _eg .Point )*subpath {return &subpath {_fgbe :[]_eg .Point {_bada }}};func _becf (_gfcdf _da .PdfRectangle )*ruling {return &ruling {_bfce :_bcdff ,_gace :_gfcdf .Ury ,_cfeee :_gfcdf .Llx ,_fdfa :_gfcdf .Urx };
};func _aacgc (_befba map[int ][]float64 )string {_fbgd :=_efbb (_befba );_eeec :=make ([]string ,len (_befba ));for _cdgae ,_gadc :=range _fbgd {_eeec [_cdgae ]=_a .Sprintf ("\u0025\u0064\u003a\u0020\u0025\u002e\u0032\u0066",_gadc ,_befba [_gadc ]);};
return _a .Sprintf ("\u007b\u0025\u0073\u007d",_gb .Join (_eeec ,"\u002c\u0020"));};func _bafg (_gcac []*wordBag )[]*wordBag {if len (_gcac )<=1{return _gcac ;};if _gbbd {_c .Log .Info ("\u006d\u0065\u0072\u0067\u0065\u0057\u006f\u0072\u0064B\u0061\u0067\u0073\u003a");
};_fa .Slice (_gcac ,func (_gfcb ,_fgfd int )bool {_fdaa ,_cfec :=_gcac [_gfcb ],_gcac [_fgfd ];_dcac :=_fdaa .Width ()*_fdaa .Height ();_bde :=_cfec .Width ()*_cfec .Height ();if _dcac !=_bde {return _dcac > _bde ;};if _fdaa .Height ()!=_cfec .Height (){return _fdaa .Height ()> _cfec .Height ();
};return _gfcb < _fgfd ;});var _dcag []*wordBag ;_cdeb :=make (intSet );for _ffg :=0;_ffg < len (_gcac );_ffg ++{if _cdeb .has (_ffg ){continue ;};_gbbc :=_gcac [_ffg ];for _gbcf :=_ffg +1;_gbcf < len (_gcac );_gbcf ++{if _cdeb .has (_ffg ){continue ;};
_cegb :=_gcac [_gbcf ];_fffbc :=_gbbc .PdfRectangle ;_fffbc .Llx -=_gbbc ._febf ;if _fcba (_fffbc ,_cegb .PdfRectangle ){_gbbc .absorb (_cegb );_cdeb .add (_gbcf );};};_dcag =append (_dcag ,_gbbc );};if len (_gcac )!=len (_dcag )+len (_cdeb ){_c .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 (_gcac ),len (_dcag ),len (_cdeb ));
};return _dcag ;};func _beeg (_dbe *wordBag ,_gcab *textWord ,_abee float64 )bool {return _dbe .Urx <=_gcab .Llx &&_gcab .Llx < _dbe .Urx +_abee ;};
// String returns a description of `v`.
func (_eaage *ruling )String ()string {if _eaage ._bfce ==_gada {return "\u004e\u004f\u0054\u0020\u0052\u0055\u004c\u0049\u004e\u0047";};_edadc ,_aabb :="\u0078","\u0079";if _eaage ._bfce ==_bcdff {_edadc ,_aabb ="\u0079","\u0078";};_fffea :="";if _eaage ._eaadd !=0.0{_fffea =_a .Sprintf (" \u0077\u0069\u0064\u0074\u0068\u003d\u0025\u002e\u0032\u0066",_eaage ._eaadd );
};return _a .Sprintf ("\u0025\u00310\u0073\u0020\u0025\u0073\u003d\u0025\u0036\u002e\u0032\u0066\u0020\u0025\u0073\u003d\u0025\u0036\u002e\u0032\u0066\u0020\u002d\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u0028\u0025\u0036\u002e\u0032\u0066\u0029\u0020\u0025\u0073\u0020\u0025\u0076\u0025\u0073",_eaage ._bfce ,_edadc ,_eaage ._gace ,_aabb ,_eaage ._cfeee ,_eaage ._fdfa ,_eaage ._fdfa -_eaage ._cfeee ,_eaage ._gcacd ,_eaage .Color ,_fffea );
};func _eage (_bdcg []pathSection )rulingList {_eacbd (_bdcg );if _ageg {_c .Log .Info ("\u006da\u006b\u0065\u0046\u0069l\u006c\u0052\u0075\u006c\u0069n\u0067s\u003a \u0025\u0064\u0020\u0066\u0069\u006c\u006cs",len (_bdcg ));};var _ebfc rulingList ;for _ ,_ffca :=range _bdcg {for _ ,_bcfba :=range _ffca ._fbg {if !_bcfba .isQuadrilateral (){if _ageg {_c .Log .Error ("!\u0069s\u0051\u0075\u0061\u0064\u0072\u0069\u006c\u0061t\u0065\u0072\u0061\u006c: \u0025\u0073",_bcfba );
};continue ;};if _cgae ,_aga :=_bcfba .makeRectRuling (_ffca .Color );_aga {_ebfc =append (_ebfc ,_cgae );}else {if _gegd {_c .Log .Error ("\u0021\u006d\u0061\u006beR\u0065\u0063\u0074\u0052\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0025\u0073",_bcfba );
};};};};if _ageg {_c .Log .Info ("\u006d\u0061\u006b\u0065Fi\u006c\u006c\u0052\u0075\u006c\u0069\u006e\u0067\u0073\u003a\u0020\u0025\u0073",_ebfc .String ());};return _ebfc ;};func _dgbe (_fgag ,_fdf bounded )float64 {_dbbd :=_ddaac (_fgag ,_fdf );if !_bfdbe (_dbbd ){return _dbbd ;
};return _cffg (_fgag ,_fdf );};func (_bab *shapesState )quadraticTo (_bce ,_gcgg ,_bdgg ,_bed float64 ){if _badab {_c .Log .Info ("\u0071\u0075\u0061d\u0072\u0061\u0074\u0069\u0063\u0054\u006f\u003a");};_bab .addPoint (_bdgg ,_bed );};func (_dcfa paraList )writeText (_ffgb _ee .Writer ){for _gfca ,_eaad :=range _dcfa {if _eaad ._eaeb {continue ;
};_eaad .writeText (_ffgb );if _gfca !=len (_dcfa )-1{if _cdge (_eaad ,_dcfa [_gfca +1]){_ffgb .Write ([]byte ("\u0020"));}else {_ffgb .Write ([]byte ("\u000a"));_ffgb .Write ([]byte ("\u000a"));};};};_ffgb .Write ([]byte ("\u000a"));_ffgb .Write ([]byte ("\u000a"));
};func _gefgb (_gdba ,_gagbg int )int {if _gdba > _gagbg {return _gdba ;};return _gagbg ;};func (_bfe *shapesState )clearPath (){_bfe ._aebg =nil ;_bfe ._febcd =false ;if _badab {_c .Log .Info ("\u0043\u004c\u0045A\u0052\u003a\u0020\u0073\u0073\u003d\u0025\u0073",_bfe );
};};func (_gdd *textObject )renderText (_fag []byte )error {if _gdd ._gda {_c .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 ;};_cee :=_gdd .getCurrentFont ();_gba :=_cee .BytesToCharcodes (_fag );_gffg ,_aag ,_aef :=_cee .CharcodesToStrings (_gba );if _aef > 0{_c .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",_aag ,_aef );
};_gdd ._ecbd ._agc +=_aag ;_gdd ._ecbd ._acg +=_aef ;_dcae :=_gdd ._ecbd ;_aafa :=_dcae ._bea ;_eddb :=_dcae ._dfeg /100.0;_febc :=_bfg ;if _cee .Subtype ()=="\u0054\u0079\u0070e\u0033"{_febc =1;};_abf ,_gffe :=_cee .GetRuneMetrics (' ');if !_gffe {_abf ,_gffe =_cee .GetCharMetrics (32);
};if !_gffe {_abf ,_ =_da .DefaultFont ().GetRuneMetrics (' ');};_dbd :=_abf .Wx *_febc ;_c .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",_dbd ,_gffg ,_cee ,_aafa );
_ggd :=_eg .NewMatrix (_aafa *_eddb ,0,0,_aafa ,0,_dcae ._egdb );if _bece {_c .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 (_gba ),_gba ,_gffg );
};_c .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 (_gba ),_gba ,len (_gffg ));_daag :=_gdd .getFillColor ();
_eeg :=_gdd .getStrokeColor ();for _eegb ,_ffaa :=range _gffg {_dgda :=[]rune (_ffaa );if len (_dgda )==1&&_dgda [0]=='\x00'{continue ;};_ceef :=_gba [_eegb ];_cfdc :=_gdd ._ece .CTM .Mult (_gdd ._bcbc ).Mult (_ggd );_ddaa :=0.0;if len (_dgda )==1&&_dgda [0]==32{_ddaa =_dcae ._fgf ;
};_fcaf ,_bfdf :=_cee .GetCharMetrics (_ceef );if !_bfdf {_c .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",_ceef ,_dgda ,_dgda ,_cee );
return _a .Errorf ("\u006e\u006f\u0020\u0063\u0068\u0061\u0072\u0020\u006d\u0065\u0074\u0072\u0069\u0063\u0073:\u0020f\u006f\u006e\u0074\u003d\u0025\u0073\u0020\u0063\u006f\u0064\u0065\u003d\u0025\u0064",_cee .String (),_ceef );};_cea :=_eg .Point {X :_fcaf .Wx *_febc ,Y :_fcaf .Wy *_febc };
_dbbgd :=_eg .Point {X :(_cea .X *_aafa +_ddaa )*_eddb };_abb :=_eg .Point {X :(_cea .X *_aafa +_dcae ._baf +_ddaa )*_eddb };if _bece {_c .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",_aafa ,_dcae ._baf ,_dcae ._fgf ,_eddb );
_c .Log .Info ("\u0064x\u002c\u0064\u0079\u003d%\u002e\u0033\u0066\u0020\u00740\u003d%\u002e3\u0066\u0020\u0074\u003d\u0025\u002e\u0033f",_cea ,_dbbgd ,_abb );};_edbf :=_gcgf (_dbbgd );_ebge :=_gcgf (_abb );_ecee :=_gdd ._ece .CTM .Mult (_gdd ._bcbc ).Mult (_edbf );
if _adcff {_c .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",_gdd ._ece .CTM ,_gdd ._bcbc ,_ebge ,_ggaa (_gdd ._ece .CTM .Mult (_gdd ._bcbc ).Mult (_ebge )),_edbf ,_ecee ,_ggaa (_ecee ));
};_abbb ,_cdfe :=_gdd .newTextMark (_gbe .ExpandLigatures (_dgda ),_cfdc ,_ggaa (_ecee ),_dc .Abs (_dbd *_cfdc .ScalingFactorX ()),_cee ,_gdd ._ecbd ._baf ,_daag ,_eeg );if !_cdfe {_c .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 _cee ==nil {_c .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u004e\u006f\u0020\u0066\u006f\u006e\u0074\u002e");}else if _cee .Encoder ()==nil {_c .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",_cee );
}else {if _egaf ,_dcbf :=_cee .Encoder ().CharcodeToRune (_ceef );_dcbf {_abbb ._bafe =string (_egaf );};};_c .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",_eegb ,_ceef ,_abbb ,_cfdc );
_gdd ._bcgd =append (_gdd ._bcgd ,&_abbb );_gdd ._bcbc .Concat (_ebge );};return nil ;};func _dbaf (_ccfe []int )[]int {_fbec :=make ([]int ,len (_ccfe ));for _egda ,_efdb :=range _ccfe {_fbec [len (_ccfe )-1-_egda ]=_efdb ;};return _fbec ;};func (_degge *textTable )computeBbox ()_da .PdfRectangle {var _cbgfd _da .PdfRectangle ;
_bgaf :=false ;for _beacf :=0;_beacf < _degge ._cfgdb ;_beacf ++{for _gedf :=0;_gedf < _degge ._ebcg ;_gedf ++{_bafd :=_degge .get (_gedf ,_beacf );if _bafd ==nil {continue ;};if !_bgaf {_cbgfd =_bafd .PdfRectangle ;_bgaf =true ;}else {_cbgfd =_cfga (_cbgfd ,_bafd .PdfRectangle );
};};};return _cbgfd ;};func (_gdcc *textObject )moveText (_fab ,_efbg float64 ){_gdcc .moveLP (_fab ,_efbg )};
// String returns a description of `l`.
func (_dcbe *textLine )String ()string {return _a .Sprintf ("\u0025\u002e2\u0066\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065\u003d\u0025\u002e\u0032\u0066\u0020\"%\u0073\u0022",_dcbe ._fgee ,_dcbe .PdfRectangle ,_dcbe ._fcda ,_dcbe .text ());
};func (_eedf rulingList )merge ()*ruling {_ecca :=_eedf [0]._gace ;_dbac :=_eedf [0]._cfeee ;_efcef :=_eedf [0]._fdfa ;for _ ,_dbefb :=range _eedf [1:]{_ecca +=_dbefb ._gace ;if _dbefb ._cfeee < _dbac {_dbac =_dbefb ._cfeee ;};if _dbefb ._fdfa > _efcef {_efcef =_dbefb ._fdfa ;
};};_ggeef :=&ruling {_bfce :_eedf [0]._bfce ,_gcacd :_eedf [0]._gcacd ,Color :_eedf [0].Color ,_gace :_ecca /float64 (len (_eedf )),_cfeee :_dbac ,_fdfa :_efcef };if _gcae {_c .Log .Info ("\u006de\u0072g\u0065\u003a\u0020\u0025\u0032d\u0020\u0076e\u0063\u0073\u0020\u0025\u0073",len (_eedf ),_ggeef );
for _dacb ,_bgef :=range _eedf {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_dacb ,_bgef );};};return _ggeef ;};func _caee (_acdf bounded )float64 {return -_acdf .bbox ().Lly };func _bcba (_fcac func (*wordBag ,*textWord ,float64 )bool ,_dfdb float64 )func (*wordBag ,*textWord )bool {return func (_ggb *wordBag ,_edfd *textWord )bool {return _fcac (_ggb ,_edfd ,_dfdb )};
};
// ToTextMark returns the public view of `tm`.
func (_ccbe *textMark )ToTextMark ()TextMark {return TextMark {Text :_ccbe ._fbag ,Original :_ccbe ._bafe ,BBox :_ccbe ._ddcg ,Font :_ccbe ._fbbc ,FontSize :_ccbe ._ffbb ,FillColor :_ccbe ._ebbg ,StrokeColor :_ccbe ._bbeg ,Orientation :_ccbe ._adfa };};
var _cbcab =map[markKind ]string {_gfgb :"\u0073\u0074\u0072\u006f\u006b\u0065",_baebe :"\u0066\u0069\u006c\u006c",_cbdd :"\u0061u\u0067\u006d\u0065\u006e\u0074"};
// TextMarkArray is a collection of TextMarks.
type TextMarkArray struct{_acd []TextMark };func _cgeafa (_dbdc map[float64 ]map[float64 ]gridTile )[]float64 {_ddfg :=make ([]float64 ,0,len (_dbdc ));_gaad :=make (map[float64 ]struct{},len (_dbdc ));for _ ,_aegg :=range _dbdc {for _cdedaf :=range _aegg {if _ ,_cccd :=_gaad [_cdedaf ];
_cccd {continue ;};_ddfg =append (_ddfg ,_cdedaf );_gaad [_cdedaf ]=struct{}{};};};_fa .Float64s (_ddfg );return _ddfg ;};func (_eeegg rulingList )snapToGroups ()rulingList {_fgdab ,_dabc :=_eeegg .vertsHorzs ();if len (_fgdab )> 0{_fgdab =_fgdab .snapToGroupsDirection ();
};if len (_dabc )> 0{_dabc =_dabc .snapToGroupsDirection ();};_dffb :=append (_fgdab ,_dabc ...);_dffb .log ("\u0073\u006e\u0061p\u0054\u006f\u0047\u0072\u006f\u0075\u0070\u0073");return _dffb ;};func (_dbffd paraList )computeEBBoxes (){if _effd {_c .Log .Info ("\u0063o\u006dp\u0075\u0074\u0065\u0045\u0042\u0042\u006f\u0078\u0065\u0073\u003a");
};for _ ,_faab :=range _dbffd {_faab ._ebbd =_faab .PdfRectangle ;};_faded :=_dbffd .yNeighbours (0);for _gbec ,_dbga :=range _dbffd {_egbad :=_dbga ._ebbd ;_aacae ,_fefbd :=-1.0e9,+1.0e9;for _ ,_bfef :=range _faded [_dbga ]{_fdce :=_dbffd [_bfef ]._ebbd ;
if _fdce .Urx < _egbad .Llx {_aacae =_dc .Max (_aacae ,_fdce .Urx );}else if _egbad .Urx < _fdce .Llx {_fefbd =_dc .Min (_fefbd ,_fdce .Llx );};};for _fcef ,_fbbd :=range _dbffd {_bbed :=_fbbd ._ebbd ;if _gbec ==_fcef ||_bbed .Ury > _egbad .Lly {continue ;
};if _aacae <=_bbed .Llx &&_bbed .Llx < _egbad .Llx {_egbad .Llx =_bbed .Llx ;}else if _bbed .Urx <=_fefbd &&_egbad .Urx < _bbed .Urx {_egbad .Urx =_bbed .Urx ;};};if _effd {_a .Printf ("\u0025\u0034\u0064\u003a %\u0036\u002e\u0032\u0066\u2192\u0025\u0036\u002e\u0032\u0066\u0020\u0025\u0071\u000a",_gbec ,_dbga ._ebbd ,_egbad ,_aecc (_dbga .text (),50));
};_dbga ._ebbd =_egbad ;};if _ffdee {for _ ,_eegf :=range _dbffd {_eegf .PdfRectangle =_eegf ._ebbd ;};};};func (_gbebc *textTable )getRight ()paraList {_caff :=make (paraList ,_gbebc ._cfgdb );for _deagf :=0;_deagf < _gbebc ._cfgdb ;_deagf ++{_ggaac :=_gbebc .get (_gbebc ._ebcg -1,_deagf )._eaec ;
if _ggaac ==nil ||_ggaac ._cbgaa {return nil ;};_caff [_deagf ]=_ggaac ;};for _cfeba :=0;_cfeba < _gbebc ._cfgdb -1;_cfeba ++{if _caff [_cfeba ]._dbef !=_caff [_cfeba +1]{return nil ;};};return _caff ;};func (_aegab *textPara )isAtom ()*textTable {_gfea :=_aegab ;
_ggdda :=_aegab ._eaec ;_dadf :=_aegab ._dbef ;if !(_ggdda !=nil &&!_ggdda ._cbgaa &&_dadf !=nil &&!_dadf ._cbgaa ){return nil ;};_fgcd :=_ggdda ._dbef ;if !(_fgcd !=nil &&!_fgcd ._cbgaa &&_fgcd ==_dadf ._eaec ){return nil ;};return _deagc (_gfea ,_ggdda ,_dadf ,_fgcd );
};
// String returns a description of `w`.
func (_befdc *textWord )String ()string {return _a .Sprintf ("\u0025\u002e2\u0066\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065\u003d\u0025\u002e\u0032\u0066\u0020\"%\u0073\u0022",_befdc ._bgeca ,_befdc .PdfRectangle ,_befdc ._deadf ,_befdc ._ffbf );
};type textLine struct{_da .PdfRectangle ;_fgee float64 ;_efbd []*textWord ;_fcda float64 ;};
// 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 (_deac *textTable )growTable (){_gagg :=func (_gcaeb paraList ){_deac ._cfgdb ++;for _gcge :=0;_gcge < _deac ._ebcg ;_gcge ++{_gaaca :=_gcaeb [_gcge ];_deac .put (_gcge ,_deac ._cfgdb -1,_gaaca );};};_daff :=func (_dgdf paraList ){_deac ._ebcg ++;
for _aagg :=0;_aagg < _deac ._cfgdb ;_aagg ++{_ccdg :=_dgdf [_aagg ];_deac .put (_deac ._ebcg -1,_aagg ,_ccdg );};};if _aacd {_deac .log ("\u0067r\u006f\u0077\u0054\u0061\u0062\u006ce");};for _affa :=0;;_affa ++{_bgee :=false ;_ggfb :=_deac .getDown ();
_fbfe :=_deac .getRight ();if _aacd {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_affa ,_deac );_a .Printf ("\u0020\u0020 \u0020\u0020\u0020 \u0020\u0064\u006f\u0077\u006e\u003d\u0025\u0073\u000a",_ggfb );_a .Printf ("\u0020\u0020 \u0020\u0020\u0020 \u0072\u0069\u0067\u0068\u0074\u003d\u0025\u0073\u000a",_fbfe );
};if _ggfb !=nil &&_fbfe !=nil {_gabae :=_ggfb [len (_ggfb )-1];if _gabae !=nil &&!_gabae ._cbgaa &&_gabae ==_fbfe [len (_fbfe )-1]{_gagg (_ggfb );if _fbfe =_deac .getRight ();_fbfe !=nil {_daff (_fbfe );_deac .put (_deac ._ebcg -1,_deac ._cfgdb -1,_gabae );
};_bgee =true ;};};if !_bgee &&_ggfb !=nil {_gagg (_ggfb );_bgee =true ;};if !_bgee &&_fbfe !=nil {_daff (_fbfe );_bgee =true ;};if !_bgee {break ;};};};func (_cbbc *textObject )setCharSpacing (_cbf float64 ){if _cbbc ==nil {return ;};_cbbc ._ecbd ._baf =_cbf ;
if _bece {_c .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",_cbf ,_cbbc ._ecbd .String ());};};func _fdbc (_ggcc string )bool {for _ ,_ebcaf :=range _ggcc {if !_ff .IsSpace (_ebcaf ){return false ;
};};return true ;};func (_ebbf *textWord )addDiacritic (_befbb string ){_bdda :=_ebbf ._cbebd [len (_ebbf ._cbebd )-1];_bdda ._fbag +=_befbb ;_bdda ._fbag =_ce .NFKC .String (_bdda ._fbag );};func (_fddb *textTable )emptyColumn (_cgbd int )bool {for _gffaed :=0;
_gffaed < _fddb ._cfgdb ;_gffaed ++{_fffbb :=_fddb .get (_cgbd ,_gffaed );if _fffbb !=nil &&_fffbb .text ()!=""{return false ;};};return true ;};
// String returns a description of `state`.
func (_dff *textState )String ()string {_dde :="\u005bN\u004f\u0054\u0020\u0053\u0045\u0054]";if _dff ._gfga !=nil {_dde =_dff ._gfga .BaseFont ();};return _a .Sprintf ("\u0074\u0063\u003d\u0025\u002e\u0032\u0066\u0020\u0074\u0077\u003d\u0025\u002e\u0032\u0066 \u0074f\u0073\u003d\u0025\u002e\u0032\u0066\u0020\u0066\u006f\u006e\u0074\u003d\u0025\u0071",_dff ._baf ,_dff ._fgf ,_dff ._bea ,_dde );
};func (_beeb paraList )findTableGrid (_fcbg gridTiling )(*textTable ,map[*textPara ]struct{}){_bbea :=len (_fcbg ._fabc );_ebee :=len (_fcbg ._cdgc );_aage :=textTable {_fgece :true ,_ebcg :_bbea ,_cfgdb :_ebee ,_gdbg :make (map[uint64 ]*textPara ,_bbea *_ebee ),_efcd :make (map[uint64 ]compositeCell ,_bbea *_ebee )};
_bbgg :=make (map[*textPara ]struct{});_cbda :=int ((1.0-_bgdf )*float64 (_bbea *_ebee ));_faee :=0;if _affd {_c .Log .Info ("\u0066\u0069\u006e\u0064Ta\u0062\u006c\u0065\u0047\u0072\u0069\u0064\u003a\u0020\u0025\u0064\u0020\u0078\u0020%\u0064",_bbea ,_ebee );
};for _dbbge ,_gded :=range _fcbg ._cdgc {_bcgeb ,_gaaa :=_fcbg ._bcada [_gded ];if !_gaaa {continue ;};for _ccbg ,_deada :=range _fcbg ._fabc {_fbgdd ,_bgbdf :=_bcgeb [_deada ];if !_bgbdf {continue ;};_daeec :=_beeb .inTile (_fbgdd );if len (_daeec )==0{_faee ++;
if _faee > _cbda {if _affd {_c .Log .Info ("\u0021\u006e\u0075m\u0045\u006d\u0070\u0074\u0079\u003d\u0025\u0064",_faee );};return nil ,nil ;};}else {_aage .putComposite (_ccbg ,_dbbge ,_daeec ,_fbgdd .PdfRectangle );for _ ,_cdfga :=range _daeec {_bbgg [_cdfga ]=struct{}{};
};};};};_aacgd :=0;for _daega :=0;_daega < _bbea ;_daega ++{_cgcc :=_aage .get (_daega ,0);if _cgcc ==nil ||!_cgcc ._eaeb {_aacgd ++;};};if _aacgd ==0{if _affd {_c .Log .Info ("\u0021\u006e\u0075m\u0048\u0065\u0061\u0064\u0065\u0072\u003d\u0030");};return nil ,nil ;
};_bcbcb :=_aage .reduceTiling (_fcbg ,_bcad );_bcbcb =_bcbcb .subdivide ();return _bcbcb ,_bbgg ;};const (_fgfef markKind =iota ;_gfgb ;_baebe ;_cbdd ;);func _daedc (_efefg ,_cbae float64 )bool {return _efefg /_dc .Max (_cac ,_cbae )< _dbc };func _cdge (_faad ,_abaa *textPara )bool {if _faad ._eaeb ||_abaa ._eaeb {return true ;
};return _bfdbe (_faad .depth ()-_abaa .depth ());};func _gabg (_gfcdgc string ,_babf []rulingList ){_c .Log .Info ("\u0024\u0024 \u0025\u0064\u0020g\u0072\u0069\u0064\u0073\u0020\u002d\u0020\u0025\u0073",len (_babf ),_gfcdgc );for _cbcd ,_eed :=range _babf {_a .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_cbcd ,_eed .String ());
};};func (_bcd *textObject )showText (_fce []byte )error {return _bcd .renderText (_fce )};func (_cggdg rulingList )comp (_acaa ,_acda int )bool {_geab ,_ecda :=_cggdg [_acaa ],_cggdg [_acda ];_bdeg ,_gefcb :=_geab ._bfce ,_ecda ._bfce ;if _bdeg !=_gefcb {return _bdeg > _gefcb ;
};if _bdeg ==_gada {return false ;};_eaee :=func (_fgddg bool )bool {if _bdeg ==_bcdff {return _fgddg ;};return !_fgddg ;};_ace ,_gefac :=_geab ._gace ,_ecda ._gace ;if _ace !=_gefac {return _eaee (_ace > _gefac );};_ace ,_gefac =_geab ._cfeee ,_ecda ._cfeee ;
if _ace !=_gefac {return _eaee (_ace < _gefac );};return _eaee (_geab ._fdfa < _ecda ._fdfa );};func (_fdcc *wordBag )firstReadingIndex (_dgbgg int )int {_cde :=_fdcc .firstWord (_dgbgg )._deadf ;_bagg :=float64 (_dgbgg +1)*_cdgd ;_ddee :=_bagg +_ccf *_cde ;
_bfeb :=_dgbgg ;for _ ,_eegad :=range _fdcc .depthBand (_bagg ,_ddee ){if _ddaac (_fdcc .firstWord (_eegad ),_fdcc .firstWord (_bfeb ))< 0{_bfeb =_eegad ;};};return _bfeb ;};func _cfga (_gccge ,_becd _da .PdfRectangle )_da .PdfRectangle {return _da .PdfRectangle {Llx :_dc .Min (_gccge .Llx ,_becd .Llx ),Lly :_dc .Min (_gccge .Lly ,_becd .Lly ),Urx :_dc .Max (_gccge .Urx ,_becd .Urx ),Ury :_dc .Max (_gccge .Ury ,_becd .Ury )};
};func (_ecgdb *textPara )toCellTextMarks (_beed *int )[]TextMark {var _eceeb []TextMark ;for _cfdcd ,_cffga :=range _ecgdb ._fbge {_ffed :=_cffga .toTextMarks (_beed );_bfac :=_cgf &&_cffga .endsInHyphen ()&&_cfdcd !=len (_ecgdb ._fbge )-1;if _bfac {_ffed =_cfcf (_ffed ,_beed );
};_eceeb =append (_eceeb ,_ffed ...);if !(_bfac ||_cfdcd ==len (_ecgdb ._fbge )-1){_eceeb =_dcacc (_eceeb ,_beed ,_aaac (_cffga ._fgee ,_ecgdb ._fbge [_cfdcd +1]._fgee ));};};return _eceeb ;};func _efab (_gfcd ,_dbdg *textPara )bool {return _ddaed (_gfcd ._ebbd ,_dbdg ._ebbd )};
func (_fdccg *textTable )put (_ddada ,_gfge int ,_fage *textPara ){_fdccg ._gdbg [_ggdcaf (_ddada ,_gfge )]=_fage ;};func (_bf *Extractor )extractPageText (_ab string ,_cgc *_da .PdfPageResources ,_dbf _eg .Matrix ,_cd int )(*PageText ,int ,int ,error ){_c .Log .Trace ("\u0065x\u0074\u0072\u0061\u0063t\u0050\u0061\u0067\u0065\u0054e\u0078t\u003a \u006c\u0065\u0076\u0065\u006c\u003d\u0025d",_cd );
_cag :=&PageText {_aca :_bf ._bd };_bad :=_dgd (_bf ._bd );var _eddg stateStack ;_aac :=_fbea (_bf ,_cgc ,_ae .GraphicsState {},&_bad ,&_eddg );_fcb :=shapesState {_adce :_dbf ,_bac :_eg .IdentityMatrix (),_aedg :_aac };var _cagc bool ;if _cd > _eacb {_abd :=_d .New ("\u0066\u006f\u0072\u006d s\u0074\u0061\u0063\u006b\u0020\u006f\u0076\u0065\u0072\u0066\u006c\u006f\u0077");
_c .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",_cd ,_abd );
return _cag ,_bad ._agc ,_bad ._acg ,_abd ;};_cga :=_ae .NewContentStreamParser (_ab );_dbff ,_def :=_cga .Parse ();if _def !=nil {_c .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",_def );
return _cag ,_bad ._agc ,_bad ._acg ,_def ;};_efc :=_ae .NewContentStreamProcessor (*_dbff );_efc .AddHandler (_ae .HandlerConditionEnumAllOperands ,"",func (_be *_ae .ContentStreamOperation ,_ec _ae .GraphicsState ,_ede *_da .PdfPageResources )error {_gff :=_be .Operand ;
if _faa {_c .Log .Info ("\u0026&\u0026\u0020\u006f\u0070\u003d\u0025s",_be );};switch _gff {case "\u0071":if _badab {_c .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_fcb ._bac );};_eddg .push (&_bad );case "\u0051":if !_eddg .empty (){_bad =*_eddg .pop ();
};_fcb ._bac =_ec .CTM ;if _badab {_c .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_fcb ._bac );};case "\u0042\u0054":if _cagc {_c .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");
_cag ._adca =append (_cag ._adca ,_aac ._bcgd ...);};_cagc =true ;_dbb :=_ec ;_dbb .CTM =_dbf .Mult (_dbb .CTM );_aac =_fbea (_bf ,_ede ,_dbb ,&_bad ,&_eddg );_fcb ._aedg =_aac ;case "\u0045\u0054":if !_cagc {_c .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");
};_cagc =false ;_cag ._adca =append (_cag ._adca ,_aac ._bcgd ...);_aac .reset ();case "\u0054\u002a":_aac .nextLine ();case "\u0054\u0064":if _bgf ,_abe :=_aac .checkOp (_be ,2,true );!_bgf {_c .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_abe );
return _abe ;};_fge ,_fga ,_bcg :=_cgdg (_be .Params );if _bcg !=nil {return _bcg ;};_aac .moveText (_fge ,_fga );case "\u0054\u0044":if _cdf ,_adf :=_aac .checkOp (_be ,2,true );!_cdf {_c .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_adf );
return _adf ;};_fac ,_dfd ,_eab :=_cgdg (_be .Params );if _eab !=nil {_c .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_eab );return _eab ;};_aac .moveTextSetLeading (_fac ,_dfd );case "\u0054\u006a":if _dcd ,_ccg :=_aac .checkOp (_be ,1,true );
!_dcd {_c .Log .Debug ("\u0045\u0052\u0052\u004fR:\u0020\u0054\u006a\u0020\u006f\u0070\u003d\u0025\u0073\u0020\u0065\u0072\u0072\u003d%\u0076",_be ,_ccg );return _ccg ;};_gfgd ,_bgfg :=_ca .GetStringBytes (_be .Params [0]);if !_bgfg {_c .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",_be );
return _ca .ErrTypeError ;};return _aac .showText (_gfgd );case "\u0054\u004a":if _bbf ,_aec :=_aac .checkOp (_be ,1,true );!_bbf {_c .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u004a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_aec );return _aec ;
};_cegfe ,_gd :=_ca .GetArray (_be .Params [0]);if !_gd {_c .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",_be );
return _def ;};return _aac .showTextAdjusted (_cegfe );case "\u0027":if _gc ,_egg :=_aac .checkOp (_be ,1,true );!_gc {_c .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u0027\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_egg );return _egg ;};_cec ,_fae :=_ca .GetStringBytes (_be .Params [0]);
if !_fae {_c .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",_be );return _ca .ErrTypeError ;};_aac .nextLine ();return _aac .showText (_cec );
case "\u0022":if _aeb ,_age :=_aac .checkOp (_be ,3,true );!_aeb {_c .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u0022\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_age );return _age ;};_ebac ,_aeag ,_bfd :=_cgdg (_be .Params [:2]);if _bfd !=nil {return _bfd ;
};_fgd ,_ecd :=_ca .GetStringBytes (_be .Params [2]);if !_ecd {_c .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",_be );return _ca .ErrTypeError ;
};_aac .setCharSpacing (_ebac );_aac .setWordSpacing (_aeag );_aac .nextLine ();return _aac .showText (_fgd );case "\u0054\u004c":_ege ,_badg :=_afg (_be );if _badg !=nil {_c .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u004c\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_badg );
return _badg ;};_aac .setTextLeading (_ege );case "\u0054\u0063":_add ,_cfg :=_afg (_be );if _cfg !=nil {_c .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0063\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_cfg );return _cfg ;};_aac .setCharSpacing (_add );
case "\u0054\u0066":if _efb ,_eddc :=_aac .checkOp (_be ,2,true );!_efb {_c .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0066\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_eddc );return _eddc ;};_fdbd ,_feed :=_ca .GetNameVal (_be .Params [0]);if !_feed {_c .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",_be );
return _ca .ErrTypeError ;};_edfa ,_eeb :=_ca .GetNumberAsFloat (_be .Params [1]);if !_feed {_c .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",_be ,_eeb );
return _eeb ;};_eeb =_aac .setFont (_fdbd ,_edfa );_aac ._gda =_af .Is (_eeb ,_ca .ErrNotSupported );if _eeb !=nil &&!_aac ._gda {return _eeb ;};case "\u0054\u006d":if _face ,_aaf :=_aac .checkOp (_be ,6,true );!_face {_c .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u006d\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_aaf );
return _aaf ;};_dfe ,_ffd :=_ca .GetNumbersAsFloat (_be .Params );if _ffd !=nil {_c .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_ffd );return _ffd ;};_aac .setTextMatrix (_dfe );case "\u0054\u0072":if _gfdd ,_fea :=_aac .checkOp (_be ,1,true );
!_gfdd {_c .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0072\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_fea );return _fea ;};_dcb ,_bgc :=_ca .GetIntVal (_be .Params [0]);if !_bgc {_c .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",_be );
return _ca .ErrTypeError ;};_aac .setTextRenderMode (_dcb );case "\u0054\u0073":if _gea ,_ced :=_aac .checkOp (_be ,1,true );!_gea {_c .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0073\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_ced );return _ced ;
};_fgea ,_eea :=_ca .GetNumberAsFloat (_be .Params [0]);if _eea !=nil {_c .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_eea );return _eea ;};_aac .setTextRise (_fgea );case "\u0054\u0077":if _aegd ,_bggf :=_aac .checkOp (_be ,1,true );
!_aegd {_c .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_bggf );return _bggf ;};_fgc ,_gbc :=_ca .GetNumberAsFloat (_be .Params [0]);if _gbc !=nil {_c .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_gbc );
return _gbc ;};_aac .setWordSpacing (_fgc );case "\u0054\u007a":if _egd ,_cede :=_aac .checkOp (_be ,1,true );!_egd {_c .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_cede );return _cede ;};_ada ,_bgb :=_ca .GetNumberAsFloat (_be .Params [0]);
if _bgb !=nil {_c .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_bgb );return _bgb ;};_aac .setHorizScaling (_ada );case "\u0063\u006d":_fcb ._bac =_ec .CTM ;if _fcb ._bac .Singular (){_bbb :=_eg .IdentityMatrix ().Translate (_fcb ._bac .Translation ());
_c .Log .Debug ("S\u0069n\u0067\u0075\u006c\u0061\u0072\u0020\u0063\u0074m\u003d\u0025\u0073\u2192%s",_fcb ._bac ,_bbb );_fcb ._bac =_bbb ;};if _badab {_c .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_fcb ._bac );};case "\u006d":if len (_be .Params )!=2{_c .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",_bb );
return nil ;};_cbg ,_gdc :=_ca .GetNumbersAsFloat (_be .Params );if _gdc !=nil {return _gdc ;};_fcb .moveTo (_cbg [0],_cbg [1]);case "\u006c":if len (_be .Params )!=2{_c .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",_bb );
return nil ;};_gfb ,_ggc :=_ca .GetNumbersAsFloat (_be .Params );if _ggc !=nil {return _ggc ;};_fcb .lineTo (_gfb [0],_gfb [1]);case "\u0063":if len (_be .Params )!=6{return _bb ;};_fgdd ,_gfe :=_ca .GetNumbersAsFloat (_be .Params );if _gfe !=nil {return _gfe ;
};_c .Log .Debug ("\u0043u\u0062\u0069\u0063\u0020b\u0065\u007a\u0069\u0065\u0072 \u0070a\u0072a\u006d\u0073\u003a\u0020\u0025\u002e\u0032f",_fgdd );_fcb .cubicTo (_fgdd [0],_fgdd [1],_fgdd [2],_fgdd [3],_fgdd [4],_fgdd [5]);case "\u0076","\u0079":if len (_be .Params )!=4{return _bb ;
};_fgda ,_cbb :=_ca .GetNumbersAsFloat (_be .Params );if _cbb !=nil {return _cbb ;};_c .Log .Debug ("\u0043u\u0062\u0069\u0063\u0020b\u0065\u007a\u0069\u0065\u0072 \u0070a\u0072a\u006d\u0073\u003a\u0020\u0025\u002e\u0032f",_fgda );_fcb .quadraticTo (_fgda [0],_fgda [1],_fgda [2],_fgda [3]);
case "\u0068":_fcb .closePath ();case "\u0072\u0065":if len (_be .Params )!=4{return _bb ;};_aaca ,_cgca :=_ca .GetNumbersAsFloat (_be .Params );if _cgca !=nil {return _cgca ;};_fcb .drawRectangle (_aaca [0],_aaca [1],_aaca [2],_aaca [3]);_fcb .closePath ();
case "\u0053":_fcb .stroke (&_cag ._afef );_fcb .clearPath ();case "\u0073":_fcb .closePath ();_fcb .stroke (&_cag ._afef );_fcb .clearPath ();case "\u0046":_fcb .fill (&_cag ._ddcd );_fcb .clearPath ();case "\u0066","\u0066\u002a":_fcb .closePath ();_fcb .fill (&_cag ._ddcd );
_fcb .clearPath ();case "\u0042","\u0042\u002a":_fcb .fill (&_cag ._ddcd );_fcb .stroke (&_cag ._afef );_fcb .clearPath ();case "\u0062","\u0062\u002a":_fcb .closePath ();_fcb .fill (&_cag ._ddcd );_fcb .stroke (&_cag ._afef );_fcb .clearPath ();case "\u006e":_fcb .clearPath ();
case "\u0044\u006f":if len (_be .Params )==0{_c .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",_be .Params );
return _ca .ErrRangeError ;};_gbg ,_cdc :=_ca .GetName (_be .Params [0]);if !_cdc {_c .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",_be .Params [0]);
return _ca .ErrTypeError ;};_ ,_cfgd :=_ede .GetXObjectByName (*_gbg );if _cfgd !=_da .XObjectTypeForm {break ;};_cffc ,_cdc :=_bf ._fb [_gbg .String ()];if !_cdc {_bbc ,_aebe :=_ede .GetXObjectFormByName (*_gbg );if _aebe !=nil {_c .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_aebe );
return _aebe ;};_fgec ,_aebe :=_bbc .GetContentStream ();if _aebe !=nil {_c .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_aebe );return _aebe ;};_edfc :=_bbc .Resources ;if _edfc ==nil {_edfc =_ede ;};_cce ,_dbbg ,_bdb ,_aebe :=_bf .extractPageText (string (_fgec ),_edfc ,_dbf .Mult (_ec .CTM ),_cd +1);
if _aebe !=nil {_c .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_aebe );return _aebe ;};_cffc =textResult {*_cce ,_dbbg ,_bdb };_bf ._fb [_gbg .String ()]=_cffc ;};_fcb ._bac =_ec .CTM ;if _badab {_c .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_fcb ._bac );
};_cag ._adca =append (_cag ._adca ,_cffc ._ddc ._adca ...);_cag ._afef =append (_cag ._afef ,_cffc ._ddc ._afef ...);_cag ._ddcd =append (_cag ._ddcd ,_cffc ._ddc ._ddcd ...);_bad ._agc +=_cffc ._cggd ;_bad ._acg +=_cffc ._deaa ;case "\u0072\u0067","\u0067","\u006b","\u0063\u0073","\u0073\u0063","\u0073\u0063\u006e":_aac ._ece .ColorspaceNonStroking =_ec .ColorspaceNonStroking ;
_aac ._ece .ColorNonStroking =_ec .ColorNonStroking ;case "\u0052\u0047","\u0047","\u004b","\u0043\u0053","\u0053\u0043","\u0053\u0043\u004e":_aac ._ece .ColorspaceStroking =_ec .ColorspaceStroking ;_aac ._ece .ColorStroking =_ec .ColorStroking ;};return nil ;
});_def =_efc .Process (_cgc );return _cag ,_bad ._agc ,_bad ._acg ,_def ;};func (_afdd *wordBag )depthBand (_gbd ,_gccg float64 )[]int {if len (_afdd ._edag )==0{return nil ;};return _afdd .depthRange (_afdd .getDepthIdx (_gbd ),_afdd .getDepthIdx (_gccg ));
};func (_eceba *textPara )writeCellText (_gbgd _ee .Writer ){for _dgca ,_ded :=range _eceba ._fbge {_aacag :=_ded .text ();_acbda :=_cgf &&_ded .endsInHyphen ()&&_dgca !=len (_eceba ._fbge )-1;if _acbda {_aacag =_bgdb (_aacag );};_gbgd .Write ([]byte (_aacag ));
if !(_acbda ||_dgca ==len (_eceba ._fbge )-1){_gbgd .Write ([]byte (_aaac (_ded ._fgee ,_eceba ._fbge [_dgca +1]._fgee )));};};};func _dfgf (_aede *wordBag ,_bddc float64 ,_fegd ,_gebg rulingList )[]*wordBag {var _dfbb []*wordBag ;for _ ,_bagf :=range _aede .depthIndexes (){_gbbg :=false ;
for !_aede .empty (_bagf ){_eaeg :=_aede .firstReadingIndex (_bagf );_eged :=_aede .firstWord (_eaeg );_cfab :=_dfcg (_eged ,_bddc ,_fegd ,_gebg );_aede .removeWord (_eged ,_eaeg );if _dfga {_c .Log .Info ("\u0066\u0069\u0072\u0073\u0074\u0057\u006f\u0072\u0064\u0020\u005e\u005e^\u005e\u0020\u0025\u0073",_eged .String ());
};for _fcaa :=true ;_fcaa ;_fcaa =_gbbg {_gbbg =false ;_ebbc :=_beaf *_cfab ._febf ;_dcfb :=_fdde *_cfab ._febf ;_dddf :=_gbgae *_cfab ._febf ;if _dfga {_c .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",_cfab .minDepth (),_cfab .maxDepth (),_dddf ,_dcfb );
};if _aede .scanBand ("\u0076\u0065\u0072\u0074\u0069\u0063\u0061\u006c",_cfab ,_bcba (_fdgae ,0),_cfab .minDepth ()-_dddf ,_cfab .maxDepth ()+_dddf ,_fbcd ,false ,false )> 0{_gbbg =true ;};if _aede .scanBand ("\u0068\u006f\u0072\u0069\u007a\u006f\u006e\u0074\u0061\u006c",_cfab ,_bcba (_fdgae ,_dcfb ),_cfab .minDepth (),_cfab .maxDepth (),_agdb ,false ,false )> 0{_gbbg =true ;
};if _gbbg {continue ;};_cfee :=_aede .scanBand ("",_cfab ,_bcba (_beeg ,_ebbc ),_cfab .minDepth (),_cfab .maxDepth (),_eegc ,true ,false );if _cfee > 0{_cgcd :=(_cfab .maxDepth ()-_cfab .minDepth ())/_cfab ._febf ;if (_cfee > 1&&float64 (_cfee )> 0.3*_cgcd )||_cfee <=10{if _aede .scanBand ("\u006f\u0074\u0068e\u0072",_cfab ,_bcba (_beeg ,_ebbc ),_cfab .minDepth (),_cfab .maxDepth (),_eegc ,false ,true )> 0{_gbbg =true ;
};};};};_dfbb =append (_dfbb ,_cfab );};};return _dfbb ;};func (_cagcc *shapesState )closePath (){if _cagcc ._febcd {_cagcc ._aebg =append (_cagcc ._aebg ,_bdfg (_cagcc ._bbd ));_cagcc ._febcd =false ;}else if len (_cagcc ._aebg )==0{if _badab {_c .Log .Debug ("\u0063\u006c\u006f\u0073eP\u0061\u0074\u0068\u0020\u0077\u0069\u0074\u0068\u0020\u006e\u006f\u0020\u0070\u0061t\u0068");
};_cagcc ._febcd =false ;return ;};_cagcc ._aebg [len (_cagcc ._aebg )-1].close ();if _badab {_c .Log .Info ("\u0063\u006c\u006f\u0073\u0065\u0050\u0061\u0074\u0068\u003a\u0020\u0025\u0073",_cagcc );};};func (_deb *textObject )showTextAdjusted (_bcb *_ca .PdfObjectArray )error {_gbb :=false ;
for _ ,_efd :=range _bcb .Elements (){switch _efd .(type ){case *_ca .PdfObjectFloat ,*_ca .PdfObjectInteger :_eeba ,_ddf :=_ca .GetNumberAsFloat (_efd );if _ddf !=nil {_c .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",_efd ,_bcb );
return _ddf ;};_bdg ,_febb :=-_eeba *0.001*_deb ._ecbd ._bea ,0.0;if _gbb {_febb ,_bdg =_bdg ,_febb ;};_daec :=_gcgf (_eg .Point {X :_bdg ,Y :_febb });_deb ._bcbc .Concat (_daec );case *_ca .PdfObjectString :_acf ,_bdd :=_ca .GetStringBytes (_efd );if !_bdd {_c .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",_efd ,_bcb );
return _ca .ErrTypeError ;};_deb .renderText (_acf );default:_c .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",_efd ,_bcb );
return _ca .ErrTypeError ;};};return nil ;};type subpath struct{_fgbe []_eg .Point ;_bdbe bool ;};const _bfg =1.0/1000.0;func (_gadg *textTable )putComposite (_becga ,_fabe int ,_fgeg paraList ,_gegb _da .PdfRectangle ){if len (_fgeg )==0{_c .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 ;};_fgdbc :=compositeCell {_gegb ,_fgeg };if _feg {_a .Printf ("\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0070\u0075\u0074\u0043\u006f\u006d\u0070o\u0073i\u0074\u0065\u0028\u0025\u0064\u002c\u0025\u0064\u0029\u003c\u002d\u0025\u0073\u000a",_becga ,_fabe ,_fgdbc .String ());
};_fgdbc .updateBBox ();_gadg ._efcd [_ggdcaf (_becga ,_fabe )]=_fgdbc ;};type paraList []*textPara ;type wordBag struct{_da .PdfRectangle ;_febf float64 ;_gdae ,_gaecb rulingList ;_cfed float64 ;_edag map[int ][]*textWord ;};func _eacbd (_cgcde []pathSection ){if _gaaf < 0.0{return ;
};if _ageg {_c .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 (_cgcde ));};for _aaed ,_fccgb :=range _cgcde {for _fggab ,_gaedg :=range _fccgb ._fbg {for _ecae ,_cfbeg :=range _gaedg ._fgbe {_gaedg ._fgbe [_ecae ]=_eg .Point {X :_aeagb (_cfbeg .X ),Y :_aeagb (_cfbeg .Y )};
if _ageg {_gagde :=_gaedg ._fgbe [_ecae ];if !_ecfae (_cfbeg ,_gagde ){_gdagg :=_eg .Point {X :_gagde .X -_cfbeg .X ,Y :_gagde .Y -_cfbeg .Y };_a .Printf ("\u0025\u0034d \u002d\u0020\u00254\u0064\u0020\u002d\u0020%4d\u003a %\u002e\u0032\u0066\u0020\u2192\u0020\u0025.2\u0066\u0020\u0028\u0025\u0067\u0029\u000a",_aaed ,_fggab ,_ecae ,_cfbeg ,_gagde ,_gdagg );
};};};};};};func (_egbg *shapesState )cubicTo (_bag ,_fcafc ,_gaec ,_ddaab ,_fbcc ,_aee float64 ){if _badab {_c .Log .Info ("\u0063\u0075\u0062\u0069\u0063\u0054\u006f\u003a");};_egbg .addPoint (_fbcc ,_aee );};func _eaef (_cbbe []TextMark ,_eabb *int ,_cfea TextMark )[]TextMark {_cfea .Offset =*_eabb ;
_cbbe =append (_cbbe ,_cfea );*_eabb +=len (_cfea .Text );return _cbbe ;};func (_ecea *shapesState )fill (_bdf *[]pathSection ){_bfdg :=pathSection {_fbg :_ecea ._aebg ,Color :_ecea ._aedg .getFillColor ()};*_bdf =append (*_bdf ,_bfdg );if _ageg {_daecd :=_bfdg .bbox ();
_a .Printf ("\u0020 \u0020\u0020\u0046\u0049\u004c\u004c\u003a %\u0032\u0064\u0020\u0066\u0069\u006c\u006c\u0073\u0020\u0028\u0025\u0064\u0020\u006ee\u0077\u0029 \u0073\u0073\u003d%\u0073\u0020\u0063\u006f\u006c\u006f\u0072\u003d\u0025\u0033\u0076\u0020\u0025\u0036\u002e\u0032f\u003d\u00256.\u0032\u0066\u0078%\u0036\u002e\u0032\u0066\u000a",len (*_bdf ),len (_bfdg ._fbg ),_ecea ,_bfdg .Color ,_daecd ,_daecd .Width (),_daecd .Height ());
if _gfac {for _fda ,_bgd :=range _bfdg ._fbg {_a .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_fda ,_bgd );if _fda ==10{break ;};};};};};
// New returns an Extractor instance for extracting content from the input PDF page.
func New (page *_da .PdfPage )(*Extractor ,error ){const _feb ="\u0065\u0078\u0074\u0072\u0061\u0063\u0074\u006f\u0072\u002e\u004e\u0065\u0077";_aff ,_adg :=page .GetAllContentStreams ();if _adg !=nil {return nil ,_adg ;};_cg ,_adg :=page .GetMediaBox ();
if _adg !=nil {return nil ,_a .Errorf ("\u0065\u0078\u0074r\u0061\u0063\u0074\u006fr\u0020\u0072\u0065\u0071\u0075\u0069\u0072e\u0073\u0020\u006d\u0065\u0064\u0069\u0061\u0042\u006f\u0078\u002e\u0020\u0025\u0076",_adg );};_fd :=&Extractor {_bc :_aff ,_bg :page .Resources ,_bd :*_cg ,_cb :map[string ]fontEntry {},_fb :map[string ]textResult {}};
if _fd ._bd .Llx > _fd ._bd .Urx {_c .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",_fd ._bd );
_fd ._bd .Llx ,_fd ._bd .Urx =_fd ._bd .Urx ,_fd ._bd .Llx ;};if _fd ._bd .Lly > _fd ._bd .Ury {_c .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",_fd ._bd );
_fd ._bd .Lly ,_fd ._bd .Ury =_fd ._bd .Ury ,_fd ._bd .Lly ;};_ffb .TrackUse (_feb );return _fd ,nil ;};func (_fffb *stateStack )top ()*textState {if _fffb .empty (){return nil ;};return (*_fffb )[_fffb .size ()-1];};func (_gfad *wordBag )absorb (_feff *wordBag ){_eacf :=_feff .makeRemovals ();
for _dgg ,_bfde :=range _feff ._edag {for _ ,_bcdf :=range _bfde {_gfad .pullWord (_bcdf ,_dgg ,_eacf );};};_feff .applyRemovals (_eacf );};func _abfgd (_cabee _da .PdfRectangle ,_gee bounded )float64 {return _cabee .Ury -_gee .bbox ().Lly };
// String returns a string describing `tm`.
func (_fgab TextMark )String ()string {_gfa :=_fgab .BBox ;var _cdff string ;if _fgab .Font !=nil {_cdff =_fgab .Font .String ();if len (_cdff )> 50{_cdff =_cdff [:50]+"\u002e\u002e\u002e";};};var _eebe string ;if _fgab .Meta {_eebe ="\u0020\u002a\u004d\u002a";
};return _a .Sprintf ("\u007b\u0054\u0065\u0078t\u004d\u0061\u0072\u006b\u003a\u0020\u0025\u0064\u0020%\u0071\u003d\u0025\u0030\u0032\u0078\u0020\u0028\u0025\u0036\u002e\u0032\u0066\u002c\u0020\u0025\u0036\u002e2\u0066\u0029\u0020\u0028\u00256\u002e\u0032\u0066\u002c\u0020\u0025\u0036\u002e\u0032\u0066\u0029\u0020\u0025\u0073\u0025\u0073\u007d",_fgab .Offset ,_fgab .Text ,[]rune (_fgab .Text ),_gfa .Llx ,_gfa .Lly ,_gfa .Urx ,_gfa .Ury ,_cdff ,_eebe );
};func _cfcf (_cgea []TextMark ,_dcea *int )[]TextMark {_eeff :=_cgea [len (_cgea )-1];_eaac :=[]rune (_eeff .Text );if len (_eaac )==1{_cgea =_cgea [:len (_cgea )-1];_aaa :=_cgea [len (_cgea )-1];*_dcea =_aaa .Offset +len (_aaa .Text );}else {_ecc :=_bgdb (_eeff .Text );
*_dcea +=len (_ecc )-len (_eeff .Text );_eeff .Text =_ecc ;};return _cgea ;};
// String returns a description of `k`.
func (_egbb rulingKind )String ()string {_dafb ,_aabf :=_bccf [_egbb ];if !_aabf {return _a .Sprintf ("\u004e\u006ft\u0020\u0061\u0020r\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0025\u0064",_egbb );};return _dafb ;};type fontEntry struct{_dcef *_da .PdfFont ;
_dcgd int64 ;};func (_fbga *ruling )intersects (_eaafd *ruling )bool {_cece :=(_fbga ._bfce ==_edecb &&_eaafd ._bfce ==_bcdff )||(_eaafd ._bfce ==_edecb &&_fbga ._bfce ==_bcdff );_cbgc :=func (_dbbcf ,_caef *ruling )bool {return _dbbcf ._cfeee -_fcaff <=_caef ._gace &&_caef ._gace <=_dbbcf ._fdfa +_fcaff ;
};_eabfb :=_cbgc (_fbga ,_eaafd );_gadac :=_cbgc (_eaafd ,_fbga );if _ageg {_a .Printf ("\u0020\u0020\u0020\u0020\u0069\u006e\u0074\u0065\u0072\u0073\u0065\u0063\u0074\u0073\u003a\u0020\u0020\u006fr\u0074\u0068\u006f\u0067\u006f\u006e\u0061l\u003d\u0025\u0074\u0020\u006f\u0031\u003d\u0025\u0074\u0020\u006f2\u003d\u0025\u0074\u0020\u2192\u0020\u0025\u0074\u000a"+"\u0020\u0020\u0020 \u0020\u0020\u0020\u0076\u003d\u0025\u0073\u000a"+" \u0020\u0020\u0020\u0020\u0020\u0077\u003d\u0025\u0073\u000a",_cece ,_eabfb ,_gadac ,_cece &&_eabfb &&_gadac ,_fbga ,_eaafd );
};return _cece &&_eabfb &&_gadac ;};func (_aaaec paraList )applyTables (_bdae []*textTable )paraList {var _fcdad paraList ;for _ ,_acgd :=range _bdae {_fcdad =append (_fcdad ,_acgd .newTablePara ());};for _ ,_dbbcc :=range _aaaec {if _dbbcc ._cbgaa {continue ;
};_fcdad =append (_fcdad ,_dbbcc );};return _fcdad ;};func (_edce *textTable )isExportable ()bool {if _edce ._fgece {return true ;};_egfa :=func (_efcc int )bool {_gceg :=_edce .get (0,_efcc );if _gceg ==nil {return false ;};_dfaeg :=_gceg .text ();_adfe :=_f .RuneCountInString (_dfaeg );
_fbgae :=_afadbc .MatchString (_dfaeg );return _adfe <=1||_fbgae ;};for _gdaea :=0;_gdaea < _edce ._cfgdb ;_gdaea ++{if !_egfa (_gdaea ){return true ;};};return false ;};func _deagc (_fdfg ,_acbac ,_bcfc ,_badabc *textPara )*textTable {_effge :=&textTable {_ebcg :2,_cfgdb :2,_gdbg :make (map[uint64 ]*textPara ,4)};
_effge .put (0,0,_fdfg );_effge .put (1,0,_acbac );_effge .put (0,1,_bcfc );_effge .put (1,1,_badabc );return _effge ;};func _aaecc (_cffce []*textWord ,_babe int )[]*textWord {_agaee :=len (_cffce );copy (_cffce [_babe :],_cffce [_babe +1:]);return _cffce [:_agaee -1];
};func (_eaaf *wordBag )pullWord (_cedg *textWord ,_gcga int ,_cabe map[int ]map[*textWord ]struct{}){_eaaf .PdfRectangle =_cfga (_eaaf .PdfRectangle ,_cedg .PdfRectangle );if _cedg ._deadf > _eaaf ._febf {_eaaf ._febf =_cedg ._deadf ;};_eaaf ._edag [_gcga ]=append (_eaaf ._edag [_gcga ],_cedg );
_cabe [_gcga ][_cedg ]=struct{}{};};func _ecefg (_cfadg []float64 ,_afadf ,_facae float64 )[]float64 {_aaba ,_aefef :=_afadf ,_facae ;if _aefef < _aaba {_aaba ,_aefef =_aefef ,_aaba ;};_cbeb :=make ([]float64 ,0,len (_cfadg )+2);_cbeb =append (_cbeb ,_afadf );
for _ ,_dggaf :=range _cfadg {if _dggaf <=_aaba {continue ;}else if _dggaf >=_aefef {break ;};_cbeb =append (_cbeb ,_dggaf );};_cbeb =append (_cbeb ,_facae );return _cbeb ;};func _ddgcd (_fdac map[int ]intSet )[]int {_bgaea :=make ([]int ,0,len (_fdac ));
for _edecd :=range _fdac {_bgaea =append (_bgaea ,_edecd );};_fa .Ints (_bgaea );return _bgaea ;};func _cabddb (_gcfb []*textMark ,_eefg _da .PdfRectangle )*textWord {_aggag :=_gcfb [0].PdfRectangle ;_efgff :=_gcfb [0]._ffbb ;for _ ,_deagd :=range _gcfb [1:]{_aggag =_cfga (_aggag ,_deagd .PdfRectangle );
if _deagd ._ffbb > _efgff {_efgff =_deagd ._ffbb ;};};return &textWord {PdfRectangle :_aggag ,_cbebd :_gcfb ,_bgeca :_eefg .Ury -_aggag .Lly ,_deadf :_efgff };};func (_gbbe *ruling )encloses (_caegg ,_cabdb float64 )bool {return _gbbe ._cfeee -_fcaff <=_caegg &&_cabdb <=_gbbe ._fdfa +_fcaff ;
};func _fbea (_facc *Extractor ,_ccb *_da .PdfPageResources ,_egcg _ae .GraphicsState ,_daa *textState ,_gde *stateStack )*textObject {return &textObject {_bdce :_facc ,_bfc :_ccb ,_ece :_egcg ,_dee :_gde ,_ecbd :_daa ,_bcbc :_eg .IdentityMatrix (),_dbfc :_eg .IdentityMatrix ()};
};func (_bggb *wordBag )applyRemovals (_beef map[int ]map[*textWord ]struct{}){for _cgdb ,_eaf :=range _beef {if len (_eaf )==0{continue ;};_agdg :=_bggb ._edag [_cgdb ];_dad :=len (_agdg )-len (_eaf );if _dad ==0{delete (_bggb ._edag ,_cgdb );continue ;
};_bdbec :=make ([]*textWord ,_dad );_aggf :=0;for _ ,_fec :=range _agdg {if _ ,_bbcgf :=_eaf [_fec ];!_bbcgf {_bdbec [_aggf ]=_fec ;_aggf ++;};};_bggb ._edag [_cgdb ]=_bdbec ;};};func _bcc (_gdca float64 ,_dcfg int )int {if _dcfg ==0{_dcfg =1;};_gebf :=float64 (_dcfg );
return int (_dc .Round (_gdca /_gebf )*_gebf );};func (_baeb *stateStack )push (_dcg *textState ){_cega :=*_dcg ;*_baeb =append (*_baeb ,&_cega )};func (_addfg rulingList )splitSec ()[]rulingList {_fa .Slice (_addfg ,func (_gccfd ,_gcabb int )bool {_adfd ,_aaeb :=_addfg [_gccfd ],_addfg [_gcabb ];
if _adfd ._cfeee !=_aaeb ._cfeee {return _adfd ._cfeee < _aaeb ._cfeee ;};return _adfd ._fdfa < _aaeb ._fdfa ;});_cbcefa :=make (map[*ruling ]struct{},len (_addfg ));_ecdgd :=func (_gbcba *ruling )rulingList {_bddec :=rulingList {_gbcba };_cbcefa [_gbcba ]=struct{}{};
for _ ,_abgdb :=range _addfg {if _ ,_gbggf :=_cbcefa [_abgdb ];_gbggf {continue ;};for _ ,_dcff :=range _bddec {if _abgdb .alignsSec (_dcff ){_bddec =append (_bddec ,_abgdb );_cbcefa [_abgdb ]=struct{}{};break ;};};};return _bddec ;};_fbbe :=[]rulingList {_ecdgd (_addfg [0])};
for _ ,_dfddb :=range _addfg [1:]{if _ ,_aecfa :=_cbcefa [_dfddb ];_aecfa {continue ;};_fbbe =append (_fbbe ,_ecdgd (_dfddb ));};return _fbbe ;};func (_dcbfe *textPara )taken ()bool {return _dcbfe ==nil ||_dcbfe ._cbgaa };const (_dcdb =1.0e-6;_gaaf =1.0e-4;
_dfdd =10;_cdgd =6;_cbef =0.5;_ecfd =0.12;_cfge =0.19;_gfba =0.04;_cbgf =0.04;_gbgae =1.0;_fbcd =0.04;_fdde =0.4;_agdb =0.7;_beaf =1.0;_eegc =0.1;_fafd =1.4;_eafe =0.46;_egef =0.02;_ceac =0.2;_dgaa =0.5;_egeg =4;_ccf =4.0;_afda =6;_bgdf =0.3;_degg =0.01;
_dbfd =0.02;_aegc =2;_bdcef =2;_gecc =500;_cabb =4.0;_ebcc =4.0;_dbc =0.05;_cac =0.1;_fcaff =2.0;_dgaaa =2.0;_bbee =1.5;_bcad =3.0;_ddd =0.25;);func (_bfad *textObject )getFontDict (_aegad string )(_cdg _ca .PdfObject ,_gaa error ){_daf :=_bfad ._bfc ;
if _daf ==nil {_c .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",_aegad );return nil ,nil ;};_cdg ,_abg :=_daf .GetFontByName (_ca .PdfObjectName (_aegad ));
if !_abg {_c .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",_aegad );
return nil ,_d .New ("f\u006f\u006e\u0074\u0020no\u0074 \u0069\u006e\u0020\u0072\u0065s\u006f\u0075\u0072\u0063\u0065\u0073");};return _cdg ,nil ;};func _febfb (_dbdbd []*textWord ,_dddd *textWord )[]*textWord {for _abbg ,_bdca :=range _dbdbd {if _bdca ==_dddd {return _aaecc (_dbdbd ,_abbg );
};};_c .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",_dddd );
return nil ;};func (_abcg rulingList )mergePrimary ()float64 {_badb :=_abcg [0]._gace ;for _ ,_cbbcd :=range _abcg [1:]{_badb +=_cbbcd ._gace ;};return _badb /float64 (len (_abcg ));};type textState struct{_baf float64 ;_fgf float64 ;_dfeg float64 ;_bee float64 ;
_bea float64 ;_ddfb RenderMode ;_egdb float64 ;_gfga *_da .PdfFont ;_adaf _da .PdfRectangle ;_agc int ;_acg int ;};
// PageText represents the layout of text on a device page.
type PageText struct{_adca []*textMark ;_fdee string ;_gdb []TextMark ;_ecf []TextTable ;_aca _da .PdfRectangle ;_afef []pathSection ;_ddcd []pathSection ;};func (_acba *wordBag )makeRemovals ()map[int ]map[*textWord ]struct{}{_gaba :=make (map[int ]map[*textWord ]struct{},len (_acba ._edag ));
for _aebf :=range _acba ._edag {_gaba [_aebf ]=make (map[*textWord ]struct{});};return _gaba ;};func (_cdaec rulingList )sortStrict (){_fa .Slice (_cdaec ,func (_fcgcb ,_cbee int )bool {_ecaf ,_abag :=_cdaec [_fcgcb ],_cdaec [_cbee ];_becgd ,_fbgc :=_ecaf ._bfce ,_abag ._bfce ;
if _becgd !=_fbgc {return _becgd > _fbgc ;};_gdfd ,_gfee :=_ecaf ._gace ,_abag ._gace ;if !_bfdbe (_gdfd -_gfee ){return _gdfd < _gfee ;};_gdfd ,_gfee =_ecaf ._cfeee ,_abag ._cfeee ;if _gdfd !=_gfee {return _gdfd < _gfee ;};return _ecaf ._fdfa < _abag ._fdfa ;
});};
// String returns a string describing the current state of the textState stack.
func (_acfg *stateStack )String ()string {_aace :=[]string {_a .Sprintf ("\u002d\u002d\u002d\u002d f\u006f\u006e\u0074\u0020\u0073\u0074\u0061\u0063\u006b\u003a\u0020\u0025\u0064",len (*_acfg ))};for _bgce ,_egc :=range *_acfg {_afe :="\u003c\u006e\u0069l\u003e";
if _egc !=nil {_afe =_egc .String ();};_aace =append (_aace ,_a .Sprintf ("\u0009\u0025\u0032\u0064\u003a\u0020\u0025\u0073",_bgce ,_afe ));};return _gb .Join (_aace ,"\u000a");};
// 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 _da .PdfRectangle ;
// Font is the font the text was drawn with.
Font *_da .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 _b .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 _b .Color ;
// Orientation is the text orientation
Orientation int ;};func (_ffdd *stateStack )pop ()*textState {if _ffdd .empty (){return nil ;};_cab :=*(*_ffdd )[len (*_ffdd )-1];*_ffdd =(*_ffdd )[:len (*_ffdd )-1];return &_cab ;};func (_fgga paraList )findTextTables ()[]*textTable {var _eabg []*textTable ;
for _ ,_ffgd :=range _fgga {if _ffgd .taken ()||_ffgd .Width ()==0{continue ;};_agea :=_ffgd .isAtom ();if _agea ==nil {continue ;};_agea .growTable ();if _agea ._ebcg *_agea ._cfgdb < _afda {continue ;};_agea .markCells ();_agea .log ("\u0067\u0072\u006fw\u006e");
_eabg =append (_eabg ,_agea );};return _eabg ;};const (_effd =false ;_aebgc =false ;_faa =false ;_adcff =false ;_badab =false ;_bece =false ;_dfga =false ;_cbgg =false ;_gbbd =false ;_dfde =_gbbd &&true ;_dcga =_dfde &&false ;_bgac =_gbbd &&true ;_feg =false ;
_aacd =_feg &&false ;_ffab =_feg &&true ;_ageg =false ;_gfac =_ageg &&false ;_gcae =_ageg &&false ;_affd =_ageg &&true ;_gegd =_ageg &&false ;_efga =_ageg &&false ;);func (_agbc lineRuling )asRuling ()(*ruling ,bool ){_afeg :=ruling {_bfce :_agbc ._dacf ,Color :_agbc .Color ,_gcacd :_gfgb };
switch _agbc ._dacf {case _edecb :_afeg ._gace =_agbc .xMean ();_afeg ._cfeee =_dc .Min (_agbc ._cdca .Y ,_agbc ._cdfa .Y );_afeg ._fdfa =_dc .Max (_agbc ._cdca .Y ,_agbc ._cdfa .Y );case _bcdff :_afeg ._gace =_agbc .yMean ();_afeg ._cfeee =_dc .Min (_agbc ._cdca .X ,_agbc ._cdfa .X );
_afeg ._fdfa =_dc .Max (_agbc ._cdca .X ,_agbc ._cdfa .X );default:_c .Log .Error ("\u0062\u0061\u0064\u0020pr\u0069\u006d\u0061\u0072\u0079\u0020\u006b\u0069\u006e\u0064\u003d\u0025\u0064",_agbc ._dacf );return nil ,false ;};return &_afeg ,true ;};func (_bgff *ruling )equals (_cagdf *ruling )bool {return _bgff ._bfce ==_cagdf ._bfce &&_ggec (_bgff ._gace ,_cagdf ._gace )&&_ggec (_bgff ._cfeee ,_cagdf ._cfeee )&&_ggec (_bgff ._fdfa ,_cagdf ._fdfa );
};func (_dece rulingList )connections (_fbbb map[int ]intSet ,_dgdd int )intSet {_gbdd :=make (intSet );_gacb :=make (intSet );var _fdaeb func (int );_fdaeb =func (_bddgg int ){if !_gacb .has (_bddgg ){_gacb .add (_bddgg );for _egaa :=range _dece {if _fbbb [_egaa ].has (_bddgg ){_gbdd .add (_egaa );
};};for _cbaf :=range _dece {if _gbdd .has (_cbaf ){_fdaeb (_cbaf );};};};};_fdaeb (_dgdd );return _gbdd ;};func (_cfcc *textWord )bbox ()_da .PdfRectangle {return _cfcc .PdfRectangle };func _fbca (_cggc *wordBag ,_bfdb int )*textLine {_gaea :=_cggc .firstWord (_bfdb );
_acccb :=textLine {PdfRectangle :_gaea .PdfRectangle ,_fcda :_gaea ._deadf ,_fgee :_gaea ._bgeca };_acccb .pullWord (_cggc ,_gaea ,_bfdb );return &_acccb ;};func (_fgeeg rulingList )toTilings ()(rulingList ,[]gridTiling ){_fgeeg .log ("\u0074o\u0054\u0069\u006c\u0069\u006e\u0067s");
if len (_fgeeg )==0{return nil ,nil ;};_fgeeg =_fgeeg .tidied ("\u0061\u006c\u006c");_fgeeg .log ("\u0074\u0069\u0064\u0069\u0065\u0064");_bbfg :=_fgeeg .toGrids ();_ggf :=make ([]gridTiling ,len (_bbfg ));for _bgfed ,_ccbd :=range _bbfg {_ggf [_bgfed ]=_ccbd .asTiling ();
};return _fgeeg ,_ggf ;};const (_gada rulingKind =iota ;_bcdff ;_edecb ;);func (_gbga *shapesState )moveTo (_edda ,_eeef float64 ){_gbga ._febcd =true ;_gbga ._bbd =_gbga .devicePoint (_edda ,_eeef );if _badab {_c .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",_edda ,_eeef ,_gbga ._bbd );
};};