unipdf/annotator/annotator.go
2020-12-06 13:03:03 +00:00

212 lines
56 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 annotator provides an interface for creating annotations with appearance
// streams. It goes beyond the models package which includes definitions of basic annotation models, in that it
// can create the appearance streams which specify the exact appearance as needed by many pdf viewers for consistent
// appearance of the annotations.
// It also contains methods for generating appearance streams for fields via widget annotations.
package annotator ;import (_d "bytes";_fdg "errors";_c "github.com/unidoc/unipdf/v3/common";_fc "github.com/unidoc/unipdf/v3/contentstream";_g "github.com/unidoc/unipdf/v3/contentstream/draw";_fcf "github.com/unidoc/unipdf/v3/core";_f "github.com/unidoc/unipdf/v3/internal/textencoding";_ff "github.com/unidoc/unipdf/v3/model";_dd "image";_ee "math";_fd "strings";_a "unicode";);type quadding int ;
// AppearanceStyle defines style parameters for appearance stream generation.
type AppearanceStyle struct{
// How much of Rect height to fill when autosizing text.
AutoFontSizeFraction float64 ;
// CheckmarkRune is a rune used for check mark in checkboxes (for ZapfDingbats font).
CheckmarkRune rune ;BorderSize float64 ;BorderColor _ff .PdfColor ;FillColor _ff .PdfColor ;
// Multiplier for lineheight for multi line text.
MultilineLineHeight float64 ;MultilineVAlignMiddle bool ;
// Visual guide checking alignment of field contents (debugging).
DrawAlignmentReticle bool ;
// Allow field MK appearance characteristics to override style settings.
AllowMK bool ;
// Fonts holds appearance styles for fonts.
Fonts *AppearanceFontStyle ;};func _ba (_cb CircleAnnotationDef ,_baf string )([]byte ,*_ff .PdfRectangle ,*_ff .PdfRectangle ,error ){_ag :=_g .Circle {X :_cb .X ,Y :_cb .Y ,Width :_cb .Width ,Height :_cb .Height ,FillEnabled :_cb .FillEnabled ,FillColor :_cb .FillColor ,BorderEnabled :_cb .BorderEnabled ,BorderWidth :_cb .BorderWidth ,BorderColor :_cb .BorderColor ,Opacity :_cb .Opacity };_bd ,_dc ,_fbd :=_ag .Draw (_baf );if _fbd !=nil {return nil ,nil ,nil ,_fbd ;};_eea :=&_ff .PdfRectangle {};_eea .Llx =_cb .X +_dc .Llx ;_eea .Lly =_cb .Y +_dc .Lly ;_eea .Urx =_cb .X +_dc .Urx ;_eea .Ury =_cb .Y +_dc .Ury ;return _bd ,_dc ,_eea ,nil ;};func _egdd (_fge *_ff .PdfAnnotationWidget ,_dgce *_ff .PdfFieldButton ,_gabe *_ff .PdfPageResources ,_ada AppearanceStyle )(*_fcf .PdfObjectDictionary ,error ){_faaa ,_bad :=_fcf .GetArray (_fge .Rect );if !_bad {return nil ,_fdg .New ("\u0069\u006e\u0076a\u006c\u0069\u0064\u0020\u0052\u0065\u0063\u0074");};_fdd ,_egda :=_ff .NewPdfRectangle (*_faaa );if _egda !=nil {return nil ,_egda ;};_afeec ,_edg :=_fdd .Width (),_fdd .Height ();_bge ,_fab :=_afeec ,_edg ;_c .Log .Debug ("\u0043\u0068\u0065\u0063kb\u006f\u0078\u002c\u0020\u0077\u0061\u0020\u0042\u0053\u003a\u0020\u0025\u0076",_fge .BS );_ccf ,_egda :=_ff .NewStandard14Font ("\u005a\u0061\u0070f\u0044\u0069\u006e\u0067\u0062\u0061\u0074\u0073");if _egda !=nil {return nil ,_egda ;};_dba ,_ade :=_fcf .GetDict (_fge .MK );if _ade {_aace ,_ :=_fcf .GetDict (_fge .BS );_aca :=_ada .applyAppearanceCharacteristics (_dba ,_aace ,_ccf );if _aca !=nil {return nil ,_aca ;};};_fdf :=_ff .NewXObjectForm ();{_agb :=_fc .NewContentCreator ();if _ada .BorderSize > 0{_bgfe (_agb ,_ada ,_afeec ,_edg );};if _ada .DrawAlignmentReticle {_ege :=_ada ;_ege .BorderSize =0.2;_dac (_agb ,_ege ,_afeec ,_edg );};_afeec ,_edg =_ada .applyRotation (_dba ,_afeec ,_edg ,_agb );_dbc :=_ada .AutoFontSizeFraction *_edg ;_cfa ,_fga :=_ccf .GetRuneMetrics (_ada .CheckmarkRune );if !_fga {return nil ,_fdg .New ("\u0067l\u0079p\u0068\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064");};_aedb :=_ccf .Encoder ();_bdf :=_aedb .Encode (string (_ada .CheckmarkRune ));_cgc :=_cfa .Wx *_dbc /1000.0;_bgf :=705.0;_aefg :=_bgf /1000.0*_dbc ;_afg :=2.0;_fdcg :=1.0;if _cgc < _afeec {_afg =(_afeec -_cgc )/2.0;};if _aefg < _edg {_fdcg =(_edg -_aefg )/2.0;};_agb .Add_q ().Add_g (0).Add_BT ().Add_Tf ("\u005a\u0061\u0044\u0062",_dbc ).Add_Td (_afg ,_fdcg ).Add_Tj (*_fcf .MakeStringFromBytes (_bdf )).Add_ET ().Add_Q ();_fdf .Resources =_ff .NewPdfPageResources ();_fdf .Resources .SetFontByName ("\u005a\u0061\u0044\u0062",_ccf .ToPdfObject ());_fdf .BBox =_fcf .MakeArrayFromFloats ([]float64 {0,0,_bge ,_fab });_fdf .SetContentStream (_agb .Bytes (),_cgea ());};_dcce :=_ff .NewXObjectForm ();{_efg :=_fc .NewContentCreator ();if _ada .BorderSize > 0{_bgfe (_efg ,_ada ,_afeec ,_edg );};_dcce .BBox =_fcf .MakeArrayFromFloats ([]float64 {0,0,_bge ,_fab });_dcce .SetContentStream (_efg .Bytes (),_cgea ());};_gdbb :=_fcf .MakeDict ();_gdbb .Set ("\u004f\u0066\u0066",_dcce .ToPdfObject ());_gdbb .Set ("\u0059\u0065\u0073",_fdf .ToPdfObject ());_bgea :=_fcf .MakeDict ();_bgea .Set ("\u004e",_gdbb );return _bgea ,nil ;};
// RectangleAnnotationDef is a rectangle defined with a specified Width and Height and a lower left corner at (X,Y).
// The rectangle can optionally have a border and a filling color.
// The Width/Height includes the border (if any specified).
type RectangleAnnotationDef struct{X float64 ;Y float64 ;Width float64 ;Height float64 ;FillEnabled bool ;FillColor *_ff .PdfColorDeviceRGB ;BorderEnabled bool ;BorderWidth float64 ;BorderColor *_ff .PdfColorDeviceRGB ;Opacity float64 ;};
// CreateCircleAnnotation creates a circle/ellipse annotation object with appearance stream that can be added to
// page PDF annotations.
func CreateCircleAnnotation (circDef CircleAnnotationDef )(*_ff .PdfAnnotation ,error ){_b :=_ff .NewPdfAnnotationCircle ();if circDef .BorderEnabled {_ge ,_ad ,_df :=circDef .BorderColor .R (),circDef .BorderColor .G (),circDef .BorderColor .B ();_b .C =_fcf .MakeArrayFromFloats ([]float64 {_ge ,_ad ,_df });_cg :=_ff .NewBorderStyle ();_cg .SetBorderWidth (circDef .BorderWidth );_b .BS =_cg .ToPdfObject ();};if circDef .FillEnabled {_fe ,_eg ,_cd :=circDef .FillColor .R (),circDef .FillColor .G (),circDef .FillColor .B ();_b .IC =_fcf .MakeArrayFromFloats ([]float64 {_fe ,_eg ,_cd });}else {_b .IC =_fcf .MakeArrayFromIntegers ([]int {});};if circDef .Opacity < 1.0{_b .CA =_fcf .MakeFloat (circDef .Opacity );};_gf ,_aa ,_ab :=_ca (circDef );if _ab !=nil {return nil ,_ab ;};_b .AP =_gf ;_b .Rect =_fcf .MakeArrayFromFloats ([]float64 {_aa .Llx ,_aa .Lly ,_aa .Urx ,_aa .Ury });return _b .PdfAnnotation ,nil ;};
// WrapContentStream ensures that the entire content stream for a `page` is wrapped within q ... Q operands.
// Ensures that following operands that are added are not affected by additional operands that are added.
// Implements interface model.ContentStreamWrapper.
func (_dce FieldAppearance )WrapContentStream (page *_ff .PdfPage )error {_cde ,_fgad :=page .GetAllContentStreams ();if _fgad !=nil {return _fgad ;};_faf :=_fc .NewContentStreamParser (_cde );_egfd ,_fgad :=_faf .Parse ();if _fgad !=nil {return _fgad ;};_egfd .WrapIfNeeded ();_ddd :=[]string {_egfd .String ()};return page .SetContentStreams (_ddd ,_cgea ());};
// SignatureImagePosition specifies the image signature location relative to the text signature.
// If text signature is not defined, this position will be ignored.
type SignatureImagePosition int ;func _bfg (_cab *_ff .PdfAnnotationWidget ,_cf *_ff .PdfFieldText ,_eeb *_ff .PdfPageResources ,_beg AppearanceStyle )(*_fcf .PdfObjectDictionary ,error ){_afee :=_ff .NewPdfPageResources ();_ef ,_aeg :=_fcf .GetArray (_cab .Rect );if !_aeg {return nil ,_fdg .New ("\u0069\u006e\u0076a\u006c\u0069\u0064\u0020\u0052\u0065\u0063\u0074");};_cdbg ,_cce :=_ff .NewPdfRectangle (*_ef );if _cce !=nil {return nil ,_cce ;};_fea ,_ddc :=_cdbg .Width (),_cdbg .Height ();_gab ,_abc :=_fea ,_ddc ;_cdaf ,_gdeb :=_fcf .GetDict (_cab .MK );if _gdeb {_ecf ,_ :=_fcf .GetDict (_cab .BS );_afa :=_beg .applyAppearanceCharacteristics (_cdaf ,_ecf ,nil );if _afa !=nil {return nil ,_afa ;};};_gdba ,_gdeb :=_fcf .GetIntVal (_cf .MaxLen );if !_gdeb {return nil ,_fdg .New ("\u006d\u0061\u0078\u006c\u0065\u006e\u0020\u006e\u006ft\u0020\u0073\u0065\u0074");};if _gdba <=0{return nil ,_fdg .New ("\u006d\u0061\u0078\u004c\u0065\u006e\u0020\u0069\u006ev\u0061\u006c\u0069\u0064");};_ebe :=_fea /float64 (_gdba );_bcc ,_cce :=_fc .NewContentStreamParser (_abga (_cf .PdfField )).Parse ();if _cce !=nil {return nil ,_cce ;};_bef :=_fc .NewContentCreator ();if _beg .BorderSize > 0{_bgfe (_bef ,_beg ,_fea ,_ddc );};if _beg .DrawAlignmentReticle {_abd :=_beg ;_abd .BorderSize =0.2;_dac (_bef ,_abd ,_fea ,_ddc );};_bef .Add_BMC ("\u0054\u0078");_bef .Add_q ();_ ,_ddc =_beg .applyRotation (_cdaf ,_fea ,_ddc ,_bef );_bef .Add_BT ();_age ,_fgf ,_cce :=_beg .processDA (_cf .PdfField ,_bcc ,_eeb ,_afee ,_bef );if _cce !=nil {return nil ,_cce ;};_cbb :=_age .Font ;_fce :=_fcf .MakeName (_age .Name );_cabg :=_age .Size ;_gecf :=_cabg ==0;if _gecf &&_fgf {_cabg =_ddc *_beg .AutoFontSizeFraction ;};_bfa :=_cbb .Encoder ();if _bfa ==nil {_c .Log .Debug ("\u0057\u0041RN\u003a\u0020\u0066\u006f\u006e\u0074\u0020\u0065\u006e\u0063\u006f\u0064\u0065\u0072\u0020\u0069\u0073\u0020\u006e\u0069l\u002e\u0020\u0041\u0073s\u0075\u006d\u0069\u006eg \u0069\u0064e\u006et\u0069\u0074\u0079\u0020\u0065\u006ec\u006f\u0064\u0065r\u002e\u0020O\u0075\u0074\u0070\u0075\u0074\u0020\u006d\u0061\u0079\u0020\u0062\u0065\u0020\u0069n\u0063\u006f\u0072\u0072\u0065\u0063\u0074\u002e");_bfa =_f .NewIdentityTextEncoder ("\u0049\u0064\u0065\u006e\u0074\u0069\u0074\u0079\u002d\u0048");};var _fgd string ;if _bag ,_bbb :=_fcf .GetString (_cf .V );_bbb {_fgd =_bag .Decoded ();};_bef .Add_Tf (*_fce ,_cabg );var _gdc float64 ;for _ ,_dab :=range _fgd {_fed ,_aaa :=_cbb .GetRuneMetrics (_dab );if !_aaa {_c .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a \u0052\u0075\u006e\u0065\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u0020\u0069\u006e\u0020\u0066\u006fn\u0074\u003a\u0020\u0025\u0076\u0020\u002d\u0020\u0073\u006b\u0069\u0070\u0070\u0069n\u0067 \u006f\u0076\u0065\u0072",_dab );continue ;};_cbba :=_fed .Wy ;if int (_cbba )<=0{_cbba =_fed .Wx ;};if _cbba > _gdc {_gdc =_cbba ;};};if int (_gdc )==0{_c .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0055\u006e\u0061\u0062\u006c\u0065\u0020\u0074o\u0020\u0064\u0065\u0074\u0065\u0072\u006d\u0069\u006e\u0065\u0020\u006d\u0061x\u0020\u0067\u006c\u0079\u0070\u0068\u0020\u0073\u0069\u007a\u0065\u0020- \u0075\u0073\u0069\u006e\u0067\u0020\u0031\u0030\u0030\u0030");_gdc =1000;};_gef ,_cce :=_cbb .GetFontDescriptor ();if _cce !=nil {_c .Log .Debug ("\u0045\u0072ro\u0072\u003a\u0020U\u006e\u0061\u0062\u006ce t\u006f g\u0065\u0074\u0020\u0066\u006f\u006e\u0074 d\u0065\u0073\u0063\u0072\u0069\u0070\u0074o\u0072");};var _gefe float64 ;if _gef !=nil {_gefe ,_cce =_gef .GetCapHeight ();if _cce !=nil {_c .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0055\u006e\u0061\u0062\u006c\u0065 \u0074\u006f\u0020\u0067\u0065\u0074 \u0066\u006f\u006e\u0074\u0020\u0043\u0061\u0070\u0048\u0065\u0069\u0067\u0068t\u003a\u0020\u0025\u0076",_cce );};};if int (_gefe )<=0{_c .Log .Debug ("W\u0041\u0052\u004e\u003a\u0020\u0043\u0061\u0070\u0048e\u0069\u0067\u0068\u0074\u0020\u006e\u006ft \u0061\u0076\u0061\u0069l\u0061\u0062\u006c\u0065\u0020\u002d\u0020\u0073\u0065tt\u0069\u006eg\u0020\u0074\u006f\u0020\u0031\u0030\u0030\u0030");_gefe =1000.0;};_abg :=_gefe /1000.0*_cabg ;_egd :=0.0;_bcf :=1.0*_cabg *(_gdc /1000.0);{_fec :=_bcf ;if _gecf &&_egd +_fec > _ddc {_cabg =0.95*(_ddc -_egd );_abg =_gefe /1000.0*_cabg ;};if _ddc > _abg {_egd =(_ddc -_abg )/2.0;};};_bef .Add_Td (0,_egd );if _bagd ,_dffg :=_fcf .GetIntVal (_cf .Q );_dffg {switch _bagd {case 2:if len (_fgd )< _gdba {_gdbg :=float64 (_gdba -len (_fgd ))*_ebe ;_bef .Add_Td (_gdbg ,0);};};};for _ceg ,_ebgc :=range _fgd {_gfd :=2.0;_cdbc :=string (_ebgc );if _bfa !=nil {_cad ,_ggc :=_cbb .GetRuneMetrics (_ebgc );if !_ggc {_c .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a \u0052\u0075\u006e\u0065\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u0020\u0069\u006e\u0020\u0066\u006fn\u0074\u003a\u0020\u0025\u0076\u0020\u002d\u0020\u0073\u006b\u0069\u0070\u0070\u0069n\u0067 \u006f\u0076\u0065\u0072",_ebgc );continue ;};_cdbc =string (_bfa .Encode (_cdbc ));_gaf :=_cabg *_cad .Wx /1000.0;_fagg :=(_ebe -_gaf )/2;_gfd =_fagg ;};_bef .Add_Td (_gfd ,0);_bef .Add_Tj (*_fcf .MakeString (_cdbc ));if _ceg !=len (_fgd )-1{_bef .Add_Td (_ebe -_gfd ,0);};};_bef .Add_ET ();_bef .Add_Q ();_bef .Add_EMC ();_ebgcb :=_ff .NewXObjectForm ();_ebgcb .Resources =_afee ;_ebgcb .BBox =_fcf .MakeArrayFromFloats ([]float64 {0,0,_gab ,_abc });_ebgcb .SetContentStream (_bef .Bytes (),_cgea ());_fceb :=_fcf .MakeDict ();_fceb .Set ("\u004e",_ebgcb .ToPdfObject ());return _fceb ,nil ;};func _fcg (_afc *_ff .PdfField ,_bbbb ,_fegg float64 ,_aga string ,_eccg AppearanceStyle ,_bff *_fc .ContentStreamOperations ,_ebf *_ff .PdfPageResources ,_edf *_fcf .PdfObjectDictionary )(*_ff .XObjectForm ,error ){_edfa :=_ff .NewPdfPageResources ();_efgc ,_fbdc :=_bbbb ,_fegg ;_ace :=_fc .NewContentCreator ();if _eccg .BorderSize > 0{_bgfe (_ace ,_eccg ,_bbbb ,_fegg );};if _eccg .DrawAlignmentReticle {_cfb :=_eccg ;_cfb .BorderSize =0.2;_dac (_ace ,_cfb ,_bbbb ,_fegg );};_ace .Add_BMC ("\u0054\u0078");_ace .Add_q ();_ace .Add_BT ();_bbbb ,_fegg =_eccg .applyRotation (_edf ,_bbbb ,_fegg ,_ace );_abca ,_fad ,_gdbe :=_eccg .processDA (_afc ,_bff ,_ebf ,_edfa ,_ace );if _gdbe !=nil {return nil ,_gdbe ;};_cdgd :=_abca .Font ;_fgb :=_abca .Size ;_badb :=_fcf .MakeName (_abca .Name );_deb :=_fgb ==0;if _deb &&_fad {_fgb =_fegg *_eccg .AutoFontSizeFraction ;};_gae :=_cdgd .Encoder ();if _gae ==nil {_c .Log .Debug ("\u0057\u0041RN\u003a\u0020\u0066\u006f\u006e\u0074\u0020\u0065\u006e\u0063\u006f\u0064\u0065\u0072\u0020\u0069\u0073\u0020\u006e\u0069l\u002e\u0020\u0041\u0073s\u0075\u006d\u0069\u006eg \u0069\u0064e\u006et\u0069\u0074\u0079\u0020\u0065\u006ec\u006f\u0064\u0065r\u002e\u0020O\u0075\u0074\u0070\u0075\u0074\u0020\u006d\u0061\u0079\u0020\u0062\u0065\u0020\u0069n\u0063\u006f\u0072\u0072\u0065\u0063\u0074\u002e");_gae =_f .NewIdentityTextEncoder ("\u0049\u0064\u0065\u006e\u0074\u0069\u0074\u0079\u002d\u0048");};if len (_aga )==0{return nil ,nil ;};_fbbe :=2.0;_bgg :=0.0;if _gae !=nil {for _ ,_deaf :=range _aga {_gbgf ,_cff :=_cdgd .GetRuneMetrics (_deaf );if !_cff {_c .Log .Debug ("\u0046\u006f\u006e\u0074\u0020\u0064o\u0065\u0073\u0020\u006e\u006f\u0074\u0020\u0068\u0061\u0076\u0065\u0020\u0072\u0075\u006e\u0065\u0020\u006d\u0065\u0074r\u0069\u0063\u0073\u0020\u0066\u006f\u0072\u0020\u0025\u0076\u0020\u002d\u0020\u0073k\u0069p\u0070\u0069\u006e\u0067",_deaf );continue ;};_bgg +=_gbgf .Wx ;};_aga =string (_gae .Encode (_aga ));};if _fgb ==0||_deb &&_bgg > 0&&_fbbe +_bgg *_fgb /1000.0> _bbbb {_fgb =0.95*1000.0*(_bbbb -_fbbe )/_bgg ;};_bggf :=1.0*_fgb ;_bbbg :=2.0;{_bega :=_bggf ;if _deb &&_bbbg +_bega > _fegg {_fgb =0.95*(_fegg -_bbbg );_bggf =1.0*_fgb ;_bega =_bggf ;};if _fegg > _bega {_bbbg =(_fegg -_bega )/2.0;_bbbg +=1.50;};};_ace .Add_Tf (*_badb ,_fgb );_ace .Add_Td (_fbbe ,_bbbg );_ace .Add_Tj (*_fcf .MakeString (_aga ));_ace .Add_ET ();_ace .Add_Q ();_ace .Add_EMC ();_dde :=_ff .NewXObjectForm ();_dde .Resources =_edfa ;_dde .BBox =_fcf .MakeArrayFromFloats ([]float64 {0,0,_efgc ,_fbdc });_dde .SetContentStream (_ace .Bytes (),_cgea ());return _dde ,nil ;};
// NewSignatureLine returns a new signature line displayed as a part of the
// signature field appearance.
func NewSignatureLine (desc ,text string )*SignatureLine {return &SignatureLine {Desc :desc ,Text :text };};func _eege (_gbg *_ff .PdfAcroForm ,_fddb *_ff .PdfAnnotationWidget ,_gdbf *_ff .PdfFieldChoice ,_gbf AppearanceStyle )(*_fcf .PdfObjectDictionary ,error ){_efd ,_bgb :=_fcf .GetArray (_fddb .Rect );if !_bgb {return nil ,_fdg .New ("\u0069\u006e\u0076a\u006c\u0069\u0064\u0020\u0052\u0065\u0063\u0074");};_bga ,_aee :=_ff .NewPdfRectangle (*_efd );if _aee !=nil {return nil ,_aee ;};_afb ,_aae :=_bga .Width (),_bga .Height ();_c .Log .Debug ("\u0043\u0068\u006f\u0069\u0063\u0065\u002c\u0020\u0077\u0061\u0020\u0042S\u003a\u0020\u0025\u0076",_fddb .BS );_ffg ,_aee :=_fc .NewContentStreamParser (_abga (_gdbf .PdfField )).Parse ();if _aee !=nil {return nil ,_aee ;};_ddag ,_ffe :=_fcf .GetDict (_fddb .MK );if _ffe {_def ,_ :=_fcf .GetDict (_fddb .BS );_adef :=_gbf .applyAppearanceCharacteristics (_ddag ,_def ,nil );if _adef !=nil {return nil ,_adef ;};};_gdca :=_fcf .MakeDict ();for _ ,_adefg :=range _gdbf .Opt .Elements (){if _dea ,_geeb :=_fcf .GetArray (_adefg );_geeb &&_dea .Len ()==2{_adefg =_dea .Get (1);};var _fbcg string ;if _adg ,_gaa :=_fcf .GetString (_adefg );_gaa {_fbcg =_adg .Decoded ();}else if _ccb ,_ffgf :=_fcf .GetName (_adefg );_ffgf {_fbcg =_ccb .String ();}else {_c .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a \u004f\u0070\u0074\u0020\u006e\u006f\u0074\u0020\u0061\u0020\u006e\u0061\u006de\u002f\u0073\u0074\u0072\u0069\u006e\u0067 \u002d\u0020\u0025\u0054",_adefg );return nil ,_fdg .New ("\u006e\u006f\u0074\u0020\u0061\u0020\u006e\u0061\u006d\u0065\u002f\u0073t\u0072\u0069\u006e\u0067");};if len (_fbcg )> 0{_bgfg ,_cac :=_fcg (_gdbf .PdfField ,_afb ,_aae ,_fbcg ,_gbf ,_ffg ,_gbg .DR ,_ddag );if _cac !=nil {return nil ,_cac ;};_gdca .Set (*_fcf .MakeName (_fbcg ),_bgfg .ToPdfObject ());};};_bcb :=_fcf .MakeDict ();_bcb .Set ("\u004e",_gdca );return _bcb ,nil ;};
// CreateRectangleAnnotation creates a rectangle annotation object that can be added to page PDF annotations.
func CreateRectangleAnnotation (rectDef RectangleAnnotationDef )(*_ff .PdfAnnotation ,error ){_ddcg :=_ff .NewPdfAnnotationSquare ();if rectDef .BorderEnabled {_ddff ,_dfcc ,_agab :=rectDef .BorderColor .R (),rectDef .BorderColor .G (),rectDef .BorderColor .B ();_ddcg .C =_fcf .MakeArrayFromFloats ([]float64 {_ddff ,_dfcc ,_agab });_adbf :=_ff .NewBorderStyle ();_adbf .SetBorderWidth (rectDef .BorderWidth );_ddcg .BS =_adbf .ToPdfObject ();};if rectDef .FillEnabled {_ebd ,_bbd ,_ecde :=rectDef .FillColor .R (),rectDef .FillColor .G (),rectDef .FillColor .B ();_ddcg .IC =_fcf .MakeArrayFromFloats ([]float64 {_ebd ,_bbd ,_ecde });}else {_ddcg .IC =_fcf .MakeArrayFromIntegers ([]int {});};if rectDef .Opacity < 1.0{_ddcg .CA =_fcf .MakeFloat (rectDef .Opacity );};_fgbd ,_agbc ,_bcca :=_bcgd (rectDef );if _bcca !=nil {return nil ,_bcca ;};_ddcg .AP =_fgbd ;_ddcg .Rect =_fcf .MakeArrayFromFloats ([]float64 {_agbc .Llx ,_agbc .Lly ,_agbc .Urx ,_agbc .Ury });return _ddcg .PdfAnnotation ,nil ;};const (SignatureImageLeft SignatureImagePosition =iota ;SignatureImageRight ;SignatureImageTop ;SignatureImageBottom ;);
// Style returns the appearance style of `fa`. If not specified, returns default style.
func (_fdc FieldAppearance )Style ()AppearanceStyle {if _fdc ._baa !=nil {return *_fdc ._baa ;};return AppearanceStyle {AutoFontSizeFraction :0.65,CheckmarkRune :'✔',BorderSize :0.0,BorderColor :_ff .NewPdfColorDeviceGray (0),FillColor :_ff .NewPdfColorDeviceGray (1),MultilineLineHeight :1.2,MultilineVAlignMiddle :false ,DrawAlignmentReticle :false ,AllowMK :true };};func (_dbf *AppearanceStyle )applyRotation (_faee *_fcf .PdfObjectDictionary ,_fabb ,_efga float64 ,_bde *_fc .ContentCreator )(float64 ,float64 ){if !_dbf .AllowMK {return _fabb ,_efga ;};if _faee ==nil {return _fabb ,_efga ;};_fdgf ,_ :=_fcf .GetNumberAsFloat (_faee .Get ("\u0052"));if _fdgf ==0{return _fabb ,_efga ;};_fdfc :=-_fdgf ;_dbfg :=_g .Path {Points :[]_g .Point {_g .NewPoint (0,0).Rotate (_fdfc ),_g .NewPoint (_fabb ,0).Rotate (_fdfc ),_g .NewPoint (0,_efga ).Rotate (_fdfc ),_g .NewPoint (_fabb ,_efga ).Rotate (_fdfc )}}.GetBoundingBox ();_bde .RotateDeg (_fdgf );_bde .Translate (_dbfg .X ,_dbfg .Y );return _dbfg .Width ,_dbfg .Height ;};func _ccbg (_bfe _dd .Image ,_aeeb string ,_gfbf *SignatureFieldOpts ,_ede []float64 ,_cbda *_fc .ContentCreator )(*_fcf .PdfObjectName ,*_ff .XObjectImage ,error ){_cgcf ,_dbg :=_ff .DefaultImageHandler {}.NewImageFromGoImage (_bfe );if _dbg !=nil {return nil ,nil ,_dbg ;};_aeab ,_dbg :=_ff .NewXObjectImageFromImage (_cgcf ,nil ,_gfbf .Encoder );if _dbg !=nil {return nil ,nil ,_dbg ;};_gcac ,_bee :=float64 (*_aeab .Width ),float64 (*_aeab .Height );_gece :=_ede [2]-_ede [0];_faaf :=_ede [3]-_ede [1];if _gfbf .AutoSize {_ced :=_ee .Min (_gece /_gcac ,_faaf /_bee );_gcac *=_ced ;_bee *=_ced ;_ede [0]=_ede [0]+(_gece /2)-(_gcac /2);_ede [1]=_ede [1]+(_faaf /2)-(_bee /2);};var _aedc *_fcf .PdfObjectName ;if _gbge ,_egea :=_fcf .GetName (_aeab .Name );_egea {_aedc =_gbge ;}else {_aedc =_fcf .MakeName (_aeeb );};if _cbda !=nil {_cbda .Add_q ().Translate (_ede [0],_ede [1]).Scale (_gcac ,_bee ).Add_Do (*_aedc ).Add_Q ();}else {return nil ,nil ,_fdg .New ("\u0043\u006f\u006e\u0074en\u0074\u0043\u0072\u0065\u0061\u0074\u006f\u0072\u0020\u0069\u0073\u0020\u006e\u0075l\u006c");};return _aedc ,_aeab ,nil ;};
// TextFieldOptions defines optional parameter for a text field in a form.
type TextFieldOptions struct{MaxLen int ;Value string ;};
// AppearanceFontStyle defines font style characteristics for form fields,
// used in the filling/flattening process.
type AppearanceFontStyle struct{
// Fallback represents a global font fallback, used for fields which do
// not specify a font in their default appearance (DA). The fallback is
// also used if there is a font specified in the DA, but it is not
// found in the AcroForm resources (DR).
Fallback *AppearanceFont ;
// FieldFallbacks defines font fallbacks for specific fields. The map keys
// represent the names of the fields (which can be specified by their
// partial or full names). Specific field fallback fonts take precedence
// over the global font fallback.
FieldFallbacks map[string ]*AppearanceFont ;
// ForceReplace forces the replacement of fonts in the filling/flattening
// process, even if the default appearance (DA) specify a valid font.
// If no fallback font is provided, setting this field has no effect.
ForceReplace bool ;};func _ce (_dfd *_ff .PdfAnnotationWidget ,_fdb *_ff .PdfFieldText ,_fdbd *_ff .PdfPageResources ,_ged AppearanceStyle )(*_fcf .PdfObjectDictionary ,error ){_aba :=_ff .NewPdfPageResources ();_ffd ,_eac :=_fcf .GetArray (_dfd .Rect );if !_eac {return nil ,_fdg .New ("\u0069\u006e\u0076a\u006c\u0069\u0064\u0020\u0052\u0065\u0063\u0074");};_ffb ,_bfd :=_ff .NewPdfRectangle (*_ffd );if _bfd !=nil {return nil ,_bfd ;};_aed ,_caa :=_ffb .Width (),_ffb .Height ();_geg ,_dcd :=_aed ,_caa ;_fcb ,_eeg :=_fcf .GetDict (_dfd .MK );if _eeg {_eecb ,_ :=_fcf .GetDict (_dfd .BS );_cc :=_ged .applyAppearanceCharacteristics (_fcb ,_eecb ,nil );if _cc !=nil {return nil ,_cc ;};};_afe ,_bfd :=_fc .NewContentStreamParser (_abga (_fdb .PdfField )).Parse ();if _bfd !=nil {return nil ,_bfd ;};_egf :=_fc .NewContentCreator ();if _ged .BorderSize > 0{_bgfe (_egf ,_ged ,_aed ,_caa );};if _ged .DrawAlignmentReticle {_eaa :=_ged ;_eaa .BorderSize =0.2;_dac (_egf ,_eaa ,_aed ,_caa );};_egf .Add_BMC ("\u0054\u0078");_egf .Add_q ();_aed ,_caa =_ged .applyRotation (_fcb ,_aed ,_caa ,_egf );_egf .Add_BT ();_gbb ,_gg ,_bfd :=_ged .processDA (_fdb .PdfField ,_afe ,_fdbd ,_aba ,_egf );if _bfd !=nil {return nil ,_bfd ;};_bac :=_gbb .Font ;_gde :=_gbb .Size ;_ffbg :=_fcf .MakeName (_gbb .Name );_aag :=_gde ==0;if _aag &&_gg {_gde =_caa *_ged .AutoFontSizeFraction ;};_cda :=_bac .Encoder ();if _cda ==nil {_c .Log .Debug ("\u0057\u0041RN\u003a\u0020\u0066\u006f\u006e\u0074\u0020\u0065\u006e\u0063\u006f\u0064\u0065\u0072\u0020\u0069\u0073\u0020\u006e\u0069l\u002e\u0020\u0041\u0073s\u0075\u006d\u0069\u006eg \u0069\u0064e\u006et\u0069\u0074\u0079\u0020\u0065\u006ec\u006f\u0064\u0065r\u002e\u0020O\u0075\u0074\u0070\u0075\u0074\u0020\u006d\u0061\u0079\u0020\u0062\u0065\u0020\u0069n\u0063\u006f\u0072\u0072\u0065\u0063\u0074\u002e");_cda =_f .NewIdentityTextEncoder ("\u0049\u0064\u0065\u006e\u0074\u0069\u0074\u0079\u002d\u0048");};_ebb ,_bfd :=_bac .GetFontDescriptor ();if _bfd !=nil {_c .Log .Debug ("\u0045\u0072ro\u0072\u003a\u0020U\u006e\u0061\u0062\u006ce t\u006f g\u0065\u0074\u0020\u0066\u006f\u006e\u0074 d\u0065\u0073\u0063\u0072\u0069\u0070\u0074o\u0072");};var _gdg string ;if _fbc ,_eef :=_fcf .GetString (_fdb .V );_eef {_gdg =_fbc .Decoded ();};if len (_gdg )==0{return nil ,nil ;};_gedd :=[]string {_gdg };_gec :=false ;if _fdb .Flags ().Has (_ff .FieldFlagMultiline ){_gec =true ;_gdg =_fd .Replace (_gdg ,"\u000d\u000a","\u000a",-1);_gdg =_fd .Replace (_gdg ,"\u000d","\u000a",-1);_gedd =_fd .Split (_gdg ,"\u000a");};_dff :=0.0;_cgb :=0;if _cda !=nil {_ddg :=len (_gedd );_fa :=0;for _fa < _ddg {var _be float64 ;_cef :=-1;_dec :=0.0;for _dccd ,_gdb :=range _gedd [_fa ]{if _gdb ==' '{_cef =_dccd ;_be =_dec ;};_adb ,_ga :=_bac .GetRuneMetrics (_gdb );if !_ga {_c .Log .Debug ("\u0046\u006f\u006e\u0074\u0020\u0064o\u0065\u0073\u0020\u006e\u006f\u0074\u0020\u0068\u0061\u0076\u0065\u0020\u0072\u0075\u006e\u0065\u0020\u006d\u0065\u0074r\u0069\u0063\u0073\u0020\u0066\u006f\u0072\u0020\u0025\u0076\u0020\u002d\u0020\u0073k\u0069p\u0070\u0069\u006e\u0067",_gdb );continue ;};_dec +=_adb .Wx ;if _gec &&!_aag &&_gde *_dec /1000.0> _aed &&_cef > 0{_ed :=_gedd [_fa ][_cef +1:];if _fa < len (_gedd )-1{_gedd =append (_gedd [:_fa +1],_gedd [_fa :]...);_gedd [_fa +1]=_ed ;}else {_gedd =append (_gedd ,_ed );};_ddg ++;_gedd [_fa ]=_gedd [_fa ][0:_cef ];_dec =_be ;break ;};};if _dec > _dff {_dff =_dec ;};_gedd [_fa ]=string (_cda .Encode (_gedd [_fa ]));if len (_gedd [_fa ])> 0{_cgb ++;};_fa ++;};};_cae :=2.0;if _gde ==0||_aag &&_dff > 0&&_cae +_dff *_gde /1000.0> _aed {_gde =0.95*1000.0*(_aed -_cae )/_dff ;};_fcfd :=_eb ;{if _cdg ,_baca :=_fcf .GetIntVal (_fdb .Q );_baca {switch _cdg {case 0:_fcfd =_eb ;case 1:_fcfd =_de ;case 2:_fcfd =_ec ;default:_c .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0055\u006e\u0073\u0075\u0070\u0070\u006f\u0072t\u0065\u0064\u0020\u0071\u0075\u0061\u0064\u0064\u0069\u006e\u0067\u003a\u0020%\u0064\u0020\u002d\u0020\u0075\u0073\u0069\u006e\u0067\u0020\u006c\u0065ft\u0020\u0061\u006c\u0069\u0067\u006e\u006d\u0065\u006e\u0074",_cdg );};};};_eaad :=_ged .MultilineLineHeight ;_cdb :=_gde ;if _gec &&_cgb > 1{_cdb =_eaad *_gde ;};var _ffcc float64 ;if _ebb !=nil {_ffcc ,_bfd =_ebb .GetCapHeight ();if _bfd !=nil {_c .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0055\u006e\u0061\u0062\u006c\u0065 \u0074\u006f\u0020\u0067\u0065\u0074 \u0066\u006f\u006e\u0074\u0020\u0043\u0061\u0070\u0048\u0065\u0069\u0067\u0068t\u003a\u0020\u0025\u0076",_bfd );};};if int (_ffcc )<=0{_c .Log .Debug ("W\u0041\u0052\u004e\u003a\u0020\u0043\u0061\u0070\u0048e\u0069\u0067\u0068\u0074\u0020\u006e\u006ft \u0061\u0076\u0061\u0069l\u0061\u0062\u006c\u0065\u0020\u002d\u0020\u0073\u0065tt\u0069\u006eg\u0020\u0074\u006f\u0020\u0031\u0030\u0030\u0030");_ffcc =1000;};_fae :=_ffcc /1000.0*_gde ;_ebg :=0.0;{_da :=float64 (_cgb )*_cdb ;if _aag &&_ebg +_da > _caa {_gde =0.95*(_caa -_ebg )/float64 (_cgb );_cdb =_gde ;if _gec &&_cgb > 1{_cdb =_eaad *_gde ;};_fae =_ffcc /1000.0*_gde ;_da =float64 (_cgb )*_cdb ;};if _caa > _da {if _gec {if _ged .MultilineVAlignMiddle {_fdbf :=(_caa -_da )/2.0;_faa :=_fdbf +_da -_cdb ;_ebg =_faa ;}else {_ebg =_caa -_cdb ;_ebg -=_gde *0.5;};}else {_ebg =(_caa -_fae )/2.0;};};};_egf .Add_Tf (*_ffbg ,_gde );_egf .Add_Td (_cae ,_ebg );_fag :=_cae ;_fbce :=_cae ;for _ecc ,_ccg :=range _gedd {_ebgd :=0.0;for _ ,_bg :=range _ccg {_dfg ,_fbg :=_bac .GetRuneMetrics (_bg );if !_fbg {continue ;};_ebgd +=_dfg .Wx ;};_bab :=_ebgd /1000.0*_gde ;_cdc :=_aed -_bab ;var _fda float64 ;switch _fcfd {case _eb :_fda =_fag ;case _de :_fda =_cdc /2;case _ec :_fda =_cdc ;};_cae =_fda -_fbce ;if _cae > 0.0{_egf .Add_Td (_cae ,0);};_fbce =_fda ;_egf .Add_Tj (*_fcf .MakeString (_ccg ));if _ecc < len (_gedd )-1{_egf .Add_Td (0,-_cdb *_eaad );};};_egf .Add_ET ();_egf .Add_Q ();_egf .Add_EMC ();_fbb :=_ff .NewXObjectForm ();_fbb .Resources =_aba ;_fbb .BBox =_fcf .MakeArrayFromFloats ([]float64 {0,0,_geg ,_dcd });_fbb .SetContentStream (_egf .Bytes (),_cgea ());_gc :=_fcf .MakeDict ();_gc .Set ("\u004e",_fbb .ToPdfObject ());return _gc ,nil ;};
// FieldAppearance implements interface model.FieldAppearanceGenerator and generates appearance streams
// for fields taking into account what value is in the field. A common use case is for generating the
// appearance stream prior to flattening fields.
//
// If `OnlyIfMissing` is true, the field appearance is generated only for fields that do not have an
// appearance stream specified.
// If `RegenerateTextFields` is true, all text fields are regenerated (even if OnlyIfMissing is true).
type FieldAppearance struct{OnlyIfMissing bool ;RegenerateTextFields bool ;_baa *AppearanceStyle ;};
// NewSignatureField returns a new signature field with a visible appearance
// containing the specified signature lines and styled according to the
// specified options.
func NewSignatureField (signature *_ff .PdfSignature ,lines []*SignatureLine ,opts *SignatureFieldOpts )(*_ff .PdfFieldSignature ,error ){if signature ==nil {return nil ,_fdg .New ("\u0073\u0069\u0067na\u0074\u0075\u0072\u0065\u0020\u0063\u0061\u006e\u006e\u006f\u0074\u0020\u0062\u0065\u0020\u006e\u0069\u006c");};_ecda ,_bfef :=_fbfa (lines ,opts );if _bfef !=nil {return nil ,_bfef ;};_ebgce :=_ff .NewPdfFieldSignature (signature );_ebgce .Rect =_fcf .MakeArrayFromFloats (opts .Rect );_ebgce .AP =_ecda ;return _ebgce ,nil ;};
// CircleAnnotationDef defines a circle annotation or ellipse at position (X, Y) and Width and Height.
// The annotation has various style parameters including Fill and Border options and Opacity.
type CircleAnnotationDef struct{X float64 ;Y float64 ;Width float64 ;Height float64 ;FillEnabled bool ;FillColor *_ff .PdfColorDeviceRGB ;BorderEnabled bool ;BorderWidth float64 ;BorderColor *_ff .PdfColorDeviceRGB ;Opacity float64 ;};func _bcgd (_gdbc RectangleAnnotationDef )(*_fcf .PdfObjectDictionary ,*_ff .PdfRectangle ,error ){_ccca :=_ff .NewXObjectForm ();_ccca .Resources =_ff .NewPdfPageResources ();_bed :="";if _gdbc .Opacity < 1.0{_bbc :=_fcf .MakeDict ();_bbc .Set ("\u0063\u0061",_fcf .MakeFloat (_gdbc .Opacity ));_bbc .Set ("\u0043\u0041",_fcf .MakeFloat (_gdbc .Opacity ));_aaea :=_ccca .Resources .AddExtGState ("\u0067\u0073\u0031",_bbc );if _aaea !=nil {_c .Log .Debug ("U\u006e\u0061\u0062\u006c\u0065\u0020t\u006f\u0020\u0061\u0064\u0064\u0020\u0065\u0078\u0074g\u0073\u0074\u0061t\u0065 \u0067\u0073\u0031");return nil ,nil ,_aaea ;};_bed ="\u0067\u0073\u0031";};_bbac ,_ebda ,_afd ,_fca :=_agbce (_gdbc ,_bed );if _fca !=nil {return nil ,nil ,_fca ;};_fca =_ccca .SetContentStream (_bbac ,nil );if _fca !=nil {return nil ,nil ,_fca ;};_ccca .BBox =_ebda .ToPdfObject ();_gbce :=_fcf .MakeDict ();_gbce .Set ("\u004e",_ccca .ToPdfObject ());return _gbce ,_afd ,nil ;};func (_egdf *AppearanceStyle )applyAppearanceCharacteristics (_cfe *_fcf .PdfObjectDictionary ,_bgef *_fcf .PdfObjectDictionary ,_gdgd *_ff .PdfFont )error {if !_egdf .AllowMK {return nil ;};if CA ,_adeb :=_fcf .GetString (_cfe .Get ("\u0043\u0041"));_adeb &&_gdgd !=nil {_gbe :=CA .Bytes ();if len (_gbe )!=0{_bggg :=[]rune (_gdgd .Encoder ().Decode (_gbe ));if len (_bggg )==1{_egdf .CheckmarkRune =_bggg [0];};};};if BC ,_eae :=_fcf .GetArray (_cfe .Get ("\u0042\u0043"));_eae {_cbd ,_gfb :=BC .ToFloat64Array ();if _gfb !=nil {return _gfb ;};switch len (_cbd ){case 1:_egdf .BorderColor =_ff .NewPdfColorDeviceGray (_cbd [0]);case 3:_egdf .BorderColor =_ff .NewPdfColorDeviceRGB (_cbd [0],_cbd [1],_cbd [2]);case 4:_egdf .BorderColor =_ff .NewPdfColorDeviceCMYK (_cbd [0],_cbd [1],_cbd [2],_cbd [3]);default:_c .Log .Debug ("\u0045\u0052\u0052\u004f\u0052:\u0020\u0042\u0043\u0020\u002d\u0020\u0049\u006e\u0076\u0061\u006c\u0069\u0064 \u006e\u0075\u006d\u0062\u0065\u0072\u0020\u006f\u0066\u0020\u0063\u006f\u006c\u006f\u0072\u0020\u0063\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0020\u0028\u0025\u0064)",len (_cbd ));};if _bgef !=nil {if _gdbfg ,_dfc :=_fcf .GetNumberAsFloat (_bgef .Get ("\u0057"));_dfc ==nil {_egdf .BorderSize =_gdbfg ;};};};if BG ,_ecd :=_fcf .GetArray (_cfe .Get ("\u0042\u0047"));_ecd {_fage ,_ggb :=BG .ToFloat64Array ();if _ggb !=nil {return _ggb ;};switch len (_fage ){case 1:_egdf .FillColor =_ff .NewPdfColorDeviceGray (_fage [0]);case 3:_egdf .FillColor =_ff .NewPdfColorDeviceRGB (_fage [0],_fage [1],_fage [2]);case 4:_egdf .FillColor =_ff .NewPdfColorDeviceCMYK (_fage [0],_fage [1],_fage [2],_fage [3]);default:_c .Log .Debug ("\u0045\u0052\u0052\u004f\u0052:\u0020\u0042\u0047\u0020\u002d\u0020\u0049\u006e\u0076\u0061\u006c\u0069\u0064 \u006e\u0075\u006d\u0062\u0065\u0072\u0020\u006f\u0066\u0020\u0063\u006f\u006c\u006f\u0072\u0020\u0063\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0020\u0028\u0025\u0064)",len (_fage ));};};return nil ;};
// CreateLineAnnotation creates a line annotation object that can be added to page PDF annotations.
func CreateLineAnnotation (lineDef LineAnnotationDef )(*_ff .PdfAnnotation ,error ){_efeb :=_ff .NewPdfAnnotationLine ();_efeb .L =_fcf .MakeArrayFromFloats ([]float64 {lineDef .X1 ,lineDef .Y1 ,lineDef .X2 ,lineDef .Y2 });_cdf :=_fcf .MakeName ("\u004e\u006f\u006e\u0065");if lineDef .LineEndingStyle1 ==_g .LineEndingStyleArrow {_cdf =_fcf .MakeName ("C\u006c\u006f\u0073\u0065\u0064\u0041\u0072\u0072\u006f\u0077");};_badbc :=_fcf .MakeName ("\u004e\u006f\u006e\u0065");if lineDef .LineEndingStyle2 ==_g .LineEndingStyleArrow {_badbc =_fcf .MakeName ("C\u006c\u006f\u0073\u0065\u0064\u0041\u0072\u0072\u006f\u0077");};_efeb .LE =_fcf .MakeArray (_cdf ,_badbc );if lineDef .Opacity < 1.0{_efeb .CA =_fcf .MakeFloat (lineDef .Opacity );};_bgec ,_fff ,_bdeg :=lineDef .LineColor .R (),lineDef .LineColor .G (),lineDef .LineColor .B ();_efeb .IC =_fcf .MakeArrayFromFloats ([]float64 {_bgec ,_fff ,_bdeg });_efeb .C =_fcf .MakeArrayFromFloats ([]float64 {_bgec ,_fff ,_bdeg });_ccc :=_ff .NewBorderStyle ();_ccc .SetBorderWidth (lineDef .LineWidth );_efeb .BS =_ccc .ToPdfObject ();_dge ,_dcac ,_fada :=_dbec (lineDef );if _fada !=nil {return nil ,_fada ;};_efeb .AP =_dge ;_efeb .Rect =_fcf .MakeArrayFromFloats ([]float64 {_dcac .Llx ,_dcac .Lly ,_dcac .Urx ,_dcac .Ury });return _efeb .PdfAnnotation ,nil ;};
// GenerateAppearanceDict generates an appearance dictionary for widget annotation `wa` for the `field` in `form`.
// Implements interface model.FieldAppearanceGenerator.
func (_fdcf FieldAppearance )GenerateAppearanceDict (form *_ff .PdfAcroForm ,field *_ff .PdfField ,wa *_ff .PdfAnnotationWidget )(*_fcf .PdfObjectDictionary ,error ){_c .Log .Trace ("\u0047\u0065n\u0065\u0072\u0061\u0074e\u0041\u0070p\u0065\u0061\u0072\u0061\u006e\u0063\u0065\u0044i\u0063\u0074\u0020\u0066\u006f\u0072\u0020\u0025\u0076\u0020\u0020\u0056:\u0020\u0025\u002b\u0076",field .PartialName (),field .V );_ ,_fbf :=field .GetContext ().(*_ff .PdfFieldText );_db ,_aac :=_fcf .GetDict (wa .AP );if _aac &&_fdcf .OnlyIfMissing &&(!_fbf ||!_fdcf .RegenerateTextFields ){_c .Log .Trace ("\u0041\u006c\u0072\u0065a\u0064\u0079\u0020\u0070\u006f\u0070\u0075\u006c\u0061\u0074e\u0064 \u002d\u0020\u0069\u0067\u006e\u006f\u0072i\u006e\u0067");return _db ,nil ;};if form .DR ==nil {form .DR =_ff .NewPdfPageResources ();};switch _ffc :=field .GetContext ().(type ){case *_ff .PdfFieldText :_eec :=_ffc ;switch {case _eec .Flags ().Has (_ff .FieldFlagPassword ):return nil ,nil ;case _eec .Flags ().Has (_ff .FieldFlagFileSelect ):return nil ,nil ;case _eec .Flags ().Has (_ff .FieldFlagComb ):if _eec .MaxLen !=nil {_dda ,_dgc :=_bfg (wa ,_eec ,form .DR ,_fdcf .Style ());if _dgc !=nil {return nil ,_dgc ;};return _dda ,nil ;};};_fg ,_fbe :=_ce (wa ,_eec ,form .DR ,_fdcf .Style ());if _fbe !=nil {return nil ,_fbe ;};return _fg ,nil ;case *_ff .PdfFieldButton :_abe :=_ffc ;if _abe .IsCheckbox (){_bf ,_dcc :=_egdd (wa ,_abe ,form .DR ,_fdcf .Style ());if _dcc !=nil {return nil ,_dcc ;};return _bf ,nil ;};_c .Log .Debug ("\u0054\u004f\u0044\u004f\u003a\u0020\u0055\u004e\u0048\u0041\u004e\u0044\u004c\u0045\u0044 \u0062u\u0074\u0074\u006f\u006e\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u002b\u0076",_abe .GetType ());case *_ff .PdfFieldChoice :_bfb :=_ffc ;switch {case _bfb .Flags ().Has (_ff .FieldFlagCombo ):_bc ,_gd :=_eege (form ,wa ,_bfb ,_fdcf .Style ());if _gd !=nil {return nil ,_gd ;};return _bc ,nil ;default:_c .Log .Debug ("\u0054\u004f\u0044\u004f\u003a\u0020\u0055N\u0048\u0041\u004eD\u004c\u0045\u0044\u0020c\u0068\u006f\u0069\u0063\u0065\u0020\u0066\u0069\u0065\u006c\u0064\u0020\u0077\u0069\u0074\u0068\u0020\u0066\u006c\u0061\u0067\u0073\u003a\u0020\u0025\u0073",_bfb .Flags ().String ());};default:_c .Log .Debug ("\u0054\u004f\u0044\u004f\u003a\u0020\u0055\u004e\u0048\u0041N\u0044\u004c\u0045\u0044\u0020\u0066\u0069e\u006c\u0064\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0054",_ffc );};return nil ,nil ;};
// ComboboxFieldOptions defines optional parameters for a combobox form field.
type ComboboxFieldOptions struct{
// Choices is the list of string values that can be selected.
Choices []string ;};
// LineAnnotationDef defines a line between point 1 (X1,Y1) and point 2 (X2,Y2). The line ending styles can be none
// (regular line), or arrows at either end. The line also has a specified width, color and opacity.
type LineAnnotationDef struct{X1 float64 ;Y1 float64 ;X2 float64 ;Y2 float64 ;LineColor *_ff .PdfColorDeviceRGB ;Opacity float64 ;LineWidth float64 ;LineEndingStyle1 _g .LineEndingStyle ;LineEndingStyle2 _g .LineEndingStyle ;};
// NewComboboxField generates a new combobox form field with partial name `name` at location `rect`
// on specified `page` and with field specific options `opt`.
func NewComboboxField (page *_ff .PdfPage ,name string ,rect []float64 ,opt ComboboxFieldOptions )(*_ff .PdfFieldChoice ,error ){if page ==nil {return nil ,_fdg .New ("\u0070a\u0067e\u0020\u006e\u006f\u0074\u0020s\u0070\u0065c\u0069\u0066\u0069\u0065\u0064");};if len (name )<=0{return nil ,_fdg .New ("\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0064\u0020\u0061\u0074\u0074\u0072\u0069\u0062u\u0074e\u0020\u006e\u006f\u0074\u0020\u0073\u0070\u0065\u0063\u0069\u0066\u0069\u0065\u0064");};if len (rect )!=4{return nil ,_fdg .New ("\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0072\u0061\u006e\u0067\u0065");};_gge :=_ff .NewPdfField ();_gdf :=&_ff .PdfFieldChoice {};_gge .SetContext (_gdf );_gdf .PdfField =_gge ;_gdf .T =_fcf .MakeString (name );_gdf .Opt =_fcf .MakeArray ();for _ ,_faga :=range opt .Choices {_gdf .Opt .Append (_fcf .MakeString (_faga ));};_gdf .SetFlag (_ff .FieldFlagCombo );_abgb :=_ff .NewPdfAnnotationWidget ();_abgb .Rect =_fcf .MakeArrayFromFloats (rect );_abgb .P =page .ToPdfObject ();_abgb .F =_fcf .MakeInteger (4);_abgb .Parent =_gdf .ToPdfObject ();_gdf .Annotations =append (_gdf .Annotations ,_abgb );return _gdf ,nil ;};
// SignatureFieldOpts represents a set of options used to configure
// an appearance widget dictionary.
type SignatureFieldOpts struct{
// Rect represents the area the signature annotation is displayed on.
Rect []float64 ;
// AutoSize specifies if the content of the appearance should be
// scaled to fit in the annotation rectangle.
AutoSize bool ;
// Font specifies the font of the text content.
Font *_ff .PdfFont ;
// FontSize specifies the size of the text content.
FontSize float64 ;
// LineHeight specifies the height of a line of text in the appearance annotation.
LineHeight float64 ;
// TextColor represents the color of the text content displayed.
TextColor _ff .PdfColor ;
// FillColor represents the background color of the appearance annotation area.
FillColor _ff .PdfColor ;
// BorderSize represents border size of the appearance annotation area.
BorderSize float64 ;
// BorderColor represents the border color of the appearance annotation area.
BorderColor _ff .PdfColor ;
// WatermarkImage specifies the image used as a watermark that will be rendered
// behind the signature.
WatermarkImage _dd .Image ;
// Image represents the image used for the signature appearance.
Image _dd .Image ;
// Encoder specifies the image encoder used for image signature. Defaults to flate encoder.
Encoder _fcf .StreamEncoder ;
// ImagePosition specifies the image location relative to the text signature.
ImagePosition SignatureImagePosition ;};func _bgfe (_gcc *_fc .ContentCreator ,_bbbd AppearanceStyle ,_egg ,_gdgc float64 ){_gcc .Add_q ().Add_re (0,0,_egg ,_gdgc ).Add_w (_bbbd .BorderSize ).SetStrokingColor (_bbbd .BorderColor ).SetNonStrokingColor (_bbbd .FillColor ).Add_B ().Add_Q ();};func _dbec (_cfc LineAnnotationDef )(*_fcf .PdfObjectDictionary ,*_ff .PdfRectangle ,error ){_gdbbe :=_ff .NewXObjectForm ();_gdbbe .Resources =_ff .NewPdfPageResources ();_deec :="";if _cfc .Opacity < 1.0{_ceb :=_fcf .MakeDict ();_ceb .Set ("\u0063\u0061",_fcf .MakeFloat (_cfc .Opacity ));_baad :=_gdbbe .Resources .AddExtGState ("\u0067\u0073\u0031",_ceb );if _baad !=nil {_c .Log .Debug ("U\u006e\u0061\u0062\u006c\u0065\u0020t\u006f\u0020\u0061\u0064\u0064\u0020\u0065\u0078\u0074g\u0073\u0074\u0061t\u0065 \u0067\u0073\u0031");return nil ,nil ,_baad ;};_deec ="\u0067\u0073\u0031";};_dgab ,_adf ,_gdcf ,_aeb :=_cgcb (_cfc ,_deec );if _aeb !=nil {return nil ,nil ,_aeb ;};_aeb =_gdbbe .SetContentStream (_dgab ,nil );if _aeb !=nil {return nil ,nil ,_aeb ;};_gdbbe .BBox =_adf .ToPdfObject ();_fcd :=_fcf .MakeDict ();_fcd .Set ("\u004e",_gdbbe .ToPdfObject ());return _fcd ,_gdcf ,nil ;};
// NewSignatureFieldOpts returns a new initialized instance of options
// used to generate a signature appearance.
func NewSignatureFieldOpts ()*SignatureFieldOpts {return &SignatureFieldOpts {Font :_ff .DefaultFont (),FontSize :10,LineHeight :1,AutoSize :true ,TextColor :_ff .NewPdfColorDeviceGray (0),BorderColor :_ff .NewPdfColorDeviceGray (0),FillColor :_ff .NewPdfColorDeviceGray (1),Encoder :_fcf .NewFlateEncoder (),ImagePosition :SignatureImageLeft };};
// SignatureLine represents a line of information in the signature field appearance.
type SignatureLine struct{Desc string ;Text string ;};
// NewCheckboxField generates a new checkbox field with partial name `name` at location `rect`
// on specified `page` and with field specific options `opt`.
func NewCheckboxField (page *_ff .PdfPage ,name string ,rect []float64 ,opt CheckboxFieldOptions )(*_ff .PdfFieldButton ,error ){if page ==nil {return nil ,_fdg .New ("\u0070a\u0067e\u0020\u006e\u006f\u0074\u0020s\u0070\u0065c\u0069\u0066\u0069\u0065\u0064");};if len (name )<=0{return nil ,_fdg .New ("\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0064\u0020\u0061\u0074\u0074\u0072\u0069\u0062u\u0074e\u0020\u006e\u006f\u0074\u0020\u0073\u0070\u0065\u0063\u0069\u0066\u0069\u0065\u0064");};if len (rect )!=4{return nil ,_fdg .New ("\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0072\u0061\u006e\u0067\u0065");};_fcgd ,_aegf :=_ff .NewStandard14Font (_ff .ZapfDingbatsName );if _aegf !=nil {return nil ,_aegf ;};_fagga :=_ff .NewPdfField ();_cfg :=&_ff .PdfFieldButton {};_fagga .SetContext (_cfg );_cfg .PdfField =_fagga ;_cfg .T =_fcf .MakeString (name );_cfg .SetType (_ff .ButtonTypeCheckbox );_dacd :="\u004f\u0066\u0066";if opt .Checked {_dacd ="\u0059\u0065\u0073";};_cfg .V =_fcf .MakeName (_dacd );_abgc :=_ff .NewPdfAnnotationWidget ();_abgc .Rect =_fcf .MakeArrayFromFloats (rect );_abgc .P =page .ToPdfObject ();_abgc .F =_fcf .MakeInteger (4);_abgc .Parent =_cfg .ToPdfObject ();_fdag :=rect [2]-rect [0];_ddgg :=rect [3]-rect [1];var _cbf _d .Buffer ;_cbf .WriteString ("\u0071\u000a");_cbf .WriteString ("\u0030 \u0030\u0020\u0031\u0020\u0072\u0067\n");_cbf .WriteString ("\u0042\u0054\u000a");_cbf .WriteString ("\u002f\u005a\u0061D\u0062\u0020\u0031\u0032\u0020\u0054\u0066\u000a");_cbf .WriteString ("\u0045\u0054\u000a");_cbf .WriteString ("\u0051\u000a");_badf :=_fc .NewContentCreator ();_badf .Add_q ();_badf .Add_rg (0,0,1);_badf .Add_BT ();_badf .Add_Tf (*_fcf .MakeName ("\u005a\u0061\u0044\u0062"),12);_badf .Add_Td (0,0);_badf .Add_ET ();_badf .Add_Q ();_dca :=_ff .NewXObjectForm ();_dca .SetContentStream (_badf .Bytes (),_fcf .NewRawEncoder ());_dca .BBox =_fcf .MakeArrayFromFloats ([]float64 {0,0,_fdag ,_ddgg });_dca .Resources =_ff .NewPdfPageResources ();_dca .Resources .SetFontByName ("\u005a\u0061\u0044\u0062",_fcgd .ToPdfObject ());_badf =_fc .NewContentCreator ();_badf .Add_q ();_badf .Add_re (0,0,_fdag ,_ddgg );_badf .Add_W ().Add_n ();_badf .Add_rg (0,0,1);_badf .Translate (0,3.0);_badf .Add_BT ();_badf .Add_Tf (*_fcf .MakeName ("\u005a\u0061\u0044\u0062"),12);_badf .Add_Td (0,0);_badf .Add_Tj (*_fcf .MakeString ("\u0034"));_badf .Add_ET ();_badf .Add_Q ();_efbf :=_ff .NewXObjectForm ();_efbf .SetContentStream (_badf .Bytes (),_fcf .NewRawEncoder ());_efbf .BBox =_fcf .MakeArrayFromFloats ([]float64 {0,0,_fdag ,_ddgg });_efbf .Resources =_ff .NewPdfPageResources ();_efbf .Resources .SetFontByName ("\u005a\u0061\u0044\u0062",_fcgd .ToPdfObject ());_caba :=_fcf .MakeDict ();_caba .Set ("\u004f\u0066\u0066",_dca .ToPdfObject ());_caba .Set ("\u0059\u0065\u0073",_efbf .ToPdfObject ());_gga :=_fcf .MakeDict ();_gga .Set ("\u004e",_caba );_abgc .AP =_gga ;_abgc .AS =_fcf .MakeName (_dacd );_cfg .Annotations =append (_cfg .Annotations ,_abgc );return _cfg ,nil ;};func (_cffc *AppearanceStyle )processDA (_cbc *_ff .PdfField ,_gff *_fc .ContentStreamOperations ,_bba ,_ece *_ff .PdfPageResources ,_gfbd *_fc .ContentCreator )(*AppearanceFont ,bool ,error ){var _cdca *AppearanceFont ;var _dga bool ;if _cffc .Fonts !=nil {if _cffc .Fonts .Fallback !=nil {_cdca =_cffc .Fonts .Fallback ;};if _agg :=_cffc .Fonts .FieldFallbacks ;_agg !=nil {if _ebfd ,_eee :=_agg [_cbc .PartialName ()];_eee {_cdca =_ebfd ;}else if _afcg ,_agf :=_cbc .FullName ();_agf ==nil {if _cba ,_bdc :=_agg [_afcg ];_bdc {_cdca =_cba ;};};};_dga =_cffc .Fonts .ForceReplace ;};var _gca string ;var _dcbf float64 ;var _cbcg bool ;if _gff !=nil {for _ ,_gdeba :=range *_gff {if _gdeba .Operand =="\u0054\u0066"&&len (_gdeba .Params )==2{if _abb ,_cec :=_fcf .GetNameVal (_gdeba .Params [0]);_cec {_gca =_abb ;};if _ccfd ,_aea :=_fcf .GetNumberAsFloat (_gdeba .Params [1]);_aea ==nil {_dcbf =_ccfd ;};_cbcg =true ;continue ;};_gfbd .AddOperand (*_gdeba );};};var _gfa *AppearanceFont ;var _edfb _fcf .PdfObject ;if _dga &&_cdca !=nil {_gfa =_cdca ;}else {if _bba !=nil &&_gca !=""{if _ecea ,_daa :=_bba .GetFontByName (*_fcf .MakeName (_gca ));_daa {if _ggg ,_cdd :=_ff .NewPdfFontFromPdfObject (_ecea );_cdd ==nil {_edfb =_ecea ;_gfa =&AppearanceFont {Name :_gca ,Font :_ggg ,Size :_dcbf };}else {_c .Log .Debug ("\u0045\u0052\u0052\u004f\u0052:\u0020\u0063\u006f\u0075\u006c\u0064\u0020\u006e\u006f\u0074\u0020\u006c\u006fa\u0064\u0020\u0061\u0070\u0070\u0065\u0061\u0072\u0061\u006e\u0063\u0065\u0020\u0066\u006f\u006e\u0074\u003a\u0020\u0025\u0076",_cdd );};};};if _gfa ==nil &&_cdca !=nil {_gfa =_cdca ;};if _gfa ==nil {_ddb ,_gfdb :=_ff .NewStandard14Font ("\u0048e\u006c\u0076\u0065\u0074\u0069\u0063a");if _gfdb !=nil {return nil ,false ,_gfdb ;};_gfa =&AppearanceFont {Name :"\u0048\u0065\u006c\u0076",Font :_ddb ,Size :_dcbf };};};_abcc :=*_fcf .MakeName (_gfa .Name );if _edfb ==nil {_edfb =_gfa .Font .ToPdfObject ();};if _bba !=nil &&!_bba .HasFontByName (_abcc ){_bba .SetFontByName (_abcc ,_edfb );};if _ece !=nil &&!_ece .HasFontByName (_abcc ){_ece .SetFontByName (_abcc ,_edfb );};return _gfa ,_cbcg ,nil ;};
// CheckboxFieldOptions defines optional parameters for a checkbox field a form.
type CheckboxFieldOptions struct{Checked bool ;};func _abga (_cgf *_ff .PdfField )string {if _cgf ==nil {return "";};_cffa ,_aaga :=_cgf .GetContext ().(*_ff .PdfFieldText );if !_aaga {return _abga (_cgf .Parent );};if _cffa .DA !=nil {return _cffa .DA .Str ();};return _abga (_cffa .Parent );};func _cgea ()_fcf .StreamEncoder {return _fcf .NewFlateEncoder ()};
// SetStyle applies appearance `style` to `fa`.
func (_fcc *FieldAppearance )SetStyle (style AppearanceStyle ){_fcc ._baa =&style };func _ca (_ac CircleAnnotationDef )(*_fcf .PdfObjectDictionary ,*_ff .PdfRectangle ,error ){_fb :=_ff .NewXObjectForm ();_fb .Resources =_ff .NewPdfPageResources ();_ea :="";if _ac .Opacity < 1.0{_gee :=_fcf .MakeDict ();_gee .Set ("\u0063\u0061",_fcf .MakeFloat (_ac .Opacity ));_gee .Set ("\u0043\u0041",_fcf .MakeFloat (_ac .Opacity ));_bb :=_fb .Resources .AddExtGState ("\u0067\u0073\u0031",_gee );if _bb !=nil {_c .Log .Debug ("U\u006e\u0061\u0062\u006c\u0065\u0020t\u006f\u0020\u0061\u0064\u0064\u0020\u0065\u0078\u0074g\u0073\u0074\u0061t\u0065 \u0067\u0073\u0031");return nil ,nil ,_bb ;};_ea ="\u0067\u0073\u0031";};_gb ,_feg ,_ae ,_af :=_ba (_ac ,_ea );if _af !=nil {return nil ,nil ,_af ;};_af =_fb .SetContentStream (_gb ,nil );if _af !=nil {return nil ,nil ,_af ;};_fb .BBox =_feg .ToPdfObject ();_cge :=_fcf .MakeDict ();_cge .Set ("\u004e",_fb .ToPdfObject ());return _cge ,_ae ,nil ;};func _fbfa (_decc []*SignatureLine ,_aad *SignatureFieldOpts )(*_fcf .PdfObjectDictionary ,error ){if _aad ==nil {_aad =NewSignatureFieldOpts ();};var _gfbc error ;var _ggcf *_fcf .PdfObjectName ;_fef :=_aad .Font ;if _fef !=nil {_fbcf ,_ :=_fef .GetFontDescriptor ();if _fbcf !=nil {if _gda ,_dcg :=_fbcf .FontName .(*_fcf .PdfObjectName );_dcg {_ggcf =_gda ;};};if _ggcf ==nil {_ggcf =_fcf .MakeName ("\u0046\u006f\u006et\u0031");};}else {if _fef ,_gfbc =_ff .NewStandard14Font ("\u0048e\u006c\u0076\u0065\u0074\u0069\u0063a");_gfbc !=nil {return nil ,_gfbc ;};_ggcf =_fcf .MakeName ("\u0048\u0065\u006c\u0076");};_dbe :=_aad .FontSize ;if _dbe <=0{_dbe =10;};if _aad .LineHeight <=0{_aad .LineHeight =1;};_gecd :=_aad .LineHeight *_dbe ;_bda ,_aaad :=_fef .GetRuneMetrics (' ');if !_aaad {return nil ,_fdg .New ("\u0074\u0068e \u0066\u006f\u006et\u0020\u0064\u006f\u0065s n\u006ft \u0068\u0061\u0076\u0065\u0020\u0061\u0020sp\u0061\u0063\u0065\u0020\u0067\u006c\u0079p\u0068");};_ebbg :=_bda .Wx ;var _daaf float64 ;var _bbe []string ;for _ ,_egec :=range _decc {if _egec .Text ==""{continue ;};_bcfa :=_egec .Text ;if _egec .Desc !=""{_bcfa =_egec .Desc +"\u003a\u0020"+_bcfa ;};_bbe =append (_bbe ,_bcfa );var _efb float64 ;for _ ,_gbbe :=range _bcfa {_bafg ,_fbfd :=_fef .GetRuneMetrics (_gbbe );if !_fbfd {continue ;};_efb +=_bafg .Wx ;};if _efb > _daaf {_daaf =_efb ;};};_daaf =_daaf *_dbe /1000.0;_ebc :=float64 (len (_bbe ))*_gecd ;_cfd :=_aad .Image !=nil ;_gfae :=_aad .Rect ;if _gfae ==nil {_gfae =[]float64 {0,0,_daaf ,_ebc };if _cfd {_gfae [2]=_daaf *2;_gfae [3]=_ebc *2;};_aad .Rect =_gfae ;};_eega :=_gfae [2]-_gfae [0];_aacb :=_gfae [3]-_gfae [1];_cdaa ,_defa :=_gfae ,_gfae ;var _efe ,_gbc float64 ;if _cfd &&len (_bbe )> 0{if _aad .ImagePosition <=SignatureImageRight {_dfa :=[]float64 {_gfae [0],_gfae [1],_gfae [0]+(_eega /2),_gfae [3]};_bage :=[]float64 {_gfae [0]+(_eega /2),_gfae [1],_gfae [2],_gfae [3]};if _aad .ImagePosition ==SignatureImageLeft {_cdaa ,_defa =_dfa ,_bage ;}else {_cdaa ,_defa =_bage ,_dfa ;};}else {_gcg :=[]float64 {_gfae [0],_gfae [1],_gfae [2],_gfae [1]+(_aacb /2)};_dee :=[]float64 {_gfae [0],_gfae [1]+(_aacb /2),_gfae [2],_gfae [3]};if _aad .ImagePosition ==SignatureImageTop {_cdaa ,_defa =_dee ,_gcg ;}else {_cdaa ,_defa =_gcg ,_dee ;};};};_efe =_defa [2]-_defa [0];_gbc =_defa [3]-_defa [1];var _bec float64 ;if _aad .AutoSize {if _daaf > _efe ||_ebc > _gbc {_bfaa :=_ee .Min (_efe /_daaf ,_gbc /_ebc );_dbe *=_bfaa ;};_gecd =_aad .LineHeight *_dbe ;_bec +=(_gbc -float64 (len (_bbe ))*_gecd )/2;};_bgfb :=_fc .NewContentCreator ();_acc :=_ff .NewPdfPageResources ();_acc .SetFontByName (*_ggcf ,_fef .ToPdfObject ());if _aad .BorderSize <=0{_aad .BorderSize =0;_aad .BorderColor =_ff .NewPdfColorDeviceGray (1);};if _aad .BorderColor ==nil {_aad .BorderColor =_ff .NewPdfColorDeviceGray (1);};if _aad .FillColor ==nil {_aad .FillColor =_ff .NewPdfColorDeviceGray (1);};_bgfb .Add_q ().SetNonStrokingColor (_aad .FillColor ).SetStrokingColor (_aad .BorderColor ).Add_w (_aad .BorderSize ).Add_re (_gfae [0],_gfae [1],_eega ,_aacb ).Add_B ().Add_Q ();if _aad .WatermarkImage !=nil {_dcf :=[]float64 {_gfae [0],_gfae [1],_gfae [2],_gfae [3]};_egag ,_ccd ,_aeed :=_ccbg (_aad .WatermarkImage ,"\u0049\u006d\u0061\u0067\u0065\u0057\u0061\u0074\u0065r\u006d\u0061\u0072\u006b",_aad ,_dcf ,_bgfb );if _aeed !=nil {return nil ,_aeed ;};_acc .SetXObjectImageByName (*_egag ,_ccd );};_bgfb .Add_q ();_bgfb .Translate (_defa [0],_defa [3]-_gecd -_bec );_bgfb .Add_BT ();_fbbg :=_fef .Encoder ();for _ ,_gbgfd :=range _bbe {var _gcf []byte ;for _ ,_bgeb :=range _gbgfd {if _a .IsSpace (_bgeb ){if len (_gcf )> 0{_bgfb .SetNonStrokingColor (_aad .TextColor ).Add_Tf (*_ggcf ,_dbe ).Add_TL (_gecd ).Add_TJ ([]_fcf .PdfObject {_fcf .MakeStringFromBytes (_gcf )}...);_gcf =nil ;};_bgfb .Add_Tf (*_ggcf ,_dbe ).Add_TL (_gecd ).Add_TJ ([]_fcf .PdfObject {_fcf .MakeFloat (-_ebbg )}...);}else {_gcf =append (_gcf ,_fbbg .Encode (string (_bgeb ))...);};};if len (_gcf )> 0{_bgfb .SetNonStrokingColor (_aad .TextColor ).Add_Tf (*_ggcf ,_dbe ).Add_TL (_gecd ).Add_TJ ([]_fcf .PdfObject {_fcf .MakeStringFromBytes (_gcf )}...);};_bgfb .Add_Td (0,-_gecd );};_bgfb .Add_ET ();_bgfb .Add_Q ();if _cfd {_eaaa ,_cag ,_ecfb :=_ccbg (_aad .Image ,"\u0049\u006d\u0061\u0067\u0065\u0053\u0069\u0067\u006ea\u0074\u0075\u0072\u0065",_aad ,_cdaa ,_bgfb );if _ecfb !=nil {return nil ,_ecfb ;};_acc .SetXObjectImageByName (*_eaaa ,_cag );};_bgee :=_ff .NewXObjectForm ();_bgee .Resources =_acc ;_bgee .BBox =_fcf .MakeArrayFromFloats (_gfae );_bgee .SetContentStream (_bgfb .Bytes (),_cgea ());_afbe :=_fcf .MakeDict ();_afbe .Set ("\u004e",_bgee .ToPdfObject ());return _afbe ,nil ;};
// AppearanceFont represents a font used for generating the appearance of a
// field in the filling/flattening process.
type AppearanceFont struct{
// Name represents the name of the font which will be added to the
// AcroForm resources (DR).
Name string ;
// Font represents the actual font used for the field appearance.
Font *_ff .PdfFont ;
// Size represents the size of the font used for the field appearance.
// If size is 0, a default font size will be used.
// The default font size is calculated using the available annotation
// height and the AutoFontSizeFraction of the AppearanceStyle.
Size float64 ;};const (_eb quadding =0;_de quadding =1;_ec quadding =2;);func _cgcb (_cee LineAnnotationDef ,_fgc string )([]byte ,*_ff .PdfRectangle ,*_ff .PdfRectangle ,error ){_ecag :=_g .Line {X1 :0,Y1 :0,X2 :_cee .X2 -_cee .X1 ,Y2 :_cee .Y2 -_cee .Y1 ,LineColor :_cee .LineColor ,Opacity :_cee .Opacity ,LineWidth :_cee .LineWidth ,LineEndingStyle1 :_cee .LineEndingStyle1 ,LineEndingStyle2 :_cee .LineEndingStyle2 };_ddga ,_bcg ,_fagf :=_ecag .Draw (_fgc );if _fagf !=nil {return nil ,nil ,nil ,_fagf ;};_dfdb :=&_ff .PdfRectangle {};_dfdb .Llx =_cee .X1 +_bcg .Llx ;_dfdb .Lly =_cee .Y1 +_bcg .Lly ;_dfdb .Urx =_cee .X1 +_bcg .Urx ;_dfdb .Ury =_cee .Y1 +_bcg .Ury ;return _ddga ,_bcg ,_dfdb ,nil ;};func _agbce (_ead RectangleAnnotationDef ,_gac string )([]byte ,*_ff .PdfRectangle ,*_ff .PdfRectangle ,error ){_aeff :=_g .Rectangle {X :0,Y :0,Width :_ead .Width ,Height :_ead .Height ,FillEnabled :_ead .FillEnabled ,FillColor :_ead .FillColor ,BorderEnabled :_ead .BorderEnabled ,BorderWidth :2*_ead .BorderWidth ,BorderColor :_ead .BorderColor ,Opacity :_ead .Opacity };_fdbb ,_aadf ,_daf :=_aeff .Draw (_gac );if _daf !=nil {return nil ,nil ,nil ,_daf ;};_facg :=&_ff .PdfRectangle {};_facg .Llx =_ead .X +_aadf .Llx ;_facg .Lly =_ead .Y +_aadf .Lly ;_facg .Urx =_ead .X +_aadf .Urx ;_facg .Ury =_ead .Y +_aadf .Ury ;return _fdbb ,_aadf ,_facg ,nil ;};
// NewTextField generates a new text field with partial name `name` at location
// specified by `rect` on given `page` and with field specific options `opt`.
func NewTextField (page *_ff .PdfPage ,name string ,rect []float64 ,opt TextFieldOptions )(*_ff .PdfFieldText ,error ){if page ==nil {return nil ,_fdg .New ("\u0070a\u0067e\u0020\u006e\u006f\u0074\u0020s\u0070\u0065c\u0069\u0066\u0069\u0065\u0064");};if len (name )<=0{return nil ,_fdg .New ("\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0064\u0020\u0061\u0074\u0074\u0072\u0069\u0062u\u0074e\u0020\u006e\u006f\u0074\u0020\u0073\u0070\u0065\u0063\u0069\u0066\u0069\u0065\u0064");};if len (rect )!=4{return nil ,_fdg .New ("\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0072\u0061\u006e\u0067\u0065");};_fdca :=_ff .NewPdfField ();_acb :=&_ff .PdfFieldText {};_fdca .SetContext (_acb );_acb .PdfField =_fdca ;_acb .T =_fcf .MakeString (name );if opt .MaxLen > 0{_acb .MaxLen =_fcf .MakeInteger (int64 (opt .MaxLen ));};if len (opt .Value )> 0{_acb .V =_fcf .MakeString (opt .Value );};_fbfc :=_ff .NewPdfAnnotationWidget ();_fbfc .Rect =_fcf .MakeArrayFromFloats (rect );_fbfc .P =page .ToPdfObject ();_fbfc .F =_fcf .MakeInteger (4);_fbfc .Parent =_acb .ToPdfObject ();_acb .Annotations =append (_acb .Annotations ,_fbfc );return _acb ,nil ;};func _dac (_dcb *_fc .ContentCreator ,_gfc AppearanceStyle ,_dae ,_dgd float64 ){_dcb .Add_q ().Add_re (0,0,_dae ,_dgd ).Add_re (0,_dgd /2,_dae ,_dgd /2).Add_re (0,0,_dae ,_dgd ).Add_re (_dae /2,0,_dae /2,_dgd ).Add_w (_gfc .BorderSize ).SetStrokingColor (_gfc .BorderColor ).SetNonStrokingColor (_gfc .FillColor ).Add_B ().Add_Q ();};