2023-05-26 09:49:04 +00:00
|
|
|
package convertutils ;import (_a "bytes";_c "errors";_b "fmt";_cg "github.com/unidoc/unioffice/common/logger";_g "github.com/unidoc/unioffice/measurement";_ga "github.com/unidoc/unioffice/schema/soo/dml";_db "github.com/unidoc/unioffice/schema/soo/dml/chart";_eg "github.com/unidoc/unioffice/spreadsheet/format";_fcg "github.com/unidoc/unipdf/v3/creator";_gf "github.com/unidoc/unipdf/v3/model";_ea "github.com/unidoc/unipdf/v3/render";_adf "github.com/unidoc/unitype";_ff "image";_fd "math";_fc "os";_af "sort";_ad "strconv";_fdb "strings";_d "sync";_e "unicode";);type barSerByOrder []*_db .CT_BarSer ;type serCategory struct{_ebc string ;_aaa []serValue ;};func MakeBlockFromChartSpace (cs *_db .ChartSpace ,width ,height float64 ,theme *_ga .Theme )(*_fcg .Block ,error ){_edd ,_ggb :=_feaa (cs ,width ,height ,theme ,false );if _ggb !=nil {return nil ,_ggb ;};_bgfa ,_ggb :=GetPageFromCreator (_edd );if _ggb !=nil {return nil ,_ggb ;};_fgf ,_ggb :=_fcg .NewBlockFromPage (_bgfa );if _ggb !=nil {return nil ,_ggb ;};return _fgf ,nil ;};func CropImageByRect (sourceImg _ff .Image ,rect _ff .Rectangle )_ff .Image {_ecbg ,_dee ,_cdae ,_efdd :=rect .Min .X ,rect .Min .Y ,rect .Max .X ,rect .Max .Y ;_eafgb :=_ff .NewNRGBA (_ff .Rect (0,0,_cdae -_ecbg ,_efdd -_dee ));for _ffef :=_ecbg ;_ffef < _cdae ;_ffef ++{for _dcgb :=_dee ;_dcgb < _efdd ;_dcgb ++{_eafgb .Set (_ffef -_ecbg ,_dcgb -_dee ,sourceImg .At (_ffef ,_dcgb ));};};return _eafgb ;};func FromSTCoordinate (st _ga .ST_Coordinate )int64 {if _cgfc :=st .ST_CoordinateUnqualified ;_cgfc !=nil {return *_cgfc ;};return 0;};func _agee (_bdb _ga .ST_SchemeColorVal ,_egc *_ga .Theme )string {if _feafe :=_egc .ThemeElements ;_feafe !=nil {if _fdgb :=_feafe .ClrScheme ;_fdgb !=nil {switch _bdb {case _ga .ST_SchemeColorValLt1 :return GetColorStringFromDmlColor (_fdgb .Lt1 );case _ga .ST_SchemeColorValDk1 ,_ga .ST_SchemeColorValTx1 :return GetColorStringFromDmlColor (_fdgb .Dk1 );case _ga .ST_SchemeColorValLt2 :return GetColorStringFromDmlColor (_fdgb .Lt2 );case _ga .ST_SchemeColorValDk2 :return GetColorStringFromDmlColor (_fdgb .Dk2 );case _ga .ST_SchemeColorValAccent1 :return GetColorStringFromDmlColor (_fdgb .Accent1 );case _ga .ST_SchemeColorValAccent2 :return GetColorStringFromDmlColor (_fdgb .Accent2 );case _ga .ST_SchemeColorValAccent3 :return GetColorStringFromDmlColor (_fdgb .Accent3 );case _ga .ST_SchemeColorValAccent4 :return GetColorStringFromDmlColor (_fdgb .Accent4 );case _ga .ST_SchemeColorValAccent5 :return GetColorStringFromDmlColor (_fdgb .Accent5 );case _ga .ST_SchemeColorValAccent6 :return GetColorStringFromDmlColor (_fdgb .Accent6 );};};};return "";};func MakeImageFromChartSpace (cs *_db .ChartSpace ,width ,height float64 ,theme *_ga .Theme )(_ff .Image ,error ){_fdf ,_fdee :=_feaa (cs ,width ,height ,theme ,true );if _fdee !=nil {return nil ,_fdee ;};_gfc ,_fdee :=GetPageFromCreator (_fdf );if _fdee !=nil {return nil ,_fdee ;};return _ea .NewImageDevice ().Render (_gfc );};func RegisterFont (name string ,style FontStyle ,font *_gf .PdfFont ){_gcef ._ccb .Lock ();if _gcef ._cca [name ]==nil {_gcef ._cca [name ]=map[FontStyle ]*_gf .PdfFont {};};_gcef ._cca [name ][style ]=font ;_gcef ._ccb .Unlock ();};func (_gd *creatorContext )drawBarChart (_ca *_db .CT_BarChart ,_fcb *Rectangle ,_cga *_db .CT_PlotAreaChoice1 )([]*legendItem ,error ){var _ae bool ;if _ag :=_ca .BarDir ;_ag !=nil {_ae =_ag .ValAttr ==_db .ST_BarDirBar ;};_da :=_ca .Ser ;_af .Sort (barSerByOrder (_da ));_cd :=map[string ]serCategory {};_ee :=[]string {};_ba :=[]*legendItem {};_cde :=_fd .Inf (1);_cc :=_fd .Inf (-1);for _ ,_eaaa :=range _da {var _ac string ;if _df :=_eaaa .Tx ;_df !=nil {if _cb :=_df .Choice ;_cb !=nil {if _cb .V !=nil {_ac =*_cb .V ;}else if _eb :=_cb .StrRef ;_eb !=nil {if _dg :=_eb .StrCache ;_dg !=nil {for _ ,_fce :=range _dg .Pt {_ac =_fce .V ;};};};};};if _bfb :=_eaaa .Cat ;_bfb !=nil {if _ebd :=_bfb .Choice ;_ebd !=nil {if _dge :=_ebd .StrRef ;_dge !=nil {if _cad :=_dge .StrCache ;_cad !=nil {for _ ,_ef :=range _cad .Pt {_gfb :=_ef .V ;if _ ,_dgf :=_cd [_gfb ];!_dgf {_cd [_gfb ]=serC
|