unipdf/extractor/extractor.go
2020-11-23 22:15:56 +00:00

253 lines
180 KiB
Go
Raw Blame History

//
// Copyright 2020 FoxyUtils ehf. All rights reserved.
//
// This is a commercial product and requires a license to operate.
// A trial license can be obtained at https://unidoc.io
//
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
//
// Use of this source code is governed by the UniDoc End User License Agreement
// terms that can be accessed at https://unidoc.io/eula/
//
// Package extractor is used for quickly extracting PDF content through a simple interface.
// Currently offers functionality for extracting textual content.
//
package extractor ;import (_ac "bytes";_f "errors";_dc "fmt";_ad "github.com/unidoc/unipdf/v3/common";_ag "github.com/unidoc/unipdf/v3/common/license";_ga "github.com/unidoc/unipdf/v3/contentstream";_gd "github.com/unidoc/unipdf/v3/core";_ce "github.com/unidoc/unipdf/v3/internal/textencoding";_cd "github.com/unidoc/unipdf/v3/internal/transform";_dd "github.com/unidoc/unipdf/v3/model";_cb "golang.org/x/text/unicode/norm";_af "golang.org/x/xerrors";_ed "image/color";_a "io";_ge "math";_e "regexp";_cf "sort";_d "strings";_b "unicode";_g "unicode/utf8";);func (_ggcg paraList )topoOrder ()[]int {if _gcdc {_ad .Log .Info ("\u0074\u006f\u0070\u006f\u004f\u0072\u0064\u0065\u0072\u003a");};_ccfe :=len (_ggcg );_ddb :=make ([]bool ,_ccfe );_dfbc :=make ([]int ,0,_ccfe );_fdgc :=_ggcg .llyOrdering ();var _gege func (_geacf int );_gege =func (_bgea int ){_ddb [_bgea ]=true ;for _bdbe :=0;_bdbe < _ccfe ;_bdbe ++{if !_ddb [_bdbe ]{if _ggcg .readBefore (_fdgc ,_bgea ,_bdbe ){_gege (_bdbe );};};};_dfbc =append (_dfbc ,_bgea );};for _efdaa :=0;_efdaa < _ccfe ;_efdaa ++{if !_ddb [_efdaa ]{_gege (_efdaa );};};return _gefb (_dfbc );};
// 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 (_ddfd *PageText )ApplyArea (bbox _dd .PdfRectangle ){_cbga :=make ([]*textMark ,0,len (_ddfd ._gae ));for _ ,_edf :=range _ddfd ._gae {if _adc (_edf .bbox (),bbox ){_cbga =append (_cbga ,_edf );};};var _ccef paraList ;_fggd :=len (_cbga );for _cgb :=0;_cgb < 360&&_fggd > 0;_cgb +=90{_fcfe :=make ([]*textMark ,0,len (_cbga )-_fggd );for _ ,_gcca :=range _cbga {if _gcca ._deeg ==_cgb {_fcfe =append (_fcfe ,_gcca );};};if len (_fcfe )> 0{_gbdc :=_ddcd (_fcfe ,_ddfd ._bgc ,nil ,nil );_ccef =append (_ccef ,_gbdc ...);_fggd -=len (_fcfe );};};_fcdc :=new (_ac .Buffer );_ccef .writeText (_fcdc );_ddfd ._gdcd =_fcdc .String ();_ddfd ._gge =_ccef .toTextMarks ();_ddfd ._feb =_ccef .tables ();};func (_egdb *textMark )inDiacriticArea (_degc *textMark )bool {_dbcfb :=_egdb .Llx -_degc .Llx ;_cfaa :=_egdb .Urx -_degc .Urx ;_dfgg :=_egdb .Lly -_degc .Lly ;return _ge .Abs (_dbcfb +_cfaa )< _egdb .Width ()*_eggb &&_ge .Abs (_dfgg )< _egdb .Height ()*_eggb ;};func (_fcfb rectRuling )asRuling ()(*ruling ,bool ){_cbe :=ruling {_abgae :_fcfb ._dgdf ,Color :_fcfb .Color ,_aaff :_ffa };switch _fcfb ._dgdf {case _fdff :_cbe ._acaf =0.5*(_fcfb .Llx +_fcfb .Urx );_cbe ._fgdd =_fcfb .Lly ;_cbe ._cage =_fcfb .Ury ;_ecag ,_fbbdg :=_fcfb .checkWidth (_fcfb .Llx ,_fcfb .Urx );if !_fbbdg {if _aaf {_ad .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",_fcfb );};return nil ,false ;};_cbe ._faff =_ecag ;case _feae :_cbe ._acaf =0.5*(_fcfb .Lly +_fcfb .Ury );_cbe ._fgdd =_fcfb .Llx ;_cbe ._cage =_fcfb .Urx ;_egbe ,_fdac :=_fcfb .checkWidth (_fcfb .Lly ,_fcfb .Ury );if !_fdac {if _aaf {_ad .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",_fcfb );};return nil ,false ;};_cbe ._faff =_egbe ;default:_ad .Log .Error ("\u0062\u0061\u0064\u0020pr\u0069\u006d\u0061\u0072\u0079\u0020\u006b\u0069\u006e\u0064\u003d\u0025\u0064",_fcfb ._dgdf );return nil ,false ;};return &_cbe ,true ;};func (_efed paraList )reorder (_bdce []int ){_cedd :=make (paraList ,len (_efed ));for _efca ,_efde :=range _bdce {_cedd [_efca ]=_efed [_efde ];};copy (_efed ,_cedd );};func (_bfc rulingList )secMinMax ()(float64 ,float64 ){_gaagg ,_gebde :=_bfc [0]._fgdd ,_bfc [0]._cage ;for _ ,_ecbc :=range _bfc [1:]{if _ecbc ._fgdd < _gaagg {_gaagg =_ecbc ._fgdd ;};if _ecbc ._cage > _gebde {_gebde =_ecbc ._cage ;};};return _gaagg ,_gebde ;};const _aefd =10;func _fbae (_ffcd float64 ,_degg int )int {if _degg ==0{_degg =1;};_afeb :=float64 (_degg );return int (_ge .Round (_ffcd /_afeb )*_afeb );};func _baac (_eaab ,_eacab float64 )string {_gcbba :=!_dgdb (_eaab -_eacab );if _gcbba {return "\u000a";};return "\u0020";};func _cgbgd (_gbba string ,_fgded int )string {if len (_gbba )< _fgded {return _gbba ;};return _gbba [:_fgded ];};
// String returns a description of `state`.
func (_bbgc *textState )String ()string {_fdde :="\u005bN\u004f\u0054\u0020\u0053\u0045\u0054]";if _bbgc ._eccb !=nil {_fdde =_bbgc ._eccb .BaseFont ();};return _dc .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",_bbgc ._ade ,_bbgc ._gcee ,_bbgc ._dccf ,_fdde );};
// ImageExtractOptions contains options for controlling image extraction from
// PDF pages.
type ImageExtractOptions struct{IncludeInlineStencilMasks bool ;};func (_fcb *textObject )setWordSpacing (_gcfff float64 ){if _fcb ==nil {return ;};_fcb ._bfdgc ._gcee =_gcfff ;};func (_facf rulingList )log (_gfdd string ){if !_fggb {return ;};_ad .Log .Info ("\u0023\u0023\u0023\u0020\u0025\u0031\u0030\u0073\u003a\u0020\u0076\u0065c\u0073\u003d\u0025\u0073",_gfdd ,_facf .String ());for _degbf ,_bacf :=range _facf {_dc .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_degbf ,_bacf .String ());};};func (_cafa *wordBag )arrangeText ()*textPara {_cafa .sort ();if _bbafc {_cafa .removeDuplicates ();};var _bgedc []*textLine ;for _ ,_egdbe :=range _cafa .depthIndexes (){for !_cafa .empty (_egdbe ){_ecfe :=_cafa .firstReadingIndex (_egdbe );_dfcbe :=_cafa .firstWord (_ecfe );_eeab :=_agc (_cafa ,_ecfe );_cafg :=_dfcbe ._dafb ;_ddaed :=_dfcbe ._gceede -_fdae *_cafg ;_gagc :=_dfcbe ._gceede +_fdae *_cafg ;_aeeb :=_abfd *_cafg ;_ddca :=_abe *_cafg ;_cbdcg :for {var _aeace *textWord ;_cdce :=0;for _ ,_eefa :=range _cafa .depthBand (_ddaed ,_gagc ){_adce :=_cafa .highestWord (_eefa ,_ddaed ,_gagc );if _adce ==nil {continue ;};_gddb :=_acgd (_adce ,_eeab ._becbb [len (_eeab ._becbb )-1]);if _gddb < -_ddca {break _cbdcg ;};if _gddb > _aeeb {continue ;};if _aeace !=nil &&_bedg (_adce ,_aeace )>=0{continue ;};_aeace =_adce ;_cdce =_eefa ;};if _aeace ==nil {break ;};_eeab .pullWord (_cafa ,_aeace ,_cdce );};_eeab .markWordBoundaries ();_bgedc =append (_bgedc ,_eeab );};};if len (_bgedc )==0{return nil ;};_cf .Slice (_bgedc ,func (_faaed ,_gebg int )bool {return _gcd (_bgedc [_faaed ],_bgedc [_gebg ])< 0});_cccg :=_cbac (_cafa .PdfRectangle ,_bgedc );if _fada {_ad .Log .Info ("\u0061\u0072\u0072an\u0067\u0065\u0054\u0065\u0078\u0074\u0020\u0021\u0021\u0021\u0020\u0070\u0061\u0072\u0061\u003d\u0025\u0073",_cccg .String ());if _ggcd {for _cccf ,_fcaf :=range _cccg ._fcaad {_dc .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_cccf ,_fcaf .String ());if _gfbcc {for _eeaf ,_cgbdd :=range _fcaf ._becbb {_dc .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_eeaf ,_cgbdd .String ());for _abbd ,_gdbgd :=range _cgbdd ._dgcbf {_dc .Printf ("\u00251\u0032\u0064\u003a\u0020\u0025\u0073\n",_abbd ,_gdbgd .String ());};};};};};};return _cccg ;};func (_gdf *imageExtractContext )extractFormImages (_dg *_gd .PdfObjectName ,_aff _ga .GraphicsState ,_ggg *_dd .PdfPageResources )error {_cca ,_bcf :=_ggg .GetXObjectFormByName (*_dg );if _bcf !=nil {return _bcf ;};if _cca ==nil {return nil ;};_gda ,_bcf :=_cca .GetContentStream ();if _bcf !=nil {return _bcf ;};_gdff :=_cca .Resources ;if _gdff ==nil {_gdff =_ggg ;};_bcf =_gdf .extractContentStreamImages (string (_gda ),_gdff );if _bcf !=nil {return _bcf ;};_gdf ._db ++;return nil ;};
// 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 (_bcg *Extractor )ExtractPageText ()(*PageText ,int ,int ,error ){_cffc ,_ged ,_gbd ,_abg :=_bcg .extractPageText (_bcg ._add ,_bcg ._aa ,_cd .IdentityMatrix (),0);if _abg !=nil {return nil ,0,0,_abg ;};_cffc .computeViews ();_abg =_afgfd (_cffc );if _abg !=nil {return nil ,0,0,_abg ;};return _cffc ,_ged ,_gbd ,nil ;};func (_fgeg *textLine )endsInHyphen ()bool {_fccg :=_fgeg ._becbb [len (_fgeg ._becbb )-1];_fafg :=_fccg ._ebed ;_ebdd ,_agad :=_g .DecodeLastRuneInString (_fafg );if _agad <=0||!_b .Is (_b .Hyphen ,_ebdd ){return false ;};if _fccg ._fabdc &&_fcgd (_fafg ){return true ;};return _fcgd (_fgeg .text ());};
// String returns a description of `p`.
func (_bece *textPara )String ()string {if _bece ._ebfg {return _dc .Sprintf ("\u0025\u0036\u002e\u0032\u0066\u0020\u005b\u0045\u004d\u0050\u0054\u0059\u005d",_bece .PdfRectangle );};_dbea :="";if _bece ._cgf !=nil {_dbea =_dc .Sprintf ("\u005b\u0025\u0064\u0078\u0025\u0064\u005d\u0020",_bece ._cgf ._gddg ,_bece ._cgf ._adfe );};return _dc .Sprintf ("\u0025\u0036\u002e\u0032f \u0025\u0073\u0025\u0064\u0020\u006c\u0069\u006e\u0065\u0073\u0020\u0025\u0071",_bece .PdfRectangle ,_dbea ,len (_bece ._fcaad ),_cgbgd (_bece .text (),50));};func _affga (_caaca _dd .PdfRectangle )*ruling {return &ruling {_abgae :_fdff ,_acaf :_caaca .Urx ,_fgdd :_caaca .Lly ,_cage :_caaca .Ury };};func (_cgfg *ruling )intersects (_fbce *ruling )bool {_egdce :=(_cgfg ._abgae ==_fdff &&_fbce ._abgae ==_feae )||(_fbce ._abgae ==_fdff &&_cgfg ._abgae ==_feae );_dcca :=func (_fcca ,_gfgcg *ruling )bool {return _fcca ._fgdd -_dad <=_gfgcg ._acaf &&_gfgcg ._acaf <=_fcca ._cage +_dad ;};_agce :=_dcca (_cgfg ,_fbce );_bgac :=_dcca (_fbce ,_cgfg );if _fggb {_dc .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",_egdce ,_agce ,_bgac ,_egdce &&_agce &&_bgac ,_cgfg ,_fbce );};return _egdce &&_agce &&_bgac ;};func (_abb *subpath )last ()_cd .Point {return _abb ._addd [len (_abb ._addd )-1]};func (_fec *textObject )setTextRenderMode (_dbcf int ){if _fec ==nil {return ;};_fec ._bfdgc ._babc =RenderMode (_dbcf );};
// 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 _dd .PdfRectangle ;
// Font is the font the text was drawn with.
Font *_dd .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 _ed .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 _ed .Color ;
// Orientation is the text orientation
Orientation int ;};
// ImageMark represents an image drawn on a page and its position in device coordinates.
// All coordinates are in device coordinates.
type ImageMark struct{Image *_dd .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 _dbgda (_gafaa []*textWord ,_ebbf *textWord )[]*textWord {for _dagd ,_cdadge :=range _gafaa {if _cdadge ==_ebbf {return _eebab (_gafaa ,_dagd );};};_ad .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",_ebbf );return nil ;};func _affde (_bgced string )(string ,bool ){_abgfe :=[]rune (_bgced );if len (_abgfe )!=1{return "",false ;};_gadg ,_cgge :=_aecgf [_abgfe [0]];return _gadg ,_cgge ;};func (_eaebda paraList )extractTables (_ecgff []gridTiling )paraList {if _bedbb {_ad .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 (_eaebda ));};if len (_eaebda )< _ega {return _eaebda ;};_dggg :=_eaebda .findTables (_ecgff );if _bedbb {_ad .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 (_dggg ));for _cfeb ,_abfcd :=range _dggg {_abfcd .log (_dc .Sprintf ("c\u006f\u006d\u0062\u0069\u006e\u0065\u0064\u0020\u0025\u0064",_cfeb ));};};return _eaebda .applyTables (_dggg );};
// TextMarkArray is a collection of TextMarks.
type TextMarkArray struct{_dcf []TextMark };
// String returns a string describing `tm`.
func (_eff TextMark )String ()string {_agec :=_eff .BBox ;var _ageb string ;if _eff .Font !=nil {_ageb =_eff .Font .String ();if len (_ageb )> 50{_ageb =_ageb [:50]+"\u002e\u002e\u002e";};};var _ddfb string ;if _eff .Meta {_ddfb ="\u0020\u002a\u004d\u002a";};return _dc .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",_eff .Offset ,_eff .Text ,[]rune (_eff .Text ),_agec .Llx ,_agec .Lly ,_agec .Urx ,_agec .Ury ,_ageb ,_ddfb );};func (_gcada gridTiling )complete ()bool {for _ ,_aafg :=range _gcada ._ggac {for _ ,_dbdd :=range _aafg {if !_dbdd .complete (){return false ;};};};return true ;};func (_dagb *ruling )alignsSec (_gdecb *ruling )bool {const _cbgc =_gbg +1.0;return _dagb ._fgdd -_cbgc <=_gdecb ._cage &&_gdecb ._fgdd -_cbgc <=_dagb ._cage ;};func (_dged paraList )toTextMarks ()[]TextMark {_ggee :=0;var _cadd []TextMark ;for _gcdd ,_feaaf :=range _dged {if _feaaf ._ebfg {continue ;};_abged :=_feaaf .toTextMarks (&_ggee );_cadd =append (_cadd ,_abged ...);if _gcdd !=len (_dged )-1{if _dgfd (_feaaf ,_dged [_gcdd +1]){_cadd =_fabc (_cadd ,&_ggee ,"\u0020");}else {_cadd =_fabc (_cadd ,&_ggee ,"\u000a");_cadd =_fabc (_cadd ,&_ggee ,"\u000a");};};};_cadd =_fabc (_cadd ,&_ggee ,"\u000a");_cadd =_fabc (_cadd ,&_ggee ,"\u000a");return _cadd ;};func _dae (_aega *Extractor ,_fcda *_dd .PdfPageResources ,_afdb _ga .GraphicsState ,_fa *textState ,_eace *stateStack )*textObject {return &textObject {_bfe :_aega ,_eaae :_fcda ,_bgda :_afdb ,_fea :_eace ,_bfdgc :_fa ,_fddg :_cd .IdentityMatrix (),_cba :_cd .IdentityMatrix ()};};func _adc (_gbcd ,_dcgag _dd .PdfRectangle )bool {return _fafcf (_gbcd ,_dcgag )&&_befe (_gbcd ,_dcgag )};func (_ebfgd rulingList )tidied (_fgea string )rulingList {_fcag :=_ebfgd .removeDuplicates ();_fcag .log ("\u0075n\u0069\u0071\u0075\u0065\u0073");_defda :=_fcag .snapToGroups ();if _defda ==nil {return nil ;};_defda .sort ();if _fggb {_ad .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",_fgea ,len (_ebfgd ),len (_fcag ),len (_defda ));};_defda .log ("\u0063o\u0061\u006c\u0065\u0073\u0063\u0065d");return _defda ;};
// String returns a description of `w`.
func (_bedf *textWord )String ()string {return _dc .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",_bedf ._gceede ,_bedf .PdfRectangle ,_bedf ._dafb ,_bedf ._ebed );};func (_dcff *textPara )text ()string {_acefd :=new (_ac .Buffer );_dcff .writeText (_acefd );return _acefd .String ();};func (_cgfe rulingList )bbox ()_dd .PdfRectangle {var _ageeea _dd .PdfRectangle ;if len (_cgfe )==0{_ad .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 _dd .PdfRectangle {};};if _cgfe [0]._abgae ==_feae {_ageeea .Llx ,_ageeea .Urx =_cgfe .secMinMax ();_ageeea .Lly ,_ageeea .Ury =_cgfe .primMinMax ();}else {_ageeea .Llx ,_ageeea .Urx =_cgfe .primMinMax ();_ageeea .Lly ,_ageeea .Ury =_cgfe .secMinMax ();};return _ageeea ;};func _cgee (_fadc map[float64 ]gridTile )[]float64 {_aaeab :=make ([]float64 ,0,len (_fadc ));for _ccde :=range _fadc {_aaeab =append (_aaeab ,_ccde );};_cf .Float64s (_aaeab );return _aaeab ;};func _eddd (_eacf ,_fccdb int )uint64 {return uint64 (_eacf )*0x1000000+uint64 (_fccdb )};func _feccac (_bdcec []rulingList )(rulingList ,rulingList ){var _fbdd rulingList ;for _ ,_gcbfe :=range _bdcec {_fbdd =append (_fbdd ,_gcbfe ...);};return _fbdd .vertsHorzs ();};const (_cffb rulingKind =iota ;_feae ;_fdff ;);func (_ddfg *wordBag )sort (){for _ ,_fadd :=range _ddfg ._efeb {_cf .Slice (_fadd ,func (_feg ,_fbff int )bool {return _bedg (_fadd [_feg ],_fadd [_fbff ])< 0});};};const (_cbc =false ;_cga =false ;_dffd =false ;_eedd =false ;_ecef =false ;_bedbd =false ;_fbba =false ;_gcdc =false ;_fada =false ;_ggcd =_fada &&true ;_gfbcc =_ggcd &&false ;_dbae =_fada &&true ;_bedbb =false ;_dcfc =_bedbb &&false ;_dea =_bedbb &&true ;_fggb =false ;_caa =_fggb &&false ;_dgcc =_fggb &&false ;_dgdd =_fggb &&true ;_aaf =_fggb &&false ;_bgff =_fggb &&false ;);func (_fcae *textTable )put (_aabeb ,_fgge int ,_efcbe *textPara ){_fcae ._efbae [_eddd (_aabeb ,_fgge )]=_efcbe ;};func _aade (_dccc _cd .Matrix )_cd .Point {_eeea ,_gbc :=_dccc .Translation ();return _cd .Point {X :_eeea ,Y :_gbc };};
// String returns a string describing `ma`.
func (_gfd TextMarkArray )String ()string {_dggd :=len (_gfd ._dcf );if _dggd ==0{return "\u0045\u004d\u0050T\u0059";};_daea :=_gfd ._dcf [0];_cef :=_gfd ._dcf [_dggd -1];return _dc .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",_dggd ,_daea ,_cef );};func (_efbg *textTable )compositeColCorridors ()map[int ][]float64 {_efff :=make (map[int ][]float64 ,_efbg ._gddg );if _bedbb {_ad .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",_efbg ._gddg );};for _bdef :=0;_bdef < _efbg ._gddg ;_bdef ++{_efff [_bdef ]=nil ;};return _efff ;};func _gdbfg (_ebda _dd .PdfRectangle ,_aebdd ,_abde ,_acda ,_deefe *ruling )gridTile {_ggag :=_ebda .Llx ;_eceg :=_ebda .Urx ;_gbaa :=_ebda .Lly ;_ddcb :=_ebda .Ury ;return gridTile {PdfRectangle :_ebda ,_gfgca :_aebdd !=nil &&_aebdd .encloses (_gbaa ,_ddcb ),_ebce :_abde !=nil &&_abde .encloses (_gbaa ,_ddcb ),_bgfee :_acda !=nil &&_acda .encloses (_ggag ,_eceg ),_aabe :_deefe !=nil &&_deefe .encloses (_ggag ,_eceg )};};
// 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 (_dcfdg rulingList )mergePrimary ()float64 {_fege :=_dcfdg [0]._acaf ;for _ ,_acdag :=range _dcfdg [1:]{_fege +=_acdag ._acaf ;};return _fege /float64 (len (_dcfdg ));};func _dgdb (_dbda float64 )bool {return _ge .Abs (_dbda )< _cgea };func (_gfbe paraList )readBefore (_bbf []int ,_fbg ,_fbad int )bool {_bdbed ,_ffcb :=_gfbe [_fbg ],_gfbe [_fbad ];if _fgad (_bdbed ,_ffcb )&&_bdbed .Lly > _ffcb .Lly {return true ;};if !(_bdbed ._gaca .Urx < _ffcb ._gaca .Llx ){return false ;};_fcffa ,_eabf :=_bdbed .Lly ,_ffcb .Lly ;if _fcffa > _eabf {_eabf ,_fcffa =_fcffa ,_eabf ;};_acfd :=_ge .Max (_bdbed ._gaca .Llx ,_ffcb ._gaca .Llx );_gdfc :=_ge .Min (_bdbed ._gaca .Urx ,_ffcb ._gaca .Urx );_aabb :=_gfbe .llyRange (_bbf ,_fcffa ,_eabf );for _ ,_edac :=range _aabb {if _edac ==_fbg ||_edac ==_fbad {continue ;};_cbgfd :=_gfbe [_edac ];if _cbgfd ._gaca .Llx <=_gdfc &&_acfd <=_cbgfd ._gaca .Urx {return false ;};};return true ;};func _babdb (_dadc *wordBag ,_gfcc float64 ,_cgca ,_gdbg rulingList )[]*wordBag {var _edd []*wordBag ;for _ ,_abgg :=range _dadc .depthIndexes (){_abggf :=false ;for !_dadc .empty (_abgg ){_cdfc :=_dadc .firstReadingIndex (_abgg );_egba :=_dadc .firstWord (_cdfc );_ddfa :=_babd (_egba ,_gfcc ,_cgca ,_gdbg );_dadc .removeWord (_egba ,_cdfc );if _fbba {_ad .Log .Info ("\u0066\u0069\u0072\u0073\u0074\u0057\u006f\u0072\u0064\u0020\u005e\u005e^\u005e\u0020\u0025\u0073",_egba .String ());};for _fggg :=true ;_fggg ;_fggg =_abggf {_abggf =false ;_egbg :=_ebca *_ddfa ._ebge ;_edcd :=_gafbg *_ddfa ._ebge ;_dcdc :=_efbe *_ddfa ._ebge ;if _fbba {_ad .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",_ddfa .minDepth (),_ddfa .maxDepth (),_dcdc ,_edcd );};if _dadc .scanBand ("\u0076\u0065\u0072\u0074\u0069\u0063\u0061\u006c",_ddfa ,_fcaa (_ggad ,0),_ddfa .minDepth ()-_dcdc ,_ddfa .maxDepth ()+_dcdc ,_agfg ,false ,false )> 0{_abggf =true ;};if _dadc .scanBand ("\u0068\u006f\u0072\u0069\u007a\u006f\u006e\u0074\u0061\u006c",_ddfa ,_fcaa (_ggad ,_edcd ),_ddfa .minDepth (),_ddfa .maxDepth (),_ccfc ,false ,false )> 0{_abggf =true ;};if _abggf {continue ;};_abge :=_dadc .scanBand ("",_ddfa ,_fcaa (_cbdc ,_egbg ),_ddfa .minDepth (),_ddfa .maxDepth (),_ddda ,true ,false );if _abge > 0{_bfae :=(_ddfa .maxDepth ()-_ddfa .minDepth ())/_ddfa ._ebge ;if (_abge > 1&&float64 (_abge )> 0.3*_bfae )||_abge <=10{if _dadc .scanBand ("\u006f\u0074\u0068e\u0072",_ddfa ,_fcaa (_cbdc ,_egbg ),_ddfa .minDepth (),_ddfa .maxDepth (),_ddda ,false ,true )> 0{_abggf =true ;};};};};_edd =append (_edd ,_ddfa );};};return _edd ;};func (_efbc *textObject )renderText (_aaa []byte )error {if _efbc ._eeg {_ad .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 ;};_cgd :=_efbc .getCurrentFont ();_ebega :=_cgd .BytesToCharcodes (_aaa );_gdb ,_fbb ,_eegf :=_cgd .CharcodesToStrings (_ebega );if _eegf > 0{_ad .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",_fbb ,_eegf );};_efbc ._bfdgc ._gca +=_fbb ;_efbc ._bfdgc ._aae +=_eegf ;_ecd :=_efbc ._bfdgc ;_aeae :=_ecd ._dccf ;_cbgf :=_ecd ._cdda /100.0;_gafb ,_efg :=_cgd .GetRuneMetrics (' ');if !_efg {_gafb ,_efg =_cgd .GetCharMetrics (32);};if !_efg {_gafb ,_ =_dd .DefaultFont ().GetRuneMetrics (' ');};_bed :=_gafb .Wx *_ada ;_ad .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",_bed ,_gdb ,_cgd ,_aeae );_bbgd :=_cd .NewMatrix (_aeae *_cbgf ,0,0,_aeae ,0,_ecd ._gfee );if _bedbd {_ad .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 (_ebega ),_ebega ,_gdb );};_ad .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 (_ebega ),_ebega ,len (_gdb ));_bead :=_efbc .getFillColor ();_cbdg :=_efbc .getStrokeColor ();for _dfd ,_dbbc :=range _gdb {_bbc :=[]rune (_dbbc );if len (_bbc )==1&&_bbc [0]=='\x00'{continue ;};_eee :=_ebega [_dfd ];_bfgc :=_efbc ._bgda .CTM .Mult (_efbc ._fddg ).Mult (_bbgd );_bfdbc :=0.0;if len (_bbc )==1&&_bbc [0]==32{_bfdbc =_ecd ._gcee ;};_bgfa ,_ddc :=_cgd .GetCharMetrics (_eee );if !_ddc {_ad .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",_eee ,_bbc ,_bbc ,_cgd );return _dc .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",_cgd .String (),_eee );};_feaa :=_cd .Point {X :_bgfa .Wx *_ada ,Y :_bgfa .Wy *_ada };_afac :=_cd .Point {X :(_feaa .X *_aeae +_bfdbc )*_cbgf };_fddd :=_cd .Point {X :(_feaa .X *_aeae +_ecd ._ade +_bfdbc )*_cbgf };if _bedbd {_ad .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",_aeae ,_ecd ._ade ,_ecd ._gcee ,_cbgf );_ad .Log .Info ("\u0064x\u002c\u0064\u0079\u003d%\u002e\u0033\u0066\u0020\u00740\u003d%\u002e3\u0066\u0020\u0074\u003d\u0025\u002e\u0033f",_feaa ,_afac ,_fddd );};_cdc :=_fdb (_afac );_gac :=_fdb (_fddd );_dfa :=_efbc ._bgda .CTM .Mult (_efbc ._fddg ).Mult (_cdc );if _eedd {_ad .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",_efbc ._bgda .CTM ,_efbc ._fddg ,_gac ,_aade (_efbc ._bgda .CTM .Mult (_efbc ._fddg ).Mult (_gac )),_cdc ,_dfa ,_aade (_dfa ));};_dgg ,_cbb :=_efbc .newTextMark (_ce .ExpandLigatures (_bbc ),_bfgc ,_aade (_dfa ),_ge .Abs (_bed *_bfgc .ScalingFactorX ()),_cgd ,_efbc ._bfdgc ._ade ,_bead ,_cbdg );if !_cbb {_ad .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 _cgd ==nil {_ad .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u004e\u006f\u0020\u0066\u006f\u006e\u0074\u002e");}else if _cgd .Encoder ()==nil {_ad .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",_cgd );}else {if _eacd ,_fcbd :=_cgd .Encoder ().CharcodeToRune (_eee );_fcbd {_dgg ._dbffe =string (_eacd );};};_ad .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",_dfd ,_eee ,_dgg ,_bfgc );_efbc ._bgdab =append (_efbc ._bgdab ,&_dgg );_efbc ._fddg .Concat (_gac );};return nil ;};func (_cdbgg *textPara )isAtom ()*textTable {_cagbb :=_cdbgg ;_gfbcbc :=_cdbgg ._geged ;_cccgg :=_cdbgg ._gfaf ;if !(_gfbcbc !=nil &&!_gfbcbc ._ebaf &&_cccgg !=nil &&!_cccgg ._ebaf ){return nil ;};_dedb :=_gfbcbc ._gfaf ;if !(_dedb !=nil &&!_dedb ._ebaf &&_dedb ==_cccgg ._geged ){return nil ;};return _ggdc (_cagbb ,_gfbcbc ,_cccgg ,_dedb );};func _aeaa (_aeaea []pathSection )rulingList {_ebbb (_aeaea );if _fggb {_ad .Log .Info ("\u006da\u006b\u0065\u0046\u0069l\u006c\u0052\u0075\u006c\u0069n\u0067s\u003a \u0025\u0064\u0020\u0066\u0069\u006c\u006cs",len (_aeaea ));};var _fadg rulingList ;for _ ,_fdbc :=range _aeaea {for _ ,_bagdg :=range _fdbc ._fgf {if !_bagdg .isQuadrilateral (){if _fggb {_ad .Log .Error ("!\u0069s\u0051\u0075\u0061\u0064\u0072\u0069\u006c\u0061t\u0065\u0072\u0061\u006c: \u0025\u0073",_bagdg );};continue ;};if _bbda ,_efcb :=_bagdg .makeRectRuling (_fdbc .Color );_efcb {_fadg =append (_fadg ,_bbda );}else {if _aaf {_ad .Log .Error ("\u0021\u006d\u0061\u006beR\u0065\u0063\u0074\u0052\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0025\u0073",_bagdg );};};};};if _fggb {_ad .Log .Info ("\u006d\u0061\u006b\u0065Fi\u006c\u006c\u0052\u0075\u006c\u0069\u006e\u0067\u0073\u003a\u0020\u0025\u0073",_fadg .String ());};return _fadg ;};func (_acab *subpath )add (_fee ..._cd .Point ){_acab ._addd =append (_acab ._addd ,_fee ...)};func (_gcgb gridTiling )log (_eadg string ){if !_dgdd {return ;};_ad .Log .Info ("\u0074i\u006ci\u006e\u0067\u003a\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0071",len (_gcgb ._cgdb ),len (_gcgb ._cfeab ),_eadg );_dc .Printf ("\u0020\u0020\u0020l\u006c\u0078\u003d\u0025\u002e\u0032\u0066\u000a",_gcgb ._cgdb );_dc .Printf ("\u0020\u0020\u0020l\u006c\u0079\u003d\u0025\u002e\u0032\u0066\u000a",_gcgb ._cfeab );for _bbgac ,_eegdc :=range _gcgb ._cfeab {_bafg ,_dece :=_gcgb ._ggac [_eegdc ];if !_dece {continue ;};_dc .Printf ("%\u0034\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u000a",_bbgac ,_eegdc );for _edcdd ,_fed :=range _gcgb ._cgdb {_fcbe ,_eacdg :=_bafg [_fed ];if !_eacdg {continue ;};_dc .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_edcdd ,_fcbe .String ());};};};func _dbdg (_gfad ,_gdag _dd .PdfRectangle )(_dd .PdfRectangle ,bool ){if !_adc (_gfad ,_gdag ){return _dd .PdfRectangle {},false ;};return _dd .PdfRectangle {Llx :_ge .Max (_gfad .Llx ,_gdag .Llx ),Urx :_ge .Min (_gfad .Urx ,_gdag .Urx ),Lly :_ge .Max (_gfad .Lly ,_gdag .Lly ),Ury :_ge .Min (_gfad .Ury ,_gdag .Ury )},true ;};func (_abdg rulingList )findPrimSec (_agbcb ,_gabc float64 )*ruling {for _ ,_fbda :=range _abdg {if _dgdb (_fbda ._acaf -_agbcb )&&_fbda ._fgdd -_dad <=_gabc &&_gabc <=_fbda ._cage +_dad {return _fbda ;};};return nil ;};func (_eabd *wordBag )highestWord (_afce int ,_cbaed ,_dggf float64 )*textWord {for _ ,_dee :=range _eabd ._efeb [_afce ]{if _cbaed <=_dee ._gceede &&_dee ._gceede <=_dggf {return _dee ;};};return nil ;};func (_eaed compositeCell )hasLines (_ccaf []*textLine )bool {for _bbab ,_dada :=range _ccaf {_daaf :=_adc (_eaed .PdfRectangle ,_dada .PdfRectangle );if _bedbb {_dc .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",_daaf ,_bbab ,len (_ccaf ));_dc .Printf ("\u0020\u0020\u0020\u0020 \u005e\u005e\u005e\u0063\u006f\u006d\u0070\u006f\u0073\u0069\u0074\u0065\u003d\u0025s\u000a",_eaed );_dc .Printf ("\u0020 \u0020 \u0020\u0020\u0020\u006c\u0069\u006e\u0065\u003d\u0025\u0073\u000a",_dada );};if _daaf {return true ;};};return false ;};func _ggdc (_efbd ,_fedc ,_ddaef ,_cced *textPara )*textTable {_dagg :=&textTable {_gddg :2,_adfe :2,_efbae :make (map[uint64 ]*textPara ,4)};_dagg .put (0,0,_efbd );_dagg .put (1,0,_fedc );_dagg .put (0,1,_ddaef );_dagg .put (1,1,_cced );return _dagg ;};func (_cae *textObject )getFont (_cdbd string )(*_dd .PdfFont ,error ){if _cae ._bfe ._dca !=nil {_cae ._bfe ._aab ++;_dbg ,_gdaa :=_cae ._bfe ._dca [_cdbd ];if _gdaa {_dbg ._fdag =_cae ._bfe ._aab ;return _dbg ._cagc ,nil ;};};_agg ,_dbfc :=_cae .getFontDirect (_cdbd );if _dbfc !=nil {return nil ,_dbfc ;};if _cae ._bfe ._dca !=nil {_gedc :=fontEntry {_agg ,_cae ._bfe ._aab };if len (_cae ._bfe ._dca )>=_aefd {var _ggd []string ;for _fbbb :=range _cae ._bfe ._dca {_ggd =append (_ggd ,_fbbb );};_cf .Slice (_ggd ,func (_fef ,_dafe int )bool {return _cae ._bfe ._dca [_ggd [_fef ]]._fdag < _cae ._bfe ._dca [_ggd [_dafe ]]._fdag ;});delete (_cae ._bfe ._dca ,_ggd [0]);};_cae ._bfe ._dca [_cdbd ]=_gedc ;};return _agg ,nil ;};func (_fgga *textPara )toCellTextMarks (_ffee *int )[]TextMark {var _abdd []TextMark ;for _cdbg ,_bggf :=range _fgga ._fcaad {_aaba :=_bggf .toTextMarks (_ffee );_ebfb :=_cceg &&_bggf .endsInHyphen ()&&_cdbg !=len (_fgga ._fcaad )-1;if _ebfb {_aaba =_cdba (_aaba ,_ffee );};_abdd =append (_abdd ,_aaba ...);if !(_ebfb ||_cdbg ==len (_fgga ._fcaad )-1){_abdd =_fabc (_abdd ,_ffee ,_baac (_bggf ._dgfa ,_fgga ._fcaad [_cdbg +1]._dgfa ));};};return _abdd ;};func (_abf *Extractor )extractPageText (_egg string ,_bae *_dd .PdfPageResources ,_dbf _cd .Matrix ,_dfe int )(*PageText ,int ,int ,error ){_ad .Log .Trace ("\u0065x\u0074\u0072\u0061\u0063t\u0050\u0061\u0067\u0065\u0054e\u0078t\u003a \u006c\u0065\u0076\u0065\u006c\u003d\u0025d",_dfe );_fe :=&PageText {_bgc :_abf ._eda };_bac :=_ccf (_abf ._eda );_bfb :=stateStack {&_bac };_afd :=_dae (_abf ,_bae ,_ga .GraphicsState {},&_bac ,&_bfb );_gbe :=shapesState {_agb :_dbf ,_eded :_cd .IdentityMatrix (),_fcac :_afd };var _dccb bool ;if _dfe > _ccc {_fb :=_f .New ("\u0066\u006f\u0072\u006d s\u0074\u0061\u0063\u006b\u0020\u006f\u0076\u0065\u0072\u0066\u006c\u006f\u0077");_ad .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",_dfe ,_fb );return _fe ,_bac ._gca ,_bac ._aae ,_fb ;};_fbd :=_ga .NewContentStreamParser (_egg );_gcf ,_eag :=_fbd .Parse ();if _eag !=nil {_ad .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",_eag );return _fe ,_bac ._gca ,_bac ._aae ,_eag ;};_bcge :=_ga .NewContentStreamProcessor (*_gcf );_bcge .AddHandler (_ga .HandlerConditionEnumAllOperands ,"",func (_cbg *_ga .ContentStreamOperation ,_afa _ga .GraphicsState ,_baf *_dd .PdfPageResources )error {_gad :=_cbg .Operand ;if _dffd {_ad .Log .Info ("\u0026&\u0026\u0020\u006f\u0070\u003d\u0025s",_cbg );};switch _gad {case "\u0071":if _ecef {_ad .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_gbe ._eded );};_bfb .push (&_bac );case "\u0051":if !_bfb .empty (){if len (_bfb )>=2{_bfb .pop ();};_bac =*_bfb .top ();};_gbe ._eded =_afa .CTM ;if _ecef {_ad .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_gbe ._eded );};case "\u0042\u0054":if _dccb {_ad .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");_fe ._gae =append (_fe ._gae ,_afd ._bgdab ...);};_dccb =true ;_dbc :=_afa ;_dbc .CTM =_dbf .Mult (_dbc .CTM );_afd =_dae (_abf ,_baf ,_dbc ,&_bac ,&_bfb );_gbe ._fcac =_afd ;case "\u0045\u0054":if !_dccb {_ad .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");};_dccb =false ;_fe ._gae =append (_fe ._gae ,_afd ._bgdab ...);_afd .reset ();case "\u0054\u002a":_afd .nextLine ();case "\u0054\u0064":if _gdc ,_gebb :=_afd .checkOp (_cbg ,2,true );!_gdc {_ad .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_gebb );return _gebb ;};_eac ,_bfd ,_bbd :=_agdb (_cbg .Params );if _bbd !=nil {return _bbd ;};_afd .moveText (_eac ,_bfd );case "\u0054\u0044":if _ebe ,_afb :=_afd .checkOp (_cbg ,2,true );!_ebe {_ad .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_afb );return _afb ;};_bdeb ,_gcff ,_dbcc :=_agdb (_cbg .Params );if _dbcc !=nil {_ad .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_dbcc );return _dbcc ;};_afd .moveTextSetLeading (_bdeb ,_gcff );case "\u0054\u006a":if _aca ,_bfdb :=_afd .checkOp (_cbg ,1,true );!_aca {_ad .Log .Debug ("\u0045\u0052\u0052\u004fR:\u0020\u0054\u006a\u0020\u006f\u0070\u003d\u0025\u0073\u0020\u0065\u0072\u0072\u003d%\u0076",_cbg ,_bfdb );return _bfdb ;};_cce ,_gce :=_gd .GetStringBytes (_cbg .Params [0]);if !_gce {_ad .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",_cbg );return _gd .ErrTypeError ;};return _afd .showText (_cce );case "\u0054\u004a":if _bgf ,_gdca :=_afd .checkOp (_cbg ,1,true );!_bgf {_ad .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u004a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_gdca );return _gdca ;};_dfg ,_bga :=_gd .GetArray (_cbg .Params [0]);if !_bga {_ad .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",_cbg );return _eag ;};return _afd .showTextAdjusted (_dfg );case "\u0027":if _fdd ,_bgaf :=_afd .checkOp (_cbg ,1,true );!_fdd {_ad .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u0027\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_bgaf );return _bgaf ;};_ebb ,_ede :=_gd .GetStringBytes (_cbg .Params [0]);if !_ede {_ad .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",_cbg );return _gd .ErrTypeError ;};_afd .nextLine ();return _afd .showText (_ebb );case "\u0022":if _ddd ,_fca :=_afd .checkOp (_cbg ,3,true );!_ddd {_ad .Log .Debug ("\u0045R\u0052O\u0052\u003a\u0020\u0022\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_fca );return _fca ;};_aeg ,_gfe ,_accb :=_agdb (_cbg .Params [:2]);if _accb !=nil {return _accb ;};_ceg ,_gaa :=_gd .GetStringBytes (_cbg .Params [2]);if !_gaa {_ad .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",_cbg );return _gd .ErrTypeError ;};_afd .setCharSpacing (_aeg );_afd .setWordSpacing (_gfe );_afd .nextLine ();return _afd .showText (_ceg );case "\u0054\u004c":_cab ,_dac :=_afba (_cbg );if _dac !=nil {_ad .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u004c\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_dac );return _dac ;};_afd .setTextLeading (_cab );case "\u0054\u0063":_cad ,_eab :=_afba (_cbg );if _eab !=nil {_ad .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0063\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_eab );return _eab ;};_afd .setCharSpacing (_cad );case "\u0054\u0066":if _ecc ,_ceaf :=_afd .checkOp (_cbg ,2,true );!_ecc {_ad .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0066\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_ceaf );return _ceaf ;};_efb ,_deca :=_gd .GetNameVal (_cbg .Params [0]);if !_deca {_ad .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",_cbg );return _gd .ErrTypeError ;};_cbd ,_bfdg :=_gd .GetNumberAsFloat (_cbg .Params [1]);if !_deca {_ad .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",_cbg ,_bfdg );return _bfdg ;};_bfdg =_afd .setFont (_efb ,_cbd );_afd ._eeg =_af .Is (_bfdg ,_gd .ErrNotSupported );if _bfdg !=nil &&!_afd ._eeg {return _bfdg ;};case "\u0054\u006d":if _cag ,_abd :=_afd .checkOp (_cbg ,6,true );!_cag {_ad .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u006d\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_abd );return _abd ;};_ccca ,_fcd :=_gd .GetNumbersAsFloat (_cbg .Params );if _fcd !=nil {_ad .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_fcd );return _fcd ;};_afd .setTextMatrix (_ccca );case "\u0054\u0072":if _bgd ,_ebeg :=_afd .checkOp (_cbg ,1,true );!_bgd {_ad .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0072\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_ebeg );return _ebeg ;};_gfa ,_bbg :=_gd .GetIntVal (_cbg .Params [0]);if !_bbg {_ad .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",_cbg );return _gd .ErrTypeError ;};_afd .setTextRenderMode (_gfa );case "\u0054\u0073":if _gdd ,_bfdgg :=_afd .checkOp (_cbg ,1,true );!_gdd {_ad .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a \u0054\u0073\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_bfdgg );return _bfdgg ;};_bea ,_cg :=_gd .GetNumberAsFloat (_cbg .Params [0]);if _cg !=nil {_ad .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_cg );return _cg ;};_afd .setTextRise (_bea );case "\u0054\u0077":if _ee ,_eaag :=_afd .checkOp (_cbg ,1,true );!_ee {_ad .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_eaag );return _eaag ;};_ded ,_cfab :=_gd .GetNumberAsFloat (_cbg .Params [0]);if _cfab !=nil {_ad .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_cfab );return _cfab ;};_afd .setWordSpacing (_ded );case "\u0054\u007a":if _deb ,_abgc :=_afd .checkOp (_cbg ,1,true );!_deb {_ad .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_abgc );return _abgc ;};_eef ,_gaf :=_gd .GetNumberAsFloat (_cbg .Params [0]);if _gaf !=nil {_ad .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u0072\u0072\u003d\u0025\u0076",_gaf );return _gaf ;};_afd .setHorizScaling (_eef );case "\u0063\u006d":_gbe ._eded =_afa .CTM ;if _gbe ._eded .Singular (){_gfg :=_cd .IdentityMatrix ().Translate (_gbe ._eded .Translation ());_ad .Log .Debug ("S\u0069n\u0067\u0075\u006c\u0061\u0072\u0020\u0063\u0074m\u003d\u0025\u0073\u2192%s",_gbe ._eded ,_gfg );_gbe ._eded =_gfg ;};if _ecef {_ad .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_gbe ._eded );};case "\u006d":if len (_cbg .Params )!=2{_ad .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",_gb );return nil ;};_aeb ,_bcfg :=_gd .GetNumbersAsFloat (_cbg .Params );if _bcfg !=nil {return _bcfg ;};_ad .Log .Debug ("\u004d\u006f\u0076\u0065\u0020\u0074\u006f\u003a\u0020\u0025\u002e\u0032\u0066",_aeb );_gbe .moveTo (_aeb [0],_aeb [1]);case "\u006c":if len (_cbg .Params )!=2{_ad .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",_gb );return nil ;};_ecf ,_aadg :=_gd .GetNumbersAsFloat (_cbg .Params );if _aadg !=nil {return _aadg ;};_gbe .lineTo (_ecf [0],_ecf [1]);case "\u0063":if len (_cbg .Params )!=6{return _gb ;};_fcf ,_gcc :=_gd .GetNumbersAsFloat (_cbg .Params );if _gcc !=nil {return _gcc ;};_ad .Log .Debug ("\u0043u\u0062\u0069\u0063\u0020b\u0065\u007a\u0069\u0065\u0072 \u0070a\u0072a\u006d\u0073\u003a\u0020\u0025\u002e\u0032f",_fcf );_gbe .cubicTo (_fcf [0],_fcf [1],_fcf [2],_fcf [3],_fcf [4],_fcf [5]);case "\u0076","\u0079":if len (_cbg .Params )!=4{return _gb ;};_gggb ,_eed :=_gd .GetNumbersAsFloat (_cbg .Params );if _eed !=nil {return _eed ;};_ad .Log .Debug ("\u0043u\u0062\u0069\u0063\u0020b\u0065\u007a\u0069\u0065\u0072 \u0070a\u0072a\u006d\u0073\u003a\u0020\u0025\u002e\u0032f",_gggb );_gbe .quadraticTo (_gggb [0],_gggb [1],_gggb [2],_gggb [3]);case "\u0068":_gbe .closePath ();case "\u0072\u0065":if len (_cbg .Params )!=4{return _gb ;};_dab ,_cge :=_gd .GetNumbersAsFloat (_cbg .Params );if _cge !=nil {return _cge ;};_gbe .drawRectangle (_dab [0],_dab [1],_dab [2],_dab [3]);_gbe .closePath ();case "\u0053":_gbe .stroke (&_fe ._eea );_gbe .clearPath ();case "\u0073":_gbe .closePath ();_gbe .stroke (&_fe ._eea );_gbe .clearPath ();case "\u0046":_gbe .fill (&_fe ._abgcd );_gbe .clearPath ();case "\u0066","\u0066\u002a":_gbe .closePath ();_gbe .fill (&_fe ._abgcd );_gbe .clearPath ();case "\u0042","\u0042\u002a":_gbe .fill (&_fe ._abgcd );_gbe .stroke (&_fe ._eea );_gbe .clearPath ();case "\u0062","\u0062\u002a":_gbe .closePath ();_gbe .fill (&_fe ._abgcd );_gbe .stroke (&_fe ._eea );_gbe .clearPath ();case "\u006e":_gbe .clearPath ();case "\u0044\u006f":if len (_cbg .Params )==0{_ad .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",_cbg .Params );return _gd .ErrRangeError ;};_fgg ,_gea :=_gd .GetName (_cbg .Params [0]);if !_gea {_ad .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",_cbg .Params [0]);return _gd .ErrTypeError ;};_ ,_edeb :=_baf .GetXObjectByName (*_fgg );if _edeb !=_dd .XObjectTypeForm {break ;};_geac ,_gea :=_abf ._gdg [_fgg .String ()];if !_gea {_cgef ,_bgb :=_baf .GetXObjectFormByName (*_fgg );if _bgb !=nil {_ad .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_bgb );return _bgb ;};_gef ,_bgb :=_cgef .GetContentStream ();if _bgb !=nil {_ad .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_bgb );return _bgb ;};_gec :=_cgef .Resources ;if _gec ==nil {_gec =_baf ;};_gcfe ,_ceag ,_dgf ,_bgb :=_abf .extractPageText (string (_gef ),_gec ,_dbf .Mult (_afa .CTM ),_dfe +1);if _bgb !=nil {_ad .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_bgb );return _bgb ;};_geac =textResult {*_gcfe ,_ceag ,_dgf };_abf ._gdg [_fgg .String ()]=_geac ;};_gbe ._eded =_afa .CTM ;if _ecef {_ad .Log .Info ("\u0063\u0074\u006d\u003d\u0025\u0073",_gbe ._eded );};_fe ._gae =append (_fe ._gae ,_geac ._ead ._gae ...);_fe ._eea =append (_fe ._eea ,_geac ._ead ._eea ...);_fe ._abgcd =append (_fe ._abgcd ,_geac ._ead ._abgcd ...);_bac ._gca +=_geac ._dba ;_bac ._aae +=_geac ._abc ;case "\u0072\u0067","\u0067","\u006b","\u0063\u0073","\u0073\u0063","\u0073\u0063\u006e":_afd ._bgda .ColorspaceNonStroking =_afa .ColorspaceNonStroking ;_afd ._bgda .ColorNonStroking =_afa .ColorNonStroking ;case "\u0052\u0047","\u0047","\u004b","\u0043\u0053","\u0053\u0043","\u0053\u0043\u004e":_afd ._bgda .ColorspaceStroking =_afa .ColorspaceStroking ;_afd ._bgda .ColorStroking =_afa .ColorStroking ;};return nil ;});_eag =_bcge .Process (_bae );return _fe ,_bac ._gca ,_bac ._aae ,_eag ;};type paraList []*textPara ;func (_eabgb lineRuling )asRuling ()(*ruling ,bool ){_ggbf :=ruling {_abgae :_eabgb ._dag ,Color :_eabgb .Color ,_aaff :_dega };switch _eabgb ._dag {case _fdff :_ggbf ._acaf =_eabgb .xMean ();_ggbf ._fgdd =_ge .Min (_eabgb ._aeeac .Y ,_eabgb ._daeb .Y );_ggbf ._cage =_ge .Max (_eabgb ._aeeac .Y ,_eabgb ._daeb .Y );case _feae :_ggbf ._acaf =_eabgb .yMean ();_ggbf ._fgdd =_ge .Min (_eabgb ._aeeac .X ,_eabgb ._daeb .X );_ggbf ._cage =_ge .Max (_eabgb ._aeeac .X ,_eabgb ._daeb .X );default:_ad .Log .Error ("\u0062\u0061\u0064\u0020pr\u0069\u006d\u0061\u0072\u0079\u0020\u006b\u0069\u006e\u0064\u003d\u0025\u0064",_eabgb ._dag );return nil ,false ;};return &_ggbf ,true ;};func (_cee *wordBag )allWords ()[]*textWord {var _dace []*textWord ;for _ ,_ebga :=range _cee ._efeb {_dace =append (_dace ,_ebga ...);};return _dace ;};type lineRuling struct{_dag rulingKind ;_bbff markKind ;_ed .Color ;_aeeac ,_daeb _cd .Point ;};
// BBox returns the smallest axis-aligned rectangle that encloses all the TextMarks in `ma`.
func (_fcga *TextMarkArray )BBox ()(_dd .PdfRectangle ,bool ){var _fae _dd .PdfRectangle ;_cabb :=false ;for _ ,_efgd :=range _fcga ._dcf {if _efgd .Meta ||_bbge (_efgd .Text ){continue ;};if _cabb {_fae =_ceab (_fae ,_efgd .BBox );}else {_fae =_efgd .BBox ;_cabb =true ;};};return _fae ,_cabb ;};func (_aeab gridTile )complete ()bool {return _aeab .numBorders ()==4};func (_dabd rulingList )connections (_eceb map[int ]intSet ,_dcag int )intSet {_acfe :=make (intSet );_gbfb :=make (intSet );var _eegad func (int );_eegad =func (_eegd int ){if !_gbfb .has (_eegd ){_gbfb .add (_eegd );for _ccgg :=range _dabd {if _eceb [_ccgg ].has (_eegd ){_acfe .add (_ccgg );};};for _dcgaa :=range _dabd {if _acfe .has (_dcgaa ){_eegad (_dcgaa );};};};};_eegad (_dcag );return _acfe ;};type fontEntry struct{_cagc *_dd .PdfFont ;_fdag int64 ;};func (_fbag *textLine )toTextMarks (_gfef *int )[]TextMark {var _aabc []TextMark ;for _ ,_afae :=range _fbag ._becbb {if _afae ._fabdc {_aabc =_fabc (_aabc ,_gfef ,"\u0020");};_eaca :=_afae .toTextMarks (_gfef );_aabc =append (_aabc ,_eaca ...);};return _aabc ;};func (_gdfg *shapesState )closePath (){if _gdfg ._dedf {_gdfg ._cgbd =append (_gdfg ._cgbd ,_fafc (_gdfg ._fecc ));_gdfg ._dedf =false ;}else if len (_gdfg ._cgbd )==0{if _ecef {_ad .Log .Debug ("\u0063\u006c\u006f\u0073eP\u0061\u0074\u0068\u0020\u0077\u0069\u0074\u0068\u0020\u006e\u006f\u0020\u0070\u0061t\u0068");};_gdfg ._dedf =false ;return ;};_gdfg ._cgbd [len (_gdfg ._cgbd )-1].close ();if _ecef {_ad .Log .Info ("\u0063\u006c\u006f\u0073\u0065\u0050\u0061\u0074\u0068\u003a\u0020\u0025\u0073",_gdfg );};};func (_afbc *shapesState )clearPath (){_afbc ._cgbd =nil ;_afbc ._dedf =false ;if _ecef {_ad .Log .Info ("\u0043\u004c\u0045A\u0052\u003a\u0020\u0073\u0073\u003d\u0025\u0073",_afbc );};};
// String returns a description of `l`.
func (_efdd *textLine )String ()string {return _dc .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",_efdd ._dgfa ,_efdd .PdfRectangle ,_efdd ._cdgd ,_efdd .text ());};
// String returns a human readable description of `path`.
func (_eeaa *subpath )String ()string {_daa :=_eeaa ._addd ;_adab :=len (_daa );if _adab <=5{return _dc .Sprintf ("\u0025d\u003a\u0020\u0025\u0036\u002e\u0032f",_adab ,_daa );};return _dc .Sprintf ("\u0025d\u003a\u0020\u0025\u0036.\u0032\u0066\u0020\u0025\u0036.\u0032f\u0020.\u002e\u002e\u0020\u0025\u0036\u002e\u0032f",_adab ,_daa [0],_daa [1],_daa [_adab -1]);};func _cbdc (_fcff *wordBag ,_cddd *textWord ,_cfb float64 )bool {return _fcff .Urx <=_cddd .Llx &&_cddd .Llx < _fcff .Urx +_cfb ;};
// String returns a description of `t`.
func (_baedg *textTable )String ()string {return _dc .Sprintf ("\u0025\u0064\u0020\u0078\u0020\u0025\u0064\u0020\u0025\u0074",_baedg ._gddg ,_baedg ._adfe ,_baedg ._eafc );};
// Len returns the number of TextMarks in `ma`.
func (_dge *TextMarkArray )Len ()int {if _dge ==nil {return 0;};return len (_dge ._dcf );};func (_gba *textObject )showText (_daf []byte )error {return _gba .renderText (_daf )};func _bee (_dbgd string )string {_eacgc :=[]rune (_dbgd );return string (_eacgc [:len (_eacgc )-1])};func (_eec *shapesState )drawRectangle (_dgc ,_egf ,_eae ,_bdec float64 ){if _ecef {_ffc :=_eec .devicePoint (_dgc ,_egf );_bbaf :=_eec .devicePoint (_dgc +_eae ,_egf +_bdec );_ebf :=_dd .PdfRectangle {Llx :_ffc .X ,Lly :_ffc .Y ,Urx :_bbaf .X ,Ury :_bbaf .Y };_ad .Log .Info ("d\u0072a\u0077\u0052\u0065\u0063\u0074\u0061\u006e\u0067l\u0065\u003a\u0020\u00256.\u0032\u0066",_ebf );};_eec .newSubPath ();_eec .moveTo (_dgc ,_egf );_eec .lineTo (_dgc +_eae ,_egf );_eec .lineTo (_dgc +_eae ,_egf +_bdec );_eec .lineTo (_dgc ,_egf +_bdec );_eec .closePath ();};type bounded interface{bbox ()_dd .PdfRectangle };func (_bcffa *textWord )addDiacritic (_cdec string ){_geea :=_bcffa ._dgcbf [len (_bcffa ._dgcbf )-1];_geea ._fgeb +=_cdec ;_geea ._fgeb =_cb .NFKC .String (_geea ._fgeb );};func (_cegg *textObject )setTextMatrix (_decd []float64 ){if len (_decd )!=6{_ad .Log .Debug ("\u0045\u0052\u0052OR\u003a\u0020\u006c\u0065\u006e\u0028\u0066\u0029\u0020\u0021\u003d\u0020\u0036\u0020\u0028\u0025\u0064\u0029",len (_decd ));return ;};_fbc ,_dbcd ,_ecff ,_gcfd ,_bdbb ,_ffe :=_decd [0],_decd [1],_decd [2],_decd [3],_decd [4],_decd [5];_cegg ._fddg =_cd .NewMatrix (_fbc ,_dbcd ,_ecff ,_gcfd ,_bdbb ,_ffe );_cegg ._cba =_cegg ._fddg ;};func (_fbe *stateStack )size ()int {return len (*_fbe )};func _accc (_fba []*textWord ,_eeeg float64 ,_fga ,_gfeb rulingList )*wordBag {_eagg :=_babd (_fba [0],_eeeg ,_fga ,_gfeb );for _ ,_effg :=range _fba [1:]{_bda :=_egc (_effg ._gceede );_eagg ._efeb [_bda ]=append (_eagg ._efeb [_bda ],_effg );_eagg .PdfRectangle =_ceab (_eagg .PdfRectangle ,_effg .PdfRectangle );};_eagg .sort ();return _eagg ;};func _ebbb (_ccdfa []pathSection ){if _aaabg < 0.0{return ;};if _fggb {_ad .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 (_ccdfa ));};for _ddddc ,_ageed :=range _ccdfa {for _dffb ,_bcebc :=range _ageed ._fgf {for _gfae ,_gdce :=range _bcebc ._addd {_bcebc ._addd [_gfae ]=_cd .Point {X :_dfgfe (_gdce .X ),Y :_dfgfe (_gdce .Y )};if _fggb {_bdgf :=_bcebc ._addd [_gfae ];if !_fefcb (_gdce ,_bdgf ){_abddg :=_cd .Point {X :_bdgf .X -_gdce .X ,Y :_bdgf .Y -_gdce .Y };_dc .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",_ddddc ,_dffb ,_gfae ,_gdce ,_bdgf ,_abddg );};};};};};};func _bdccd (_ddbgg ,_ebbe float64 )bool {return _ge .Abs (_ddbgg -_ebbe )<=_dad };func (_bbde rulingList )comp (_fega ,_fgdb int )bool {_egbad ,_ccgb :=_bbde [_fega ],_bbde [_fgdb ];_cccc ,_dbefe :=_egbad ._abgae ,_ccgb ._abgae ;if _cccc !=_dbefe {return _cccc > _dbefe ;};if _cccc ==_cffb {return false ;};_ebaa :=func (_cdab bool )bool {if _cccc ==_feae {return _cdab ;};return !_cdab ;};_ebcc ,_fdgb :=_egbad ._acaf ,_ccgb ._acaf ;if _ebcc !=_fdgb {return _ebaa (_ebcc > _fdgb );};_ebcc ,_fdgb =_egbad ._fgdd ,_ccgb ._fgdd ;if _ebcc !=_fdgb {return _ebaa (_ebcc < _fdgb );};return _ebaa (_egbad ._cage < _ccgb ._cage );};func (_adff *shapesState )cubicTo (_adb ,_aga ,_edbc ,_decac ,_bedb ,_ggea float64 ){if _ecef {_ad .Log .Info ("\u0063\u0075\u0062\u0069\u0063\u0054\u006f\u003a");};_adff .addPoint (_bedb ,_ggea );};func (_bcec *textObject )setCharSpacing (_acad float64 ){if _bcec ==nil {return ;};_bcec ._bfdgc ._ade =_acad ;if _bedbd {_ad .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",_acad ,_bcec ._bfdgc .String ());};};func _aage (_deefc _dd .PdfRectangle )*ruling {return &ruling {_abgae :_fdff ,_acaf :_deefc .Llx ,_fgdd :_deefc .Lly ,_cage :_deefc .Ury };};func _ggad (_feac *wordBag ,_cbf *textWord ,_gadbd float64 )bool {return _cbf .Llx < _feac .Urx +_gadbd &&_feac .Llx -_gadbd < _cbf .Urx ;};var _ebd =TextMark {Text :"\u005b\u0058\u005d",Original :"\u0020",Meta :true ,FillColor :_ed .White ,StrokeColor :_ed .White };func (_daeaf paraList )llyOrdering ()[]int {_ccfga :=make ([]int ,len (_daeaf ));for _cfdb :=range _daeaf {_ccfga [_cfdb ]=_cfdb ;};_cf .SliceStable (_ccfga ,func (_ccd ,_ccdf int )bool {_gagf ,_cebc :=_ccfga [_ccd ],_ccfga [_ccdf ];return _daeaf [_gagf ].Lly < _daeaf [_cebc ].Lly ;});return _ccfga ;};var (_de =_f .New ("\u0074\u0079p\u0065\u0020\u0063h\u0065\u0063\u006b\u0020\u0065\u0072\u0072\u006f\u0072");_gb =_f .New ("\u0072\u0061\u006e\u0067\u0065\u0020\u0063\u0068\u0065\u0063\u006b\u0020e\u0072\u0072\u006f\u0072"););func (_cecef *textTable )bbox ()_dd .PdfRectangle {return _cecef .PdfRectangle };func (_fdef *wordBag )depthBand (_degb ,_cegc float64 )[]int {if len (_fdef ._efeb )==0{return nil ;};return _fdef .depthRange (_fdef .getDepthIdx (_degb ),_fdef .getDepthIdx (_cegc ));};func (_dcda *wordBag )scanBand (_ecbb string ,_agbc *wordBag ,_geg func (_cbag *wordBag ,_gadb *textWord )bool ,_bdf ,_cgdc ,_gbfa float64 ,_gcg ,_gcbb bool )int {_acd :=_agbc ._ebge ;var _ebec map[int ]map[*textWord ]struct{};if !_gcg {_ebec =_dcda .makeRemovals ();};_caed :=_fdae *_acd ;_ccb :=0;for _ ,_edc :=range _dcda .depthBand (_bdf -_caed ,_cgdc +_caed ){if len (_dcda ._efeb [_edc ])==0{continue ;};for _ ,_deg :=range _dcda ._efeb [_edc ]{if !(_bdf -_caed <=_deg ._gceede &&_deg ._gceede <=_cgdc +_caed ){continue ;};if !_geg (_agbc ,_deg ){continue ;};_adfg :=2.0*_ge .Abs (_deg ._dafb -_agbc ._ebge )/(_deg ._dafb +_agbc ._ebge );_ccbg :=_ge .Max (_deg ._dafb /_agbc ._ebge ,_agbc ._ebge /_deg ._dafb );_bfec :=_ge .Min (_adfg ,_ccbg );if _gbfa > 0&&_bfec > _gbfa {continue ;};if _agbc .blocked (_deg ){continue ;};if !_gcg {_agbc .pullWord (_deg ,_edc ,_ebec );};_ccb ++;if !_gcbb {if _deg ._gceede < _bdf {_bdf =_deg ._gceede ;};if _deg ._gceede > _cgdc {_cgdc =_deg ._gceede ;};};if _gcg {break ;};};};if !_gcg {_dcda .applyRemovals (_ebec );};return _ccb ;};func (_gece rulingList )splitSec ()[]rulingList {_cf .Slice (_gece ,func (_ddgg ,_gaee int )bool {_degdb ,_fecfdf :=_gece [_ddgg ],_gece [_gaee ];if _degdb ._fgdd !=_fecfdf ._fgdd {return _degdb ._fgdd < _fecfdf ._fgdd ;};return _degdb ._cage < _fecfdf ._cage ;});_aacb :=make (map[*ruling ]struct{},len (_gece ));_cabbb :=func (_efef *ruling )rulingList {_afdd :=rulingList {_efef };_aacb [_efef ]=struct{}{};for _ ,_fdbd :=range _gece {if _ ,_fgfb :=_aacb [_fdbd ];_fgfb {continue ;};for _ ,_bbgg :=range _afdd {if _fdbd .alignsSec (_bbgg ){_afdd =append (_afdd ,_fdbd );_aacb [_fdbd ]=struct{}{};break ;};};};return _afdd ;};_cdedg :=[]rulingList {_cabbb (_gece [0])};for _ ,_gdeg :=range _gece [1:]{if _ ,_aagg :=_aacb [_gdeg ];_aagg {continue ;};_cdedg =append (_cdedg ,_cabbb (_gdeg ));};return _cdedg ;};func (_agggg *textTable )growTable (){_dbcfg :=func (_cfgge paraList ){_agggg ._adfe ++;for _bdagd :=0;_bdagd < _agggg ._gddg ;_bdagd ++{_afacc :=_cfgge [_bdagd ];_agggg .put (_bdagd ,_agggg ._adfe -1,_afacc );};};_ggcgf :=func (_dbbfa paraList ){_agggg ._gddg ++;for _befdb :=0;_befdb < _agggg ._adfe ;_befdb ++{_ggeb :=_dbbfa [_befdb ];_agggg .put (_agggg ._gddg -1,_befdb ,_ggeb );};};if _dcfc {_agggg .log ("\u0067r\u006f\u0077\u0054\u0061\u0062\u006ce");};for _ggccb :=0;;_ggccb ++{_fggac :=false ;_degac :=_agggg .getDown ();_aagfb :=_agggg .getRight ();if _dcfc {_dc .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_ggccb ,_agggg );_dc .Printf ("\u0020\u0020 \u0020\u0020\u0020 \u0020\u0064\u006f\u0077\u006e\u003d\u0025\u0073\u000a",_degac );_dc .Printf ("\u0020\u0020 \u0020\u0020\u0020 \u0072\u0069\u0067\u0068\u0074\u003d\u0025\u0073\u000a",_aagfb );};if _degac !=nil &&_aagfb !=nil {_eeef :=_degac [len (_degac )-1];if _eeef !=nil &&!_eeef ._ebaf &&_eeef ==_aagfb [len (_aagfb )-1]{_dbcfg (_degac );if _aagfb =_agggg .getRight ();_aagfb !=nil {_ggcgf (_aagfb );_agggg .put (_agggg ._gddg -1,_agggg ._adfe -1,_eeef );};_fggac =true ;};};if !_fggac &&_degac !=nil {_dbcfg (_degac );_fggac =true ;};if !_fggac &&_aagfb !=nil {_ggcgf (_aagfb );_fggac =true ;};if !_fggac {break ;};};};func (_fecb *textPara )fontsize ()float64 {return _fecb ._fcaad [0]._cdgd };type imageExtractContext struct{_da []ImageMark ;_ace int ;_cea int ;_db int ;_fg map[*_gd .PdfObjectStream ]*cachedImage ;_dcg *ImageExtractOptions ;};func (_cde *textObject )showTextAdjusted (_gab *_gd .PdfObjectArray )error {_bafc :=false ;for _ ,_fdafd :=range _gab .Elements (){switch _fdafd .(type ){case *_gd .PdfObjectFloat ,*_gd .PdfObjectInteger :_edee ,_fdab :=_gd .GetNumberAsFloat (_fdafd );if _fdab !=nil {_ad .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",_fdafd ,_gab );return _fdab ;};_gee ,_ecbf :=-_edee *0.001*_cde ._bfdgc ._dccf ,0.0;if _bafc {_ecbf ,_gee =_gee ,_ecbf ;};_gefa :=_fdb (_cd .Point {X :_gee ,Y :_ecbf });_cde ._fddg .Concat (_gefa );case *_gd .PdfObjectString :_bbe ,_fcc :=_gd .GetStringBytes (_fdafd );if !_fcc {_ad .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",_fdafd ,_gab );return _gd .ErrTypeError ;};_cde .renderText (_bbe );default:_ad .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",_fdafd ,_gab );return _gd .ErrTypeError ;};};return nil ;};func _aefdd (_ddbf ,_gfddc int )int {if _ddbf < _gfddc {return _ddbf ;};return _gfddc ;};func (_afbb rulingList )toTilings ()(rulingList ,[]gridTiling ){_afbb .log ("\u0074o\u0054\u0069\u006c\u0069\u006e\u0067s");if len (_afbb )==0{return nil ,nil ;};_afbb =_afbb .tidied ("\u0061\u006c\u006c");_afbb .log ("\u0074\u0069\u0064\u0069\u0065\u0064");_cgae :=_afbb .toGrids ();_fdba :=make ([]gridTiling ,len (_cgae ));for _bfdd ,_efab :=range _cgae {_fdba [_bfdd ]=_efab .asTiling ();};return _afbb ,_fdba ;};func (_bf *imageExtractContext )processOperand (_eg *_ga .ContentStreamOperation ,_df _ga .GraphicsState ,_cff *_dd .PdfPageResources )error {if _eg .Operand =="\u0042\u0049"&&len (_eg .Params )==1{_dec ,_cc :=_eg .Params [0].(*_ga .ContentStreamInlineImage );if !_cc {return nil ;};if _cfg ,_gf :=_gd .GetBoolVal (_dec .ImageMask );_gf {if _cfg &&!_bf ._dcg .IncludeInlineStencilMasks {return nil ;};};return _bf .extractInlineImage (_dec ,_df ,_cff );}else if _eg .Operand =="\u0044\u006f"&&len (_eg .Params )==1{_fd ,_bab :=_gd .GetName (_eg .Params [0]);if !_bab {_ad .Log .Debug ("E\u0052\u0052\u004f\u0052\u003a\u0020\u0054\u0079\u0070\u0065");return _de ;};_ ,_ec :=_cff .GetXObjectByName (*_fd );switch _ec {case _dd .XObjectTypeImage :return _bf .extractXObjectImage (_fd ,_df ,_cff );case _dd .XObjectTypeForm :return _bf .extractFormImages (_fd ,_df ,_cff );};};return nil ;};func (_fggga *textTable )getDown ()paraList {_aacd :=make (paraList ,_fggga ._gddg );for _eecg :=0;_eecg < _fggga ._gddg ;_eecg ++{_edcg :=_fggga .get (_eecg ,_fggga ._adfe -1)._gfaf ;if _edcg ==nil ||_edcg ._ebaf {return nil ;};_aacd [_eecg ]=_edcg ;};for _bbad :=0;_bbad < _fggga ._gddg -1;_bbad ++{if _aacd [_bbad ]._geged !=_aacd [_bbad +1]{return nil ;};};return _aacd ;};func (_feagg *textTable )emptyRow (_eebc int )bool {for _gbff :=0;_gbff < _feagg ._gddg ;_gbff ++{_ggged :=_feagg .get (_gbff ,_eebc );if _ggged !=nil &&_ggged .text ()!=""{return false ;};};return true ;};func _bgba (_efaac map[int ][]float64 ){if len (_efaac )<=1{return ;};_bggg :=_fgag (_efaac );if _bedbb {_ad .Log .Info ("\u0066i\u0078C\u0065\u006c\u006c\u0073\u003a \u006b\u0065y\u0073\u003d\u0025\u002b\u0076",_bggg );};var _faef ,_cafc int ;for _faef ,_cafc =range _bggg {if _efaac [_cafc ]!=nil {break ;};};for _aegbe ,_gdgaa :=range _bggg [_faef :]{_edaf :=_efaac [_gdgaa ];if _edaf ==nil {continue ;};if _bedbb {_dc .Printf ("\u0025\u0034\u0064\u003a\u0020\u006b\u0030\u003d\u0025\u0064\u0020\u006b1\u003d\u0025\u0064\u000a",_faef +_aegbe ,_cafc ,_gdgaa );};_edfe :=_efaac [_gdgaa ];if _edfe [len (_edfe )-1]> _edaf [0]{_edfe [len (_edfe )-1]=_edaf [0];_efaac [_cafc ]=_edfe ;};_cafc =_gdgaa ;};};func (_gebf *wordBag )empty (_acec int )bool {_ ,_gfc :=_gebf ._efeb [_acec ];return !_gfc };func (_fdfd paraList )findTextTables ()[]*textTable {var _agade []*textTable ;for _ ,_aeec :=range _fdfd {if _aeec .taken ()||_aeec .Width ()==0{continue ;};_dbad :=_aeec .isAtom ();if _dbad ==nil {continue ;};_dbad .growTable ();if _dbad ._gddg *_dbad ._adfe < _ega {continue ;};_dbad .markCells ();_dbad .log ("\u0067\u0072\u006fw\u006e");_agade =append (_agade ,_dbad );};return _agade ;};func _fcgd (_ggbaa string )bool {if _g .RuneCountInString (_ggbaa )< _gfga {return false ;};_agfe ,_gebef :=_g .DecodeLastRuneInString (_ggbaa );if _gebef <=0||!_b .Is (_b .Hyphen ,_agfe ){return false ;};_agfe ,_gebef =_g .DecodeLastRuneInString (_ggbaa [:len (_ggbaa )-_gebef ]);return _gebef > 0&&!_b .IsSpace (_agfe );};func _fgad (_ffda ,_gdgaf *textPara )bool {return _fafcf (_ffda ._gaca ,_gdgaf ._gaca )};func _acgd (_cbbb ,_agdg bounded )float64 {return _cbbb .bbox ().Llx -_agdg .bbox ().Urx };func _gcd (_fgfg ,_egd bounded )float64 {_afg :=_efda (_fgfg ,_egd );if !_dgdb (_afg ){return _afg ;};return _bedg (_fgfg ,_egd );};func (_faffb rulingList )primaries ()[]float64 {_ffgd :=make (map[float64 ]struct{},len (_faffb ));for _ ,_agba :=range _faffb {_ffgd [_agba ._acaf ]=struct{}{};};_gbad :=make ([]float64 ,len (_ffgd ));_gfade :=0;for _caae :=range _ffgd {_gbad [_gfade ]=_caae ;_gfade ++;};_cf .Float64s (_gbad );return _gbad ;};func _bedg (_bfa ,_feba bounded )float64 {return _bfa .bbox ().Llx -_feba .bbox ().Llx };func _agc (_bgcf *wordBag ,_aece int )*textLine {_adfd :=_bgcf .firstWord (_aece );_aebb :=textLine {PdfRectangle :_adfd .PdfRectangle ,_cdgd :_adfd ._dafb ,_dgfa :_adfd ._gceede };_aebb .pullWord (_bgcf ,_adfd ,_aece );return &_aebb ;};func _abed (_caab []pathSection )rulingList {_ebbb (_caab );if _fggb {_ad .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 (_caab ));};var _acdb rulingList ;for _ ,_ggdd :=range _caab {for _ ,_daba :=range _ggdd ._fgf {if len (_daba ._addd )< 2{continue ;};_cafe :=_daba ._addd [0];for _ ,_agegc :=range _daba ._addd [1:]{if _bcab ,_cafga :=_aabab (_cafe ,_agegc ,_ggdd .Color );_cafga {_acdb =append (_acdb ,_bcab );};_cafe =_agegc ;};};};if _fggb {_ad .Log .Info ("m\u0061\u006b\u0065\u0053tr\u006fk\u0065\u0052\u0075\u006c\u0069n\u0067\u0073\u003a\u0020\u0025\u0073",_acdb );};return _acdb ;};func (_caf *shapesState )fill (_gfbc *[]pathSection ){_bgcb :=pathSection {_fgf :_caf ._cgbd ,Color :_caf ._fcac .getFillColor ()};*_gfbc =append (*_gfbc ,_bgcb );if _fggb {_ffec :=_bgcb .bbox ();_dc .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 (*_gfbc ),len (_bgcb ._fgf ),_caf ,_bgcb .Color ,_ffec ,_ffec .Width (),_ffec .Height ());if _caa {for _fad ,_deff :=range _bgcb ._fgf {_dc .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_fad ,_deff );if _fad ==10{break ;};};};};};func _ddcd (_afca []*textMark ,_bacga _dd .PdfRectangle ,_ccff rulingList ,_bfga []gridTiling )paraList {_ad .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 (_afca ),_bacga );if len (_afca )==0{return nil ;};_cfea :=_bggfc (_afca ,_bacga );if len (_cfea )==0{return nil ;};_ccff .log ("\u006d\u0061\u006be\u0054\u0065\u0078\u0074\u0050\u0061\u0067\u0065");_aefb ,_cbcb :=_ccff .vertsHorzs ();_ccfg :=_accc (_cfea ,_bacga .Ury ,_aefb ,_cbcb );_gcdf :=_babdb (_ccfg ,_bacga .Ury ,_aefb ,_cbcb );_gcdf =_faa (_gcdf );_egaa :=make (paraList ,0,len (_gcdf ));for _ ,_fffe :=range _gcdf {_fcgaa :=_fffe .arrangeText ();if _fcgaa !=nil {_egaa =append (_egaa ,_fcgaa );};};if len (_egaa )>=_ega {_egaa =_egaa .extractTables (_bfga );};_egaa .sortReadingOrder ();_egaa .log ("\u0073\u006f\u0072te\u0064\u0020\u0069\u006e\u0020\u0072\u0065\u0061\u0064\u0069\u006e\u0067\u0020\u006f\u0072\u0064\u0065\u0072");return _egaa ;};
// NewFromContents creates a new extractor from contents and page resources.
func NewFromContents (contents string ,resources *_dd .PdfPageResources )(*Extractor ,error ){_bdb :=&Extractor {_add :contents ,_aa :resources ,_dca :map[string ]fontEntry {},_gdg :map[string ]textResult {}};return _bdb ,nil ;};func (_eefg *textObject )getFontDirect (_dcbc string )(*_dd .PdfFont ,error ){_eebb ,_bfde :=_eefg .getFontDict (_dcbc );if _bfde !=nil {return nil ,_bfde ;};_eca ,_bfde :=_dd .NewPdfFontFromPdfObject (_eebb );if _bfde !=nil {_ad .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",_dcbc ,_bfde );};return _eca ,_bfde ;};func (_aac *shapesState )addPoint (_gacg ,_ddde float64 ){_fbeca :=_aac .establishSubpath ();_aaeg :=_aac .devicePoint (_gacg ,_ddde );if _fbeca ==nil {_aac ._dedf =true ;_aac ._fecc =_aaeg ;}else {_fbeca .add (_aaeg );};};const (_efddc markKind =iota ;_dega ;_ffa ;_ffbde ;);func _dgga (_ddgf ,_bfggc bounded )float64 {_bca :=_bedg (_ddgf ,_bfggc );if !_dgdb (_bca ){return _bca ;};return _efda (_ddgf ,_bfggc );};func _cbac (_gcbdb _dd .PdfRectangle ,_aeea []*textLine )*textPara {return &textPara {PdfRectangle :_gcbdb ,_fcaad :_aeea };};
// String returns a human readable description of `ss`.
func (_bcd *shapesState )String ()string {return _dc .Sprintf ("\u007b\u0025\u0064\u0020su\u0062\u0070\u0061\u0074\u0068\u0073\u0020\u0066\u0072\u0065\u0073\u0068\u003d\u0025t\u007d",len (_bcd ._cgbd ),_bcd ._dedf );};const _ccc =20;func (_ageg *textObject )getFontDict (_aeac string )(_ggba _gd .PdfObject ,_fbbd error ){_gfaa :=_ageg ._eaae ;if _gfaa ==nil {_ad .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",_aeac );return nil ,nil ;};_ggba ,_fdf :=_gfaa .GetFontByName (_gd .PdfObjectName (_aeac ));if !_fdf {_ad .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",_aeac );return nil ,_f .New ("f\u006f\u006e\u0074\u0020no\u0074 \u0069\u006e\u0020\u0072\u0065s\u006f\u0075\u0072\u0063\u0065\u0073");};return _ggba ,nil ;};func (_ggbb *PageText )computeViews (){var _cdb rulingList ;if _gbcf {_dcaf :=_abed (_ggbb ._eea );_cdb =append (_cdb ,_dcaf ...);};if _gbcfd {_baeg :=_aeaa (_ggbb ._abgcd );_cdb =append (_cdb ,_baeg ...);};_cdb ,_affgf :=_cdb .toTilings ();var _defd paraList ;_bged :=len (_ggbb ._gae );for _bdg :=0;_bdg < 360&&_bged > 0;_bdg +=90{_bdbd :=make ([]*textMark ,0,len (_ggbb ._gae )-_bged );for _ ,_dacg :=range _ggbb ._gae {if _dacg ._deeg ==_bdg {_bdbd =append (_bdbd ,_dacg );};};if len (_bdbd )> 0{_gcfb :=_ddcd (_bdbd ,_ggbb ._bgc ,_cdb ,_affgf );_defd =append (_defd ,_gcfb ...);_bged -=len (_bdbd );};};_fdgg :=new (_ac .Buffer );_defd .writeText (_fdgg );_ggbb ._gdcd =_fdgg .String ();_ggbb ._gge =_defd .toTextMarks ();_ggbb ._feb =_defd .tables ();if _bedbb {_ad .Log .Info ("\u0063\u006f\u006dpu\u0074\u0065\u0056\u0069\u0065\u0077\u0073\u003a\u0020\u0074\u0061\u0062\u006c\u0065\u0073\u003d\u0025\u0064",len (_ggbb ._feb ));};};func (_dgcb *wordBag )pullWord (_gbb *textWord ,_eage int ,_efadd map[int ]map[*textWord ]struct{}){_dgcb .PdfRectangle =_ceab (_dgcb .PdfRectangle ,_gbb .PdfRectangle );if _gbb ._dafb > _dgcb ._ebge {_dgcb ._ebge =_gbb ._dafb ;};_dgcb ._efeb [_eage ]=append (_dgcb ._efeb [_eage ],_gbb );_efadd [_eage ][_gbb ]=struct{}{};};func _egfb (_eece []compositeCell )[]float64 {var _fffbf []*textLine ;_eced :=0;for _ ,_cdgaa :=range _eece {_eced +=len (_cdgaa .paraList );_fffbf =append (_fffbf ,_cdgaa .lines ()...);};_cf .Slice (_fffbf ,func (_bfggcc ,_gcddd int )bool {_ecbe ,_ddef :=_fffbf [_bfggcc ],_fffbf [_gcddd ];_gfag ,_fbcde :=_ecbe ._dgfa ,_ddef ._dgfa ;if !_dgdb (_gfag -_fbcde ){return _gfag < _fbcde ;};return _ecbe .Llx < _ddef .Llx ;});if _bedbb {_dc .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",_eced ,len (_fffbf ));for _dadff ,_agbe :=range _fffbf {_dc .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_dadff ,_agbe );};};var _gbee []float64 ;_fbbag :=_fffbf [0];var _daag [][]*textLine ;_decec :=[]*textLine {_fbbag };for _bfeg ,_fcfed :=range _fffbf [1:]{if _fcfed .Ury < _fbbag .Lly {_caeb :=0.5*(_fcfed .Ury +_fbbag .Lly );if _bedbb {_dc .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",_bfeg ,_fcfed .Ury ,_fbbag .Lly ,_caeb ,_fbbag ,_fcfed );};_gbee =append (_gbee ,_caeb );_daag =append (_daag ,_decec );_decec =nil ;};_decec =append (_decec ,_fcfed );if _fcfed .Lly < _fbbag .Lly {_fbbag =_fcfed ;};};if len (_decec )> 0{_daag =append (_daag ,_decec );};if _bedbb {_dc .Printf (" \u0020\u0020\u0020\u0020\u0020\u0020 \u0072\u006f\u0077\u0043\u006f\u0072\u0072\u0069\u0064o\u0072\u0073\u003d%\u0036.\u0032\u0066\u000a",_gbee );};if _bedbb {_ad .Log .Info ("\u0072\u006f\u0077\u003d\u0025\u0064",len (_eece ));for _eeaee ,_eacba :=range _eece {_dc .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_eeaee ,_eacba );};_ad .Log .Info ("\u0067r\u006f\u0075\u0070\u0073\u003d\u0025d",len (_daag ));for _edacd ,_ebadf :=range _daag {_dc .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0064\u000a",_edacd ,len (_ebadf ));for _daae ,_cggb :=range _ebadf {_dc .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_daae ,_cggb );};};};_cbfe :=true ;for _bade ,_afgg :=range _daag {_caec :=true ;for _ddaea ,_gfcf :=range _eece {if _bedbb {_dc .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",_bade ,len (_daag ),_ddaea ,len (_eece ),_gfcf );};if !_gfcf .hasLines (_afgg ){if _bedbb {_dc .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",_bade ,len (_daag ),_ddaea ,len (_eece ));};_caec =false ;break ;};};if !_caec {_cbfe =false ;break ;};};if !_cbfe {if _bedbb {_ad .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");};_gbee =nil ;};if _bedbb &&_gbee !=nil {_dc .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",_gbee );};return _gbee ;};func (_bddb *textWord )absorb (_deda *textWord ){_bddb .PdfRectangle =_ceab (_bddb .PdfRectangle ,_deda .PdfRectangle );_bddb ._dgcbf =append (_bddb ._dgcbf ,_deda ._dgcbf ...);};func _bdcce (_dffa []*textMark ,_dgab _dd .PdfRectangle )*textWord {_edcaa :=_dffa [0].PdfRectangle ;_gcbda :=_dffa [0]._geafc ;for _ ,_gdcf :=range _dffa [1:]{_edcaa =_ceab (_edcaa ,_gdcf .PdfRectangle );if _gdcf ._geafc > _gcbda {_gcbda =_gdcf ._geafc ;};};return &textWord {PdfRectangle :_edcaa ,_dgcbf :_dffa ,_gceede :_dgab .Ury -_edcaa .Lly ,_dafb :_gcbda };};type markKind int ;
// Extractor stores and offers functionality for extracting content from PDF pages.
type Extractor struct{_add string ;_aa *_dd .PdfPageResources ;_eda _dd .PdfRectangle ;_dca map[string ]fontEntry ;_gdg map[string ]textResult ;_aab int64 ;_geb int ;};func (_gggd paraList )tables ()[]TextTable {var _bced []TextTable ;if _bedbb {_ad .Log .Info ("\u0070\u0061\u0072\u0061\u0073\u002e\u0074\u0061\u0062\u006c\u0065\u0073\u003a");};for _ ,_bdfg :=range _gggd {_bbac :=_bdfg ._cgf ;if _bbac !=nil &&_bbac .isExportable (){_bced =append (_bced ,_bbac .toTextTable ());};};return _bced ;};
// String returns a description of `b`.
func (_dabe *wordBag )String ()string {var _ebgd []string ;for _ ,_ffeg :=range _dabe .depthIndexes (){_aced :=_dabe ._efeb [_ffeg ];for _ ,_fade :=range _aced {_ebgd =append (_ebgd ,_fade ._ebed );};};return _dc .Sprintf ("\u0025.\u0032\u0066\u0020\u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065=\u0025\u002e\u0032\u0066\u0020\u0025\u0064\u0020\u0025\u0071",_dabe .PdfRectangle ,_dabe ._ebge ,len (_ebgd ),_ebgd );};func _fafc (_fff _cd .Point )*subpath {return &subpath {_addd :[]_cd .Point {_fff }}};func (_dfb *stateStack )top ()*textState {if _dfb .empty (){return nil ;};return (*_dfb )[_dfb .size ()-1];};type wordBag struct{_dd .PdfRectangle ;_ebge float64 ;_gcce ,_bbb rulingList ;_fgfd float64 ;_efeb map[int ][]*textWord ;};func _gacgc (_cded map[float64 ]map[float64 ]gridTile )[]float64 {_beac :=make ([]float64 ,0,len (_cded ));_eafe :=make (map[float64 ]struct{},len (_cded ));for _ ,_fddc :=range _cded {for _fddb :=range _fddc {if _ ,_accbd :=_eafe [_fddb ];_accbd {continue ;};_beac =append (_beac ,_fddb );_eafe [_fddb ]=struct{}{};};};_cf .Float64s (_beac );return _beac ;};func _daca (_dgfec []TextMark ,_dgcdc *int ,_fgef TextMark )[]TextMark {_fgef .Offset =*_dgcdc ;_dgfec =append (_dgfec ,_fgef );*_dgcdc +=len (_fgef .Text );return _dgfec ;};func _babd (_ege *textWord ,_fbf float64 ,_efad ,_bcdb rulingList )*wordBag {_bdbbc :=_egc (_ege ._gceede );_aeacb :=[]*textWord {_ege };_afee :=wordBag {_efeb :map[int ][]*textWord {_bdbbc :_aeacb },PdfRectangle :_ege .PdfRectangle ,_ebge :_ege ._dafb ,_fgfd :_fbf ,_gcce :_efad ,_bbb :_bcdb };return &_afee ;};type textPara struct{_dd .PdfRectangle ;_gaca _dd .PdfRectangle ;_fcaad []*textLine ;_cgf *textTable ;_ebaf bool ;_ebfg bool ;_aeaf *textPara ;_geged *textPara ;_baeda *textPara ;_gfaf *textPara ;};func (_cbgfg rulingList )vertsHorzs ()(rulingList ,rulingList ){var _acadb ,_bdcbc rulingList ;for _ ,_ccba :=range _cbgfg {switch _ccba ._abgae {case _fdff :_acadb =append (_acadb ,_ccba );case _feae :_bdcbc =append (_bdcbc ,_ccba );};};return _acadb ,_bdcbc ;};
// 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 (_bge *Extractor )ExtractText ()(string ,error ){_affg ,_ ,_ ,_ab :=_bge .ExtractTextWithStats ();return _affg ,_ab ;};type cachedImage struct{_ef *_dd .Image ;_efd _dd .PdfColorspace ;};func (_dcaa *textPara )taken ()bool {return _dcaa ==nil ||_dcaa ._ebaf };func (_dcga *textObject )getFillColor ()_ed .Color {return _ecdd (_dcga ._bgda .ColorspaceNonStroking ,_dcga ._bgda .ColorNonStroking );};type rectRuling struct{_dgdf rulingKind ;_ggcc markKind ;_ed .Color ;_dd .PdfRectangle ;};const (_cceg =true ;_bbafc =true ;_egb =true ;_bffb =false ;_bdc =false ;_cfc =6;_fgfe =3.0;_fcfef =200;_gfbcb =true ;_cabc =true ;_gbcf =true ;_gbcfd =true ;_beade =false ;);func (_faga *textMark )bbox ()_dd .PdfRectangle {return _faga .PdfRectangle };func (_cec *imageExtractContext )extractInlineImage (_bc *_ga .ContentStreamInlineImage ,_bg _ga .GraphicsState ,_edae *_dd .PdfPageResources )error {_fda ,_fdaf :=_bc .ToImage (_edae );if _fdaf !=nil {return _fdaf ;};_fdad ,_fdaf :=_bc .GetColorSpace (_edae );if _fdaf !=nil {return _fdaf ;};if _fdad ==nil {_fdad =_dd .NewPdfColorspaceDeviceGray ();};_aad ,_fdaf :=_fdad .ImageToRGB (*_fda );if _fdaf !=nil {return _fdaf ;};_afe :=ImageMark {Image :&_aad ,Width :_bg .CTM .ScalingFactorX (),Height :_bg .CTM .ScalingFactorY (),Angle :_bg .CTM .Angle ()};_afe .X ,_afe .Y =_bg .CTM .Translation ();_cec ._da =append (_cec ._da ,_afe );_cec ._ace ++;return nil ;};func _aabab (_fecgg ,_ffeec _cd .Point ,_aeacf _ed .Color )(*ruling ,bool ){_badd :=lineRuling {_aeeac :_fecgg ,_daeb :_ffeec ,_dag :_bfgb (_fecgg ,_ffeec ),Color :_aeacf };if _badd ._dag ==_cffb {return nil ,false ;};return _badd .asRuling ();};
// String returns a description of `k`.
func (_eddf rulingKind )String ()string {_deee ,_fecgga :=_cagbe [_eddf ];if !_fecgga {return _dc .Sprintf ("\u004e\u006ft\u0020\u0061\u0020r\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0025\u0064",_eddf );};return _deee ;};func (_gadbb *textPara )bbox ()_dd .PdfRectangle {return _gadbb .PdfRectangle };type textMark struct{_dd .PdfRectangle ;_deeg int ;_fgeb string ;_dbffe string ;_dfdg *_dd .PdfFont ;_geafc float64 ;_ffd float64 ;_bcc _cd .Matrix ;_deag _cd .Point ;_eeag _dd .PdfRectangle ;_aaad _ed .Color ;_gadc _ed .Color ;};type shapesState struct{_eded _cd .Matrix ;_agb _cd .Matrix ;_cgbd []*subpath ;_dedf bool ;_fecc _cd .Point ;_fcac *textObject ;};func _fdb (_bcgb _cd .Point )_cd .Matrix {return _cd .TranslationMatrix (_bcgb .X ,_bcgb .Y )};func (_gbgcd *textTable )reduce ()*textTable {_egbd :=make ([]int ,0,_gbgcd ._adfe );_ebcag :=make ([]int ,0,_gbgcd ._gddg );for _ggadf :=0;_ggadf < _gbgcd ._adfe ;_ggadf ++{if !_gbgcd .emptyRow (_ggadf ){_egbd =append (_egbd ,_ggadf );};};for _ecad :=0;_ecad < _gbgcd ._gddg ;_ecad ++{if !_gbgcd .emptyColumn (_ecad ){_ebcag =append (_ebcag ,_ecad );};};if len (_egbd )==_gbgcd ._adfe &&len (_ebcag )==_gbgcd ._gddg {return _gbgcd ;};_bbabd :=textTable {_eafc :_gbgcd ._eafc ,_gddg :len (_ebcag ),_adfe :len (_egbd ),_efbae :make (map[uint64 ]*textPara ,len (_ebcag )*len (_egbd ))};if _bedbb {_ad .Log .Info ("\u0072\u0065\u0064\u0075ce\u003a\u0020\u0025\u0064\u0078\u0025\u0064\u0020\u002d\u003e\u0020\u0025\u0064\u0078%\u0064",_gbgcd ._gddg ,_gbgcd ._adfe ,len (_ebcag ),len (_egbd ));_ad .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0043\u006f\u006c\u0073\u003a\u0020\u0025\u002b\u0076",_ebcag );_ad .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0052\u006f\u0077\u0073\u003a\u0020\u0025\u002b\u0076",_egbd );};for _dbaa ,_gfdf :=range _egbd {for _babdc ,_eagf :=range _ebcag {_cfggg :=_gbgcd .get (_eagf ,_gfdf );if _cfggg ==nil {continue ;};if _bedbb {_dc .Printf ("\u0020 \u0025\u0032\u0064\u002c \u0025\u0032\u0064\u0020\u0028%\u0032d\u002c \u0025\u0032\u0064\u0029\u0020\u0025\u0071\n",_babdc ,_dbaa ,_eagf ,_gfdf ,_cgbgd (_cfggg .text (),50));};_bbabd .put (_babdc ,_dbaa ,_cfggg );};};return &_bbabd ;};
// 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 (_fdg *Extractor )ExtractTextWithStats ()(_ddg string ,_gcb int ,_bce int ,_bgg error ){_bde ,_gcb ,_bce ,_bgg :=_fdg .ExtractPageText ();if _bgg !=nil {return "",_gcb ,_bce ,_bgg ;};return _bde .Text (),_gcb ,_bce ,nil ;};func (_dgec *textLine )markWordBoundaries (){_abbc :=_cgeg *_dgec ._cdgd ;for _addc ,_eaf :=range _dgec ._becbb [1:]{if _acgd (_eaf ,_dgec ._becbb [_addc ])>=_abbc {_eaf ._fabdc =true ;};};};
// String returns a description of `v`.
func (_cgeag *ruling )String ()string {if _cgeag ._abgae ==_cffb {return "\u004e\u004f\u0054\u0020\u0052\u0055\u004c\u0049\u004e\u0047";};_bggae ,_dgcf :="\u0078","\u0079";if _cgeag ._abgae ==_feae {_bggae ,_dgcf ="\u0079","\u0078";};_eega :="";if _cgeag ._faff !=0.0{_eega =_dc .Sprintf (" \u0077\u0069\u0064\u0074\u0068\u003d\u0025\u002e\u0032\u0066",_cgeag ._faff );};return _dc .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",_cgeag ._abgae ,_bggae ,_cgeag ._acaf ,_dgcf ,_cgeag ._fgdd ,_cgeag ._cage ,_cgeag ._cage -_cgeag ._fgdd ,_cgeag ._aaff ,_cgeag .Color ,_eega );};func (_aed *subpath )removeDuplicates (){if len (_aed ._addd )==0{return ;};_aceb :=[]_cd .Point {_aed ._addd [0]};for _ ,_ffeb :=range _aed ._addd [1:]{if !_fefcb (_ffeb ,_aceb [len (_aceb )-1]){_aceb =append (_aceb ,_ffeb );};};_aed ._addd =_aceb ;};func (_dgd *shapesState )stroke (_cdae *[]pathSection ){_eaeb :=pathSection {_fgf :_dgd ._cgbd ,Color :_dgd ._fcac .getStrokeColor ()};*_cdae =append (*_cdae ,_eaeb );if _fggb {_dc .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 (*_cdae ),_dgd ,_dgd ._fcac .getStrokeColor (),_eaeb .bbox ());if _caa {for _gfeeb ,_aebd :=range _dgd ._cgbd {_dc .Printf ("\u0025\u0038\u0064\u003a\u0020\u0025\u0073\u000a",_gfeeb ,_aebd );if _gfeeb ==10{break ;};};};};};func (_dddb *ruling )gridIntersecting (_gdcc *ruling )bool {return _bdccd (_dddb ._fgdd ,_gdcc ._fgdd )&&_bdccd (_dddb ._cage ,_gdcc ._cage );};func _aadgg (_ffge ,_dbcg _cd .Point )bool {_bafcb :=_ge .Abs (_ffge .X -_dbcg .X );_gcad :=_ge .Abs (_ffge .Y -_dbcg .Y );return _fcdf (_gcad ,_bafcb );};func (_agee *imageExtractContext )extractContentStreamImages (_aabf string ,_gc *_dd .PdfPageResources )error {_ggb :=_ga .NewContentStreamParser (_aabf );_accd ,_dcc :=_ggb .Parse ();if _dcc !=nil {return _dcc ;};if _agee ._fg ==nil {_agee ._fg =map[*_gd .PdfObjectStream ]*cachedImage {};};if _agee ._dcg ==nil {_agee ._dcg =&ImageExtractOptions {};};_fc :=_ga .NewContentStreamProcessor (*_accd );_fc .AddHandler (_ga .HandlerConditionEnumAllOperands ,"",_agee .processOperand );return _fc .Process (_gc );};func _eebab (_fbac []*textWord ,_agfa int )[]*textWord {_ecadg :=len (_fbac );copy (_fbac [_agfa :],_fbac [_agfa +1:]);return _fbac [:_ecadg -1];};func _ceab (_bacg ,_cbad _dd .PdfRectangle )_dd .PdfRectangle {return _dd .PdfRectangle {Llx :_ge .Min (_bacg .Llx ,_cbad .Llx ),Lly :_ge .Min (_bacg .Lly ,_cbad .Lly ),Urx :_ge .Max (_bacg .Urx ,_cbad .Urx ),Ury :_ge .Max (_bacg .Ury ,_cbad .Ury )};};
// Append appends `mark` to the mark array.
func (_cdac *TextMarkArray )Append (mark TextMark ){_cdac ._dcf =append (_cdac ._dcf ,mark )};func (_fgfeg *ruling )encloses (_dbcgf ,_dced float64 )bool {return _fgfeg ._fgdd -_dad <=_dbcgf &&_dced <=_fgfeg ._cage +_dad ;};func (_bbeea rulingList )snapToGroups ()rulingList {_cada ,_bgfec :=_bbeea .vertsHorzs ();if len (_cada )> 0{_cada =_cada .snapToGroupsDirection ();};if len (_bgfec )> 0{_bgfec =_bgfec .snapToGroupsDirection ();};_dfbf :=append (_cada ,_bgfec ...);_dfbf .log ("\u0073\u006e\u0061p\u0054\u006f\u0047\u0072\u006f\u0075\u0070\u0073");return _dfbf ;};func (_gfbg paraList )addNeighbours (){_fbee :=func (_edgg []int ,_bbffd *textPara )([]*textPara ,[]*textPara ){_babga :=make ([]*textPara ,0,len (_edgg )-1);_cebd :=make ([]*textPara ,0,len (_edgg )-1);for _ ,_ccgac :=range _edgg {_eabff :=_gfbg [_ccgac ];if _eabff .Urx <=_bbffd .Llx {_babga =append (_babga ,_eabff );}else if _eabff .Llx >=_bbffd .Urx {_cebd =append (_cebd ,_eabff );};};return _babga ,_cebd ;};_dggb :=func (_eccc []int ,_acdg *textPara )([]*textPara ,[]*textPara ){_eccgc :=make ([]*textPara ,0,len (_eccc )-1);_fgfc :=make ([]*textPara ,0,len (_eccc )-1);for _ ,_fccec :=range _eccc {_ecfb :=_gfbg [_fccec ];if _ecfb .Ury <=_acdg .Lly {_fgfc =append (_fgfc ,_ecfb );}else if _ecfb .Lly >=_acdg .Ury {_eccgc =append (_eccgc ,_ecfb );};};return _eccgc ,_fgfc ;};_gdbd :=_gfbg .yNeighbours (_agde );for _ ,_cdadg :=range _gfbg {_ebdeg :=_gdbd [_cdadg ];if len (_ebdeg )==0{continue ;};_gbcfa ,_gfbd :=_fbee (_ebdeg ,_cdadg );if len (_gbcfa )==0&&len (_gfbd )==0{continue ;};if len (_gbcfa )> 0{_fegbc :=_gbcfa [0];for _ ,_efeff :=range _gbcfa [1:]{if _efeff .Urx >=_fegbc .Urx {_fegbc =_efeff ;};};for _ ,_dfcg :=range _gbcfa {if _dfcg !=_fegbc &&_dfcg .Urx > _fegbc .Llx {_fegbc =nil ;break ;};};if _fegbc !=nil &&_befe (_cdadg .PdfRectangle ,_fegbc .PdfRectangle ){_cdadg ._aeaf =_fegbc ;};};if len (_gfbd )> 0{_gefbb :=_gfbd [0];for _ ,_daagg :=range _gfbd [1:]{if _daagg .Llx <=_gefbb .Llx {_gefbb =_daagg ;};};for _ ,_bcdd :=range _gfbd {if _bcdd !=_gefbb &&_bcdd .Llx < _gefbb .Urx {_gefbb =nil ;break ;};};if _gefbb !=nil &&_befe (_cdadg .PdfRectangle ,_gefbb .PdfRectangle ){_cdadg ._geged =_gefbb ;};};};_gdbd =_gfbg .xNeighbours (_egfe );for _ ,_fbgfa :=range _gfbg {_afed :=_gdbd [_fbgfa ];if len (_afed )==0{continue ;};_cgdg ,_abcad :=_dggb (_afed ,_fbgfa );if len (_cgdg )==0&&len (_abcad )==0{continue ;};if len (_abcad )> 0{_cdea :=_abcad [0];for _ ,_afeda :=range _abcad [1:]{if _afeda .Ury >=_cdea .Ury {_cdea =_afeda ;};};for _ ,_accg :=range _abcad {if _accg !=_cdea &&_accg .Ury > _cdea .Lly {_cdea =nil ;break ;};};if _cdea !=nil &&_fafcf (_fbgfa .PdfRectangle ,_cdea .PdfRectangle ){_fbgfa ._gfaf =_cdea ;};};if len (_cgdg )> 0{_gddd :=_cgdg [0];for _ ,_eedfc :=range _cgdg [1:]{if _eedfc .Lly <=_gddd .Lly {_gddd =_eedfc ;};};for _ ,_bega :=range _cgdg {if _bega !=_gddd &&_bega .Lly < _gddd .Ury {_gddd =nil ;break ;};};if _gddd !=nil &&_fafcf (_fbgfa .PdfRectangle ,_gddd .PdfRectangle ){_fbgfa ._baeda =_gddd ;};};};for _ ,_decb :=range _gfbg {if _decb ._aeaf !=nil &&_decb ._aeaf ._geged !=_decb {_decb ._aeaf =nil ;};if _decb ._baeda !=nil &&_decb ._baeda ._gfaf !=_decb {_decb ._baeda =nil ;};if _decb ._geged !=nil &&_decb ._geged ._aeaf !=_decb {_decb ._geged =nil ;};if _decb ._gfaf !=nil &&_decb ._gfaf ._baeda !=_decb {_decb ._gfaf =nil ;};};};func _efda (_baag ,_egfg bounded )float64 {return _gebdb (_baag )-_gebdb (_egfg )};func (_ebbd *shapesState )devicePoint (_eebe ,_dgfc float64 )_cd .Point {_fece :=_ebbd ._agb .Mult (_ebbd ._eded );_eebe ,_dgfc =_fece .Transform (_eebe ,_dgfc );return _cd .NewPoint (_eebe ,_dgfc );};func (_gbgfd *subpath )makeRectRuling (_ddbb _ed .Color )(*ruling ,bool ){if _aaf {_ad .Log .Info ("\u006d\u0061\u006beR\u0065\u0063\u0074\u0052\u0075\u006c\u0069\u006e\u0067\u003a\u0020\u0070\u0061\u0074\u0068\u003d\u0025\u0076",_gbgfd );};_acga :=_gbgfd ._addd [:4];_ggbe :=make (map[int ]rulingKind ,len (_acga ));for _edcb ,_eacec :=range _acga {_ccdc :=_gbgfd ._addd [(_edcb +1)%4];_ggbe [_edcb ]=_afbe (_eacec ,_ccdc );if _aaf {_dc .Printf ("\u0025\u0034\u0064: \u0025\u0073\u0020\u003d\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u002d\u0020\u0025\u0036\u002e\u0032\u0066",_edcb ,_ggbe [_edcb ],_eacec ,_ccdc );};};if _aaf {_dc .Printf ("\u0020\u0020\u0020\u006b\u0069\u006e\u0064\u0073\u003d\u0025\u002b\u0076\u000a",_ggbe );};var _fgegg ,_daac []int ;for _fgab ,_bada :=range _ggbe {switch _bada {case _feae :_daac =append (_daac ,_fgab );case _fdff :_fgegg =append (_fgegg ,_fgab );};};if _aaf {_dc .Printf ("\u0020\u0020 \u0068\u006f\u0072z\u0073\u003d\u0025\u0064\u0020\u0025\u002b\u0076\u000a",len (_daac ),_daac );_dc .Printf ("\u0020\u0020 \u0076\u0065\u0072t\u0073\u003d\u0025\u0064\u0020\u0025\u002b\u0076\u000a",len (_fgegg ),_fgegg );};_efcbb :=(len (_daac )==2&&len (_fgegg )==2)||(len (_daac )==2&&len (_fgegg )==0&&_aadgg (_acga [_daac [0]],_acga [_daac [1]]))||(len (_fgegg )==2&&len (_daac )==0&&_ffegf (_acga [_fgegg [0]],_acga [_fgegg [1]]));if _aaf {_dc .Printf (" \u0020\u0020\u0068\u006f\u0072\u007as\u003d\u0025\u0064\u0020\u0076\u0065\u0072\u0074\u0073=\u0025\u0064\u0020o\u006b=\u0025\u0074\u000a",len (_daac ),len (_fgegg ),_efcbb );};if !_efcbb {if _aaf {_ad .Log .Error ("\u0021!\u006d\u0061\u006b\u0065R\u0065\u0063\u0074\u0052\u0075l\u0069n\u0067:\u0020\u0070\u0061\u0074\u0068\u003d\u0025v",_gbgfd );_dc .Printf (" \u0020\u0020\u0068\u006f\u0072\u007as\u003d\u0025\u0064\u0020\u0076\u0065\u0072\u0074\u0073=\u0025\u0064\u0020o\u006b=\u0025\u0074\u000a",len (_daac ),len (_fgegg ),_efcbb );};return &ruling {},false ;};if len (_fgegg )==0{for _ccbd ,_dfda :=range _ggbe {if _dfda !=_feae {_fgegg =append (_fgegg ,_ccbd );};};};if len (_daac )==0{for _aacf ,_gdgde :=range _ggbe {if _gdgde !=_fdff {_daac =append (_daac ,_aacf );};};};if _aaf {_ad .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 (_daac ),len (_fgegg ),len (_acga ),_daac ,_fgegg ,_acga );};var _ffegg ,_cadb ,_dbdb ,_aedd _cd .Point ;if _acga [_daac [0]].Y > _acga [_daac [1]].Y {_dbdb ,_aedd =_acga [_daac [0]],_acga [_daac [1]];}else {_dbdb ,_aedd =_acga [_daac [1]],_acga [_daac [0]];};if _acga [_fgegg [0]].X > _acga [_fgegg [1]].X {_ffegg ,_cadb =_acga [_fgegg [0]],_acga [_fgegg [1]];}else {_ffegg ,_cadb =_acga [_fgegg [1]],_acga [_fgegg [0]];};_bbgbe :=_dd .PdfRectangle {Llx :_ffegg .X ,Urx :_cadb .X ,Lly :_aedd .Y ,Ury :_dbdb .Y };if _bbgbe .Llx > _bbgbe .Urx {_bbgbe .Llx ,_bbgbe .Urx =_bbgbe .Urx ,_bbgbe .Llx ;};if _bbgbe .Lly > _bbgbe .Ury {_bbgbe .Lly ,_bbgbe .Ury =_bbgbe .Ury ,_bbgbe .Lly ;};_cbfa :=rectRuling {PdfRectangle :_bbgbe ,_dgdf :_egcc (_bbgbe ),Color :_ddbb };if _cbfa ._dgdf ==_cffb {if _aaf {_ad .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 ;};_dgedc ,_fcge :=_cbfa .asRuling ();if !_fcge {if _aaf {_ad .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 _fggb {_dc .Printf ("\u0020\u0020\u0020\u0072\u003d\u0025\u0073\u000a",_dgedc .String ());};return _dgedc ,true ;};func (_abgge *textPara )writeText (_acac _a .Writer ){if _abgge ._cgf ==nil {_abgge .writeCellText (_acac );return ;};for _bccb :=0;_bccb < _abgge ._cgf ._adfe ;_bccb ++{for _fecca :=0;_fecca < _abgge ._cgf ._gddg ;_fecca ++{_bdac :=_abgge ._cgf .get (_fecca ,_bccb );if _bdac ==nil {_acac .Write ([]byte ("\u0009"));}else {_bdac .writeCellText (_acac );};_acac .Write ([]byte ("\u0020"));};if _bccb < _abgge ._cgf ._adfe -1{_acac .Write ([]byte ("\u000a"));};};};
// String returns a human readable description of `s`.
func (_bdcca intSet )String ()string {var _bgebg []int ;for _efge :=range _bdcca {if _bdcca .has (_efge ){_bgebg =append (_bgebg ,_efge );};};_cf .Ints (_bgebg );return _dc .Sprintf ("\u0025\u002b\u0076",_bgebg );};
// String returns a description of `k`.
func (_gceb markKind )String ()string {_bgae ,_accfg :=_fac [_gceb ];if !_accfg {return _dc .Sprintf ("\u004e\u006f\u0074\u0020\u0061\u0020\u006d\u0061\u0072k\u003a\u0020\u0025\u0064",_gceb );};return _bgae ;};func _cdba (_egag []TextMark ,_bagg *int )[]TextMark {_fefb :=_egag [len (_egag )-1];_gace :=[]rune (_fefb .Text );if len (_gace )==1{_egag =_egag [:len (_egag )-1];_ccga :=_egag [len (_egag )-1];*_bagg =_ccga .Offset +len (_ccga .Text );}else {_dadf :=_bee (_fefb .Text );*_bagg +=len (_dadf )-len (_fefb .Text );_fefb .Text =_dadf ;};return _egag ;};func (_bgec paraList )merge ()*textPara {_ad .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 (_bgec ));if len (_bgec )==0{return nil ;};_bgec .sortReadingOrder ();_dbef :=_bgec [0].PdfRectangle ;_cagca :=_bgec [0]._fcaad ;for _ ,_bgdb :=range _bgec [1:]{_dbef =_ceab (_dbef ,_bgdb .PdfRectangle );_cagca =append (_cagca ,_bgdb ._fcaad ...);};return _cbac (_dbef ,_cagca );};func (_cgg gridTile )contains (_edca _dd .PdfRectangle )bool {if _cgg .numBorders ()< 3{return false ;};if _cgg ._gfgca &&_edca .Llx < _cgg .Llx -_aedb {return false ;};if _cgg ._ebce &&_edca .Urx > _cgg .Urx +_aedb {return false ;};if _cgg ._bgfee &&_edca .Lly < _cgg .Lly -_aedb {return false ;};if _cgg ._aabe &&_edca .Ury > _cgg .Ury +_aedb {return false ;};return true ;};func (_bgeb rulingList )isActualGrid ()(rulingList ,bool ){_eaeab ,_adcf :=_bgeb .augmentGrid ();if !(len (_eaeab )>=_geda +1&&len (_adcf )>=_aaed +1){if _fggb {_ad .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 (_eaeab ),len (_adcf ),_geda +1,_aaed +1);};return nil ,false ;};if _fggb {_ad .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",_bgeb ,len (_eaeab )>=2,len (_adcf )>=2,len (_eaeab )>=2&&len (_adcf )>=2);for _cfcf ,_gfeba :=range _bgeb {_dc .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0076\u000a",_cfcf ,_gfeba );};};if _beade {_eefc ,_bbdc :=_eaeab [0],_eaeab [len (_eaeab )-1];_ffde ,_gadf :=_adcf [0],_adcf [len (_adcf )-1];if !(_ccfb (_eefc ._acaf -_ffde ._fgdd )&&_ccfb (_bbdc ._acaf -_ffde ._cage )&&_ccfb (_ffde ._acaf -_eefc ._cage )&&_ccfb (_gadf ._acaf -_eefc ._fgdd )){if _fggb {_ad .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",_eefc ,_bbdc ,_ffde ,_gadf );};return nil ,false ;};}else {if !_eaeab .aligned (){if _dgcc {_ad .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 (_eaeab ));};return nil ,false ;};if !_adcf .aligned (){if _fggb {_ad .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 (_adcf ));};return nil ,false ;};};_fdddb :=append (_eaeab ,_adcf ...);return _fdddb ,true ;};func (_egfc *wordBag )firstReadingIndex (_abcg int )int {_agbca :=_egfc .firstWord (_abcg )._dafb ;_dgcd :=float64 (_abcg +1)*_dfca ;_ece :=_dgcd +_ccac *_agbca ;_fecg :=_abcg ;for _ ,_bcff :=range _egfc .depthBand (_dgcd ,_ece ){if _bedg (_egfc .firstWord (_bcff ),_egfc .firstWord (_fecg ))< 0{_fecg =_bcff ;};};return _fecg ;};type ruling struct{_abgae rulingKind ;_aaff markKind ;_ed .Color ;_acaf float64 ;_fgdd float64 ;_cage float64 ;_faff float64 ;};
// String returns a description of `tm`.
func (_cbbcd *textMark )String ()string {return _dc .Sprintf ("\u0025\u002e\u0032f \u0066\u006f\u006e\u0074\u0073\u0069\u007a\u0065\u003d\u0025\u002e\u0032\u0066\u0020\u0022\u0025\u0073\u0022",_cbbcd .PdfRectangle ,_cbbcd ._geafc ,_cbbcd ._fgeb );};func (_gfdb *wordBag )maxDepth ()float64 {return _gfdb ._fgfd -_gfdb .Lly };func (_ggga paraList )yNeighbours (_eccda float64 )map[*textPara ][]int {_gcgf :=make ([]event ,2*len (_ggga ));if _eccda ==0{for _ccee ,_cede :=range _ggga {_gcgf [2*_ccee ]=event {_cede .Lly ,true ,_ccee };_gcgf [2*_ccee +1]=event {_cede .Ury ,false ,_ccee };};}else {for _caecb ,_gfcg :=range _ggga {_gcgf [2*_caecb ]=event {_gfcg .Lly -_eccda *_gfcg .fontsize (),true ,_caecb };_gcgf [2*_caecb +1]=event {_gfcg .Ury +_eccda *_gfcg .fontsize (),false ,_caecb };};};return _ggga .eventNeighbours (_gcgf );};func _cbdf (_dbeb ,_bceae int )int {if _dbeb > _bceae {return _dbeb ;};return _bceae ;};func (_bbecf rulingList )primMinMax ()(float64 ,float64 ){_dcfd ,_edffc :=_bbecf [0]._acaf ,_bbecf [0]._acaf ;for _ ,_eccbcf :=range _bbecf [1:]{if _eccbcf ._acaf < _dcfd {_dcfd =_eccbcf ._acaf ;}else if _eccbcf ._acaf > _edffc {_edffc =_eccbcf ._acaf ;};};return _dcfd ,_edffc ;};func _faa (_geaf []*wordBag )[]*wordBag {if len (_geaf )<=1{return _geaf ;};if _fada {_ad .Log .Info ("\u006d\u0065\u0072\u0067\u0065\u0057\u006f\u0072\u0064B\u0061\u0067\u0073\u003a");};_cf .Slice (_geaf ,func (_gga ,_acf int )bool {_baad ,_dcab :=_geaf [_gga ],_geaf [_acf ];_afceg :=_baad .Width ()*_baad .Height ();_gbcc :=_dcab .Width ()*_dcab .Height ();if _afceg !=_gbcc {return _afceg > _gbcc ;};if _baad .Height ()!=_dcab .Height (){return _baad .Height ()> _dcab .Height ();};return _gga < _acf ;});var _gefcf []*wordBag ;_ccg :=make (intSet );for _dgfe :=0;_dgfe < len (_geaf );_dgfe ++{if _ccg .has (_dgfe ){continue ;};_eagc :=_geaf [_dgfe ];for _gcea :=_dgfe +1;_gcea < len (_geaf );_gcea ++{if _ccg .has (_dgfe ){continue ;};_gfge :=_geaf [_gcea ];_aggd :=_eagc .PdfRectangle ;_aggd .Llx -=_eagc ._ebge ;if _ggc (_aggd ,_gfge .PdfRectangle ){_eagc .absorb (_gfge );_ccg .add (_gcea );};};_gefcf =append (_gefcf ,_eagc );};if len (_geaf )!=len (_gefcf )+len (_ccg ){_ad .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 (_geaf ),len (_gefcf ),len (_ccg ));};return _gefcf ;};func _fcaa (_fadec func (*wordBag ,*textWord ,float64 )bool ,_ceca float64 )func (*wordBag ,*textWord )bool {return func (_begf *wordBag ,_gdbf *textWord )bool {return _fadec (_begf ,_gdbf ,_ceca )};};func (_cfed paraList )llyRange (_dffc []int ,_ddbd ,_gceed float64 )[]int {_efbea :=len (_cfed );if _gceed < _cfed [_dffc [0]].Lly ||_ddbd > _cfed [_dffc [_efbea -1]].Lly {return nil ;};_dcae :=_cf .Search (_efbea ,func (_gcab int )bool {return _cfed [_dffc [_gcab ]].Lly >=_ddbd });_dfbg :=_cf .Search (_efbea ,func (_fbecc int )bool {return _cfed [_dffc [_fbecc ]].Lly > _gceed });return _dffc [_dcae :_dfbg ];};func (_ffbb *stateStack )push (_gag *textState ){_bagd :=*_gag ;*_ffbb =append (*_ffbb ,&_bagd )};func (_bb *imageExtractContext )extractXObjectImage (_edb *_gd .PdfObjectName ,_dbb _ga .GraphicsState ,_gbf *_dd .PdfPageResources )error {_ea ,_ :=_gbf .GetXObjectByName (*_edb );if _ea ==nil {return nil ;};_adf ,_eaa :=_bb ._fg [_ea ];if !_eaa {_gfb ,_ff :=_gbf .GetXObjectImageByName (*_edb );if _ff !=nil {return _ff ;};if _gfb ==nil {return nil ;};_gebd ,_ff :=_gfb .ToImage ();if _ff !=nil {return _ff ;};_adf =&cachedImage {_ef :_gebd ,_efd :_gfb .ColorSpace };_bb ._fg [_ea ]=_adf ;};_agf :=_adf ._ef ;_ae :=_adf ._efd ;_ecb ,_gff :=_ae .ImageToRGB (*_agf );if _gff !=nil {return _gff ;};_ad .Log .Debug ("@\u0044\u006f\u0020\u0043\u0054\u004d\u003a\u0020\u0025\u0073",_dbb .CTM .String ());_be :=ImageMark {Image :&_ecb ,Width :_dbb .CTM .ScalingFactorX (),Height :_dbb .CTM .ScalingFactorY (),Angle :_dbb .CTM .Angle ()};_be .X ,_be .Y =_dbb .CTM .Translation ();_bb ._da =append (_bb ._da ,_be );_bb ._cea ++;return nil ;};
// 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 (_beg *shapesState )moveTo (_cbbc ,_bcea float64 ){_beg ._dedf =true ;_beg ._fecc =_beg .devicePoint (_cbbc ,_bcea );if _ecef {_ad .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",_cbbc ,_bcea ,_beg ._fecc );};};func _ddeeg (_dfge map[int ][]float64 )string {_fcgf :=_fgag (_dfge );_cafgd :=make ([]string ,len (_dfge ));for _eegb ,_efgda :=range _fcgf {_cafgd [_eegb ]=_dc .Sprintf ("\u0025\u0064\u003a\u0020\u0025\u002e\u0032\u0066",_efgda ,_dfge [_efgda ]);};return _dc .Sprintf ("\u007b\u0025\u0073\u007d",_d .Join (_cafgd ,"\u002c\u0020"));};
// Marks returns the TextMark collection for a page. It represents all the text on the page.
func (_ggbc PageText )Marks ()*TextMarkArray {return &TextMarkArray {_dcf :_ggbc ._gge }};func (_dfba *textTable )toTextTable ()TextTable {if _bedbb {_ad .Log .Info ("t\u006fT\u0065\u0078\u0074\u0054\u0061\u0062\u006c\u0065:\u0020\u0025\u0064\u0020x \u0025\u0064",_dfba ._gddg ,_dfba ._adfe );};_degdc :=make ([][]TableCell ,_dfba ._adfe );for _ecga :=0;_ecga < _dfba ._adfe ;_ecga ++{_degdc [_ecga ]=make ([]TableCell ,_dfba ._gddg );for _aggb :=0;_aggb < _dfba ._gddg ;_aggb ++{_ggaa :=_dfba .get (_aggb ,_ecga );if _ggaa ==nil {continue ;};if _bedbb {_dc .Printf ("\u0025\u0034\u0064 \u0025\u0032\u0064\u003a\u0020\u0025\u0073\u000a",_aggb ,_ecga ,_ggaa );};_degdc [_ecga ][_aggb ].Text =_ggaa .text ();_ecfc :=0;_degdc [_ecga ][_aggb ].Marks ._dcf =_ggaa .toTextMarks (&_ecfc );};};return TextTable {W :_dfba ._gddg ,H :_dfba ._adfe ,Cells :_degdc };};func (_aea *textObject )getStrokeColor ()_ed .Color {return _ecdd (_aea ._bgda .ColorspaceStroking ,_aea ._bgda .ColorStroking );};func (_cabdb paraList )xNeighbours (_fbbf float64 )map[*textPara ][]int {_bdgd :=make ([]event ,2*len (_cabdb ));if _fbbf ==0{for _bgacb ,_cged :=range _cabdb {_bdgd [2*_bgacb ]=event {_cged .Llx ,true ,_bgacb };_bdgd [2*_bgacb +1]=event {_cged .Urx ,false ,_bgacb };};}else {for _edgf ,_beaca :=range _cabdb {_bdgd [2*_edgf ]=event {_beaca .Llx -_fbbf *_beaca .fontsize (),true ,_edgf };_bdgd [2*_edgf +1]=event {_beaca .Urx +_fbbf *_beaca .fontsize (),false ,_edgf };};};return _cabdb .eventNeighbours (_bdgd );};func (_bfg *textObject )moveText (_dde ,_dcb float64 ){_bfg .moveLP (_dde ,_dcb )};func (_egeg paraList )sortReadingOrder (){_ad .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 (_egeg ));if len (_egeg )<=1{return ;};_egeg .computeEBBoxes ();_cf .Slice (_egeg ,func (_egfa ,_accf int )bool {return _gcd (_egeg [_egfa ],_egeg [_accf ])<=0});_dfgd :=_egeg .topoOrder ();_egeg .reorder (_dfgd );};func (_bfgce paraList )eventNeighbours (_ggbac []event )map[*textPara ][]int {_cf .Slice (_ggbac ,func (_cccfg ,_bccbe int )bool {_cefbe ,_affa :=_ggbac [_cccfg ],_ggbac [_bccbe ];_abbf ,_aedba :=_cefbe ._fafa ,_affa ._fafa ;if _abbf !=_aedba {return _abbf < _aedba ;};if _cefbe ._gead !=_affa ._gead {return _cefbe ._gead ;};return _cccfg < _bccbe ;});_daace :=make (map[int ]intSet );_bcdce :=make (intSet );for _ ,_ddcaea :=range _ggbac {if _ddcaea ._gead {_daace [_ddcaea ._bdd ]=make (intSet );for _bfac :=range _bcdce {if _bfac !=_ddcaea ._bdd {_daace [_ddcaea ._bdd ].add (_bfac );_daace [_bfac ].add (_ddcaea ._bdd );};};_bcdce .add (_ddcaea ._bdd );}else {_bcdce .del (_ddcaea ._bdd );};};_afgf :=map[*textPara ][]int {};for _caeca ,_dccd :=range _daace {_gegde :=_bfgce [_caeca ];if len (_dccd )==0{_afgf [_gegde ]=nil ;continue ;};_ddcgf :=make ([]int ,len (_dccd ));_gfbb :=0;for _aggac :=range _dccd {_ddcgf [_gfbb ]=_aggac ;_gfbb ++;};_afgf [_gegde ]=_ddcgf ;};return _afgf ;};func _gfgcb (_fbggd map[float64 ]map[float64 ]gridTile )[]float64 {_aegd :=make ([]float64 ,0,len (_fbggd ));for _gegd :=range _fbggd {_aegd =append (_aegd ,_gegd );};_cf .Float64s (_aegd );_efeag :=len (_aegd );for _abea :=0;_abea < _efeag /2;_abea ++{_aegd [_abea ],_aegd [_efeag -1-_abea ]=_aegd [_efeag -1-_abea ],_aegd [_abea ];};return _aegd ;};func (_dda *textObject )nextLine (){_dda .moveLP (0,-_dda ._bfdgc ._dbac )};func (_adec *subpath )clear (){*_adec =subpath {}};func (_eafda paraList )findGridTables (_aface []gridTiling )[]*textTable {if _bedbb {_ad .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 (_eafda ));for _faea ,_aagf :=range _eafda {_dc .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_faea ,_aagf );};};var _acadf []*textTable ;for _fdaeg ,_fbcd :=range _aface {_afbbg ,_gfce :=_eafda .findTableGrid (_fbcd );if _afbbg !=nil {_afbbg .log (_dc .Sprintf ("\u0066\u0069\u006e\u0064Ta\u0062\u006c\u0065\u0057\u0069\u0074\u0068\u0047\u0072\u0069\u0064\u0073\u003a\u0020%\u0064",_fdaeg ));_acadf =append (_acadf ,_afbbg );_afbbg .markCells ();};for _edfc :=range _gfce {_edfc ._ebaf =true ;};};if _bedbb {_ad .Log .Info ("\u0066i\u006e\u0064\u0047\u0072i\u0064\u0054\u0061\u0062\u006ce\u0073:\u0020%\u0064\u0020\u0074\u0061\u0062\u006c\u0065s",len (_acadf ));};return _acadf ;};
// Elements returns the TextMarks in `ma`.
func (_ggf *TextMarkArray )Elements ()[]TextMark {return _ggf ._dcf };func (_accbe rulingList )merge ()*ruling {_babg :=_accbe [0]._acaf ;_dgbd :=_accbe [0]._fgdd ;_defge :=_accbe [0]._cage ;for _ ,_egac :=range _accbe [1:]{_babg +=_egac ._acaf ;if _egac ._fgdd < _dgbd {_dgbd =_egac ._fgdd ;};if _egac ._cage > _defge {_defge =_egac ._cage ;};};_aefba :=&ruling {_abgae :_accbe [0]._abgae ,_aaff :_accbe [0]._aaff ,Color :_accbe [0].Color ,_acaf :_babg /float64 (len (_accbe )),_fgdd :_dgbd ,_cage :_defge };if _dgcc {_ad .Log .Info ("\u006de\u0072g\u0065\u003a\u0020\u0025\u0032d\u0020\u0076e\u0063\u0073\u0020\u0025\u0073",len (_accbe ),_aefba );for _aadgge ,_bgbcf :=range _accbe {_dc .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_aadgge ,_bgbcf );};};return _aefba ;};func (_cceb *shapesState )quadraticTo (_dcd ,_fab ,_efea ,_fddf float64 ){if _ecef {_ad .Log .Info ("\u0071\u0075\u0061d\u0072\u0061\u0074\u0069\u0063\u0054\u006f\u003a");};_cceb .addPoint (_efea ,_fddf );};var _cagbe =map[rulingKind ]string {_cffb :"\u006e\u006f\u006e\u0065",_feae :"\u0068\u006f\u0072\u0069\u007a\u006f\u006e\u0074\u0061\u006c",_fdff :"\u0076\u0065\u0072\u0074\u0069\u0063\u0061\u006c"};func (_bgca *textLine )pullWord (_gdga *wordBag ,_fabd *textWord ,_begd int ){_bgca .appendWord (_fabd );_gdga .removeWord (_fabd ,_begd );};func (_gcfc *shapesState )lastpointEstablished ()(_cd .Point ,bool ){if _gcfc ._dedf {return _gcfc ._fecc ,false ;};_fbbdd :=len (_gcfc ._cgbd );if _fbbdd > 0&&_gcfc ._cgbd [_fbbdd -1]._eade {return _gcfc ._cgbd [_fbbdd -1].last (),false ;};return _cd .Point {},true ;};func (_cfe *textLine )appendWord (_abca *textWord ){_cfe ._becbb =append (_cfe ._becbb ,_abca );_cfe .PdfRectangle =_ceab (_cfe .PdfRectangle ,_abca .PdfRectangle );if _abca ._dafb > _cfe ._cdgd {_cfe ._cdgd =_abca ._dafb ;};if _abca ._gceede > _cfe ._dgfa {_cfe ._dgfa =_abca ._gceede ;};};type textTable struct{_dd .PdfRectangle ;_gddg ,_adfe int ;_eafc bool ;_efbae map[uint64 ]*textPara ;_baba map[uint64 ]compositeCell ;};func (_gebbe intSet )del (_fcec int ){delete (_gebbe ,_fcec )};func (_bba *textObject )setTextRise (_cdd float64 ){if _bba ==nil {return ;};_bba ._bfdgc ._gfee =_cdd ;};func (_fag *textLine )text ()string {var _bfab []string ;for _ ,_gcbe :=range _fag ._becbb {if _gcbe ._fabdc {_bfab =append (_bfab ,"\u0020");};_bfab =append (_bfab ,_gcbe ._ebed );};return _d .Join (_bfab ,"");};type textResult struct{_ead PageText ;_dba int ;_abc int ;};
// PageImages represents extracted images on a PDF page with spatial information:
// display position and size.
type PageImages struct{Images []ImageMark ;};func (_dbfe compositeCell )String ()string {_bad :="";if len (_dbfe .paraList )> 0{_bad =_cgbgd (_dbfe .paraList .merge ().text (),50);};return _dc .Sprintf ("\u0025\u0036\u002e\u0032\u0066\u0020\u0025\u0064\u0020\u0070\u0061\u0072a\u0073\u0020\u0025\u0071",_dbfe .PdfRectangle ,len (_dbfe .paraList ),_bad );};type textLine struct{_dd .PdfRectangle ;_dgfa float64 ;_becbb []*textWord ;_cdgd float64 ;};func (_bfgbg *textTable )depth ()float64 {_fcfa :=1e10;for _ffcc :=0;_ffcc < _bfgbg ._gddg ;_ffcc ++{_caaf :=_bfgbg .get (_ffcc ,0);if _caaf ==nil ||_caaf ._ebfg {continue ;};_fcfa =_ge .Min (_fcfa ,_caaf .depth ());};return _fcfa ;};func (_agebe rectRuling )checkWidth (_agcd ,_cabf float64 )(float64 ,bool ){_cade :=_cabf -_agcd ;_cecg :=_cade <=_gbg ;return _cade ,_cecg ;};const _ada =1.0/1000.0;
// 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 (_beb PageText )ToText ()string {return _beb .Text ()};func (_gdfb *textTable )markCells (){for _beag :=0;_beag < _gdfb ._adfe ;_beag ++{for _ecec :=0;_ecec < _gdfb ._gddg ;_ecec ++{_daab :=_gdfb .get (_ecec ,_beag );if _daab !=nil {_daab ._ebaf =true ;};};};};func (_gedd rulingList )removeDuplicates ()rulingList {if len (_gedd )==0{return nil ;};_gedd .sort ();_aafc :=rulingList {_gedd [0]};for _ ,_fcgcg :=range _gedd [1:]{if _fcgcg .equals (_aafc [len (_aafc )-1]){continue ;};_aafc =append (_aafc ,_fcgcg );};return _aafc ;};func (_gdgd *compositeCell )updateBBox (){for _ ,_acdd :=range _gdgd .paraList {_gdgd .PdfRectangle =_ceab (_gdgd .PdfRectangle ,_acdd .PdfRectangle );};};type stateStack []*textState ;func (_geafg *wordBag )removeDuplicates (){if _dbae {_ad .Log .Info ("r\u0065m\u006f\u0076\u0065\u0044\u0075\u0070\u006c\u0069c\u0061\u0074\u0065\u0073: \u0025\u0071",_geafg .text ());};for _ ,_bbgf :=range _geafg .depthIndexes (){if len (_geafg ._efeb [_bbgf ])==0{continue ;};_gffcb :=_geafg ._efeb [_bbgf ][0];_faae :=_bgad *_gffcb ._dafb ;_eede :=_gffcb ._gceede ;for _ ,_acfa :=range _geafg .depthBand (_eede ,_eede +_faae ){_gcga :=map[*textWord ]struct{}{};_fecec :=_geafg ._efeb [_acfa ];for _ ,_bbec :=range _fecec {if _ ,_deef :=_gcga [_bbec ];_deef {continue ;};for _ ,_agcc :=range _fecec {if _ ,_agbcc :=_gcga [_agcc ];_agbcc {continue ;};if _agcc !=_bbec &&_agcc ._ebed ==_bbec ._ebed &&_ge .Abs (_agcc .Llx -_bbec .Llx )< _faae &&_ge .Abs (_agcc .Urx -_bbec .Urx )< _faae &&_ge .Abs (_agcc .Lly -_bbec .Lly )< _faae &&_ge .Abs (_agcc .Ury -_bbec .Ury )< _faae {_gcga [_agcc ]=struct{}{};};};};if len (_gcga )> 0{_eeeac :=0;for _ ,_egad :=range _fecec {if _ ,_aaabe :=_gcga [_egad ];!_aaabe {_fecec [_eeeac ]=_egad ;_eeeac ++;};};_geafg ._efeb [_acfa ]=_fecec [:len (_fecec )-len (_gcga )];if len (_geafg ._efeb [_acfa ])==0{delete (_geafg ._efeb ,_acfa );};};};};};func (_cdaa *wordBag )depthRange (_dgaf ,_cccd int )[]int {var _bbga []int ;for _feec :=range _cdaa ._efeb {if _dgaf <=_feec &&_feec <=_cccd {_bbga =append (_bbga ,_feec );};};if len (_bbga )==0{return nil ;};_cf .Ints (_bbga );return _bbga ;};func (_bbegd paraList )writeText (_cdga _a .Writer ){for _aaea ,_gbfc :=range _bbegd {if _gbfc ._ebfg {continue ;};_gbfc .writeText (_cdga );if _aaea !=len (_bbegd )-1{if _dgfd (_gbfc ,_bbegd [_aaea +1]){_cdga .Write ([]byte ("\u0020"));}else {_cdga .Write ([]byte ("\u000a"));_cdga .Write ([]byte ("\u000a"));};};};_cdga .Write ([]byte ("\u000a"));_cdga .Write ([]byte ("\u000a"));};
// Tables returns the tables extracted from the page.
func (_acb PageText )Tables ()[]TextTable {if _bedbb {_ad .Log .Info ("\u0054\u0061\u0062\u006c\u0065\u0073\u003a\u0020\u0025\u0064",len (_acb ._feb ));};return _acb ._feb ;};func (_befbg paraList )findTableGrid (_fadgc gridTiling )(*textTable ,map[*textPara ]struct{}){_egafb :=len (_fadgc ._cgdb );_debd :=len (_fadgc ._cfeab );_faaea :=textTable {_eafc :true ,_gddg :_egafb ,_adfe :_debd ,_efbae :make (map[uint64 ]*textPara ,_egafb *_debd ),_baba :make (map[uint64 ]compositeCell ,_egafb *_debd )};_cagcc :=make (map[*textPara ]struct{});_fcagb :=int ((1.0-_eaceg )*float64 (_egafb *_debd ));_cadf :=0;if _dgdd {_ad .Log .Info ("\u0066\u0069\u006e\u0064Ta\u0062\u006c\u0065\u0047\u0072\u0069\u0064\u003a\u0020\u0025\u0064\u0020\u0078\u0020%\u0064",_egafb ,_debd );};for _abeg ,_daeg :=range _fadgc ._cfeab {_dadca ,_febd :=_fadgc ._ggac [_daeg ];if !_febd {continue ;};for _gdae ,_edefa :=range _fadgc ._cgdb {_gfba ,_gdba :=_dadca [_edefa ];if !_gdba {continue ;};_ebdb :=_befbg .inTile (_gfba );if len (_ebdb )==0{_cadf ++;if _cadf > _fcagb {if _dgdd {_ad .Log .Info ("\u0021\u006e\u0075m\u0045\u006d\u0070\u0074\u0079\u003d\u0025\u0064",_cadf );};return nil ,nil ;};}else {_faaea .putComposite (_gdae ,_abeg ,_ebdb ,_gfba .PdfRectangle );for _ ,_dcbe :=range _ebdb {_cagcc [_dcbe ]=struct{}{};};};};};_bfagf :=0;for _gbcdc :=0;_gbcdc < _egafb ;_gbcdc ++{_efga :=_faaea .get (_gbcdc ,0);if _efga ==nil ||!_efga ._ebfg {_bfagf ++;};};if _bfagf ==0{if _dgdd {_ad .Log .Info ("\u0021\u006e\u0075m\u0048\u0065\u0061\u0064\u0065\u0072\u003d\u0030");};return nil ,nil ;};_cccbd :=_faaea .reduceTiling (_fadgc ,_efgc );_cccbd =_cccbd .subdivide ();return _cccbd ,_cagcc ;};func _dfgfe (_fbcdf float64 )float64 {return _aaabg *_ge .Round (_fbcdf /_aaabg )};func (_dgb lineRuling )xMean ()float64 {return 0.5*(_dgb ._aeeac .X +_dgb ._daeb .X )};const (_cgea =1.0e-6;_aaabg =1.0e-4;_cccae =10;_dfca =6;_fdae =0.5;_bdbbe =0.12;_dcgd =0.19;_dbff =0.04;_dffg =0.04;_efbe =1.0;_agfg =0.04;_gafbg =0.4;_ccfc =0.7;_ebca =1.0;_ddda =0.1;_abfd =1.4;_abe =0.46;_cgeg =0.02;_bgad =0.2;_eggb =0.5;_gfga =4;_ccac =4.0;_ega =6;_eaceg =0.3;_egfe =0.01;_agde =0.02;_geda =2;_aaed =2;_cfgg =500;_bbag =4.0;_fdc =4.0;_gcbf =0.05;_eaea =0.1;_dad =2.0;_gbg =2.0;_aedb =1.5;_efgc =3.0;_bgce =0.25;);
// 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 (_afcc *TextMarkArray )RangeOffset (start ,end int )(*TextMarkArray ,error ){if _afcc ==nil {return nil ,_f .New ("\u006da\u003d\u003d\u006e\u0069\u006c");};if end < start {return nil ,_dc .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 );};_efe :=len (_afcc ._dcf );if _efe ==0{return _afcc ,nil ;};if start < _afcc ._dcf [0].Offset {start =_afcc ._dcf [0].Offset ;};if end > _afcc ._dcf [_efe -1].Offset +1{end =_afcc ._dcf [_efe -1].Offset +1;};_bbdb :=_cf .Search (_efe ,func (_cbdgg int )bool {return _afcc ._dcf [_cbdgg ].Offset +len (_afcc ._dcf [_cbdgg ].Text )-1>=start });if !(0<=_bbdb &&_bbdb < _efe ){_edaeg :=_dc .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 ,_bbdb ,_efe ,_afcc ._dcf [0],_afcc ._dcf [_efe -1]);return nil ,_edaeg ;};_fde :=_cf .Search (_efe ,func (_defb int )bool {return _afcc ._dcf [_defb ].Offset > end -1});if !(0<=_fde &&_fde < _efe ){_bgcd :=_dc .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 ,_fde ,_efe ,_afcc ._dcf [0],_afcc ._dcf [_efe -1]);return nil ,_bgcd ;};if _fde <=_bbdb {return nil ,_dc .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 ,_bbdb ,_fde );};return &TextMarkArray {_dcf :_afcc ._dcf [_bbdb :_fde ]},nil ;};func (_gddbd compositeCell )parasBBox ()(paraList ,_dd .PdfRectangle ){return _gddbd .paraList ,_gddbd .PdfRectangle ;};func _gefb (_gfccf []int )[]int {_cfeaf :=make ([]int ,len (_gfccf ));for _acecb ,_gdfe :=range _gfccf {_cfeaf [len (_gfccf )-1-_acecb ]=_gdfe ;};return _cfeaf ;};func (_cda *textObject )reset (){_cda ._fddg =_cd .IdentityMatrix ();_cda ._cba =_cd .IdentityMatrix ();_cda ._bgdab =nil ;};func (_bbgb paraList )log (_efba string ){if !_gcdc {return ;};_ad .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",_efba ,len (_bbgb ));for _gabg ,_ggfg :=range _bbgb {if _ggfg ==nil {continue ;};_cbcc :=_ggfg .text ();_aedg :="\u0020\u0020";if _ggfg ._cgf !=nil {_aedg =_dc .Sprintf ("\u005b%\u0064\u0078\u0025\u0064\u005d",_ggfg ._cgf ._gddg ,_ggfg ._cgf ._adfe );};_dc .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u0020\u0025s\u0020\u0025\u0071\u000a",_gabg ,_ggfg .PdfRectangle ,_aedg ,_cgbgd (_cbcc ,50));};};type textObject struct{_bfe *Extractor ;_eaae *_dd .PdfPageResources ;_bgda _ga .GraphicsState ;_bfdgc *textState ;_fea *stateStack ;_fddg _cd .Matrix ;_cba _cd .Matrix ;_bgdab []*textMark ;_eeg bool ;};func _ccfb (_gccb float64 )bool {return _ge .Abs (_gccb )< _gbg };func (_ebcb compositeCell )split (_acdf ,_bgccb []float64 )*textTable {_adcd :=len (_acdf )+1;_ddbg :=len (_bgccb )+1;if _bedbb {_ad .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",_ddbg ,_adcd ,_ebcb ,_acdf ,_bgccb );_dc .Printf ("\u0020\u0020\u0020\u0020\u0025\u0064\u0020\u0070\u0061\u0072\u0061\u0073\u000a",len (_ebcb .paraList ));for _afagb ,_dbdc :=range _ebcb .paraList {_dc .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_afagb ,_dbdc .String ());};_dc .Printf ("\u0020\u0020\u0020\u0020\u0025\u0064\u0020\u006c\u0069\u006e\u0065\u0073\u000a",len (_ebcb .lines ()));for _ccea ,_effb :=range _ebcb .lines (){_dc .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_ccea ,_effb );};};_acdf =_fdbca (_acdf ,_ebcb .Ury ,_ebcb .Lly );_bgccb =_fdbca (_bgccb ,_ebcb .Llx ,_ebcb .Urx );_dce :=make (map[uint64 ]*textPara ,_ddbg *_adcd );_dbge :=textTable {_gddg :_ddbg ,_adfe :_adcd ,_efbae :_dce };_dddd :=_ebcb .paraList ;_cf .Slice (_dddd ,func (_eeddd ,_bgcg int )bool {_egae ,_abae :=_dddd [_eeddd ],_dddd [_bgcg ];_begff ,_babb :=_egae .Lly ,_abae .Lly ;if _begff !=_babb {return _begff < _babb ;};return _egae .Llx < _abae .Llx ;});_ddbgf :=make (map[uint64 ]_dd .PdfRectangle ,_ddbg *_adcd );for _adeca ,_cebb :=range _acdf [1:]{_bagf :=_acdf [_adeca ];for _fdgf ,_cbab :=range _bgccb [1:]{_bcfd :=_bgccb [_fdgf ];_ddbgf [_eddd (_fdgf ,_adeca )]=_dd .PdfRectangle {Llx :_bcfd ,Urx :_cbab ,Lly :_cebb ,Ury :_bagf };};};if _bedbb {_ad .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");_dc .Printf ("\u0020\u0020\u0020\u0020");for _dacdc :=0;_dacdc < _ddbg ;_dacdc ++{_dc .Printf ("\u0025\u0033\u0030\u0064\u002c\u0020",_dacdc );};_dc .Println ();for _ccbc :=0;_ccbc < _adcd ;_ccbc ++{_dc .Printf ("\u0020\u0020\u0025\u0032\u0064\u003a",_ccbc );for _bfecg :=0;_bfecg < _ddbg ;_bfecg ++{_dc .Printf ("\u00256\u002e\u0032\u0066\u002c\u0020",_ddbgf [_eddd (_bfecg ,_ccbc )]);};_dc .Println ();};};_acgc :=func (_dbdf *textLine )(int ,int ){for _caac :=0;_caac < _adcd ;_caac ++{for _ebfgb :=0;_ebfgb < _ddbg ;_ebfgb ++{if _ggc (_ddbgf [_eddd (_ebfgb ,_caac )],_dbdf .PdfRectangle ){return _ebfgb ,_caac ;};};};return -1,-1;};_aebdc :=make (map[uint64 ][]*textLine ,_ddbg *_adcd );for _ ,_ddcae :=range _dddd .lines (){_eafd ,_dabf :=_acgc (_ddcae );if _eafd < 0{continue ;};_aebdc [_eddd (_eafd ,_dabf )]=append (_aebdc [_eddd (_eafd ,_dabf )],_ddcae );};for _cbaga :=0;_cbaga < len (_acdf )-1;_cbaga ++{_abccd :=_acdf [_cbaga ];_cfef :=_acdf [_cbaga +1];for _aegb :=0;_aegb < len (_bgccb )-1;_aegb ++{_fgde :=_bgccb [_aegb ];_aaabgb :=_bgccb [_aegb +1];_ddcf :=_dd .PdfRectangle {Llx :_fgde ,Urx :_aaabgb ,Lly :_cfef ,Ury :_abccd };_bgfg :=_aebdc [_eddd (_aegb ,_cbaga )];if len (_bgfg )==0{continue ;};_fdce :=_cbac (_ddcf ,_bgfg );_dbge .put (_aegb ,_cbaga ,_fdce );};};return &_dbge ;};func _fdbca (_gccga []float64 ,_cfbd ,_eafcg float64 )[]float64 {_eecc ,_dgce :=_cfbd ,_eafcg ;if _dgce < _eecc {_eecc ,_dgce =_dgce ,_eecc ;};_bgde :=make ([]float64 ,0,len (_gccga )+2);_bgde =append (_bgde ,_cfbd );for _ ,_acbde :=range _gccga {if _acbde <=_eecc {continue ;}else if _acbde >=_dgce {break ;};_bgde =append (_bgde ,_acbde );};_bgde =append (_bgde ,_eafcg );return _bgde ;};func (_befd *wordBag )minDepth ()float64 {return _befd ._fgfd -(_befd .Ury -_befd ._ebge )};type textState struct{_ade float64 ;_gcee float64 ;_cdda float64 ;_dbac float64 ;_dccf float64 ;_babc RenderMode ;_gfee float64 ;_eccb *_dd .PdfFont ;_fcg _dd .PdfRectangle ;_gca int ;_aae int ;};func (_agfgg paraList )findTables (_fbgf []gridTiling )[]*textTable {_agfgg .addNeighbours ();_cf .Slice (_agfgg ,func (_agddc ,_fcba int )bool {return _dgga (_agfgg [_agddc ],_agfgg [_fcba ])< 0});var _bgffa []*textTable ;if _gfbcb {_cege :=_agfgg .findGridTables (_fbgf );_bgffa =append (_bgffa ,_cege ...);};if _cabc {_afda :=_agfgg .findTextTables ();_bgffa =append (_bgffa ,_afda ...);};return _bgffa ;};func (_bbeg *textObject )checkOp (_gccd *_ga .ContentStreamOperation ,_ebc int ,_bff bool )(_bcfb bool ,_fecf error ){if _bbeg ==nil {var _abcc []_gd .PdfObject ;if _ebc > 0{_abcc =_gccd .Params ;if len (_abcc )> _ebc {_abcc =_abcc [:_ebc ];};};_ad .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",_gccd .Operand ,_abcc );};if _ebc >=0{if len (_gccd .Params )!=_ebc {if _bff {_fecf =_f .New ("\u0069n\u0063\u006f\u0072\u0072e\u0063\u0074\u0020\u0070\u0061r\u0061m\u0065t\u0065\u0072\u0020\u0063\u006f\u0075\u006et");};_ad .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",_gccd .Operand ,_ebc ,len (_gccd .Params ),_gccd .Params );return false ,_fecf ;};};return true ,nil ;};
// 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 (_age *Extractor )ExtractPageImages (options *ImageExtractOptions )(*PageImages ,error ){_gg :=&imageExtractContext {_dcg :options };_acc :=_gg .extractContentStreamImages (_age ._add ,_age ._aa );if _acc !=nil {return nil ,_acc ;};return &PageImages {Images :_gg ._da },nil ;};var (_aecgf =map[rune ]string {0x0060:"\u0300",0x02CB:"\u0300",0x0027:"\u0301",0x00B4:"\u0301",0x02B9:"\u0301",0x02CA:"\u0301",0x005E:"\u0302",0x02C6:"\u0302",0x007E:"\u0303",0x02DC:"\u0303",0x00AF:"\u0304",0x02C9:"\u0304",0x02D8:"\u0306",0x02D9:"\u0307",0x00A8:"\u0308",0x00B0:"\u030a",0x02DA:"\u030a",0x02BA:"\u030b",0x02DD:"\u030b",0x02C7:"\u030c",0x02C8:"\u030d",0x0022:"\u030e",0x02BB:"\u0312",0x02BC:"\u0313",0x0486:"\u0313",0x055A:"\u0313",0x02BD:"\u0314",0x0485:"\u0314",0x0559:"\u0314",0x02D4:"\u031d",0x02D5:"\u031e",0x02D6:"\u031f",0x02D7:"\u0320",0x02B2:"\u0321",0x00B8:"\u0327",0x02CC:"\u0329",0x02B7:"\u032b",0x02CD:"\u0331",0x005F:"\u0332",0x204E:"\u0359"};);func (_afcg intSet )has (_badcd int )bool {_ ,_aafgd :=_afcg [_badcd ];return _aafgd };func (_gbgc *textPara )depth ()float64 {if _gbgc ._ebfg {return -1.0;};if len (_gbgc ._fcaad )> 0{return _gbgc ._fcaad [0]._dgfa ;};return _gbgc ._cgf .depth ();};func _ecgc (_cfag string ,_gefab []rulingList ){_ad .Log .Info ("\u0024\u0024 \u0025\u0064\u0020g\u0072\u0069\u0064\u0073\u0020\u002d\u0020\u0025\u0073",len (_gefab ),_cfag );for _fbgb ,_bfgab :=range _gefab {_dc .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_fbgb ,_bfgab .String ());};};func (_dcef *textTable )reduceTiling (_bcabe gridTiling ,_gcaa float64 )*textTable {_dbbdb :=make ([]int ,0,_dcef ._adfe );_aebdb :=make ([]int ,0,_dcef ._gddg );_ggge :=_bcabe ._cgdb ;_eebec :=_bcabe ._cfeab ;for _gcfcd :=0;_gcfcd < _dcef ._adfe ;_gcfcd ++{_aabg :=_gcfcd > 0&&_ge .Abs (_eebec [_gcfcd -1]-_eebec [_gcfcd ])< _gcaa &&_dcef .emptyRow (_gcfcd );if !_aabg {_dbbdb =append (_dbbdb ,_gcfcd );};};for _face :=0;_face < _dcef ._gddg ;_face ++{_ecac :=_face < _dcef ._gddg -1&&_ge .Abs (_ggge [_face +1]-_ggge [_face ])< _gcaa &&_dcef .emptyColumn (_face );if !_ecac {_aebdb =append (_aebdb ,_face );};};if len (_dbbdb )==_dcef ._adfe &&len (_aebdb )==_dcef ._gddg {return _dcef ;};_abbdf :=textTable {_eafc :_dcef ._eafc ,_gddg :len (_aebdb ),_adfe :len (_dbbdb ),_baba :make (map[uint64 ]compositeCell ,len (_aebdb )*len (_dbbdb ))};if _bedbb {_ad .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",_dcef ._gddg ,_dcef ._adfe ,len (_aebdb ),len (_dbbdb ));_ad .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0043\u006f\u006c\u0073\u003a\u0020\u0025\u002b\u0076",_aebdb );_ad .Log .Info ("\u0072\u0065d\u0075\u0063\u0065d\u0052\u006f\u0077\u0073\u003a\u0020\u0025\u002b\u0076",_dbbdb );};for _bfag ,_aeabe :=range _dbbdb {for _dgae ,_aagff :=range _aebdb {_dbgeb ,_ecdbd :=_dcef .getComposite (_aagff ,_aeabe );if len (_dbgeb )==0{continue ;};if _bedbb {_dc .Printf ("\u0020 \u0025\u0032\u0064\u002c \u0025\u0032\u0064\u0020\u0028%\u0032d\u002c \u0025\u0032\u0064\u0029\u0020\u0025\u0071\n",_dgae ,_bfag ,_aagff ,_aeabe ,_cgbgd (_dbgeb .merge ().text (),50));};_abbdf .putComposite (_dgae ,_bfag ,_dbgeb ,_ecdbd );};};return &_abbdf ;};func (_bfafa *textTable )getRight ()paraList {_dddbb :=make (paraList ,_bfafa ._adfe );for _gcfbc :=0;_gcfbc < _bfafa ._adfe ;_gcfbc ++{_adddf :=_bfafa .get (_bfafa ._gddg -1,_gcfbc )._geged ;if _adddf ==nil ||_adddf ._ebaf {return nil ;};_dddbb [_gcfbc ]=_adddf ;};for _gaced :=0;_gaced < _bfafa ._adfe -1;_gaced ++{if _dddbb [_gaced ]._gfaf !=_dddbb [_gaced +1]{return nil ;};};return _dddbb ;};func (_acef *wordBag )firstWord (_ggfd int )*textWord {return _acef ._efeb [_ggfd ][0]};func _egfac (_bebg int ,_agcf func (int ,int )bool )[]int {_cfdf :=make ([]int ,_bebg );for _ecaf :=range _cfdf {_cfdf [_ecaf ]=_ecaf ;};_cf .Slice (_cfdf ,func (_daada ,_bgfb int )bool {return _agcf (_cfdf [_daada ],_cfdf [_bgfb ])});return _cfdf ;};func (_bffd *textObject )getCurrentFont ()*_dd .PdfFont {var _baa *_dd .PdfFont ;if !_bffd ._fea .empty (){_baa =_bffd ._fea .top ()._eccb ;};if _baa ==nil {_ad .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 _dd .DefaultFont ();};return _baa ;};func (_cbbd *textWord )bbox ()_dd .PdfRectangle {return _cbbd .PdfRectangle };func _ecdd (_gfed _dd .PdfColorspace ,_ggedd _dd .PdfColor )_ed .Color {if _gfed ==nil ||_ggedd ==nil {return _ed .Black ;};_ebbfe ,_cbcf :=_gfed .ColorToRGB (_ggedd );if _cbcf !=nil {_ad .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",_ggedd ,_gfed ,_cbcf );return _ed .Black ;};_efcg ,_deffa :=_ebbfe .(*_dd .PdfColorDeviceRGB );if !_deffa {_ad .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",_ebbfe );return _ed .Black ;};return _ed .NRGBA {R :uint8 (_efcg .R ()*255),G :uint8 (_efcg .G ()*255),B :uint8 (_efcg .B ()*255),A :uint8 (255)};};func (_fceg *ruling )alignsPrimary (_fddbe *ruling )bool {return _fceg ._abgae ==_fddbe ._abgae &&_ge .Abs (_fceg ._acaf -_fddbe ._acaf )< _gbg *0.5;};func (_efee *wordBag )blocked (_ffg *textWord )bool {if _ffg .Urx < _efee .Llx {_dbgf :=_affga (_ffg .PdfRectangle );_bfdf :=_aage (_efee .PdfRectangle );if _efee ._gcce .blocks (_dbgf ,_bfdf ){if _bgff {_ad .Log .Info ("\u0062\u006c\u006f\u0063ke\u0064\u0020\u2190\u0078\u003a\u0020\u0025\u0073\u0020\u0025\u0073",_ffg ,_efee );};return true ;};}else if _efee .Urx < _ffg .Llx {_bfee :=_affga (_efee .PdfRectangle );_bcb :=_aage (_ffg .PdfRectangle );if _efee ._gcce .blocks (_bfee ,_bcb ){if _bgff {_ad .Log .Info ("b\u006co\u0063\u006b\u0065\u0064\u0020\u0078\u2192\u0020:\u0020\u0025\u0073\u0020%s",_ffg ,_efee );};return true ;};};if _ffg .Ury < _efee .Lly {_fgff :=_dfgc (_ffg .PdfRectangle );_defa :=_dbdfa (_efee .PdfRectangle );if _efee ._bbb .blocks (_fgff ,_defa ){if _bgff {_ad .Log .Info ("\u0062\u006c\u006f\u0063ke\u0064\u0020\u2190\u0079\u003a\u0020\u0025\u0073\u0020\u0025\u0073",_ffg ,_efee );};return true ;};}else if _efee .Ury < _ffg .Lly {_gebe :=_dfgc (_efee .PdfRectangle );_aegc :=_dbdfa (_ffg .PdfRectangle );if _efee ._bbb .blocks (_gebe ,_aegc ){if _bgff {_ad .Log .Info ("b\u006co\u0063\u006b\u0065\u0064\u0020\u0079\u2192\u0020:\u0020\u0025\u0073\u0020%s",_ffg ,_efee );};return true ;};};return false ;};func (_bgfe rulingList )augmentGrid ()(rulingList ,rulingList ){_cbge ,_bdcg :=_bgfe .vertsHorzs ();if len (_cbge )==0||len (_bdcg )==0{return _cbge ,_bdcg ;};_gged ,_degdg :=_cbge ,_bdcg ;_gede :=_cbge .bbox ();_eegdg :=_bdcg .bbox ();if _fggb {_ad .Log .Info ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0047\u0072\u0069\u0064\u003a\u0020b\u0062\u006f\u0078\u0056\u003d\u0025\u0036\u002e\u0032\u0066",_gede );_ad .Log .Info ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0047\u0072\u0069\u0064\u003a\u0020b\u0062\u006f\u0078\u0048\u003d\u0025\u0036\u002e\u0032\u0066",_eegdg );};var _egaf ,_dcdb ,_fcgec ,_fcgb *ruling ;if _eegdg .Llx < _gede .Llx -_dad {_egaf =&ruling {_aaff :_ffbde ,_abgae :_fdff ,_acaf :_eegdg .Llx ,_fgdd :_gede .Lly ,_cage :_gede .Ury };_cbge =append (rulingList {_egaf },_cbge ...);};if _eegdg .Urx > _gede .Urx +_dad {_dcdb =&ruling {_aaff :_ffbde ,_abgae :_fdff ,_acaf :_eegdg .Urx ,_fgdd :_gede .Lly ,_cage :_gede .Ury };_cbge =append (_cbge ,_dcdb );};if _gede .Lly < _eegdg .Lly -_dad {_fcgec =&ruling {_aaff :_ffbde ,_abgae :_feae ,_acaf :_gede .Lly ,_fgdd :_eegdg .Llx ,_cage :_eegdg .Urx };_bdcg =append (rulingList {_fcgec },_bdcg ...);};if _gede .Ury > _eegdg .Ury +_dad {_fcgb =&ruling {_aaff :_ffbde ,_abgae :_feae ,_acaf :_gede .Ury ,_fgdd :_eegdg .Llx ,_cage :_eegdg .Urx };_bdcg =append (_bdcg ,_fcgb );};if len (_cbge )+len (_bdcg )==len (_bgfe ){return _gged ,_degdg ;};_cdee :=append (_cbge ,_bdcg ...);_bgfe .log ("u\u006e\u0061\u0075\u0067\u006d\u0065\u006e\u0074\u0065\u0064");_cdee .log ("\u0061u\u0067\u006d\u0065\u006e\u0074\u0065d");return _cbge ,_bdcg ;};func (_becf paraList )computeEBBoxes (){if _cbc {_ad .Log .Info ("\u0063o\u006dp\u0075\u0074\u0065\u0045\u0042\u0042\u006f\u0078\u0065\u0073\u003a");};for _ ,_bfdbe :=range _becf {_bfdbe ._gaca =_bfdbe .PdfRectangle ;};_geed :=_becf .yNeighbours (0);for _gfgf ,_agbg :=range _becf {_ggaf :=_agbg ._gaca ;_afbcd ,_cefb :=-1.0e9,+1.0e9;for _ ,_ebeb :=range _geed [_agbg ]{_gbgf :=_becf [_ebeb ]._gaca ;if _gbgf .Urx < _ggaf .Llx {_afbcd =_ge .Max (_afbcd ,_gbgf .Urx );}else if _ggaf .Urx < _gbgf .Llx {_cefb =_ge .Min (_cefb ,_gbgf .Llx );};};for _fdgcd ,_dfcb :=range _becf {_aegg :=_dfcb ._gaca ;if _gfgf ==_fdgcd ||_aegg .Ury > _ggaf .Lly {continue ;};if _afbcd <=_aegg .Llx &&_aegg .Llx < _ggaf .Llx {_ggaf .Llx =_aegg .Llx ;}else if _aegg .Urx <=_cefb &&_ggaf .Urx < _aegg .Urx {_ggaf .Urx =_aegg .Urx ;};};if _cbc {_dc .Printf ("\u0025\u0034\u0064\u003a %\u0036\u002e\u0032\u0066\u2192\u0025\u0036\u002e\u0032\u0066\u0020\u0025\u0071\u000a",_gfgf ,_agbg ._gaca ,_ggaf ,_cgbgd (_agbg .text (),50));};_agbg ._gaca =_ggaf ;};if _bffb {for _ ,_debf :=range _becf {_debf .PdfRectangle =_debf ._gaca ;};};};func (_gecb *textObject )moveTextSetLeading (_bgbe ,_dga float64 ){_gecb ._bfdgc ._dbac =-_dga ;_gecb .moveLP (_bgbe ,_dga );};func (_cebe *textPara )toTextMarks (_geff *int )[]TextMark {if _cebe ._cgf ==nil {return _cebe .toCellTextMarks (_geff );};var _bbbc []TextMark ;for _aegf :=0;_aegf < _cebe ._cgf ._adfe ;_aegf ++{for _edecd :=0;_edecd < _cebe ._cgf ._gddg ;_edecd ++{_egbf :=_cebe ._cgf .get (_edecd ,_aegf );if _egbf ==nil {_bbbc =_fabc (_bbbc ,_geff ,"\u0009");}else {_aeeae :=_egbf .toCellTextMarks (_geff );_bbbc =append (_bbbc ,_aeeae ...);};_bbbc =_fabc (_bbbc ,_geff ,"\u0020");};if _aegf < _cebe ._cgf ._adfe -1{_bbbc =_fabc (_bbbc ,_geff ,"\u000a");};};return _bbbc ;};func (_fge *wordBag )absorb (_bacd *wordBag ){_cfgb :=_bacd .makeRemovals ();for _aee ,_cbbe :=range _bacd ._efeb {for _ ,_faed :=range _cbbe {_fge .pullWord (_faed ,_aee ,_cfgb );};};_bacd .applyRemovals (_cfgb );};func (_abdgg intSet )add (_egagd int ){_abdgg [_egagd ]=struct{}{}};
// PageText represents the layout of text on a device page.
type PageText struct{_gae []*textMark ;_gdcd string ;_gge []TextMark ;_feb []TextTable ;_bgc _dd .PdfRectangle ;_eea []pathSection ;_abgcd []pathSection ;};func _dbe (_cdg _dd .PdfRectangle ,_cdcd bounded )float64 {return _cdg .Ury -_cdcd .bbox ().Lly };func (_eeba *subpath )close (){if !_fefcb (_eeba ._addd [0],_eeba .last ()){_eeba .add (_eeba ._addd [0]);};_eeba ._eade =true ;_eeba .removeDuplicates ();};func _bfgb (_fdge ,_abcf _cd .Point )rulingKind {_dccff :=_ge .Abs (_fdge .X -_abcf .X );_fafb :=_ge .Abs (_fdge .Y -_abcf .Y );return _gbgfc (_dccff ,_fafb ,_bbag );};func (_ddff *textWord )appendMark (_caga *textMark ,_facg _dd .PdfRectangle ){_ddff ._dgcbf =append (_ddff ._dgcbf ,_caga );_ddff .PdfRectangle =_ceab (_ddff .PdfRectangle ,_caga .PdfRectangle );if _caga ._geafc > _ddff ._dafb {_ddff ._dafb =_caga ._geafc ;};_ddff ._gceede =_facg .Ury -_ddff .PdfRectangle .Lly ;};func (_faf *textObject )moveLP (_eba ,_eeb float64 ){_faf ._cba .Concat (_cd .NewMatrix (1,0,0,1,_eba ,_eeb ));_faf ._fddg =_faf ._cba ;};func (_dddae *textTable )log (_dacaa string ){if !_bedbb {return ;};_ad .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",_dacaa ,_dddae ._gddg ,_dddae ._adfe ,_dddae ._eafc ,_dddae .PdfRectangle );for _abbdfa :=0;_abbdfa < _dddae ._adfe ;_abbdfa ++{for _acge :=0;_acge < _dddae ._gddg ;_acge ++{_dfae :=_dddae .get (_acge ,_abbdfa );if _dfae ==nil {continue ;};_dc .Printf ("%\u0034\u0064\u0020\u00252d\u003a \u0025\u0036\u002e\u0032\u0066 \u0025\u0071\u0020\u0025\u0064\u000a",_acge ,_abbdfa ,_dfae .PdfRectangle ,_cgbgd (_dfae .text (),50),_g .RuneCountInString (_dfae .text ()));};};};func _bbge (_eeff string )bool {for _ ,_bfcd :=range _eeff {if !_b .IsSpace (_bfcd ){return false ;};};return true ;};func (_faagd *textTable )compositeRowCorridors ()map[int ][]float64 {_dafg :=make (map[int ][]float64 ,_faagd ._adfe );if _bedbb {_ad .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",_faagd ._adfe );};for _dadg :=1;_dadg < _faagd ._adfe ;_dadg ++{var _cbdaf []compositeCell ;for _cefc :=0;_cefc < _faagd ._gddg ;_cefc ++{if _bbbe ,_ggbfe :=_faagd ._baba [_eddd (_cefc ,_dadg )];_ggbfe {_cbdaf =append (_cbdaf ,_bbbe );};};if len (_cbdaf )==0{continue ;};_bafd :=_egfb (_cbdaf );_dafg [_dadg ]=_bafd ;if _bedbb {_dc .Printf ("\u0020\u0020\u0020\u0025\u0032\u0064\u003a\u0020\u00256\u002e\u0032\u0066\u000a",_dadg ,_bafd );};};return _dafg ;};func _ccf (_cfaba _dd .PdfRectangle )textState {return textState {_cdda :100,_babc :RenderModeFill ,_fcg :_cfaba };};func (_ffbf *textTable )putComposite (_affd ,_fccee int ,_dagbc paraList ,_bded _dd .PdfRectangle ){if len (_dagbc )==0{_ad .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 ;};_fgca :=compositeCell {_bded ,_dagbc };if _bedbb {_dc .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",_affd ,_fccee ,_fgca .String ());};_fgca .updateBBox ();_ffbf ._baba [_eddd (_affd ,_fccee )]=_fgca ;};type event struct{_fafa float64 ;_gead bool ;_bdd int ;};func (_cbfb lineRuling )yMean ()float64 {return 0.5*(_cbfb ._aeeac .Y +_cbfb ._daeb .Y )};
// String returns a string describing `pt`.
func (_fccd PageText )String ()string {_bef :=_dc .Sprintf ("P\u0061\u0067\u0065\u0054ex\u0074:\u0020\u0025\u0064\u0020\u0065l\u0065\u006d\u0065\u006e\u0074\u0073",len (_fccd ._gae ));_efc :=[]string {"\u002d"+_bef };for _ ,_fbea :=range _fccd ._gae {_efc =append (_efc ,_fbea .String ());};_efc =append (_efc ,"\u002b"+_bef );return _d .Join (_efc ,"\u000a");};func (_ggdb *shapesState )establishSubpath ()*subpath {_cbdb ,_gdda :=_ggdb .lastpointEstablished ();if !_gdda {_ggdb ._cgbd =append (_ggdb ._cgbd ,_fafc (_cbdb ));};if len (_ggdb ._cgbd )==0{return nil ;};_ggdb ._dedf =false ;return _ggdb ._cgbd [len (_ggdb ._cgbd )-1];};func (_ceef *ruling )equals (_eedc *ruling )bool {return _ceef ._abgae ==_eedc ._abgae &&_bdccd (_ceef ._acaf ,_eedc ._acaf )&&_bdccd (_ceef ._fgdd ,_eedc ._fgdd )&&_bdccd (_ceef ._cage ,_eedc ._cage );};func (_aaab *wordBag )makeRemovals ()map[int ]map[*textWord ]struct{}{_fgc :=make (map[int ]map[*textWord ]struct{},len (_aaab ._efeb ));for _dfc :=range _aaab ._efeb {_fgc [_dfc ]=make (map[*textWord ]struct{});};return _fgc ;};func (_affgc *textTable )isExportable ()bool {if _affgc ._eafc {return true ;};_feff :=func (_cccdb int )bool {_fcbc :=_affgc .get (0,_cccdb );if _fcbc ==nil {return false ;};_faag :=_fcbc .text ();_ddab :=_g .RuneCountInString (_faag );_dbbd :=_ffcf .MatchString (_faag );return _ddab <=1||_dbbd ;};for _eaedg :=0;_eaedg < _affgc ._adfe ;_eaedg ++{if !_feff (_eaedg ){return true ;};};return false ;};type compositeCell struct{_dd .PdfRectangle ;paraList ;};func _ggc (_ggce ,_cdad _dd .PdfRectangle )bool {return _ggce .Llx <=_cdad .Llx &&_cdad .Urx <=_ggce .Urx &&_ggce .Lly <=_cdad .Lly &&_cdad .Ury <=_ggce .Ury ;};func (_ddcg paraList )inTile (_cagbg gridTile )paraList {var _gfda paraList ;for _ ,_cecgg :=range _ddcg {if _cagbg .contains (_cecgg .PdfRectangle ){_gfda =append (_gfda ,_cecgg );};};if _bedbb {_dc .Printf ("\u0020 \u0020\u0069\u006e\u0054i\u006c\u0065\u003a\u0020\u0020%\u0073 \u0069n\u0073\u0069\u0064\u0065\u003d\u0025\u0064\n",_cagbg ,len (_gfda ));for _dfdgb ,_acdc :=range _gfda {_dc .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_dfdgb ,_acdc );};_dc .Println ("");};return _gfda ;};func _dbdfa (_bfbe _dd .PdfRectangle )*ruling {return &ruling {_abgae :_feae ,_acaf :_bfbe .Lly ,_fgdd :_bfbe .Llx ,_cage :_bfbe .Urx };};
// New returns an Extractor instance for extracting content from the input PDF page.
func New (page *_dd .PdfPage )(*Extractor ,error ){_def ,_eb :=page .GetAllContentStreams ();if _eb !=nil {return nil ,_eb ;};_bd ,_eb :=page .GetMediaBox ();if _eb !=nil {return nil ,_dc .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",_eb );};_ba :=&Extractor {_add :_def ,_aa :page .Resources ,_eda :*_bd ,_dca :map[string ]fontEntry {},_gdg :map[string ]textResult {}};if _ba ._eda .Llx > _ba ._eda .Urx {_ad .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",_ba ._eda );_ba ._eda .Llx ,_ba ._eda .Urx =_ba ._eda .Urx ,_ba ._eda .Llx ;};if _ba ._eda .Lly > _ba ._eda .Ury {_ad .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",_ba ._eda );_ba ._eda .Lly ,_ba ._eda .Ury =_ba ._eda .Ury ,_ba ._eda .Lly ;};return _ba ,nil ;};func _egcc (_bafe _dd .PdfRectangle )rulingKind {_ecg :=_bafe .Width ();_eaga :=_bafe .Height ();if _ecg > _eaga {if _ecg >=_bbag {return _feae ;};}else {if _eaga >=_bbag {return _fdff ;};};return _cffb ;};func _afba (_ffb *_ga .ContentStreamOperation )(float64 ,error ){if len (_ffb .Params )!=1{_gcbd :=_f .New ("\u0069n\u0063\u006f\u0072\u0072e\u0063\u0074\u0020\u0070\u0061r\u0061m\u0065t\u0065\u0072\u0020\u0063\u006f\u0075\u006et");_ad .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",_ffb .Operand ,1,len (_ffb .Params ),_ffb .Params );return 0.0,_gcbd ;};return _gd .GetNumberAsFloat (_ffb .Params [0]);};func (_feeg rulingList )sortStrict (){_cf .Slice (_feeg ,func (_cegf ,_fffb int )bool {_caddb ,_dfgf :=_feeg [_cegf ],_feeg [_fffb ];_ceddc ,_ebdde :=_caddb ._abgae ,_dfgf ._abgae ;if _ceddc !=_ebdde {return _ceddc > _ebdde ;};_fabe ,_gcde :=_caddb ._acaf ,_dfgf ._acaf ;if !_dgdb (_fabe -_gcde ){return _fabe < _gcde ;};_fabe ,_gcde =_caddb ._fgdd ,_dfgf ._fgdd ;if _fabe !=_gcde {return _fabe < _gcde ;};return _caddb ._cage < _dfgf ._cage ;});};type subpath struct{_addd []_cd .Point ;_eade bool ;};func (_gdec paraList )lines ()[]*textLine {var _eggg []*textLine ;for _ ,_feaae :=range _gdec {_eggg =append (_eggg ,_feaae ._fcaad ...);};return _eggg ;};func (_gccdf *wordBag )applyRemovals (_cbgff map[int ]map[*textWord ]struct{}){for _ffbd ,_aebc :=range _cbgff {if len (_aebc )==0{continue ;};_befb :=_gccdf ._efeb [_ffbd ];_babe :=len (_befb )-len (_aebc );if _babe ==0{delete (_gccdf ._efeb ,_ffbd );continue ;};_gafbd :=make ([]*textWord ,_babe );_dbd :=0;for _ ,_agga :=range _befb {if _ ,_eggf :=_aebc [_agga ];!_eggf {_gafbd [_dbd ]=_agga ;_dbd ++;};};_gccdf ._efeb [_ffbd ]=_gafbd ;};};type rulingList []*ruling ;var _ffcf =_e .MustCompile ("\u005e\u005c\u0073\u002a\u0028\u005c\u0064\u002b\u005c\u002e\u003f|\u005b\u0049\u0069\u0076\u005d\u002b\u0029\u005c\u0073\u002a\\\u0029\u003f\u0024");func (_bgaff *textTable )subdivide ()*textTable {_bgaff .logComposite ("\u0073u\u0062\u0064\u0069\u0076\u0069\u0064e");_bdbf :=_bgaff .compositeRowCorridors ();_gaeg :=_bgaff .compositeColCorridors ();if _bedbb {_ad .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",_ddeeg (_bdbf ),_ddeeg (_gaeg ));};if len (_bdbf )==0||len (_gaeg )==0{return _bgaff ;};_bgba (_bdbf );_bgba (_gaeg );if _bedbb {_ad .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",_ddeeg (_bdbf ),_ddeeg (_gaeg ));};_afabb ,_bdccdf :=_cgbg (_bgaff ._adfe ,_bdbf );_ecge ,_fefc :=_cgbg (_bgaff ._gddg ,_gaeg );_ffbe :=make (map[uint64 ]*textPara ,_fefc *_bdccdf );_afbbgf :=&textTable {PdfRectangle :_bgaff .PdfRectangle ,_eafc :_bgaff ._eafc ,_adfe :_bdccdf ,_gddg :_fefc ,_efbae :_ffbe };if _bedbb {_ad .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",_bgaff ._gddg ,_bgaff ._adfe ,_fefc ,_bdccdf ,_ddeeg (_bdbf ),_ddeeg (_gaeg ),_afabb ,_ecge );};for _agda :=0;_agda < _bgaff ._adfe ;_agda ++{_eged :=_afabb [_agda ];for _aaedg :=0;_aaedg < _bgaff ._gddg ;_aaedg ++{_adfa :=_ecge [_aaedg ];if _bedbb {_dc .Printf ("\u0025\u0036\u0064\u002c %\u0032\u0064\u003a\u0020\u0078\u0030\u003d\u0025\u0064\u0020\u0079\u0030\u003d\u0025d\u000a",_aaedg ,_agda ,_adfa ,_eged );};_gcddb ,_fbab :=_bgaff ._baba [_eddd (_aaedg ,_agda )];if !_fbab {continue ;};_bgee :=_gcddb .split (_bdbf [_agda ],_gaeg [_aaedg ]);for _ceeeg :=0;_ceeeg < _bgee ._adfe ;_ceeeg ++{for _baef :=0;_baef < _bgee ._gddg ;_baef ++{_eaagg :=_bgee .get (_baef ,_ceeeg );_afbbgf .put (_adfa +_baef ,_eged +_ceeeg ,_eaagg );if _bedbb {_dc .Printf ("\u0025\u0038\u0064\u002c\u0020\u0025\u0032\u0064\u003a\u0020\u0025\u0073\u000a",_adfa +_baef ,_eged +_ceeeg ,_eaagg );};};};};};return _afbbgf ;};func _fgag (_cccb map[int ][]float64 )[]int {_edcde :=make ([]int ,len (_cccb ));_afdg :=0;for _ecegc :=range _cccb {_edcde [_afdg ]=_ecegc ;_afdg ++;};_cf .Ints (_edcde );return _edcde ;};func (_ebcg rulingList )toGrids ()[]rulingList {if _fggb {_ad .Log .Info ("t\u006f\u0047\u0072\u0069\u0064\u0073\u003a\u0020\u0025\u0073",_ebcg );};_bfad :=_ebcg .intersections ();if _fggb {_ad .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 (_ebcg ),len (_bfad ));for _ ,_eedf :=range _gdgce (_bfad ){_dc .Printf ("\u00254\u0064\u003a\u0020\u0025\u002b\u0076\n",_eedf ,_bfad [_eedf ]);};};_fgcc :=make (map[int ]intSet ,len (_ebcg ));for _faaf :=range _ebcg {_gdeec :=_ebcg .connections (_bfad ,_faaf );if len (_gdeec )> 0{_fgcc [_faaf ]=_gdeec ;};};if _fggb {_ad .Log .Info ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u0063\u006fn\u006e\u0065\u0063\u0074s=\u0025\u0064",len (_fgcc ));for _ ,_bafce :=range _gdgce (_fgcc ){_dc .Printf ("\u00254\u0064\u003a\u0020\u0025\u002b\u0076\n",_bafce ,_fgcc [_bafce ]);};};_acfdb :=_egfac (len (_ebcg ),func (_cddf ,_cbfg int )bool {_dbcfbc ,_ebdg :=len (_fgcc [_cddf ]),len (_fgcc [_cbfg ]);if _dbcfbc !=_ebdg {return _dbcfbc > _ebdg ;};return _ebcg .comp (_cddf ,_cbfg );});if _fggb {_ad .Log .Info ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u006f\u0072d\u0065\u0072\u0069\u006eg=\u0025\u0076",_acfdb );};_bgbc :=[][]int {{_acfdb [0]}};_faec :for _ ,_edaa :=range _acfdb [1:]{for _edce ,_bdcc :=range _bgbc {for _ ,_aegbd :=range _bdcc {if _fgcc [_aegbd ].has (_edaa ){_bgbc [_edce ]=append (_bdcc ,_edaa );continue _faec ;};};};_bgbc =append (_bgbc ,[]int {_edaa });};if _fggb {_ad .Log .Info ("\u0074o\u0047r\u0069\u0064\u0073\u003a\u0020i\u0067\u0072i\u0064\u0073\u003d\u0025\u0076",_bgbc );};_cf .SliceStable (_bgbc ,func (_ceda ,_ecgf int )bool {return len (_bgbc [_ceda ])> len (_bgbc [_ecgf ])});for _ ,_eegag :=range _bgbc {_cf .Slice (_eegag ,func (_bacdg ,_eeec int )bool {return _ebcg .comp (_eegag [_bacdg ],_eegag [_eeec ])});};_ddee :=make ([]rulingList ,len (_bgbc ));for _ebag ,_adea :=range _bgbc {_bbfb :=make (rulingList ,len (_adea ));for _ebef ,_gcabc :=range _adea {_bbfb [_ebef ]=_ebcg [_gcabc ];};_ddee [_ebag ]=_bbfb ;};if _fggb {_ad .Log .Info ("\u0074o\u0047r\u0069\u0064\u0073\u003a\u0020g\u0072\u0069d\u0073\u003d\u0025\u002b\u0076",_ddee );};var _aaae []rulingList ;for _ ,_cgbc :=range _ddee {if _gcfdf ,_dfcc :=_cgbc .isActualGrid ();_dfcc {_cgbc =_gcfdf ;_cgbc =_cgbc .snapToGroups ();_aaae =append (_aaae ,_cgbc );};};if _fggb {_ecgc ("t\u006fG\u0072\u0069\u0064\u0073\u003a\u0020\u0061\u0063t\u0075\u0061\u006c\u0047ri\u0064\u0073",_aaae );_ad .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 (_ddee ),len (_aaae ));};return _aaae ;};func (_babf *textTable )getComposite (_egada ,_eabc int )(paraList ,_dd .PdfRectangle ){_bbce ,_beaf :=_babf ._baba [_eddd (_egada ,_eabc )];if _bedbb {_dc .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",_egada ,_eabc ,_bbce .String ());};if !_beaf {return nil ,_dd .PdfRectangle {};};return _bbce .parasBBox ();};func _fabc (_fcab []TextMark ,_dacd *int ,_agdd string )[]TextMark {_baca :=_ebd ;_baca .Text =_agdd ;return _daca (_fcab ,_dacd ,_baca );};func (_beca rulingList )asTiling ()gridTiling {if _dgdd {_ad .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 (_beca ));};for _bbae ,_bgcde :=range _beca [1:]{_geaa :=_beca [_bbae ];if _geaa .alignsPrimary (_bgcde )&&_geaa .alignsSec (_bgcde ){_ad .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",_bgcde ,_geaa );};};_beca .sortStrict ();_beca .log ("\u0073n\u0061\u0070\u0070\u0065\u0064");_aeda ,_aedaf :=_beca .vertsHorzs ();_dfgdc :=_aeda .primaries ();_bcfa :=_aedaf .primaries ();_edded :=len (_dfgdc )-1;_bfcc :=len (_bcfa )-1;if _edded ==0||_bfcc ==0{return gridTiling {};};_gebee :=_dd .PdfRectangle {Llx :_dfgdc [0],Urx :_dfgdc [_edded ],Lly :_bcfa [0],Ury :_bcfa [_bfcc ]};if _dgdd {_ad .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 (_aeda ));for _dbcb ,_fbagf :=range _aeda {_dc .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_dbcb ,_fbagf );};_ad .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 (_aedaf ));for _eaeg ,_adde :=range _aedaf {_dc .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_eaeg ,_adde );};_ad .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",_edded ,_bfcc ,_dfgdc ,_bcfa );};_agdgb :=make ([]gridTile ,_edded *_bfcc );for _acbe :=_bfcc -1;_acbe >=0;_acbe --{_efgdc :=_bcfa [_acbe ];_dgfeb :=_bcfa [_acbe +1];for _badf :=0;_badf < _edded ;_badf ++{_agebc :=_dfgdc [_badf ];_fbbbe :=_dfgdc [_badf +1];_cacd :=_aeda .findPrimSec (_agebc ,_efgdc );_abgfg :=_aeda .findPrimSec (_fbbbe ,_efgdc );_befa :=_aedaf .findPrimSec (_efgdc ,_agebc );_cdfa :=_aedaf .findPrimSec (_dgfeb ,_agebc );_eedb :=_dd .PdfRectangle {Llx :_agebc ,Urx :_fbbbe ,Lly :_efgdc ,Ury :_dgfeb };_ccaca :=_gdbfg (_eedb ,_cacd ,_abgfg ,_befa ,_cdfa );_agdgb [_acbe *_edded +_badf ]=_ccaca ;if _dgdd {_dc .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",_badf ,_acbe ,_ccaca .String (),_ccaca .Width (),_ccaca .Height ());};};};if _dgdd {_ad .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",_gebee );};_degaf :=make ([]map[float64 ]gridTile ,_bfcc );for _cdfg :=_bfcc -1;_cdfg >=0;_cdfg --{if _dgdd {_dc .Printf ("\u0020\u0020\u0079\u003d\u0025\u0032\u0064\u000a",_cdfg );};_degaf [_cdfg ]=make (map[float64 ]gridTile ,_edded );for _daad :=0;_daad < _edded ;_daad ++{_bebf :=_agdgb [_cdfg *_edded +_daad ];if _dgdd {_dc .Printf ("\u0020\u0020\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_daad ,_bebf );};if !_bebf ._gfgca {continue ;};_cace :=_daad ;for _dbbf :=_daad +1;!_bebf ._ebce &&_dbbf < _edded ;_dbbf ++{_gffb :=_agdgb [_cdfg *_edded +_dbbf ];_bebf .Urx =_gffb .Urx ;_bebf ._aabe =_bebf ._aabe ||_gffb ._aabe ;_bebf ._bgfee =_bebf ._bgfee ||_gffb ._bgfee ;_bebf ._ebce =_gffb ._ebce ;if _dgdd {_dc .Printf ("\u0020 \u0020%\u0034\u0064\u003a\u0020\u0025s\u0020\u2192 \u0025\u0073\u000a",_dbbf ,_gffb ,_bebf );};_cace =_dbbf ;};if _dgdd {_dc .Printf (" \u0020 \u0025\u0032\u0064\u0020\u002d\u0020\u0025\u0032d\u0020\u2192\u0020\u0025s\n",_daad ,_cace ,_bebf );};_daad =_cace ;_degaf [_cdfg ][_bebf .Llx ]=_bebf ;};};_dagc :=make (map[float64 ]map[float64 ]gridTile ,_bfcc );_fbage :=make (map[float64 ]map[float64 ]struct{},_bfcc );for _beada :=_bfcc -1;_beada >=0;_beada --{_edcc :=_agdgb [_beada *_edded ].Lly ;_dagc [_edcc ]=make (map[float64 ]gridTile ,_edded );_fbage [_edcc ]=make (map[float64 ]struct{},_edded );};if _dgdd {_ad .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",_gebee );};for _aadeg :=_bfcc -1;_aadeg >=0;_aadeg --{_gafbf :=_agdgb [_aadeg *_edded ].Lly ;_bfadd :=_degaf [_aadeg ];if _dgdd {_dc .Printf ("\u0020\u0020\u0079\u003d\u0025\u0032\u0064\u000a",_aadeg );};for _ ,_egec :=range _cgee (_bfadd ){if _ ,_cebf :=_fbage [_gafbf ][_egec ];_cebf {continue ;};_fbgg :=_bfadd [_egec ];if _dgdd {_dc .Printf (" \u0020\u0020\u0020\u0020\u0076\u0030\u003d\u0025\u0073\u000a",_fbgg .String ());};for _ebcbg :=_aadeg -1;_ebcbg >=0;_ebcbg --{if _fbgg ._bgfee {break ;};_gdbgf :=_degaf [_ebcbg ];_cecfa ,_eaebd :=_gdbgf [_egec ];if !_eaebd {break ;};if _cecfa .Urx !=_fbgg .Urx {break ;};_fbgg ._bgfee =_cecfa ._bgfee ;_fbgg .Lly =_cecfa .Lly ;if _dgdd {_dc .Printf ("\u0020\u0020\u0020\u0020 \u0020\u0020\u0076\u003d\u0025\u0073\u0020\u0076\u0030\u003d\u0025\u0073\u000a",_cecfa .String (),_fbgg .String ());};_fbage [_cecfa .Lly ][_cecfa .Llx ]=struct{}{};};if _aadeg ==0{_fbgg ._bgfee =true ;};if _fbgg .complete (){_dagc [_gafbf ][_egec ]=_fbgg ;};};};_bbcg :=gridTiling {PdfRectangle :_gebee ,_cgdb :_gacgc (_dagc ),_cfeab :_gfgcb (_dagc ),_ggac :_dagc };_bbcg .log ("\u0043r\u0065\u0061\u0074\u0065\u0064");return _bbcg ;};func (_ffga *textTable )computeBbox ()_dd .PdfRectangle {var _daacc _dd .PdfRectangle ;_ecaa :=false ;for _agegd :=0;_agegd < _ffga ._adfe ;_agegd ++{for _efaa :=0;_efaa < _ffga ._gddg ;_efaa ++{_egdcb :=_ffga .get (_efaa ,_agegd );if _egdcb ==nil {continue ;};if !_ecaa {_daacc =_egdcb .PdfRectangle ;_ecaa =true ;}else {_daacc =_ceab (_daacc ,_egdcb .PdfRectangle );};};};return _daacc ;};func _gdgce (_gedf map[int ]intSet )[]int {_ecae :=make ([]int ,0,len (_gedf ));for _gdcgb :=range _gedf {_ecae =append (_ecae ,_gdcgb );};_cf .Ints (_ecae );return _ecae ;};func _fefcb (_cdbfc ,_febda _cd .Point )bool {return _cdbfc .X ==_febda .X &&_cdbfc .Y ==_febda .Y };func _agdb (_degga []_gd .PdfObject )(_bdab ,_dagbd float64 ,_fgege error ){if len (_degga )!=2{return 0,0,_dc .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 (_degga ));};_eefb ,_fgege :=_gd .GetNumbersAsFloat (_degga );if _fgege !=nil {return 0,0,_fgege ;};return _eefb [0],_eefb [1],nil ;};func (_dddg *shapesState )newSubPath (){_dddg .clearPath ();if _ecef {_ad .Log .Info ("\u006e\u0065\u0077\u0053\u0075\u0062\u0050\u0061\u0074h\u003a\u0020\u0025\u0073",_dddg );};};func _cgbg (_cacee int ,_bcffc map[int ][]float64 )([]int ,int ){_aacbd :=make ([]int ,_cacee );_cgcc :=0;for _dfdb :=0;_dfdb < _cacee ;_dfdb ++{_aacbd [_dfdb ]=_cgcc ;_cgcc +=len (_bcffc [_dfdb ])+1;};return _aacbd ,_cgcc ;};func (_bag *textObject )setHorizScaling (_fgd float64 ){if _bag ==nil {return ;};_bag ._bfdgc ._cdda =_fgd ;};type pathSection struct{_fgf []*subpath ;_ed .Color ;};func (_bfgg *wordBag )depthIndexes ()[]int {if len (_bfgg ._efeb )==0{return nil ;};_gdcg :=make ([]int ,len (_bfgg ._efeb ));_ggfdf :=0;for _ced :=range _bfgg ._efeb {_gdcg [_ggfdf ]=_ced ;_ggfdf ++;};_cf .Ints (_gdcg );return _gdcg ;};func _fafcf (_aag ,_gebba _dd .PdfRectangle )bool {return _gebba .Llx <=_aag .Urx &&_aag .Llx <=_gebba .Urx ;};func (_acadfd *textWord )toTextMarks (_deeea *int )[]TextMark {var _fdea []TextMark ;for _ ,_fead :=range _acadfd ._dgcbf {_fdea =_daca (_fdea ,_deeea ,_fead .ToTextMark ());};return _fdea ;};func _gebdb (_bfaf bounded )float64 {return -_bfaf .bbox ().Lly };func _fcdf (_cfaf ,_dggfd float64 )bool {return _cfaf /_ge .Max (_eaea ,_dggfd )< _gcbf };func (_gaab pathSection )bbox ()_dd .PdfRectangle {_gffc :=_gaab ._fgf [0]._addd [0];_acee :=_dd .PdfRectangle {Llx :_gffc .X ,Urx :_gffc .X ,Lly :_gffc .Y ,Ury :_gffc .Y };_bgcc :=func (_gddf _cd .Point ){if _gddf .X < _acee .Llx {_acee .Llx =_gddf .X ;}else if _gddf .X > _acee .Urx {_acee .Urx =_gddf .X ;};if _gddf .Y < _acee .Lly {_acee .Lly =_gddf .Y ;}else if _gddf .Y > _acee .Ury {_acee .Ury =_gddf .Y ;};};for _ ,_cbae :=range _gaab ._fgf [0]._addd [1:]{_bgcc (_cbae );};for _ ,_adffd :=range _gaab ._fgf [1:]{for _ ,_gafd :=range _adffd ._addd {_bgcc (_gafd );};};return _acee ;};
// 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 _ffegf (_gbbg ,_fgeag _cd .Point )bool {_gdad :=_ge .Abs (_gbbg .X -_fgeag .X );_cgdd :=_ge .Abs (_gbbg .Y -_fgeag .Y );return _fcdf (_gdad ,_cgdd );};func (_cecf *textObject )setTextLeading (_eabg float64 ){if _cecf ==nil {return ;};_cecf ._bfdgc ._dbac =_eabg ;};func (_acbf *textTable )emptyColumn (_ebae int )bool {for _cfedg :=0;_cfedg < _acbf ._adfe ;_cfedg ++{_gdbgdc :=_acbf .get (_ebae ,_cfedg );if _gdbgdc !=nil &&_gdbgdc .text ()!=""{return false ;};};return true ;};func _dgfd (_gdgc ,_afcf *textPara )bool {if _gdgc ._ebfg ||_afcf ._ebfg {return true ;};return _dgdb (_gdgc .depth ()-_afcf .depth ());};func (_defe rulingList )snapToGroupsDirection ()rulingList {_defe .sortStrict ();_acbd :=make (map[*ruling ]rulingList ,len (_defe ));_cbgaf :=_defe [0];_cgff :=func (_adddd *ruling ){_cbgaf =_adddd ;_acbd [_cbgaf ]=rulingList {_adddd }};_cgff (_defe [0]);for _ ,_fddbb :=range _defe [1:]{if _fddbb ._acaf < _cbgaf ._acaf -_cgea {_ad .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",_cbgaf ,_fddbb );};if _fddbb ._acaf > _cbgaf ._acaf +_gbg {_cgff (_fddbb );}else {_acbd [_cbgaf ]=append (_acbd [_cbgaf ],_fddbb );};};_fgda :=make (map[*ruling ]float64 ,len (_acbd ));_acfg :=make (map[*ruling ]*ruling ,len (_defe ));for _faedd ,_bfff :=range _acbd {_fgda [_faedd ]=_bfff .mergePrimary ();for _ ,_ccdcf :=range _bfff {_acfg [_ccdcf ]=_faedd ;};};for _ ,_dabef :=range _defe {_dabef ._acaf =_fgda [_acfg [_dabef ]];};_gdccc :=make (rulingList ,0,len (_defe ));for _ ,_gbdb :=range _acbd {_fegg :=_gbdb .splitSec ();for _ebcd ,_gbcec :=range _fegg {_bcgf :=_gbcec .merge ();if len (_gdccc )> 0{_cbde :=_gdccc [len (_gdccc )-1];if _cbde .alignsPrimary (_bcgf )&&_cbde .alignsSec (_bcgf ){_ad .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",_ebcd ,_cbde ,_bcgf );continue ;};};_gdccc =append (_gdccc ,_bcgf );};};_gdccc .sortStrict ();return _gdccc ;};func (_defg *stateStack )empty ()bool {return len (*_defg )==0};func (_dbeaf *textWord )computeText ()string {_edecf :=make ([]string ,len (_dbeaf ._dgcbf ));for _cafgf ,_bafga :=range _dbeaf ._dgcbf {_edecf [_cafgf ]=_bafga ._fgeb ;};return _d .Join (_edecf ,"");};func (_ebfa rulingList )sort (){_cf .Slice (_ebfa ,_ebfa .comp )};
// ToTextMark returns the public view of `tm`.
func (_gbeg *textMark )ToTextMark ()TextMark {return TextMark {Text :_gbeg ._fgeb ,Original :_gbeg ._dbffe ,BBox :_gbeg ._eeag ,Font :_gbeg ._dfdg ,FontSize :_gbeg ._geafc ,FillColor :_gbeg ._aaad ,StrokeColor :_gbeg ._gadc ,Orientation :_gbeg ._deeg };};func (_gebec *wordBag )removeWord (_fcgc *textWord ,_bceb int ){_egeb :=_gebec ._efeb [_bceb ];_egeb =_dbgda (_egeb ,_fcgc );if len (_egeb )==0{delete (_gebec ._efeb ,_bceb );}else {_gebec ._efeb [_bceb ]=_egeb ;};};func (_dafc *textTable )logComposite (_ebba string ){if !_bedbb {return ;};_ad .Log .Info ("\u007e~\u007eP\u0061\u0072\u0061\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0073",_dafc ._gddg ,_dafc ._adfe ,_ebba );_dc .Printf ("\u0025\u0035\u0073 \u007c","");for _badg :=0;_badg < _dafc ._gddg ;_badg ++{_dc .Printf ("\u0025\u0033\u0064 \u007c",_badg );};_dc .Println ("");_dc .Printf ("\u0025\u0035\u0073 \u002b","");for _bcaa :=0;_bcaa < _dafc ._gddg ;_bcaa ++{_dc .Printf ("\u0025\u0033\u0073 \u002b","\u002d\u002d\u002d");};_dc .Println ("");for _gcceg :=0;_gcceg < _dafc ._adfe ;_gcceg ++{_dc .Printf ("\u0025\u0035\u0064 \u007c",_gcceg );for _cbaf :=0;_cbaf < _dafc ._gddg ;_cbaf ++{_gefcb ,_ :=_dafc ._baba [_eddd (_cbaf ,_gcceg )].parasBBox ();_dc .Printf ("\u0025\u0033\u0064 \u007c",len (_gefcb ));};_dc .Println ("");};_ad .Log .Info ("\u007e~\u007eT\u0065\u0078\u0074\u0020\u0025d\u0020\u0078 \u0025\u0064\u0020\u0025\u0073",_dafc ._gddg ,_dafc ._adfe ,_ebba );_dc .Printf ("\u0025\u0035\u0073 \u007c","");for _egbc :=0;_egbc < _dafc ._gddg ;_egbc ++{_dc .Printf ("\u0025\u0031\u0032\u0064\u0020\u007c",_egbc );};_dc .Println ("");_dc .Printf ("\u0025\u0035\u0073 \u002b","");for _baegc :=0;_baegc < _dafc ._gddg ;_baegc ++{_dc .Print ("\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d-\u002d\u002d\u002d\u002b");};_dc .Println ("");for _eacbc :=0;_eacbc < _dafc ._adfe ;_eacbc ++{_dc .Printf ("\u0025\u0035\u0064 \u007c",_eacbc );for _egcce :=0;_egcce < _dafc ._gddg ;_egcce ++{_fddcg ,_ :=_dafc ._baba [_eddd (_egcce ,_eacbc )].parasBBox ();_fabda :="";_ggafa :=_fddcg .merge ();if _ggafa !=nil {_fabda =_ggafa .text ();};_fabda =_dc .Sprintf ("\u0025\u0071",_cgbgd (_fabda ,12));_fabda =_fabda [1:len (_fabda )-1];_dc .Printf ("\u0025\u0031\u0032\u0073\u0020\u007c",_fabda );};_dc .Println ("");};};const (RenderModeStroke RenderMode =1<<iota ;RenderModeFill ;RenderModeClip ;);func (_fffa *textLine )bbox ()_dd .PdfRectangle {return _fffa .PdfRectangle };func (_cabde *textPara )writeCellText (_cgac _a .Writer ){for _fdcg ,_feag :=range _cabde ._fcaad {_afeeb :=_feag .text ();_efdad :=_cceg &&_feag .endsInHyphen ()&&_fdcg !=len (_cabde ._fcaad )-1;if _efdad {_afeeb =_bee (_afeeb );};_cgac .Write ([]byte (_afeeb ));if !(_efdad ||_fdcg ==len (_cabde ._fcaad )-1){_cgac .Write ([]byte (_baac (_feag ._dgfa ,_cabde ._fcaad [_fdcg +1]._dgfa )));};};};func _bggfc (_decda []*textMark ,_bdgg _dd .PdfRectangle )[]*textWord {var _aadcb []*textWord ;var _dfga *textWord ;if _cga {_ad .Log .Info ("\u006d\u0061\u006beT\u0065\u0078\u0074\u0057\u006f\u0072\u0064\u0073\u003a\u0020\u0025\u0064\u0020\u006d\u0061\u0072\u006b\u0073",len (_decda ));};_degge :=func (){if _dfga !=nil {_abdc :=_dfga .computeText ();if !_bbge (_abdc ){_dfga ._ebed =_abdc ;_aadcb =append (_aadcb ,_dfga );if _cga {_ad .Log .Info ("\u0061\u0064\u0064Ne\u0077\u0057\u006f\u0072\u0064\u003a\u0020\u0025\u0064\u003a\u0020\u0077\u006f\u0072\u0064\u003d\u0025\u0073",len (_aadcb )-1,_dfga .String ());for _bceag ,_dgafc :=range _dfga ._dgcbf {_dc .Printf ("\u0025\u0034\u0064\u003a\u0020\u0025\u0073\u000a",_bceag ,_dgafc .String ());};};};_dfga =nil ;};};for _ ,_cgdgg :=range _decda {if _egb &&_dfga !=nil &&len (_dfga ._dgcbf )> 0{_bfeb :=_dfga ._dgcbf [len (_dfga ._dgcbf )-1];_fcada ,_aecd :=_affde (_cgdgg ._fgeb );_faage ,_ggddb :=_affde (_bfeb ._fgeb );if _aecd &&!_ggddb &&_bfeb .inDiacriticArea (_cgdgg ){_dfga .addDiacritic (_fcada );continue ;};if _ggddb &&!_aecd &&_cgdgg .inDiacriticArea (_bfeb ){_dfga ._dgcbf =_dfga ._dgcbf [:len (_dfga ._dgcbf )-1];_dfga .appendMark (_cgdgg ,_bdgg );_dfga .addDiacritic (_faage );continue ;};};_debc :=_bbge (_cgdgg ._fgeb );if _debc {_degge ();continue ;};if _dfga ==nil &&!_debc {_dfga =_bdcce ([]*textMark {_cgdgg },_bdgg );continue ;};_cggd :=_dfga ._dafb ;_bdceg :=_ge .Abs (_dbe (_bdgg ,_cgdgg )-_dfga ._gceede )/_cggd ;_dfgag :=_acgd (_cgdgg ,_dfga )/_cggd ;if _dfgag >=_bdbbe ||!(-_dcgd <=_dfgag &&_bdceg <=_dbff ){_degge ();_dfga =_bdcce ([]*textMark {_cgdgg },_bdgg );continue ;};_dfga .appendMark (_cgdgg ,_bdgg );};_degge ();return _aadcb ;};func _gbgfc (_aabd ,_bdbg ,_ecab float64 )rulingKind {if _aabd >=_ecab &&_fcdf (_bdbg ,_aabd ){return _feae ;};if _bdbg >=_ecab &&_fcdf (_aabd ,_bdbg ){return _fdff ;};return _cffb ;};func _afbe (_dfdaa ,_acgac _cd .Point )rulingKind {_agff :=_ge .Abs (_dfdaa .X -_acgac .X );_eeae :=_ge .Abs (_dfdaa .Y -_acgac .Y );return _gbgfc (_agff ,_eeae ,_gcbf );};
// String returns a human readable description of `vecs`.
func (_cgbddb rulingList )String ()string {if len (_cgbddb )==0{return "\u007b \u0045\u004d\u0050\u0054\u0059\u0020}";};_efcd ,_gabcc :=_cgbddb .vertsHorzs ();_deffg :=len (_efcd );_afaba :=len (_gabcc );if _deffg ==0||_afaba ==0{return _dc .Sprintf ("\u007b%\u0064\u0020\u0078\u0020\u0025\u0064}",_deffg ,_afaba );};_adgf :=_dd .PdfRectangle {Llx :_efcd [0]._acaf ,Urx :_efcd [_deffg -1]._acaf ,Lly :_gabcc [_afaba -1]._acaf ,Ury :_gabcc [0]._acaf };return _dc .Sprintf ("\u007b\u0025d\u0020\u0078\u0020%\u0064\u003a\u0020\u0025\u0036\u002e\u0032\u0066\u007d",_deffg ,_afaba ,_adgf );};func (_eccd rulingList )blocks (_gadce ,_eedef *ruling )bool {if _gadce ._fgdd > _eedef ._cage ||_eedef ._fgdd > _gadce ._cage {return false ;};_fgae :=_ge .Max (_gadce ._fgdd ,_eedef ._fgdd );_bafef :=_ge .Min (_gadce ._cage ,_eedef ._cage );if _gadce ._acaf > _eedef ._acaf {_gadce ,_eedef =_eedef ,_gadce ;};for _ ,_agdgf :=range _eccd {if _gadce ._acaf <=_agdgf ._acaf +_gbg &&_agdgf ._acaf <=_eedef ._acaf +_gbg &&_agdgf ._fgdd <=_bafef &&_fgae <=_agdgf ._cage {return true ;};};return false ;};func (_baed *textObject )setFont (_bec string ,_gafc float64 )error {if _baed ==nil {return nil ;};_baed ._bfdgc ._dccf =_gafc ;_gfgc ,_gefc :=_baed .getFont (_bec );if _gefc !=nil {return _gefc ;};_baed ._bfdgc ._eccb =_gfgc ;if _baed ._fea .empty (){_baed ._fea .push (_baed ._bfdgc );}else {_baed ._fea .top ()._eccb =_baed ._bfdgc ._eccb ;};return nil ;};func (_cabd *shapesState )lineTo (_edec ,_gfbf float64 ){if _ecef {_ad .Log .Info ("\u006c\u0069\u006eeT\u006f\u0028\u0025\u002e\u0032\u0066\u002c\u0025\u002e\u0032\u0066\u0020\u0070\u003d\u0025\u002e\u0032\u0066",_edec ,_gfbf ,_cabd .devicePoint (_edec ,_gfbf ));};_cabd .addPoint (_edec ,_gfbf );};
// String returns a string describing the current state of the textState stack.
func (_eccg *stateStack )String ()string {_afef :=[]string {_dc .Sprintf ("\u002d\u002d\u002d\u002d f\u006f\u006e\u0074\u0020\u0073\u0074\u0061\u0063\u006b\u003a\u0020\u0025\u0064",len (*_eccg ))};for _aef ,_ebbg :=range *_eccg {_agd :="\u003c\u006e\u0069l\u003e";if _ebbg !=nil {_agd =_ebbg .String ();};_afef =append (_afef ,_dc .Sprintf ("\u0009\u0025\u0032\u0064\u003a\u0020\u0025\u0073",_aef ,_agd ));};return _d .Join (_afef ,"\u000a");};func _dfgc (_aecg _dd .PdfRectangle )*ruling {return &ruling {_abgae :_feae ,_acaf :_aecg .Ury ,_fgdd :_aecg .Llx ,_cage :_aecg .Urx };};func (_cbda rulingList )intersections ()map[int ]intSet {var _aadc ,_faddf []int ;for _edff ,_acgf :=range _cbda {switch _acgf ._abgae {case _fdff :_aadc =append (_aadc ,_edff );case _feae :_faddf =append (_faddf ,_edff );};};if len (_aadc )< _geda +1||len (_faddf )< _aaed +1{return nil ;};if len (_aadc )+len (_faddf )> _cfgg {_ad .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 (_cbda ),len (_aadc ),len (_faddf ));return nil ;};_dcad :=make (map[int ]intSet ,len (_aadc )+len (_faddf ));for _ ,_fbgd :=range _aadc {for _ ,_beadb :=range _faddf {if _cbda [_fbgd ].intersects (_cbda [_beadb ]){if _ ,_edde :=_dcad [_fbgd ];!_edde {_dcad [_fbgd ]=make (intSet );};if _ ,_cefba :=_dcad [_beadb ];!_cefba {_dcad [_beadb ]=make (intSet );};_dcad [_fbgd ].add (_beadb );_dcad [_beadb ].add (_fbgd );};};};return _dcad ;};func (_ceb *stateStack )pop ()*textState {if _ceb .empty (){return nil ;};_afag :=*(*_ceb )[len (*_ceb )-1];*_ceb =(*_ceb )[:len (*_ceb )-1];return &_afag ;};func (_bbcb rulingList )aligned ()bool {if len (_bbcb )< 2{return false ;};_cega :=make (map[*ruling ]int );_cega [_bbcb [0]]=0;for _ ,_gbce :=range _bbcb [1:]{_ebee :=false ;for _dddf :=range _cega {if _gbce .gridIntersecting (_dddf ){_cega [_dddf ]++;_ebee =true ;break ;};};if !_ebee {_cega [_gbce ]=0;};};_cgdf :=0;for _ ,_bfdca :=range _cega {if _bfdca ==0{_cgdf ++;};};_ggead :=float64 (_cgdf )/float64 (len (_bbcb ));_feee :=_ggead <=1.0-_bgce ;if _fggb {_ad .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",_feee ,_ggead ,_cgdf ,len (_bbcb ),_bbcb .String ());};return _feee ;};func (_gacc *wordBag )text ()string {_ggeg :=_gacc .allWords ();_degd :=make ([]string ,len (_ggeg ));for _efebf ,_eacg :=range _ggeg {_degd [_efebf ]=_eacg ._ebed ;};return _d .Join (_degd ,"\u0020");};
// String returns a string descibing `i`.
func (_edag gridTile )String ()string {_edfa :=func (_gabac bool ,_fecfd string )string {if _gabac {return _fecfd ;};return "\u005f";};return _dc .Sprintf ("\u00256\u002e2\u0066\u0020\u0025\u0031\u0073%\u0031\u0073%\u0031\u0073\u0025\u0031\u0073",_edag .PdfRectangle ,_edfa (_edag ._gfgca ,"\u004c"),_edfa (_edag ._ebce ,"\u0052"),_edfa (_edag ._bgfee ,"\u0042"),_edfa (_edag ._aabe ,"\u0054"));};func (_afab *wordBag )getDepthIdx (_abfc float64 )int {_cdf :=_afab .depthIndexes ();_gaag :=_egc (_abfc );if _gaag < _cdf [0]{return _cdf [0];};if _gaag > _cdf [len (_cdf )-1]{return _cdf [len (_cdf )-1];};return _gaag ;};func (_eaeaa *subpath )isQuadrilateral ()bool {if len (_eaeaa ._addd )< 4||len (_eaeaa ._addd )> 5{return false ;};if len (_eaeaa ._addd )==5{_eeaab :=_eaeaa ._addd [0];_cdaf :=_eaeaa ._addd [4];if _eeaab .X !=_cdaf .X ||_eeaab .Y !=_cdaf .Y {return false ;};};return true ;};type gridTile struct{_dd .PdfRectangle ;_aabe ,_gfgca ,_bgfee ,_ebce bool ;};type intSet map[int ]struct{};func (_egfab *textTable )get (_ebde ,_dcce int )*textPara {return _egfab ._efbae [_eddd (_ebde ,_dcce )]};func _afgfd (_caff *PageText )error {_fgcaa :=_ag .GetLicenseKey ();if _fgcaa !=nil &&_fgcaa .IsLicensed ()||_ca {return nil ;};_dc .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");_dc .Println ("-\u0020\u0047\u0065\u0074\u0020\u0061\u0020\u0066\u0072e\u0065\u0020\u0074\u0072\u0069\u0061\u006c l\u0069\u0063\u0065\u006es\u0065\u0020\u006f\u006e\u0020\u0068\u0074\u0074\u0070s:\u002f\u002fu\u006e\u0069\u0064\u006f\u0063\u002e\u0069\u006f");return _f .New ("\u0075\u006e\u0069\u0070d\u0066\u0020\u006c\u0069\u0063\u0065\u006e\u0073\u0065\u0020c\u006fd\u0065\u0020\u0072\u0065\u0071\u0075\u0069r\u0065\u0064");};func (_gdgag *textTable )newTablePara ()*textPara {_ccgc :=_gdgag .computeBbox ();_dfbcf :=&textPara {PdfRectangle :_ccgc ,_gaca :_ccgc ,_cgf :_gdgag };if _bedbb {_ad .Log .Info ("\u006e\u0065w\u0054\u0061\u0062l\u0065\u0050\u0061\u0072\u0061\u003a\u0020\u0025\u0073",_dfbcf );};return _dfbcf ;};var _fac =map[markKind ]string {_dega :"\u0073\u0074\u0072\u006f\u006b\u0065",_ffa :"\u0066\u0069\u006c\u006c",_ffbde :"\u0061u\u0067\u006d\u0065\u006e\u0074"};func (_eacc paraList )applyTables (_fcce []*textTable )paraList {_cbcg :=make (map[*textPara ]struct{});var _becc paraList ;for _ ,_fadb :=range _fcce {for _ ,_dcfcg :=range _fadb ._efbae {_cbcg [_dcfcg ]=struct{}{};};_becc =append (_becc ,_fadb .newTablePara ());};for _ ,_gcge :=range _eacc {if _ ,_eaee :=_cbcg [_gcge ];!_eaee {_becc =append (_becc ,_gcge );};};return _becc ;};func _befe (_gdcdc ,_ecdb _dd .PdfRectangle )bool {return _gdcdc .Lly <=_ecdb .Ury &&_ecdb .Lly <=_gdcdc .Ury ;};func (_efce *textObject )newTextMark (_gccg string ,_ceec _cd .Matrix ,_gcac _cd .Point ,_cdcf float64 ,_gde *_dd .PdfFont ,_gade float64 ,_cgc ,_aded _ed .Color )(textMark ,bool ){_fbeg :=_ceec .Angle ();_fegb :=_fbae (_fbeg ,_cccae );var _gfab float64 ;if _fegb %180!=90{_gfab =_ceec .ScalingFactorY ();}else {_gfab =_ceec .ScalingFactorX ();};_agcb :=_aade (_ceec );_aafe :=_dd .PdfRectangle {Llx :_agcb .X ,Lly :_agcb .Y ,Urx :_gcac .X ,Ury :_gcac .Y };switch _fegb %360{case 90:_aafe .Urx -=_gfab ;case 180:_aafe .Ury -=_gfab ;case 270:_aafe .Urx +=_gfab ;case 0:_aafe .Ury +=_gfab ;default:_fegb =0;_aafe .Ury +=_gfab ;};if _aafe .Llx > _aafe .Urx {_aafe .Llx ,_aafe .Urx =_aafe .Urx ,_aafe .Llx ;};if _aafe .Lly > _aafe .Ury {_aafe .Lly ,_aafe .Ury =_aafe .Ury ,_aafe .Lly ;};_bdad ,_ffba :=_dbdg (_aafe ,_efce ._bfe ._eda );if !_ffba {_ad .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",_aafe ,_efce ._bfe ._eda ,_gccg );};_aafe =_bdad ;_bfdc :=_aafe ;_ggcdb :=_efce ._bfe ._eda ;switch _fegb %360{case 90:_ggcdb .Urx ,_ggcdb .Ury =_ggcdb .Ury ,_ggcdb .Urx ;_bfdc =_dd .PdfRectangle {Llx :_ggcdb .Urx -_aafe .Ury ,Urx :_ggcdb .Urx -_aafe .Lly ,Lly :_aafe .Llx ,Ury :_aafe .Urx };case 180:_bfdc =_dd .PdfRectangle {Llx :_ggcdb .Urx -_aafe .Llx ,Urx :_ggcdb .Urx -_aafe .Urx ,Lly :_ggcdb .Ury -_aafe .Lly ,Ury :_ggcdb .Ury -_aafe .Ury };case 270:_ggcdb .Urx ,_ggcdb .Ury =_ggcdb .Ury ,_ggcdb .Urx ;_bfdc =_dd .PdfRectangle {Llx :_aafe .Ury ,Urx :_aafe .Lly ,Lly :_ggcdb .Ury -_aafe .Llx ,Ury :_ggcdb .Ury -_aafe .Urx };};if _bfdc .Llx > _bfdc .Urx {_bfdc .Llx ,_bfdc .Urx =_bfdc .Urx ,_bfdc .Llx ;};if _bfdc .Lly > _bfdc .Ury {_bfdc .Lly ,_bfdc .Ury =_bfdc .Ury ,_bfdc .Lly ;};_bgga :=textMark {_fgeb :_gccg ,PdfRectangle :_bfdc ,_eeag :_aafe ,_dfdg :_gde ,_geafc :_gfab ,_ffd :_gade ,_bcc :_ceec ,_deag :_gcac ,_deeg :_fegb ,_aaad :_cgc ,_gadc :_aded };if _cga {_ad .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",_agcb ,_gcac ,_bgga .String ());};return _bgga ,_ffba ;};func _egc (_cagb float64 )int {var _abba int ;if _cagb >=0{_abba =int (_cagb /_dfca );}else {_abba =int (_cagb /_dfca )-1;};return _abba ;};type rulingKind int ;type textWord struct{_dd .PdfRectangle ;_gceede float64 ;_ebed string ;_dgcbf []*textMark ;_dafb float64 ;_fabdc bool ;};func (_bbee gridTile )numBorders ()int {_gfec :=0;if _bbee ._gfgca {_gfec ++;};if _bbee ._ebce {_gfec ++;};if _bbee ._bgfee {_gfec ++;};if _bbee ._aabe {_gfec ++;};return _gfec ;};type gridTiling struct{_dd .PdfRectangle ;_cgdb []float64 ;_cfeab []float64 ;_ggac map[float64 ]map[float64 ]gridTile ;};var _ca =false ;
// Text returns the extracted page text.
func (_ddf PageText )Text ()string {return _ddf ._gdcd };