mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-09 19:29:34 +08:00
39 lines
8.8 KiB
Go
39 lines
8.8 KiB
Go
//
|
|
// 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 unichart ;import (_c "bytes";_b "fmt";_g "github.com/unidoc/unichart/render";_ac "github.com/unidoc/unipdf/v3/common";_fe "github.com/unidoc/unipdf/v3/contentstream";_ff "github.com/unidoc/unipdf/v3/contentstream/draw";_cg "github.com/unidoc/unipdf/v3/core";
|
|
_fd "github.com/unidoc/unipdf/v3/model";_ag "image/color";_bd "io";_f "math";);func (_bdfg *Renderer )getTextWidth (_bcd string )float64 {var _bcc float64 ;for _ ,_dff :=range _bcd {_ccd ,_ebc :=_bdfg ._ab .GetRuneMetrics (_dff );if !_ebc {_ac .Log .Debug ("\u0045\u0052\u0052OR\u003a\u0020\u0075\u006e\u0073\u0075\u0070\u0070\u006fr\u0074e\u0064 \u0072u\u006e\u0065\u0020\u0025\u0076\u0020\u0069\u006e\u0020\u0066\u006f\u006e\u0074",_dff );
|
|
};_bcc +=_ccd .Wx ;};return _bdfg ._cf *_bcc /1000.0;};func (_cgb *Renderer )GetDPI ()float64 {return _cgb ._cb };func (_df *Renderer )SetFont (font _g .Font ){_fcad ,_gee :=font .(*_fd .PdfFont );if !_gee {_ac .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0069\u006e\u0076\u0061\u006c\u0069d\u0020\u0066\u006f\u006e\u0074\u0020\u0074\u0079\u0070\u0065");
|
|
return ;};_geb ,_gee :=_df ._e [_fcad ];if !_gee {_geb =_ffcd ("\u0046\u006f\u006e\u0074",1,_df ._bc .HasFontByName );if _ga :=_df ._bc .SetFontByName (_geb ,_fcad .ToPdfObject ());_ga !=nil {_ac .Log .Debug ("\u0045\u0052\u0052\u004f\u0052:\u0020\u0063\u006f\u0075\u006c\u0064\u0020\u006e\u006f\u0074\u0020\u0061\u0064d\u0020\u0066\u006f\u006e\u0074\u0020\u0025\u0076\u0020\u0074\u006f\u0020\u0072\u0065\u0073\u006f\u0075\u0072\u0063\u0065\u0073",_fcad );
|
|
};_df ._e [_fcad ]=_geb ;};_df ._fa .Add_Tf (_geb ,_df ._cf );_df ._ab =_fcad ;};func (_gfc *Renderer )Stroke (){_gfc ._fa .Add_S ()};func (_fcd *Renderer )Fill (){_fcd ._fa .Add_f ()};func (_ebd *Renderer )MoveTo (x ,y int ){_ebd ._fa .Add_m (float64 (x ),float64 (y ))};
|
|
func (_ge *Renderer )Circle (radius float64 ,x ,y int ){_baf :=radius ;if _de :=_ge ._agf ;_de !=0{_baf -=_de /2;};_fca :=_baf *0.551784;_cbe :=_ff .CubicBezierPath {Curves :[]_ff .CubicBezierCurve {_ff .NewCubicBezierCurve (-_baf ,0,-_baf ,_fca ,-_fca ,_baf ,0,_baf ),_ff .NewCubicBezierCurve (0,_baf ,_fca ,_baf ,_baf ,_fca ,_baf ,0),_ff .NewCubicBezierCurve (_baf ,0,_baf ,-_fca ,_fca ,-_baf ,0,-_baf ),_ff .NewCubicBezierCurve (0,-_baf ,-_fca ,-_baf ,-_baf ,-_fca ,-_baf ,0)}};
|
|
if _gfcb :=_ge ._agf ;_gfcb !=0{_cbe =_cbe .Offset (_gfcb /2,_gfcb /2);};_cbe =_cbe .Offset (float64 (x ),float64 (y ));_ff .DrawBezierPathWithCreator (_cbe ,_ge ._fa );};func NewRenderer (cc *_fe .ContentCreator ,res *_fd .PdfPageResources )func (int ,int )(_g .Renderer ,error ){return func (_bac ,_cc int )(_g .Renderer ,error ){_bb :=&Renderer {_be :_bac ,_af :_cc ,_cb :72,_fa :cc ,_bc :res ,_e :map[*_fd .PdfFont ]_cg .PdfObjectName {}};
|
|
_bb .ResetStyle ();return _bb ,nil ;};};func (_cd *Renderer )ArcTo (cx ,cy int ,rx ,ry ,startAngle ,deltaAngle float64 ){startAngle =_cbg (2.0*_f .Pi -startAngle );deltaAngle =_cbg (-deltaAngle );_gbc ,_cfag :=deltaAngle ,1;if _f .Abs (deltaAngle )> 90.0{_cfag =int (_f .Ceil (_f .Abs (deltaAngle )/90.0));
|
|
_gbc =deltaAngle /float64 (_cfag );};var (_abe =_ffda (_gbc /2);_gdg =_f .Abs (4.0/3.0*(1.0-_f .Cos (_abe ))/_f .Sin (_abe ));_ef =float64 (cx );_feg =float64 (cy ););for _da :=0;_da < _cfag ;_da ++{_fdg :=_ffda (startAngle +float64 (_da )*_gbc );_abf :=_ffda (startAngle +float64 (_da +1)*_gbc );
|
|
_dg :=_f .Cos (_fdg );_ed :=_f .Cos (_abf );_ebb :=_f .Sin (_fdg );_gdb :=_f .Sin (_abf );var _db []float64 ;if _gbc > 0{_db =[]float64 {_ef +rx *_dg ,_feg -ry *_ebb ,_ef +rx *(_dg -_gdg *_ebb ),_feg -ry *(_ebb +_gdg *_dg ),_ef +rx *(_ed +_gdg *_gdb ),_feg -ry *(_gdb -_gdg *_ed ),_ef +rx *_ed ,_feg -ry *_gdb };
|
|
}else {_db =[]float64 {_ef +rx *_dg ,_feg -ry *_ebb ,_ef +rx *(_dg +_gdg *_ebb ),_feg -ry *(_ebb -_gdg *_dg ),_ef +rx *(_ed -_gdg *_gdb ),_feg -ry *(_gdb +_gdg *_ed ),_ef +rx *_ed ,_feg -ry *_gdb };};if _da ==0{_cd ._fa .Add_l (_db [0],_db [1]);};_cd ._fa .Add_c (_db [2],_db [3],_db [4],_db [5],_db [6],_db [7]);
|
|
};};type Renderer struct{_be int ;_af int ;_cb float64 ;_fa *_fe .ContentCreator ;_bc *_fd .PdfPageResources ;_ba _ag .Color ;_bg _ag .Color ;_agf float64 ;_ab *_fd .PdfFont ;_cf float64 ;_acb _ag .Color ;_cgf float64 ;_e map[*_fd .PdfFont ]_cg .PdfObjectName ;
|
|
};func (_bde *Renderer )SetFontColor (color _ag .Color ){_bde ._acb =color };func (_cbd *Renderer )Save (w _bd .Writer )error {if w ==nil {return nil ;};_ ,_dc :=_bd .Copy (w ,_c .NewBuffer (_cbd ._fa .Bytes ()));return _dc ;};func _ffcd (_cae string ,_faad int ,_ddd func (_cg .PdfObjectName )bool )_cg .PdfObjectName {_cfbe :=_cg .PdfObjectName (_b .Sprintf ("\u0025\u0073\u0025\u0064",_cae ,_faad ));
|
|
for _adg :=_faad ;_ddd (_cfbe );{_adg ++;_cfbe =_cg .PdfObjectName (_b .Sprintf ("\u0025\u0073\u0025\u0064",_cae ,_adg ));};return _cfbe ;};func (_eg *Renderer )ClearTextRotation (){_eg ._cgf =0};func (_cee *Renderer )wrapText (_ffa string )[]string {var (_aec []string ;
|
|
_bbg []rune ;);for _ ,_fcf :=range _ffa {if _fcf =='\n'{_aec =append (_aec ,string (_bbg ));_bbg =[]rune {};continue ;};_bbg =append (_bbg ,_fcf );};if len (_bbg )> 0{_aec =append (_aec ,string (_bbg ));};return _aec ;};func (_faa *Renderer )FillStroke (){_faa ._fa .Add_B ()};
|
|
func (_gg *Renderer )ResetStyle (){_gg .SetFillColor (_ag .Black );_gg .SetStrokeColor (_ag .Transparent );_gg .SetStrokeWidth (0);_gg .SetFont (_fd .DefaultFont ());_gg .SetFontColor (_ag .Black );_gg .SetFontSize (12);_gg .SetTextRotation (0);};func (_afd *Renderer )Close (){_afd ._fa .Add_h ()};
|
|
func (_fc *Renderer )QuadCurveTo (cx ,cy ,x ,y int ){_fc ._fa .Add_v (float64 (x ),float64 (y ),float64 (cx ),float64 (cy ));};func _cbg (_cff float64 )float64 {return _cff *180/_f .Pi };func (_cfa *Renderer )SetFillColor (color _ag .Color ){_cfa ._ba =color ;
|
|
_aba ,_ec ,_gf ,_ :=_egb (color );_cfa ._fa .Add_rg (_aba ,_ec ,_gf );};func (_ae *Renderer )SetClassName (name string ){};func (_eb *Renderer )SetStrokeDashArray (dashArray []float64 ){_gb :=make ([]int64 ,len (dashArray ));for _d ,_ce :=range dashArray {_gb [_d ]=int64 (_ce );
|
|
};_eb ._fa .Add_d (_gb ,0);};func _egb (_fb _ag .Color )(float64 ,float64 ,float64 ,float64 ){_ded ,_cab ,_dce ,_fbg :=_ffd (_fb );return float64 (_ded )/255,float64 (_cab )/255,float64 (_dce )/255,float64 (_fbg )/255;};func (_fg *Renderer )SetStrokeWidth (width float64 ){_fg ._agf =width ;
|
|
_fg ._fa .Add_w (width )};func _ffda (_gfd float64 )float64 {return _gfd *_f .Pi /180.0};func (_bdf *Renderer )Text (text string ,x ,y int ){_bdf ._fa .Add_q ();_bdf .SetFont (_bdf ._ab );_ebda ,_ffc ,_dbe ,_ :=_egb (_bdf ._acb );_bdf ._fa .Add_rg (_ebda ,_ffc ,_dbe );
|
|
_bdf ._fa .Translate (float64 (x ),float64 (y )).Scale (1,-1);if _gad :=_bdf ._cgf ;_gad !=0{_bdf ._fa .RotateDeg (_gad );};_bdf ._fa .Add_BT ().Add_TL (_bdf ._cf );var (_bab =_bdf ._ab .Encoder ();_dfg =_bdf .wrapText (text );_ggd =len (_dfg ););for _ebbe ,_bbb :=range _dfg {_bdf ._fa .Add_TJ (_cg .MakeStringFromBytes (_bab .Encode (_bbb )));
|
|
if _ebbe !=_ggd -1{_bdf ._fa .Add_Tstar ();};};_bdf ._fa .Add_ET ();_bdf ._fa .Add_Q ();};func (_dfa *Renderer )SetTextRotation (radians float64 ){_dfa ._cgf =_cbg (-radians )};func (_fab *Renderer )SetStrokeColor (color _ag .Color ){_fab ._bg =color ;
|
|
_beb ,_ad ,_cfb ,_ :=_egb (color );_fab ._fa .Add_RG (_beb ,_ad ,_cfb );};func (_bce *Renderer )SetDPI (dpi float64 ){_bce ._cb =dpi };func (_bgd *Renderer )MeasureText (text string )_g .Box {_abeg :=_bgd ._cf ;_ea ,_ee :=_bgd ._ab .GetFontDescriptor ();
|
|
if _ee !=nil {_ac .Log .Debug ("W\u0041\u0052\u004e\u003a\u0020\u0055n\u0061\u0062\u006c\u0065\u0020\u0074o\u0020\u0067\u0065\u0074\u0020\u0066\u006fn\u0074\u0020\u0064\u0065\u0073\u0063\u0072\u0069\u0070\u0074o\u0072");}else {_gab ,_dd :=_ea .GetCapHeight ();
|
|
if _dd !=nil {_ac .Log .Debug ("\u0057\u0041\u0052\u004e\u003a\u0020\u0055\u006e\u0061\u0062\u006c\u0065\u0020t\u006f\u0020\u0067\u0065\u0074\u0020f\u006f\u006e\u0074\u0020\u0063\u0061\u0070\u0020\u0068\u0065\u0069\u0067\u0068t\u003a\u0020\u0025\u0076",_dd );
|
|
}else {_abeg =_gab /1000.0*_bgd ._cf ;};};var (_cea =0.0;_bed =_bgd .wrapText (text ););for _ ,_cdg :=range _bed {if _adf :=_bgd .getTextWidth (_cdg );_adf > _cea {_cea =_adf ;};};_bdd :=_g .NewBox (0,0,int (_cea ),int (_abeg ));if _fec :=_bgd ._cgf ;_fec !=0{_bdd =_bdd .Corners ().Rotate (_fec ).Box ();
|
|
};return _bdd ;};func (_gag *Renderer )SetFontSize (size float64 ){_gag ._cf =size };func _ffd (_ced _ag .Color )(uint8 ,uint8 ,uint8 ,uint8 ){_dbf ,_aa ,_bdeb ,_gae :=_ced .RGBA ();return uint8 (_dbf >>8),uint8 (_aa >>8),uint8 (_bdeb >>8),uint8 (_gae >>8);
|
|
};func (_gd *Renderer )LineTo (x ,y int ){_gd ._fa .Add_l (float64 (x ),float64 (y ))}; |