2021-04-23 20:00:00 +00:00
//
// 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/
2022-02-25 19:20:45 +00:00
package convert ; import ( _ed "bytes" ; _a "errors" ; _c "github.com/unidoc/unioffice/common/logger" ; _fb "github.com/unidoc/unioffice/common/tempstorage" ; _gg "github.com/unidoc/unioffice/document" ; _ecb "github.com/unidoc/unioffice/internal/convertutils" ; _fcd "github.com/unidoc/unioffice/internal/formatutils" ; _ga "github.com/unidoc/unioffice/measurement" ; _ba "github.com/unidoc/unioffice/schema/soo/dml" ; _d "github.com/unidoc/unioffice/schema/soo/dml/chart" ; _fc "github.com/unidoc/unioffice/schema/soo/dml/picture" ; _ecd "github.com/unidoc/unioffice/schema/soo/ofc/sharedTypes" ; _edg "github.com/unidoc/unioffice/schema/soo/wml" ; _ggd "github.com/unidoc/unioffice/schema/urn/schemas_microsoft_com/vml" ; _ggb "github.com/unidoc/unioffice/vmldrawing" ; _ec "github.com/unidoc/unipdf/v3/creator" ; _cg "github.com/unidoc/unipdf/v3/model" ; _e "io/ioutil" ; _f "regexp" ; _g "strconv" ; _ag "strings" ; ) ; func _afccb ( _gcff * _gg . Document , _fffa string , _cgab * _edg . CT_TblPr , _adeb * _edg . CT_PPrGeneral , _gaad * _edg . CT_RPr ) ( * _edg . CT_TblPr , * _edg . CT_PPrGeneral , * _edg . CT_RPr ) { if _cgab . TblStyle != nil { _gdecf := _gcff . GetStyleByID ( _fffa ) ; if _dggb := _gdecf . X ( ) ; _dggb != nil { if _dffe := _dggb . TblPr ; _dffe != nil { _fgae := _cgab . TblBorders ; var _dce * _edg . CT_TblBorders ; if _dffe . TblBorders != nil { _dce = _dffe . TblBorders ; } ; if _fgae == nil { _fgae = _dce ; } else { if _dce != nil { if _fgae . Top == nil { _fgae . Top = _dce . Top ; } ; if _fgae . Bottom == nil { _fgae . Bottom = _dce . Bottom ; } ; if _fgae . Left == nil { _fgae . Left = _dce . Left ; } ; if _fgae . Right == nil { _fgae . Right = _dce . Right ; } ; if _fgae . InsideH == nil { _fgae . InsideH = _dce . InsideH ; } ; if _fgae . InsideV == nil { _fgae . InsideV = _dce . InsideV ; } ; } ; } ; _cgab . TblBorders = _fgae ; _adbc := _cgab . Shd ; _cgce := _dffe . Shd ; if _adbc == nil { _adbc = _cgce ; } else { if _cgce != nil && _adbc . FillAttr == nil { _adbc . FillAttr = _cgce . FillAttr ; } ; } ; _cgab . Shd = _adbc ; _gegab := _cgab . TblCellMar ; _fffg := _dffe . TblCellMar ; if _gegab == nil { _gegab = _fffg ; } else { if _fffg != nil && _gegab . Left == nil { _gegab . Left = _fffg . Left ; } ; } ; _cgab . TblCellMar = _gegab ; if _cgab . TblInd == nil { _cgab . TblInd = _dffe . TblInd ; } ; if _cgab . Jc == nil { _cgab . Jc = _dffe . Jc ; } ; } ; if _dggb . PPr != nil { _adeb = _bcaa ( _dggb . PPr , _adeb ) ; } ; if _dggb . RPr != nil { _gaad = _egfe ( _dggb . RPr , _gaad ) ; } ; if _ececd := _dggb . BasedOn ; _ececd != nil { return _afccb ( _gcff , _ececd . ValAttr , _cgab , _adeb , _gaad ) ; } ; } ; } ; return _cgab , _adeb , _gaad ; } ; type word struct { _ace [ ] * symbol ; _edd float64 ; _gfe float64 ; _eg bool ; } ; var _cead = [ ] romanMatch { romanMatch { 1000 , "\u006d" } , romanMatch { 900 , "\u0063\u006d" } , romanMatch { 500 , "\u0064" } , romanMatch { 400 , "\u0063\u0064" } , romanMatch { 100 , "\u0063" } , romanMatch { 90 , "\u0078\u0063" } , romanMatch { 50 , "\u006c" } , romanMatch { 40 , "\u0078\u006c" } , romanMatch { 10 , "\u0078" } , romanMatch { 9 , "\u0069\u0078" } , romanMatch { 5 , "\u0076" } , romanMatch { 4 , "\u0069\u0076" } , romanMatch { 1 , "\u0069" } } ; func ( _faag * convertContext ) addCurrentWordToParagraph ( ) { for { _ecde := _faag . _eebc . _cc ; _abbc := _ecde + _faag . _abbf . _gfe ; if _abbc > _faag . _eebc . _ca { _faag . newLine ( ) ; } ; _gefc := _faag . _eeeg . _bb + _faag . _eebc . _dg ; _bdde := _gefc + _faag . _eebc . _cef ; _egcfg := false ; _ggc := append ( _faag . _gcda . _ef , _faag . _eeeg . _ged ... ) ; for _ , _badf := range _ggc { _agga := _badf . _acc ; if ( ( _gefc > _agga . Top && _gefc < _agga . Bottom ) || ( _bdde > _agga . Top && _bdde < _agga . Bottom ) ) && ( ( _ecde > _agga . Left && _ecde < _agga . Right ) || ( _abbc > _agga . Left && _abbc < _agga . Right ) ) { _egcfg = true ; if _faag . _eebc . _cc < _agga . Right { _faag . _eaac . _dc = _agga . Left ; _faag . _eebc . _cc = _agga . Right ; _faag . newSpan ( ) ; } ; } ; } ; if ! _egcfg { break ; } ; } ; if ! _faag . _abbf . _eg || len ( _faag . _eaac . _aaaa ) > 0 { _faag . _abbf . _edd = _faag . _eebc . _cc ; _faag . _eaac . _aaaa = append ( _faag . _eaac . _aaaa , _faag . _abbf ) ; _faag . _eebc . _cc += _faag . _abbf . _gfe ; for _ , _ccf := range _faag . _abbf . _ace { _faag . adjustHeights ( _ccf . _eff ) ; } ; } ; } ; func ( _cgf * convertContext ) drawPages ( ) { for _ , _adf := range _cgf . _afdbf { _cgf . _baba . NewPage ( ) ; _cgf . drawPage ( _adf ) ; } ; } ; func _agf ( _cfg * _ec . Creator , _eb * block ) { _eb . _ee . SetPos ( _eb . _
2022-01-15 21:17:38 +00:00
2022-02-25 19:20:45 +00:00
// ConvertToPdfWithOptions convert the document to PDF with file given options.
func ConvertToPdfWithOptions ( d * _gg . Document , opts * Options ) * _ec . Creator { var _cfab map [ string ] string ; if opts != nil { if opts . ProcessFields { _cfab = _abaf ( d ) ; } ; if len ( opts . FontFiles ) > 0 { _gfgeea := _ecb . RegisterFontsFromFiles ( opts . FontFiles ) ; if _gfgeea != nil { _c . Log . Debug ( "\u0046\u0061\u0069\u006c t\u006f\u0020\u006c\u006f\u0061\u0064\u0020\u0066\u006f\u006e\u0074\u0073\u003a\u0020%\u0076" , opts . FontDirectory ) ; } ; } ; if opts . FontDirectory != "" { _cgfc := _ecb . RegisterFontsFromDirectory ( opts . FontDirectory ) ; if _cgfc != nil { _c . Log . Debug ( "\u0046\u0061\u0069l\u0020\u0074\u006f\u0020l\u006f\u0061\u0064\u0020\u0066\u006f\u006et\u0020\u0064\u0069\u0072\u0065\u0063\u0074\u006f\u0072\u0079\u003a\u0020\u0025\u0076" , _cgfc . Error ( ) ) ; } ; } ; } ; var _dbbe * _edg . CT_PPrGeneral ; var _gebg * _edg . CT_RPr ; if _acee := d . Styles . X ( ) . DocDefaults ; _acee != nil { if _caa := _acee . PPrDefault ; _caa != nil { _dbbe = _caa . PPr ; } ; if _feef := _acee . RPrDefault ; _feef != nil { _gebg = _feef . RPr ; } ; } ; _ecee , _bfge := _agadgg ( 210 ) , _agadgg ( 297 ) ; _eacf := float64 ( _ga . Inch * 1 ) ; _agaa , _bbeb , _faca , _cfbd := _eacf , _eacf , _eacf , _eacf ; var _eaca , _deca float64 ; if _aagd := d . BodySection ( ) . X ( ) ; _aagd != nil { if _cagfe := _aagd . PgMar ; _cagfe != nil { if _cagfe . LeftAttr . ST_UnsignedDecimalNumber != nil { _agaa = _ecb . PointsFromTwips ( int64 ( * _cagfe . LeftAttr . ST_UnsignedDecimalNumber ) ) ; } ; if _cagfe . LeftAttr . ST_UnsignedDecimalNumber != nil { _bbeb = _ecb . PointsFromTwips ( int64 ( * _cagfe . RightAttr . ST_UnsignedDecimalNumber ) ) ; } ; if _cagfe . TopAttr . Int64 != nil { _faca = _ecb . PointsFromTwips ( * _cagfe . TopAttr . Int64 ) ; } ; if _cagfe . BottomAttr . Int64 != nil { _cfbd = _ecb . PointsFromTwips ( * _cagfe . BottomAttr . Int64 ) ; } ; if _cagfe . HeaderAttr . ST_UnsignedDecimalNumber != nil { _eaca = _ecb . PointsFromTwips ( int64 ( * _cagfe . HeaderAttr . ST_UnsignedDecimalNumber ) ) ; } ; if _cagfe . FooterAttr . ST_UnsignedDecimalNumber != nil { _deca = _cfbd - _ecb . PointsFromTwips ( int64 ( * _cagfe . FooterAttr . ST_UnsignedDecimalNumber ) ) ; } ; } ; if _gegb := _aagd . PgSz ; _gegb != nil { if _gegb . WAttr != nil { _ecee = _ecb . PointsFromTwips ( int64 ( * _gegb . WAttr . ST_UnsignedDecimalNumber ) ) ; } ; if _gegb . HAttr != nil { _bfge = _ecb . PointsFromTwips ( int64 ( * _gegb . HAttr . ST_UnsignedDecimalNumber ) ) ; } ; } ; } ; if d . Settings . X ( ) . DefaultTabStop == nil { _gegf = _agadgg ( 12.7 ) ; } else { _gegf = _ecb . PointsFromTwips ( int64 ( * d . Settings . X ( ) . DefaultTabStop . ValAttr . ST_UnsignedDecimalNumber ) ) ; } ; _fcba := _ec . New ( ) ; _fcba . SetPageSize ( _ec . PageSize { _ecee , _bfge } ) ; _fcba . SetPageMargins ( _agaa , _bbeb , _faca , _cfbd ) ; for _ , _gcac := range d . Headers ( ) { _bcbe := & convertContext { _baba : _fcba , _fbfe : d , _fdba : _dbbe , _bebc : _gebg , _abeb : true , _aabg : _agaa , _dfdf : _eaca , _dace : opts } ; _bcbe . addRelativeCBCs ( _gcac . X ( ) . EG_ContentBlockContent ) ; } ; for _ , _agbd := range d . Footers ( ) { _ddb := & convertContext { _baba : _fcba , _fbfe : d , _fdba : _dbbe , _bebc : _gebg , _aaad : true , _aabg : _agaa , _ffceg : _deca , _dace : opts } ; _ddb . addRelativeCBCs ( _agbd . X ( ) . EG_ContentBlockContent ) ; } ; _eegc := & convertContext { _baba : _fcba , _fbfe : d , _fdba : _dbbe , _bebc : _gebg , _ccad : & _ecb . Rectangle { Top : _faca , Bottom : _bfge - _cfbd , Left : _agaa , Right : _ecee - _bbeb } , _gab : [ ] note { } , _eece : map [ int64 ] map [ int64 ] int64 { } , _agaf : _cfab , _dace : opts } ; for _gba , _bdgb := range d . X ( ) . Body . EG_BlockLevelElts { var _fecdg [ ] * _edg . EG_ContentBlockContent ; if _gba < len ( d . X ( ) . Body . EG_BlockLevelElts ) - 1 { _ecfd := d . X ( ) . Body . EG_BlockLevelElts [ _gba + 1 ] ; _fecdg = _ecfd . EG_ContentBlockContent ; } ; _eegc . addAbsoluteCBCs ( _bdgb . EG_ContentBlockContent , _fecdg ) ; } ; _eegc . addEndnotes ( ) ; _eegc . alignSymbolsVertically ( ) ; _eegc . drawPages ( ) ; return _fcba ; } ; func ( _ffg * convertContext ) addParagraphWithTable ( _dccb _ec . Table , _ebef , _afac float64 ) { _ffg . newParagraph ( ) ; _ffg . _eeeg . _fga = & _ecb . Rectangle { Top : _agadgg ( 2 ) , Bottom : _agadgg ( 2 ) , Left : 0 , Right : 0 } ; _ffg . _eeeg . _db = & tableWrapper { _fd : & _dccb , _de : _ebef } ; _ffg . _eeeg . _aaa = _afac ; _ffg . _eeeg . _ggf = _dccb . Height ( ) ; _ffg . determineParagraphBounds ( ) ; _ffg . addCurrentParagraphToCurrentPage ( ) ; } ; var _dd = _agadgg ( 6 ) ; fu
2022-01-15 21:17:38 +00:00
// FontStyle represents a kind of font styling. It can be FontStyle_Regular, FontStyle_Bold, FontStyle_Italic and FontStyle_BoldItalic.
2022-02-25 19:20:45 +00:00
type FontStyle = _ecb . FontStyle ; func ( _faaf * convertContext ) addInlineSymbol ( _eba * symbol ) { if len ( _faaf . _abbf . _ace ) > 0 { _ecbc := _faaf . _abbf . _ace [ len ( _faaf . _abbf . _ace ) - 1 ] . _feg ; if _ecbc == "\u0020" { _faaf . addCurrentWordToParagraph ( ) ; _faaf . newWord ( ) ; } ; } ; _faaf . _abbf . _ace = append ( _faaf . _abbf . _ace , _eba ) ; _eba . _cf = _faaf . _abbf . _gfe ; _faaf . _abbf . _gfe += _eba . _cgg ; _faaf . _abbf . _eg = false ; _faaf . adjustHeights ( _eba . _eff ) ; } ; func ( _gcbe * convertContext ) addSeparator ( ) { _gcbe . newParagraph ( ) ; _gcbe . _eeeg . _ff = true ; _gcbe . _eeeg . _ggf = _dd ; if _gcbe . currentParagraphOverflowsCurrentPage ( ) { _gcbe . moveCurrentParagraphToNewPage ( ) ; } ; _gcbe . addCurrentParagraphToCurrentPage ( ) ; } ; func _cebd ( _fefe , _aceeg * _edg . CT_HpsMeasure ) float64 { var _fege float64 ; _eacc := _ecb . DefaultFontSize ; if _fefe != nil { _fege = float64 ( * _fefe . ValAttr . ST_UnsignedDecimalNumber ) ; } else if _aceeg != nil { _fege = float64 ( * _aceeg . ValAttr . ST_UnsignedDecimalNumber ) ; } ; if _fege != 0 { _eacc = _fege / 24 * _ecb . DefaultFontSize ; } ; return _eacc ; } ; func ( _aec * convertContext ) alignParagraph ( ) { _eeb := _aec . _eeeg ; if _eeb . _faa == _ec . TextAlignmentLeft { return ; } ; _becf := len ( _eeb . _cea ) - 1 ; for _ebba , _ebd := range _eeb . _cea { _eee := len ( _ebd . _efe ) - 1 ; for _eca , _abg := range _ebd . _efe { _ada := true ; _gdfa := len ( _abg . _aaaa ) ; _bcg := 0.0 ; for _daa := len ( _abg . _aaaa ) - 1 ; _daa >= 0 ; _daa -- { _gfa := _abg . _aaaa [ _daa ] ; if _ada && _gfa . _eg { _gdfa = _daa ; } else { _ada = false ; for _ , _gdd := range _gfa . _ace { _bcg += _gdd . _cgg ; } ; } ; } ; _abg . _aaaa = _abg . _aaaa [ : _gdfa ] ; _adb := _abg . _dc - _abg . _ffd - _bcg ; switch _eeb . _faa { case _ec . TextAlignmentRight : _abg . moveRight ( _adb ) ; case _ec . TextAlignmentCenter : _abg . moveRight ( _adb / 2 ) ; case _ec . TextAlignmentJustify : if _ebba != _becf || _eca != _eee { _cbb := [ ] * word { } ; for _ , _cfb := range _abg . _aaaa { if _cfb . _eg { _cbb = append ( _cbb , _cfb ) ; } ; } ; _acb := _adb / float64 ( len ( _cbb ) ) ; for _ , _gbe := range _cbb { _gbe . _gfe += _acb ; } ; var _gad * word ; for _ , _eac := range _abg . _aaaa { if _gad != nil { _eac . _edd = _gad . _edd + _gad . _gfe ; } ; _gad = _eac ; } ; } ; } ; } ; } ; } ; type image struct { _dec * _ec . Image ; _ae float64 ; _gcb float64 ; } ; func ( _fdff * convertContext ) combinePPrWithStyles ( _eeeb * _edg . CT_PPr ) ( * _edg . CT_PPr , * prefix ) { if _eeeb == nil { return nil , nil ; } ; var _ddgdb * prefix ; if _eeeb != nil && _eeeb . NumPr != nil { if _fccf , _gdbbd := _eeeb . NumPr . Ilvl , _eeeb . NumPr . NumId ; _fccf != nil && _gdbbd != nil { if _ggde := _fdff . _fbfe . GetNumberingLevelByIds ( _gdbbd . ValAttr , _fccf . ValAttr ) . X ( ) ; _ggde != nil { _eeeb = _dgad ( _eeeb , _ggde . PPr , _ggde . RPr ) ; if _cfbab := _ggde . NumFmt ; _cfbab != nil { if _dabg := _cfbab . ValAttr ; _dabg == _edg . ST_NumberFormatBullet || _dabg == _edg . ST_NumberFormatDecimal { var _bfga [ ] float64 ; if _bcdb := _eeeb . Tabs ; _bcdb != nil && len ( _bcdb . Tab ) != 0 { for _ , _ecef := range _bcdb . Tab { _bfga = append ( _bfga , _ecb . PointsFromTwips ( * _ecef . PosAttr . Int64 ) ) ; } ; } ; _ddgdb = & prefix { _egbcb : _bfga , _eadc : true } ; if _dabg == _edg . ST_NumberFormatBullet { if _gbc := _ggde . LvlText ; _gbc != nil { if _ecdf := _gbc . ValAttr ; _ecdf != nil && * _ecdf != "" { _ddgdb . _bfdc = * _ecdf ; _ddgdb . _bbfg = true ; } ; } ; } else { _dgf , _efff := _gdbbd . ValAttr , _fccf . ValAttr ; if _ , _agba := _fdff . _eece [ _dgf ] ; ! _agba { _fdff . _eece [ _dgf ] = map [ int64 ] int64 { } ; } ; if _ , _acff := _fdff . _eece [ _dgf ] [ _efff ] ; ! _acff { _fdff . _eece [ _dgf ] [ _efff ] = 1 ; } ; _gffdf := _fdff . _eece [ _dgf ] [ _efff ] ; _badb := _fcd . FormatNumberingText ( int64 ( _gffdf ) , _ggde . IlvlAttr , * _ggde . LvlText . ValAttr , _ggde . NumFmt , _fdff . _eece [ _dgf ] ) ; _fdff . _eece [ _dgf ] [ _efff ] ++ ; _ddgdb . _bfdc = _badb ; } ; } ; } ; } ; } ; } ; if _eeeb != nil && _eeeb . PStyle != nil { _bcee , _ebge := _fdff . getStyleProps ( _eeeb . PStyle . ValAttr , _gg . Style { } ) ; _eeeb = _dgad ( _eeeb , _bcee , _ebge ) ; } ; return _eeeb , _ddgdb ; } ; func _bcaa ( _abfg , _eggf * _edg . CT_PPrGeneral ) * _edg . CT_PPrGeneral { if _abfg == nil { return _abfg ; } ; if _eggf == nil { return _abfg ; } ; if _abfg . PStyle == nil { _abfg . PStyle = _eggf . PStyle ; } ; if _abfg . KeepNext == nil { _abfg . KeepNext = _eggf . KeepNext ; } ; if _abfg . KeepLines == nil { _abfg . KeepLines = _eggf . KeepLines ; } ; if _a
2021-08-23 20:44:48 +00:00
2022-02-25 19:20:45 +00:00
// RegisterFont makes a PdfFont accessible for using in converting to PDF.
func RegisterFont ( name string , style FontStyle , font * _cg . PdfFont ) { _ecb . RegisterFont ( name , style , font ) ; } ; func _egfe ( _facg , _ecdg * _edg . CT_RPr ) * _edg . CT_RPr { if _facg == nil { return _ecdg ; } ; if _ecdg == nil { return _facg ; } ; if _facg . RStyle == nil { _facg . RStyle = _ecdg . RStyle ; } ; if _facg . RFonts == nil { _facg . RFonts = _ecdg . RFonts ; } ; if _facg . B == nil { _facg . B = _ecdg . B ; } ; if _facg . BCs == nil { _facg . BCs = _ecdg . BCs ; } ; if _facg . I == nil { _facg . I = _ecdg . I ; } ; if _facg . ICs == nil { _facg . ICs = _ecdg . ICs ; } ; if _facg . Caps == nil { _facg . Caps = _ecdg . Caps ; } ; if _facg . SmallCaps == nil { _facg . SmallCaps = _ecdg . SmallCaps ; } ; if _facg . Strike == nil { _facg . Strike = _ecdg . Strike ; } ; if _facg . Dstrike == nil { _facg . Dstrike = _ecdg . Dstrike ; } ; if _facg . Outline == nil { _facg . Outline = _ecdg . Outline ; } ; if _facg . Shadow == nil { _facg . Shadow = _ecdg . Shadow ; } ; if _facg . Emboss == nil { _facg . Emboss = _ecdg . Emboss ; } ; if _facg . Imprint == nil { _facg . Imprint = _ecdg . Imprint ; } ; if _facg . NoProof == nil { _facg . NoProof = _ecdg . NoProof ; } ; if _facg . SnapToGrid == nil { _facg . SnapToGrid = _ecdg . SnapToGrid ; } ; if _facg . Vanish == nil { _facg . Vanish = _ecdg . Vanish ; } ; if _facg . WebHidden == nil { _facg . WebHidden = _ecdg . WebHidden ; } ; if _facg . Color == nil { _facg . Color = _ecdg . Color ; } ; if _facg . Spacing == nil { _facg . Spacing = _ecdg . Spacing ; } ; if _facg . W == nil { _facg . W = _ecdg . W ; } ; if _facg . Kern == nil { _facg . Kern = _ecdg . Kern ; } ; if _facg . Position == nil { _facg . Position = _ecdg . Position ; } ; if _facg . Sz == nil { _facg . Sz = _ecdg . Sz ; } ; if _facg . SzCs == nil { _facg . SzCs = _ecdg . SzCs ; } ; if _facg . Highlight == nil { _facg . Highlight = _ecdg . Highlight ; } ; if _facg . U == nil { _facg . U = _ecdg . U ; } ; if _facg . Effect == nil { _facg . Effect = _ecdg . Effect ; } ; if _facg . Bdr == nil { _facg . Bdr = _ecdg . Bdr ; } ; if _facg . Shd == nil { _facg . Shd = _ecdg . Shd ; } ; if _facg . FitText == nil { _facg . FitText = _ecdg . FitText ; } ; if _facg . VertAlign == nil { _facg . VertAlign = _ecdg . VertAlign ; } ; if _facg . Rtl == nil { _facg . Rtl = _ecdg . Rtl ; } ; if _facg . Cs == nil { _facg . Cs = _ecdg . Cs ; } ; if _facg . Em == nil { _facg . Em = _ecdg . Em ; } ; if _facg . Lang == nil { _facg . Lang = _ecdg . Lang ; } ; if _facg . EastAsianLayout == nil { _facg . EastAsianLayout = _ecdg . EastAsianLayout ; } ; if _facg . SpecVanish == nil { _facg . SpecVanish = _ecdg . SpecVanish ; } ; if _facg . OMath == nil { _facg . OMath = _ecdg . OMath ; } ; if _facg . RPrChange == nil { _facg . RPrChange = _ecdg . RPrChange ; } ; return _facg ; } ; func init ( ) { _gcbd = _f . MustCompile ( "\u0053E\u0054 \u0028\u002e\u002b\u0029\u0020\u0022\u0028\u002e\u002b\u0029\u0022" ) ; _bga = _f . MustCompile ( "\u0052\u0045\u0046\u0020\u0028\u002e\u002b\u003f\u0029\u0020" ) ; } ; type paragraph struct { _aaa float64 ; _fga * _ecb . Rectangle ; _agb float64 ; _ddc float64 ; _df float64 ; _bb float64 ; _ggf float64 ; _faa _ec . TextAlignment ; _ge float64 ; _cea [ ] * line ; _db * tableWrapper ; _aae [ ] * image ; _gfc [ ] * image ; _gea [ ] * block ; _ecf [ ] * block ; _ddd [ ] * note ; _edb float64 ; _ged [ ] * zoneToSkip ; _fab float64 ; _ff bool ; _abe [ ] * borderLine ; } ; const _fe = 0.67 ; var _ab = _agadgg ( 1.9 ) ; type tableWrapper struct { _fd * _ec . Table ; _de float64 ; } ; type line struct { _dg float64 ; _cde float64 ; _ca float64 ; _cc float64 ; _cef float64 ; _efe [ ] * span ; } ; type note struct { _fa string ; _aa [ ] * _edg . EG_BlockLevelElts ; _aad * _ec . Block ; } ; func ( _fbgbd * convertContext ) addRelativeEGPC ( _bgcf [ ] * _edg . EG_PContent , _fcdf * _edg . CT_PPr , _eeac * prefix ) { if len ( _bgcf ) == 0 { _fbgbd . _aed . Append ( "\u000d" ) ; return ; } ; if _eeac != nil { _fbgbd . _eade = _eeac ; } ; for _ , _gdbbe := range _bgcf { for _ , _fccc := range _gdbbe . FldSimple { if _fccc != nil { _fbgbd . addRelativeEGPC ( _fccc . EG_PContent , _fcdf , _eeac ) ; } ; } ; if _gaac := _gdbbe . Hyperlink ; _gaac != nil { _fbgbd . _effd = _gaac ; _fbgbd . addRelativeCRC ( _gaac . EG_ContentRunContent , _fcdf ) ; } ; _fbgbd . _effd = nil ; _fbgbd . addRelativeCRC ( _gdbbe . EG_ContentRunContent , _fcdf ) ; } ; } ; func ( _egbg * convertContext ) addRelativeRIC ( _fcfb * _edg . EG_RunInnerContent , _gecd * _edg . CT_RPr ) { var _bfec * _ec . TextChunk ; var _dgaf , _ddgd bool ; _aagba := false ; if _fcfb == nil { if _egbg . _eade != nil { _dgaf = true ; _bfec = _egbg . _aed . Append
2021-07-30 17:03:26 +00:00
2022-01-15 21:17:38 +00:00
// Options contains the options for convert process -
// e.g ProcessFields is when document contains fields
// and the value need to be processed also.
type Options struct {
2021-07-30 17:03:26 +00:00
2022-02-25 19:20:45 +00:00
// ProcessFields process the document fields if set to true, default is `false`.
ProcessFields bool ;
// EnableFontSubsetting process document with subsetting font to reduce size result.
// Default value is `true`.
EnableFontSubsetting bool ;
// FontFiles location of fonts for convert process.
FontFiles [ ] string ;
// FontDirectory location of font directory for convert process.
// This will load all font files inside directoy if set
// we recommend to use FontFiles for better performance.
FontDirectory string ; } ; func _deac ( _ddgba * _gg . Document , _fbcd string ) [ ] * _edg . CT_TblStylePr { _aded := _ddgba . GetStyleByID ( _fbcd ) ; var _ddfd [ ] * _edg . CT_TblStylePr ; if _gcea := _aded . X ( ) ; _gcea != nil { if _dadf := _gcea . BasedOn ; _dadf != nil { _deac ( _ddgba , _dadf . ValAttr ) ; } ; if len ( _gcea . TblStylePr ) > 0 { _ddfd = _gcea . TblStylePr ; } ; } ; return _ddfd ; } ; type block struct { _ee * _ec . Block ; _ecbg float64 ; _eccg float64 ; _edde bool ; _gdb float64 ; _ad _ec . Color ; } ; func ( _bdeb * convertContext ) makeRunStyle ( _aedf * _edg . CT_RPr , _ecbgg , _agec , _dafa , _cbac , _baff bool ) ( _ec . TextStyle , bool , bool , * _ec . Color ) { var _faed * _ec . Color ; _fbbd := _bdeb . _baba . NewTextStyle ( ) ; if _aedf != nil { _fabe := _ecb . FontStyle_Regular ; _fbd := _aabf ( _aedf . B ) ; _dbadg := _aabf ( _aedf . I ) ; if _fbd && _dbadg { _fabe = _ecb . FontStyle_BoldItalic ; } else if _fbd { _fabe = _ecb . FontStyle_Bold ; } else if _dbadg { _fabe = _ecb . FontStyle_Italic ; } ; if _cbac { _fbbd . Font = _ecb . AssignStdFontByName ( _fbbd , "\u0053\u0079\u006d\u0062\u006f\u006c" ) ; } else { _gbfb := "\u0064e\u0066\u0061\u0075\u006c\u0074" ; if _cfca := _aedf . RFonts ; _cfca != nil { if _efba := _cfca . AsciiAttr ; _efba != nil { _gbfb = * _efba ; } else if _begc := _cfca . HAnsiAttr ; _begc != nil { _gbfb = * _begc ; } else if _eegf := _cfca . CsAttr ; _eegf != nil { _gbfb = * _eegf ; } else { _fecb := _bdeb . _bebc ; if _fecb != nil { _dda := "" ; if _dddcg := _fecb . RFonts ; _dddcg != nil { if _geda := _cfca . HintAttr ; _geda == _edg . ST_HintEastAsia { if _dddcg . EastAsiaAttr != nil { _gbfb = * _fecb . RFonts . EastAsiaAttr ; } else { if _dddcg . EastAsiaThemeAttr == _edg . ST_ThemeMajorEastAsia { _dda = _gefcd ; } ; if _dddcg . EastAsiaThemeAttr == _edg . ST_ThemeMinorEastAsia { _dda = _ddgbe ; } ; } ; } else { if _edge := _dddcg . AsciiAttr ; _edge != nil { _gbfb = * _edge ; } else if _ccfe := _dddcg . HAnsiAttr ; _ccfe != nil { _gbfb = * _ccfe ; } ; } ; if _gbfb == "\u0064e\u0066\u0061\u0075\u006c\u0074" { if _dda == "" { if _dddcg . EastAsiaThemeAttr == _edg . ST_ThemeMajorEastAsia { _dda = _gefcd ; } else if _dddcg . EastAsiaThemeAttr == _edg . ST_ThemeMinorEastAsia { _dda = _ddgbe ; } else if _dbec := _dddcg . AsciiThemeAttr ; _dbec == _edg . ST_ThemeMajorAscii || _dbec == _edg . ST_ThemeMajorHAnsi { _dda = _ceef ; } else if _cgcc := _dddcg . AsciiThemeAttr ; _cgcc == _edg . ST_ThemeMinorAscii || _cgcc == _edg . ST_ThemeMinorHAnsi { _dda = _ddga ; } else { if _adbb := _dddcg . HAnsiThemeAttr ; _adbb == _edg . ST_ThemeMajorAscii || _adbb == _edg . ST_ThemeMajorHAnsi { _dda = _ceef ; } else if _eefg := _dddcg . HAnsiThemeAttr ; _eefg == _edg . ST_ThemeMinorAscii || _eefg == _edg . ST_ThemeMinorHAnsi { _dda = _ddga ; } ; } ; } ; _cbfc := _bdeb . _fbfe . Themes ( ) ; for _ , _beag := range _cbfc { if _beag . ThemeElements != nil { if _dcaff := _beag . ThemeElements . FontScheme ; _dcaff != nil { if _dcaff . MajorFont != nil && _dda == _gefcd { if _dcaff . MajorFont . Ea != nil { _gbfb = _dcaff . MajorFont . Ea . TypefaceAttr ; break ; } ; } else if _dcaff . MinorFont != nil && _dda == _ddgbe { if _dcaff . MinorFont . Ea != nil { _gbfb = _dcaff . MinorFont . Ea . TypefaceAttr ; break ; } ; } else if _dcaff . MajorFont != nil && _dda == _ceef { if _dcaff . MajorFont . Latin != nil { _gbfb = _dcaff . MajorFont . Latin . TypefaceAttr ; break ; } ; } else if _dcaff . MinorFont != nil && _dda == _ddga { if _dcaff . MinorFont . Latin != nil { _gbfb = _dcaff . MinorFont . Latin . TypefaceAttr ; break ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; if _gbfb != "\u0064e\u0066\u0061\u0075\u006c\u0074" && ! _ecab ( _gbfb ) { if _dcdfa := _bdeb . _fbfe . FontTable ( ) ; _dcdfa != nil { for _ , _dbbb := range _dcdfa . Font { if _dbbb . NameAttr == _gbfb && _dbbb . AltName != nil && _ecab ( _dbbb . AltName . ValAttr ) { _gbfb = _dbbb . AltName . ValAttr ; break ; } ; if _dbbb . AltName != nil && ! _ecab ( _dbbb . AltName . ValAttr ) && _dbbb . AltName . ValAttr == _gbfb { _gbfb = _dbbb . NameAttr ; break ; } ; } ; } ; } ; if _acaf , _gage := _ecb . StdFontsMap [ _gbfb ] ; _gage { _fbbd . Font = _ecb . AssignStdFontByName ( _fbbd , _acaf [ _fabe ] ) ; } else if _ggdcg := _ecb . GetRegisteredFont ( _gbfb , _fabe ) ; _ggdcg != nil { _fbbd . Font = _ggdcg ; } else { _c . Log . Debug ( " \ u0046 \ u006f \ u006e \ u0074 \ u0020 \ u0025 \ u0073 \ u0020 \ u0077 \ u0069 \ u0074h \ u0020 \ u0073 \ u0074 \ u0079 \ u006c \ u0065 \ u0020 \ u0025s \ u0020i \ u0073 \ u0020 \ u006e \ u006f \ u0074 \ u0020 \ u0066 \ u006f \ u0075 \ u006e \ u0064 \ u002c \ u0020 \ u0072 \
// RegisterFontsFromDirectory registers all fonts from the given directory automatically detecting font families and styles. For composite fonts use RegisterCompositeFontsFromDirectory.
func RegisterFontsFromDirectory ( dirName string ) error { return _ecb . RegisterFontsFromDirectory ( dirName ) ; } ; func ( _bfgb * convertContext ) addTextSymbol ( _gbd * symbol ) { _gdgc := _ec . New ( ) ; _cceb := _gdgc . NewStyledParagraph ( ) ; _cceb . SetMargins ( 0 , 0 , 0 , 0 ) ; _cdcc := _cceb . Append ( _gbd . _feg ) ; _gfbe := 0.0 ; if _gbd . _dbf != nil { _cdcc . Style = * _gbd . _dbf ; if _gbd . _dbf . CharSpacing != 0 { _gfbe = _gbd . _dbf . CharSpacing ; } ; } ; if _gbd . _ced == nil && _gbd . _bbc == nil { _gbd . _eff = _cceb . Height ( ) * 1.2 ; _gbd . _af = _cceb . Height ( ) ; } ; if _gbd . _eff < _bfgb . _eeeg . _ge { _gbd . _eff = _bfgb . _eeeg . _ge ; } ; if _gbd . _cgg == 0 { _gbd . _cgg = _cceb . Width ( ) + _gfbe ; } ; if len ( _bfgb . _abbf . _ace ) > 0 { _afdc := _bfgb . _abbf . _ace [ len ( _bfgb . _abbf . _ace ) - 1 ] . _feg ; if _ecb . IsNoSpaceLanguage ( _afdc ) || ( _afdc == "\u0020" ) != ( _gbd . _feg == "\u0020" ) { _bfgb . addCurrentWordToParagraph ( ) ; _bfgb . newWord ( ) ; } ; } ; _bfgb . _abbf . _ace = append ( _bfgb . _abbf . _ace , _gbd ) ; _gbd . _cf = _bfgb . _abbf . _gfe ; _bfgb . _abbf . _gfe += _gbd . _cgg ; if _gbd . _feg != "\u0020" { _bfgb . _abbf . _eg = false ; } ; if _gbd . _feg == "\u000d" { _bfgb . adjustHeights ( _gbd . _eff * 1.13 ) ; _bfgb . adjustHeights ( _gbd . _eff ) ; } ; } ; type span struct { _ffd float64 ; _dc float64 ; _aaaa [ ] * word ; } ; func _faba ( _cefd , _fgaf string , _fca , _dgb bool ) [ ] * symbol { _aefa := [ ] * symbol { } ; for _ , _gec := range _cefd { _efg := & symbol { _feg : string ( _gec ) , _abb : _fca , _ecc : _dgb , _gb : _fgaf } ; _aefa = append ( _aefa , _efg ) ; } ; return _aefa ; } ; func _ceee ( _dcbd * _gg . Document , _dbbf * _edg . CT_RPr , _cage * _edg . CT_PPr ) * _edg . CT_RPr { var _bdea , _agcc * _edg . CT_RPr ; if _dbbf == nil { _dbbf = _edg . NewCT_RPr ( ) ; } ; var _dcbf * _edg . CT_ParaRPr ; if _cage != nil && _cage . RPr != nil { _dcbf = _cage . RPr ; } ; if _dcbf == nil { _dcbf = _edg . NewCT_ParaRPr ( ) ; } ; if _dbbf . RStyle != nil { _cae := _dcbd . GetStyleByID ( _dbbf . RStyle . ValAttr ) ; if _agfec := _cae . X ( ) ; _agfec != nil { _bdea = _agfec . RPr ; } ; } ; if _bdea == nil { _bdea = _edg . NewCT_RPr ( ) ; } ; if _dcbf . RStyle != nil { _bddc := _dcbd . GetStyleByID ( _dcbf . RStyle . ValAttr ) ; if _gge := _bddc . X ( ) ; _gge != nil { _agcc = _gge . RPr ; if _gge . QFormat != nil && _aabf ( _gge . QFormat ) { return _agcc ; } ; } ; } ; if _agcc == nil { _agcc = _edg . NewCT_RPr ( ) ; } ; if _dbbf . Color == nil { if _bdea . Color != nil { _dbbf . Color = _bdea . Color ; } else if _dcbf . Color != nil { _dbbf . Color = _dcbf . Color ; } else if _agcc . Color != nil { _dbbf . Color = _agcc . Color ; } ; } ; if _dbbf . Spacing == nil { if _bdea . Spacing != nil { _dbbf . Spacing = _bdea . Spacing ; } else if _dcbf . Spacing != nil { _dbbf . Spacing = _dcbf . Spacing ; } else if _agcc . Spacing != nil { _dbbf . Spacing = _agcc . Spacing ; } ; } ; if _dbbf . Sz == nil { if _bdea . Sz != nil { _dbbf . Sz = _bdea . Sz ; } else if _dcbf . Sz != nil { _dbbf . Sz = _dcbf . Sz ; } else if _agcc . Sz != nil { _dbbf . Sz = _agcc . Sz ; } ; } ; if _dbbf . SzCs == nil { if _bdea . SzCs != nil { _dbbf . SzCs = _bdea . SzCs ; } else if _dcbf . SzCs != nil { _dbbf . SzCs = _dcbf . SzCs ; } else if _agcc . SzCs != nil { _dbbf . SzCs = _agcc . SzCs ; } ; } ; if _dbbf . B == nil { if _bdea . B != nil { _dbbf . B = _bdea . B ; } else if _dcbf . B != nil { _dbbf . B = _dcbf . B ; } else if _agcc . B != nil { _dbbf . B = _agcc . B ; } ; } ; if _dbbf . I == nil { if _bdea . I != nil { _dbbf . I = _bdea . I ; } else if _dcbf . I != nil { _dbbf . I = _dcbf . I ; } else if _agcc . I != nil { _dbbf . I = _agcc . I ; } ; } ; if _dbbf . U == nil { if _bdea . U != nil { _dbbf . U = _bdea . U ; } else if _dcbf . U != nil { _dbbf . U = _dcbf . U ; } else if _agcc . U != nil { _dbbf . U = _agcc . U ; } ; } ; if _dbbf . RFonts == nil { if _bdea . RFonts != nil { _dbbf . RFonts = _bdea . RFonts ; } else if _dcbf . RFonts != nil { _dbbf . RFonts = _dcbf . RFonts ; } else if _agcc . RFonts != nil { _dbbf . RFonts = _agcc . RFonts ; } ; } ; if _dbbf . VertAlign == nil { if _bdea . VertAlign != nil { _dbbf . VertAlign = _bdea . VertAlign ; } else if _dcbf . VertAlign != nil { _dbbf . VertAlign = _dcbf . VertAlign ; } else if _agcc . VertAlign != nil { _dbbf . VertAlign = _agcc . VertAlign ; } ; } ; if _dbbf . Caps == nil { if _bdea . Caps != nil { _dbbf . Caps = _bdea . Caps ; } else if _dcbf . Caps != nil { _dbbf . Caps = _dcbf . Caps ; } else if _agcc . Caps != nil { _dbbf . Caps = _agcc . Caps ; } ; } ; if _dbbf . SmallCaps == nil { if _bdea . SmallCaps != nil { _dbbf . SmallCaps = _bdea . SmallCaps ; } else if _dcbf . Sm
// ConvertToPdf converts document to PDF file. This package is beta, breaking changes can take place.
func ConvertToPdf ( d * _gg . Document ) * _ec . Creator { return ConvertToPdfWithOptions ( d , nil ) } ; func _dcbb ( _bagf , _ceeae * _edg . CT_Border , _bafdba bool ) * _edg . CT_Border { if _bafdba { return _bagf ; } ; return _ceeae ; } ; func ( _dfd * convertContext ) addAbsoluteEGPC ( _cbc [ ] * _edg . EG_PContent , _aada * _edg . CT_PPr ) bool { _ege := len ( _cbc ) ; for _ , _bfg := range _cbc { for _ , _ddca := range _bfg . FldSimple { if _ddca != nil { _dfd . addAbsoluteEGPC ( _ddca . EG_PContent , _aada ) ; } ; } ; if _bd := _bfg . Hyperlink ; _bd != nil { _dfd . _effd = _bd ; _dfd . addAbsoluteCRC ( _bd . EG_ContentRunContent , _aada ) ; } ; _dfd . _effd = nil ; if _dfd . addAbsoluteCRC ( _bfg . EG_ContentRunContent , _aada ) { if _ege > 1 { _dfd . moveCurrentParagraphToNewPage ( ) ; continue ; } else { return true ; } ; } ; _ege -- ; } ; return false ; } ; func ( _cee * convertContext ) addCellToTable ( _cfaa * _ec . Table , _ecbda * _edg . CT_Tc , _ffag * _edg . CT_TblPr , _fgd * _edg . CT_TblPrEx , _abfa , _affd , _ccg , _cddg int , _afcf [ ] * _edg . CT_TblStylePr , _aacdf * _edg . CT_PPrGeneral , _cddb * _edg . CT_RPr ) { var _eccd * _ec . TableCell ; _ded := 1 ; _gbff := _ecbda . TcPr ; _eddd := _edg . NewCT_RPr ( ) ; for _ , _affde := range _afcf { if _abfa == 0 && _affde . TypeAttr == _edg . ST_TblStyleOverrideTypeFirstRow { _gbff = _eafb ( _gbff , _affde . TcPr ) ; _cddb = _egfe ( _eddd , _affde . RPr ) ; break ; } ; if _affd == 0 && _affde . TypeAttr == _edg . ST_TblStyleOverrideTypeFirstCol { _gbff = _eafb ( _gbff , _affde . TcPr ) ; _cddb = _egfe ( _eddd , _affde . RPr ) ; } ; if _abfa == _ccg - 1 && _affde . TypeAttr == _edg . ST_TblStyleOverrideTypeLastRow { _gbff = _eafb ( _gbff , _affde . TcPr ) ; _cddb = _egfe ( _eddd , _affde . RPr ) ; } ; if _affd == _cddg - 1 && _affde . TypeAttr == _edg . ST_TblStyleOverrideTypeLastCol { _gbff = _eafb ( _gbff , _affde . TcPr ) ; _cddb = _egfe ( _eddd , _affde . RPr ) ; } ; if _abfa % 2 != 0 && _affde . TypeAttr == _edg . ST_TblStyleOverrideTypeBand1Horz { _gbff = _eafb ( _gbff , _affde . TcPr ) ; if _affd == 0 { _cddb = _egfe ( _eddd , _affde . RPr ) ; } else { _cddb = _edag ( _cddb , _affde . RPr ) ; } ; } ; if _affd % 2 != 0 && _affde . TypeAttr == _edg . ST_TblStyleOverrideTypeBand1Vert { _gbff = _eafb ( _gbff , _affde . TcPr ) ; if _abfa == 0 { _cddb = _egfe ( _eddd , _affde . RPr ) ; } else { _cddb = _edag ( _eddd , _affde . RPr ) ; } ; } ; if _abfa % 2 == 0 && _affde . TypeAttr == _edg . ST_TblStyleOverrideTypeBand2Horz { _gbff = _eafb ( _gbff , _affde . TcPr ) ; if _affd == _cddg - 1 { _cddb = _egfe ( _eddd , _affde . RPr ) ; } else { _cddb = _edag ( _eddd , _affde . RPr ) ; } ; } ; if _affd % 2 == 0 && _affde . TypeAttr == _edg . ST_TblStyleOverrideTypeBand2Vert { _gbff = _eafb ( _gbff , _affde . TcPr ) ; if _abfa == _ccg - 1 { _cddb = _egfe ( _eddd , _affde . RPr ) ; } else { _cddb = _edag ( _eddd , _affde . RPr ) ; } ; } ; } ; _aee := _adgg ( _ffag , _fgd , _gbff , _abfa , _affd , _ccg , _cddg ) ; _acf := _ab ; _gaeeg := _ec . CellVerticalAlignmentTop ; if _aee != nil { if _aee . GridSpan != nil { _ded = int ( _aee . GridSpan . ValAttr ) ; } ; _eccd = _cfaa . MultiColCell ( _ded ) ; if _ebfg := _aee . TcBorders ; _ebfg != nil { if _dbcaa := _ebfg . Left ; _dbcaa != nil { _becg , _gdbe , _dfdc := _fdeea ( _dbcaa ) ; _eccd . SetBorder ( _ec . CellBorderSideLeft , _becg , _dfdc ) ; if _gdbe != nil && * _gdbe != nil { _eccd . SetSideBorderColor ( _ec . CellBorderSideLeft , * _gdbe ) ; } ; } ; if _bbee := _ebfg . Top ; _bbee != nil { _dfeg , _aaaab , _afcfe := _fdeea ( _bbee ) ; _eccd . SetBorder ( _ec . CellBorderSideTop , _dfeg , _afcfe ) ; if _aaaab != nil && * _aaaab != nil { _eccd . SetSideBorderColor ( _ec . CellBorderSideTop , * _aaaab ) ; } ; } ; if _gcbg := _ebfg . Right ; _gcbg != nil { _acgf , _bde , _bfca := _fdeea ( _gcbg ) ; _eccd . SetBorder ( _ec . CellBorderSideRight , _acgf , _bfca ) ; if _bde != nil && * _bde != nil { _eccd . SetSideBorderColor ( _ec . CellBorderSideRight , * _bde ) ; } ; } ; if _dgd := _ebfg . Bottom ; _dgd != nil { _gdca , _cgbe , _eegd := _fdeea ( _dgd ) ; _eccd . SetBorder ( _ec . CellBorderSideBottom , _gdca , _eegd ) ; if _cgbe != nil && * _cgbe != nil { _eccd . SetSideBorderColor ( _ec . CellBorderSideBottom , * _cgbe ) ; } ; } ; } else { _eccd . SetBorder ( _ec . CellBorderSideAll , _ec . CellBorderStyleSingle , _agadgg ( 0.125 ) ) ; _eccd . SetBorderColor ( _ec . ColorBlack ) ; } ; if _dae := _aee . Shd ; _dae != nil { if _baa := _dae . FillAttr ; _baa != nil { if _ggdc := _baa . ST_HexColorRGB ; _ggdc != nil { _bged := _ec . ColorRGBFromHex ( "\u0023" + * _ggdc ) ; _eccd . SetBackgroundColor ( _bged ) ; } ; }