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/
2021-11-10 11:45:21 +00:00
package convert ; import ( _gg "bytes" ; _ff "errors" ; _b "github.com/unidoc/unioffice/common/logger" ; _d "github.com/unidoc/unioffice/common/tempstorage" ; _ag "github.com/unidoc/unioffice/document" ; _eb "github.com/unidoc/unioffice/internal/convertutils" ; _ef "github.com/unidoc/unioffice/measurement" ; _fd "github.com/unidoc/unioffice/schema/soo/dml" ; _ac "github.com/unidoc/unioffice/schema/soo/dml/chart" ; _cc "github.com/unidoc/unioffice/schema/soo/dml/picture" ; _de "github.com/unidoc/unioffice/schema/soo/ofc/sharedTypes" ; _db "github.com/unidoc/unioffice/schema/soo/wml" ; _c "github.com/unidoc/unipdf/v3/creator" ; _cg "github.com/unidoc/unipdf/v3/model" ; _a "io/ioutil" ; _e "strconv" ; _f "strings" ; ) ; func ( _cfeg * convertContext ) addRelativeRIC ( _aade * _db . EG_RunInnerContent , _babf * _db . CT_RPr ) { var _bdf * _c . TextChunk ; var _edead , _cgcee bool ; _cegd := false ; if _aade == nil { if _cfeg . _dgfg != nil { _edead = true ; _bdf = _cfeg . _bgda . Append ( _cfeg . _dgfg . _bbea ) ; } ; } else { if _aade . T != nil && _aade . T . Content != "" { _cedd := _aade . T . Content ; if _eeeaf := _cfeg . _fbac ; _eeeaf != nil && _eeeaf . IdAttr != nil { _cegd = true ; _bdf = _cfeg . _bgda . AddExternalLink ( _cedd , _cfeg . _abea . GetTargetByRelId ( * _eeeaf . IdAttr ) ) ; } else { _bdf = _cfeg . _bgda . Append ( _cedd ) ; } ; } else if _gagd := _aade . EndnoteReference ; _gagd != nil { _eeee := _cfeg . _abea . BodySection ( ) . X ( ) ; _edead = true ; _eccf := _gagd . IdAttr ; _edgde := _eccf ; _gdac := _db . ST_NumberFormatLowerRoman ; if _faef := _eeee . EndnotePr ; _faef != nil { if _ddea := _faef . NumFmt ; _ddea != nil { _gdac = _ddea . ValAttr ; } ; if _bba := _faef . NumStart ; _bba != nil { _edgde += _bba . ValAttr - 1 ; } ; } ; _gdbe := _fegg ( _edgde , _gdac ) ; _dcc := _cfeg . _abea . Endnote ( _eccf ) . X ( ) ; if _dcc != nil { _cfeg . _fdde = append ( _cfeg . _fdde , note { _fc : _gdbe , _efb : _dcc . EG_BlockLevelElts } ) ; _bdf = _cfeg . _bgda . Append ( _gdbe ) ; } ; } else if _fcfc := _aade . FootnoteReference ; _fcfc != nil { _beda := _cfeg . _abea . BodySection ( ) . X ( ) ; _edead = true ; _bafg := _fcfc . IdAttr ; _dae := _bafg ; _dfgg := _db . ST_NumberFormatDecimal ; if _bgdf := _beda . FootnotePr ; _bgdf != nil { if _bdag := _bgdf . NumFmt ; _bdag != nil { _dfgg = _bdag . ValAttr ; } ; if _eagg := _bgdf . NumStart ; _eagg != nil { _dae += _eagg . ValAttr - 1 ; } ; } ; _gbgc := _fegg ( _dae , _dfgg ) ; _bdf = _cfeg . _bgda . Append ( _gbgc ) ; } ; } ; if _bdf != nil { _bdf . Style , _ , _ , _ = _cfeg . makeRunStyle ( _babf , _edead , _cgcee , true , false , _cegd ) ; } ; } ; func _dfaa ( _ebag float64 ) float64 { return _ebag * _ef . Millimeter } ; func _dddd ( _febc * _db . CT_Border ) ( _c . CellBorderStyle , * _c . Color , float64 ) { if _febc == nil { return _c . CellBorderStyleNone , nil , 0 ; } ; var _bfdf _c . CellBorderStyle ; switch _febc . ValAttr { case _db . ST_BorderSingle : _bfdf = _c . CellBorderStyleSingle ; case _db . ST_BorderDouble : _bfdf = _c . CellBorderStyleDouble ; default : _bfdf = _c . CellBorderStyleNone ; } ; var _bgga _c . Color ; if _bacd := _febc . ColorAttr ; _bacd != nil { if _adcb := _bacd . ST_HexColorRGB ; _adcb != nil { _bgga = _c . ColorRGBFromHex ( "\u0023" + * _adcb ) ; } ; } ; _efbf := 0.0 ; if _dffb := _febc . SzAttr ; _dffb != nil { _efbf = float64 ( * _dffb ) / 8 ; } ; return _bfdf , & _bgga , _efbf ; } ; func ( _dfeb * convertContext ) addSeparator ( ) { _dfeb . newParagraph ( ) ; _dfeb . _fecf . _edf = true ; _dfeb . _fecf . _gc = _efg ; if _dfeb . currentParagraphOverflowsCurrentPage ( ) { _dfeb . moveCurrentParagraphToNewPage ( ) ; } ; _dfeb . addCurrentParagraphToCurrentPage ( ) ; } ; var _efg = _dfaa ( 6 ) ; type word struct { _aee [ ] * symbol ; _bbf float64 ; _agc float64 ; _aga bool ; } ;
2021-08-23 20:44:48 +00:00
2021-11-10 11:45:21 +00:00
// RegisterFont makes a PdfFont accessible for using in converting to PDF.
func RegisterFont ( name string , style FontStyle , font * _cg . PdfFont ) { _eb . RegisterFont ( name , style , font ) ; } ; func _add ( _gfe * _c . Creator , _gfc * image ) { _gfc . _fe . SetPos ( _gfc . _afc , _gfc . _bge ) ; _gfe . Draw ( _gfc . _fe ) } ; func ( _eed * convertContext ) addCurrentWordToParagraph ( ) { for { _gcfg := _eed . _edgdg . _fcf ; _beae := _gcfg + _eed . _beaa . _agc ; if _beae > _eed . _edgdg . _dce { _eed . newLine ( ) ; } ; _gced := _eed . _fecf . _bb + _eed . _edgdg . _da ; _cag := _gced + _eed . _edgdg . _gb ; _fdfg := false ; _addg := append ( _eed . _bage . _aag , _eed . _fecf . _fdd ... ) ; for _ , _eeab := range _addg { _ada := _eeab . _dg ; if ( ( _gced > _ada . Top && _gced < _ada . Bottom ) || ( _cag > _ada . Top && _cag < _ada . Bottom ) ) && ( ( _gcfg > _ada . Left && _gcfg < _ada . Right ) || ( _beae > _ada . Left && _beae < _ada . Right ) ) { _fdfg = true ; if _eed . _edgdg . _fcf < _ada . Right { _eed . _ebac . _acg = _ada . Left ; _eed . _edgdg . _fcf = _ada . Right ; _eed . newSpan ( ) ; } ; } ; } ; if ! _fdfg { break ; } ; } ; if ! _eed . _beaa . _aga || len ( _eed . _ebac . _aeg ) > 0 { _eed . _beaa . _bbf = _eed . _edgdg . _fcf ; _eed . _ebac . _aeg = append ( _eed . _ebac . _aeg , _eed . _beaa ) ; _eed . _edgdg . _fcf += _eed . _beaa . _agc ; for _ , _egca := range _eed . _beaa . _aee { _eed . adjustHeights ( _egca . _edgf ) ; } ; } ; } ; const _aa = 0.67 ; func ( _cdfa * convertContext ) makePdfBlockFromChart ( _ege * _ac . Chart , _babg , _ccce float64 ) ( * _c . Block , error ) { _bgfg := _ege . CT_RelId . IdAttr ; _dffg := _cdfa . _abea . GetChartSpaceByRelId ( _bgfg ) ; if _dffg == nil { return nil , _ff . New ( "\u004e\u006f\u0020\u0063\u0068\u0061\u0072\u0074\u0073\u0070\u0061\u0063\u0065" ) ; } ; var _gadc * _fd . Theme ; _egbg := _cdfa . _abea . Themes ( ) ; if len ( _egbg ) > 0 { _gadc = _egbg [ 0 ] ; } ; return _eb . MakeBlockFromChartSpace ( _dffg , _babg , _ccce , _gadc ) ; } ; func ( _ggg * convertContext ) addRelativeCRC ( _accg [ ] * _db . EG_ContentRunContent , _deec * _db . CT_PPr ) { for _ , _bedb := range _accg { if _agece := _bedb . R ; _agece != nil { _cdca := _ecb ( _ggg . _abea , _agece . RPr , _deec ) ; if _ggg . _dgfg != nil { _ggg . addRelativeRIC ( nil , _cdca ) ; _ggg . _dgfg = nil ; } ; for _ , _bgac := range _agece . EG_RunInnerContent { _ggg . addRelativeRIC ( _bgac , _cdca ) ; } ; } ; } ; } ; func _febb ( _feae , _bbga * _db . CT_PPrGeneral ) * _db . CT_PPrGeneral { if _feae == nil { return _feae ; } ; if _bbga == nil { return _feae ; } ; if _feae . PStyle == nil { _feae . PStyle = _bbga . PStyle ; } ; if _feae . KeepNext == nil { _feae . KeepNext = _bbga . KeepNext ; } ; if _feae . KeepLines == nil { _feae . KeepLines = _bbga . KeepLines ; } ; if _feae . PageBreakBefore == nil { _feae . PageBreakBefore = _bbga . PageBreakBefore ; } ; if _feae . FramePr == nil { _feae . FramePr = _bbga . FramePr ; } ; if _feae . WidowControl == nil { _feae . WidowControl = _bbga . WidowControl ; } ; if _feae . NumPr == nil { _feae . NumPr = _bbga . NumPr ; } ; if _feae . SuppressLineNumbers == nil { _feae . SuppressLineNumbers = _bbga . SuppressLineNumbers ; } ; if _feae . PBdr == nil { _feae . PBdr = _bbga . PBdr ; } ; if _feae . Shd == nil { _feae . Shd = _bbga . Shd ; } ; if _feae . Tabs == nil { _feae . Tabs = _bbga . Tabs ; } ; if _feae . SuppressAutoHyphens == nil { _feae . SuppressAutoHyphens = _bbga . SuppressAutoHyphens ; } ; if _feae . Kinsoku == nil { _feae . Kinsoku = _bbga . Kinsoku ; } ; if _feae . WordWrap == nil { _feae . WordWrap = _bbga . WordWrap ; } ; if _feae . OverflowPunct == nil { _feae . OverflowPunct = _bbga . OverflowPunct ; } ; if _feae . TopLinePunct == nil { _feae . TopLinePunct = _bbga . TopLinePunct ; } ; if _feae . AutoSpaceDE == nil { _feae . AutoSpaceDE = _bbga . AutoSpaceDE ; } ; if _feae . AutoSpaceDN == nil { _feae . AutoSpaceDN = _bbga . AutoSpaceDN ; } ; if _feae . Bidi == nil { _feae . Bidi = _bbga . Bidi ; } ; if _feae . AdjustRightInd == nil { _feae . AdjustRightInd = _bbga . AdjustRightInd ; } ; if _feae . SnapToGrid == nil { _feae . SnapToGrid = _bbga . SnapToGrid ; } ; if _feae . Spacing == nil { _feae . Spacing = _bbga . Spacing ; } ; if _feae . Ind == nil { _feae . Ind = _bbga . Ind ; } ; if _feae . ContextualSpacing == nil { _feae . ContextualSpacing = _bbga . ContextualSpacing ; } ; if _feae . MirrorIndents == nil { _feae . MirrorIndents = _bbga . MirrorIndents ; } ; if _feae . SuppressOverlap == nil { _feae . SuppressOverlap = _bbga . SuppressOverlap ; } ; if _feae . Jc == nil { _feae . Jc = _bbga . Jc ; } ; if _feae . TextDirection == nil { _feae . TextDirection = _bbga . TextDirectio
2021-07-30 17:03:26 +00:00
2021-08-23 20:44:48 +00:00
// RegisterFontsFromDirectory registers all fonts from the given directory automatically detecting font families and styles. For composite fonts use RegisterCompositeFontsFromDirectory.
2021-11-10 11:45:21 +00:00
func RegisterFontsFromDirectory ( dirName string ) error { return _eb . RegisterFontsFromDirectory ( dirName ) } ; func ( _bcc * convertContext ) alignSymbolsVertically ( ) { for _ , _aea := range _bcc . _acab { for _ , _gfd := range _aea . _ad { for _ , _cgd := range _gfd . _ga { _cccf := 0.0 ; for _ , _bac := range _cgd . _afgb { for _ , _faf := range _bac . _aeg { for _ , _ggbd := range _faf . _aee { if _ggbd . _edgf > _cccf { _cccf = _ggbd . _edgf ; } ; } ; } ; } ; for _ , _cec := range _cgd . _afgb { for _ , _acc := range _cec . _aeg { for _ , _dda := range _acc . _aee { if _dda . _ca < _cccf { _dda . _bc = _cccf - _dda . _ca ; } ; } ; } ; } ; } ; } ; } ; } ; type convertContext struct { _bcba * _c . Creator ; _abea * _ag . Document ; _fdea * _db . CT_PPrGeneral ; _aagf * _db . CT_RPr ; _bgda * _c . StyledParagraph ; _acab [ ] * page ; _bage * page ; _cabc * _eb . Rectangle ; _fecf * paragraph ; _edgdg * line ; _ebac * span ; _beaa * word ; _fbac * _db . CT_Hyperlink ; _aacd * _db . CT_ParaRPr ; _fdde [ ] note ; _dgfg * prefix ; _dafd bool ; _gabdg bool ; _aagc bool ; _dafcd float64 ; _cbbb float64 ; _gbgb float64 ; _baca float64 ; _eacg bool ; _dafa map [ int64 ] map [ int64 ] int ; } ; func ( _fbea * convertContext ) combinePPrWithStyles ( _bcfc * _db . CT_PPr ) ( * _db . CT_PPr , * prefix ) { if _bcfc == nil { return nil , nil ; } ; var _bggg * prefix ; if _bcfc != nil && _bcfc . NumPr != nil { if _fggc , _fbcb := _bcfc . NumPr . Ilvl , _bcfc . NumPr . NumId ; _fggc != nil && _fbcb != nil { _dceg := _fbea . _abea . GetNumberingLevelByIds ( _fbcb . ValAttr , _fggc . ValAttr ) . X ( ) ; _bcfc = _aafc ( _bcfc , _dceg . PPr , _dceg . RPr ) ; if _abca := _dceg . NumFmt ; _abca != nil { if _ggeb := _abca . ValAttr ; _ggeb == _db . ST_NumberFormatBullet || _ggeb == _db . ST_NumberFormatDecimal { var _cca [ ] float64 ; if _cfad := _bcfc . Tabs ; _cfad != nil && len ( _cfad . Tab ) != 0 { for _ , _fcgb := range _cfad . Tab { _cca = append ( _cca , _eb . PointsFromTwips ( * _fcgb . PosAttr . Int64 ) ) ; } ; } ; _bggg = & prefix { _geab : _cca , _eacc : true } ; if _ggeb == _db . ST_NumberFormatBullet { if _cgeac := _dceg . LvlText ; _cgeac != nil { if _bdeb := _cgeac . ValAttr ; _bdeb != nil && * _bdeb != "" { _bggg . _bbea = * _bdeb ; _bggg . _ggfc = true ; } ; } ; } else { _aegf , _aabe := _fbcb . ValAttr , _fggc . ValAttr ; if _ , _ggac := _fbea . _dafa [ _aegf ] ; ! _ggac { _fbea . _dafa [ _aegf ] = map [ int64 ] int { } ; } ; if _ , _cbd := _fbea . _dafa [ _aegf ] [ _aabe ] ; ! _cbd { _fbea . _dafa [ _aegf ] [ _aabe ] = 1 ; } ; _aedc := _fbea . _dafa [ _aegf ] [ _aabe ] ; _fbea . _dafa [ _aegf ] [ _aabe ] ++ ; _bggg . _bbea = _e . Itoa ( _aedc ) + "\u002e" ; } ; } ; } ; } ; } ; if _bcfc != nil && _bcfc . PStyle != nil { _cbbbb , _fgd := _fbea . getStyleProps ( _bcfc . PStyle . ValAttr ) ; _bcfc = _aafc ( _bcfc , _cbbbb , _fgd ) ; } ; return _bcfc , _bggg ; } ; type page struct { _ec * _eb . Rectangle ; _ad [ ] * paragraph ; _ee float64 ; _aag [ ] * zoneToSkip ; _ffc [ ] * image ; _ce [ ] * image ; _edc [ ] * block ; _edg [ ] * block ; _aaa [ ] * note ; _bg bool ; } ; const ( FontStyle_Regular FontStyle = 0 ; FontStyle_Bold FontStyle = 1 ; FontStyle_Italic FontStyle = 2 ; FontStyle_BoldItalic FontStyle = 3 ; ) ; func _dgce ( _ccdgc * _db . EG_RunInnerContent ) bool { if _dedd := _ccdgc . Br ; _dedd != nil { return _dedd . TypeAttr == _db . ST_BrTypePage ; } ; return false ; } ; var _dab = [ ] 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 ( _cdd * convertContext ) addAbsoluteCBCs ( _agb [ ] * _db . EG_ContentBlockContent ) { for _ , _ccc := range _agb { for _ , _aged := range _ccc . P { _cdd . newParagraph ( ) ; _aagb , _fca := _cdd . combinePPrWithStyles ( _aged . PPr ) ; if _fca != nil { _cdd . _dgfg = _fca ; } ; _cdd . assignPropsToAbsoluteParagraph ( _aagb , _cdd . _fecf ) ; _cdd . determineParagraphBounds ( ) ; _cdd . newLine ( ) ; _cdd . newWord ( ) ; _ceb := _aged . EG_PContent ; if len ( _ceb ) == 0 { _cdd . addEmptyLine ( ) ; } else { _cdd . addAnchorBlocks ( _ceb ) ; _cdd . addAnchorExtra ( _ceb ) ; if _cdd . addAbsoluteEGPC ( _ceb , _aagb ) { _cdd . newPage ( ) ; continue ; } ; if _cdd . currentParagraphOverflowsCurrentPage ( ) { _cdd . moveCurrentParagraphToNewPage ( ) ; _cdd . addAbsoluteEGPC ( _ceb , _aagb ) ; } ; _cdd . addCurrentWordToPar
2021-07-30 17:03:26 +00:00
2021-11-10 11:45:21 +00:00
// FontStyle represents a kind of font styling. It can be FontStyle_Regular, FontStyle_Bold, FontStyle_Italic and FontStyle_BoldItalic.
type FontStyle = _eb . FontStyle ; func ( _gdc * convertContext ) addRelativeCBCs ( _egdf [ ] * _db . EG_ContentBlockContent ) { for _ , _egeb := range _egdf { _gdc . addHdrFtr ( _egeb . P ) ; } ; } ; func _dcad ( _gffc * _db . CT_TblWidth , _adcg , _gadf float64 ) float64 { if _gffc != nil { if _dafe := _gffc . WAttr ; _dafe != nil { if _gbeb := _dafe . ST_DecimalNumberOrPercent ; _gbeb != nil { if _gdfae := _gbeb . ST_UnqualifiedPercentage ; _gdfae != nil { switch _gffc . TypeAttr { case _db . ST_TblWidthDxa : return float64 ( * _gdfae ) / 56.7 ; case _db . ST_TblWidthPct : return float64 ( * _gdfae ) / 100 * _adcg ; default : return _gadf ; } ; } ; } ; } ; } ; return _gadf ; } ; func _cdac ( _eaad int , _gaeaf bool ) string { _fcdc := ( _eaad - 1 ) / 26 + 1 ; _efcf := byte ( ( _eaad - 1 ) % 26 ) ; if _gaeaf { _efcf += byte ( 65 ) ; } else { _efcf += byte ( 97 ) ; } ; _cggbf := _gg . NewBuffer ( [ ] byte { } ) ; for _deca := 0 ; _deca < _fcdc ; _deca ++ { _cggbf . Write ( [ ] byte { _efcf } ) ; } ; return _cggbf . String ( ) ; } ; func ( _gccgf * convertContext ) makeRunStyle ( _adgg * _db . CT_RPr , _fecb , _dgfc , _dgad , _eddc , _cgdfg bool ) ( _c . TextStyle , bool , bool , * _c . Color ) { var _eedc * _c . Color ; _fbee := _gccgf . _bcba . NewTextStyle ( ) ; if _adgg != nil { _bbcc := _eb . FontStyle_Regular ; _efcb := _gcfgg ( _adgg . B ) ; _cfdg := _gcfgg ( _adgg . I ) ; if _efcb && _cfdg { _bbcc = _eb . FontStyle_BoldItalic ; } else if _efcb { _bbcc = _eb . FontStyle_Bold ; } else if _cfdg { _bbcc = _eb . FontStyle_Italic ; } ; if _eddc { _fbee . Font = _eb . AssignStdFontByName ( _fbee , "\u0053\u0079\u006d\u0062\u006f\u006c" ) ; } else { _ddeb := "\u0064e\u0066\u0061\u0075\u006c\u0074" ; if _deeg := _adgg . RFonts ; _deeg != nil { if _ecddc := _deeg . AsciiAttr ; _ecddc != nil { _ddeb = * _ecddc ; } else if _fbef := _deeg . HAnsiAttr ; _fbef != nil { _ddeb = * _fbef ; } else { _baad := _gccgf . _aagf ; if _baad != nil { if _fcbaa := _baad . RFonts ; _fcbaa != nil { if _gedb := _deeg . HintAttr ; _gedb == _db . ST_HintEastAsia { if _fcbaa . EastAsiaAttr != nil { _ddeb = * _baad . RFonts . EastAsiaAttr ; } ; } else { if _fdffe := _fcbaa . AsciiAttr ; _fdffe != nil { _ddeb = * _fdffe ; } else if _geae := _fcbaa . HAnsiAttr ; _geae != nil { _ddeb = * _geae ; } ; } ; } ; } ; } ; } ; if _fcbe , _dgfgf := _eb . StdFontsMap [ _ddeb ] ; _dgfgf { _fbee . Font = _eb . AssignStdFontByName ( _fbee , _fcbe [ _bbcc ] ) ; } else if _bedf := _eb . GetRegisteredFont ( _ddeb , _bbcc ) ; _bedf != nil { _fbee . Font = _bedf ; } else { _b . 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\u0065\u0073\u0065\u0074 \u0074\u006f\u0020\u0064\u0065\u0066\u0061\u0075\u006c\u0074\u002e" , _ddeb , _bbcc ) ; _fbee . Font = _eb . AssignStdFontByName ( _fbee , _eb . StdFontsMap [ "\u0064e\u0066\u0061\u0075\u006c\u0074" ] [ _bbcc ] ) ; } ; } ; _egbga := _cbba ( _adgg . Sz , _adgg . SzCs ) ; if _bbff := _adgg . VertAlign ; _bbff != nil { _aeaf := _bbff . ValAttr ; _fecb = _aeaf == _de . ST_VerticalAlignRunSuperscript ; _dgfc = _aeaf == _de . ST_VerticalAlignRunSubscript ; } ; if _egbga > _gccgf . _baca { _gccgf . _baca = _egbga ; } ; if _fecb || _dgfc { _egbga *= 0.64 ; } ; if _dgad { if _fecb { _fbee . TextRise = 1.5 ; } ; if _dgfc { _fbee . TextRise = - 1.5 ; } ; } ; _fbee . FontSize = _egbga ; _ffgc := 0.0 ; if _cgdd := _adgg . Spacing ; _cgdd != nil { _ffgc = _eb . PointsFromTwips ( * _cgdd . ValAttr . Int64 ) ; } ; _fbee . CharSpacing = _ffgc ; _feff := _c . ColorBlack ; if _adgg . Color != nil { _abac := _adgg . Color . ValAttr . ST_HexColorRGB ; if _abac != nil { _feff = _c . ColorRGBFromHex ( "\u0023" + * _abac ) ; } ; } ; if _dgad { _fddc , _geaag , _fcce := _feff . ToRGB ( ) ; _fddc , _geaag , _fcce = _eb . Lighten ( _fddc ) , _eb . Lighten ( _geaag ) , _eb . Lighten ( _fcce ) ; _feff = _c . ColorRGBFromArithmetic ( _fddc , _geaag , _fcce ) ; } ; _fbee . Color = _feff ; if _cgdfg { _eedc = & _feff ; } ; if _adgg . U != nil && _adgg . U . ValAttr != _db . ST_UnderlineNone && ! _eddc { _eedc = & _feff ; if _cfbc := _adgg . U . ColorAttr ; _cfbc != nil { if _cfcad := _cfbc . ST_HexColorRGB ; _cfcad != nil { _baae := _c . ColorRGBFromHex ( "\u0023" + * _cfcad ) ; _eedc = & _baae ; } ; } ; } ; } ; return _fbee , _fecb , _dgfc , _eedc ; } ; func ( _dgc * convertContext ) addHdrFtr ( _cfcc [ ] * _db . CT_P ) { for _ , _gec := range _cfcc { _gdgd := _dgc . _bcba . NewStyledParagraph ( ) ; _dgc . _bgda = _gdgd ; _bacab , _gdfa := _dgc . combinePPr
2021-09-22 16:41:01 +00:00
2021-11-10 11:45:21 +00:00
// ConvertToPdf converts document to PDF file. This package is beta, breaking changes can take place.
func ConvertToPdf ( d * _ag . Document ) * _c . Creator { var _gedd * _db . CT_PPrGeneral ; var _bff * _db . CT_RPr ; if _egee := d . Styles . X ( ) . DocDefaults ; _egee != nil { if _ddd := _egee . PPrDefault ; _ddd != nil { _gedd = _ddd . PPr ; } ; if _cdda := _egee . RPrDefault ; _cdda != nil { _bff = _cdda . RPr ; } ; } ; _defa := d . BodySection ( ) . X ( ) ; var _bfdg , _bgg , _aecb , _aeedb , _gaff , _ded float64 ; _dad := _defa . PgMar ; if _dad . LeftAttr . ST_UnsignedDecimalNumber != nil { _bfdg = _eb . PointsFromTwips ( int64 ( * _dad . LeftAttr . ST_UnsignedDecimalNumber ) ) ; } ; if _dad . LeftAttr . ST_UnsignedDecimalNumber != nil { _bgg = _eb . PointsFromTwips ( int64 ( * _dad . RightAttr . ST_UnsignedDecimalNumber ) ) ; } ; if _dad . TopAttr . Int64 != nil { _aecb = _eb . PointsFromTwips ( * _dad . TopAttr . Int64 ) ; } ; if _dad . BottomAttr . Int64 != nil { _aeedb = _eb . PointsFromTwips ( * _dad . BottomAttr . Int64 ) ; } ; _efcdc := _defa . PgSz ; _ebgb , _ggff := _dfaa ( 210 ) , _dfaa ( 297 ) ; if _efcdc . WAttr != nil { _ebgb = _eb . PointsFromTwips ( int64 ( * _efcdc . WAttr . ST_UnsignedDecimalNumber ) ) ; } ; if _efcdc . HAttr != nil { _ggff = _eb . PointsFromTwips ( int64 ( * _efcdc . HAttr . ST_UnsignedDecimalNumber ) ) ; } ; if _dad . HeaderAttr . ST_UnsignedDecimalNumber != nil { _gaff = _eb . PointsFromTwips ( int64 ( * _dad . HeaderAttr . ST_UnsignedDecimalNumber ) ) ; } ; if _dad . FooterAttr . ST_UnsignedDecimalNumber != nil { _ded = _aeedb - _eb . PointsFromTwips ( int64 ( * _dad . FooterAttr . ST_UnsignedDecimalNumber ) ) ; } ; if d . Settings . X ( ) . DefaultTabStop == nil { _aaaf = _dfaa ( 12.7 ) ; } else { _aaaf = _eb . PointsFromTwips ( int64 ( * d . Settings . X ( ) . DefaultTabStop . ValAttr . ST_UnsignedDecimalNumber ) ) ; } ; _bebc := _c . New ( ) ; _bebc . SetPageSize ( _c . PageSize { _ebgb , _ggff } ) ; _bebc . SetPageMargins ( _bfdg , _bgg , _aecb , _aeedb ) ; for _ , _acgc := range d . Headers ( ) { _fag := & convertContext { _bcba : _bebc , _abea : d , _fdea : _gedd , _aagf : _bff , _gabdg : true , _dafcd : _bfdg , _cbbb : _gaff } ; _fag . addRelativeCBCs ( _acgc . X ( ) . EG_ContentBlockContent ) ; } ; for _ , _efbg := range d . Footers ( ) { _eef := & convertContext { _bcba : _bebc , _abea : d , _fdea : _gedd , _aagf : _bff , _aagc : true , _dafcd : _bfdg , _gbgb : _ded } ; _eef . addRelativeCBCs ( _efbg . X ( ) . EG_ContentBlockContent ) ; } ; _ecgd := & convertContext { _bcba : _bebc , _abea : d , _fdea : _gedd , _aagf : _bff , _cabc : & _eb . Rectangle { Top : _aecb , Bottom : _ggff - _aeedb , Left : _bfdg , Right : _ebgb - _bgg } , _fdde : [ ] note { } , _dafa : map [ int64 ] map [ int64 ] int { } } ; for _ , _badf := range d . X ( ) . Body . EG_BlockLevelElts { _ecgd . addAbsoluteCBCs ( _badf . EG_ContentBlockContent ) ; } ; _ecgd . addEndnotes ( ) ; _ecgd . alignSymbolsVertically ( ) ; _ecgd . drawPages ( ) ; return _bebc ; } ; func ( _fdgd * convertContext ) adjustRightBoundOfLastSpan ( ) { _efcd := _fdgd . _ebac . _acg ; _gaea := _fdgd . _edgdg . _da + _fdgd . _fecf . _bb ; _bgd := _gaea + _fdgd . _edgdg . _gb ; for _ , _egbf := range _fdgd . _bage . _aag { if ( ( _gaea > _egbf . _dg . Top && _gaea < _egbf . _dg . Bottom ) || ( _bgd > _egbf . _dg . Top && _gaea < _egbf . _dg . Bottom ) ) && ( _efcd > _egbf . _dg . Left ) { _efcd = _egbf . _dg . Left ; } ; } ; _fdgd . _ebac . _acg = _efcd ; } ; func ( _ffd * convertContext ) currentParagraphOverflowsCurrentPage ( ) bool { _dga := _ffd . _fecf . _bb + _ffd . _fecf . _eee . Top + _ffd . _fecf . _eee . Bottom ; _fgb := _ffd . _bage . _ec . Bottom - _ffd . _fecf . _fba ; if len ( _ffd . _bage . _aaa ) == 0 && len ( _ffd . _fecf . _aae ) > 0 { _fgb -= _efg ; } ; return _dga + _ffd . _fecf . _gc > _fgb || _dga + _ffd . _fecf . _gf > _fgb ; } ; type symbol struct { _eeec string ; _fad float64 ; _bc float64 ; _ggf float64 ; _edgf float64 ; _ca float64 ; _gea * _c . TextStyle ; _cgf * _c . Image ; _be * block ; _agad string ; _cf bool ; _fde bool ; _bcg * _c . Color ; } ; type paragraph struct { _afg float64 ; _eee * _eb . Rectangle ; _ae float64 ; _eea float64 ; _fb float64 ; _bb float64 ; _gc float64 ; _ece _c . TextAlignment ; _gcf float64 ; _ga [ ] * line ; _cd * tableWrapper ; _ea [ ] * image ; _eag [ ] * image ; _gcb [ ] * block ; _fbg [ ] * block ; _aae [ ] * note ; _fba float64 ; _fdd [ ] * zoneToSkip ; _gf float64 ; _edf bool ; } ; func ( _egbd * convertContext ) addEmptyLine ( ) { _egbd . addTextSymbol ( & symbol { _eeec : "\u000d" , _ggf : 0 , _edgf : _egbd . _fecf . _gcf } ) ; } ; func ( _geef * convertContext ) newPage ( ) { _fade := & page { } ; _fade . _ec = _geef . _cabc ; _fade . _ee = _fade . _ec . Top ; if _geef