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-09-02 11:46:53 +00:00
package convert ; import ( _cb "bytes" ; _g "errors" ; _fa "github.com/unidoc/unioffice/common/logger" ; _cbg "github.com/unidoc/unioffice/common/tempstorage" ; _d "github.com/unidoc/unioffice/document" ; _ad "github.com/unidoc/unioffice/internal/convertutils" ; _df "github.com/unidoc/unioffice/internal/formatutils" ; _da "github.com/unidoc/unioffice/measurement" ; _ed "github.com/unidoc/unioffice/schema/soo/dml" ; _fc "github.com/unidoc/unioffice/schema/soo/dml/chart" ; _ede "github.com/unidoc/unioffice/schema/soo/dml/picture" ; _ef "github.com/unidoc/unioffice/schema/soo/ofc/sharedTypes" ; _bb "github.com/unidoc/unioffice/schema/soo/wml" ; _ea "github.com/unidoc/unioffice/schema/urn/schemas_microsoft_com/vml" ; _gg "github.com/unidoc/unioffice/vmldrawing" ; _ae "github.com/unidoc/unipdf/v3/creator" ; _bc "github.com/unidoc/unipdf/v3/model" ; _c "io/ioutil" ; _e "regexp" ; _f "strconv" ; _a "strings" ; ) ;
// ConvertToPdfWithOptions convert the document to PDF with file given options.
func ConvertToPdfWithOptions ( d * _d . Document , opts * Options ) * _ae . Creator { var _ecde map [ string ] string ; if opts != nil { if opts . ProcessFields { _ecde = _aaeg ( d ) ; } ; if len ( opts . FontFiles ) > 0 { _acee := _ad . RegisterFontsFromFiles ( opts . FontFiles ) ; if _acee != nil { _fa . 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 != "" { _aafg := _ad . RegisterFontsFromDirectory ( opts . FontDirectory ) ; if _aafg != nil { _fa . 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" , _aafg . Error ( ) ) ; } ; } ; } ; var _cbcc * _bb . CT_PPrGeneral ; var _eba * _bb . CT_RPr ; if _dceg := d . Styles . X ( ) . DocDefaults ; _dceg != nil { if _cgff := _dceg . PPrDefault ; _cgff != nil { _cbcc = _cgff . PPr ; } ; if _ceba := _dceg . RPrDefault ; _ceba != nil { _eba = _ceba . RPr ; } ; } ; _feb , _fddf := _fadg ( 210 ) , _fadg ( 297 ) ; _egbe := float64 ( _da . Inch * 1 ) ; _abca , _gbca , _bab , _eceb := _egbe , _egbe , _egbe , _egbe ; var ( _egcg , _abde float64 ; _aeea [ ] * headerFooterRef ; ) ; if _abac := d . BodySection ( ) . X ( ) ; _abac != nil { if _dadg := _abac . PgMar ; _dadg != nil { if _dadg . LeftAttr . ST_UnsignedDecimalNumber != nil { _abca = _ad . PointsFromTwips ( int64 ( * _dadg . LeftAttr . ST_UnsignedDecimalNumber ) ) ; } ; if _dadg . LeftAttr . ST_UnsignedDecimalNumber != nil { _gbca = _ad . PointsFromTwips ( int64 ( * _dadg . RightAttr . ST_UnsignedDecimalNumber ) ) ; } ; if _dadg . TopAttr . Int64 != nil { _bab = _ad . PointsFromTwips ( * _dadg . TopAttr . Int64 ) ; } ; if _dadg . BottomAttr . Int64 != nil { _eceb = _ad . PointsFromTwips ( * _dadg . BottomAttr . Int64 ) ; } ; if _dadg . HeaderAttr . ST_UnsignedDecimalNumber != nil { _egcg = _ad . PointsFromTwips ( int64 ( * _dadg . HeaderAttr . ST_UnsignedDecimalNumber ) ) ; } ; if _dadg . FooterAttr . ST_UnsignedDecimalNumber != nil { _abde = _eceb - _ad . PointsFromTwips ( int64 ( * _dadg . FooterAttr . ST_UnsignedDecimalNumber ) ) ; } ; } ; if _abbea := _abac . PgSz ; _abbea != nil { if _abbea . WAttr != nil { _feb = _ad . PointsFromTwips ( int64 ( * _abbea . WAttr . ST_UnsignedDecimalNumber ) ) ; } ; if _abbea . HAttr != nil { _fddf = _ad . PointsFromTwips ( int64 ( * _abbea . HAttr . ST_UnsignedDecimalNumber ) ) ; } ; } ; for _ , _adcg := range _abac . EG_HdrFtrReferences { if _aebf := _adcg . HeaderReference ; _aebf != nil { _efbc := & headerFooterRef { _acdb : true , _bfab : _aebf . IdAttr , _baag : _aebf . TypeAttr } ; _aeea = append ( _aeea , _efbc ) ; } ; if _ccda := _adcg . FooterReference ; _ccda != nil { _bfcc := & headerFooterRef { _dfdb : true , _bfab : _ccda . IdAttr , _baag : _ccda . TypeAttr } ; _aeea = append ( _aeea , _bfcc ) ; } ; } ; } ; if d . Settings . X ( ) . DefaultTabStop == nil { _agbg = _fadg ( 12.7 ) ; } else { _agbg = _ad . PointsFromTwips ( int64 ( * d . Settings . X ( ) . DefaultTabStop . ValAttr . ST_UnsignedDecimalNumber ) ) ; } ; _bdbd := _ae . New ( ) ; _bdbd . SetPageSize ( _ae . PageSize { _feb , _fddf } ) ; _bdbd . SetPageMargins ( _abca , _gbca , _bab , _eceb ) ; _ccab := & convertContext { _dgaad : _bdbd , _bbba : d , _eacd : _cbcc , _aefg : _eba , _fae : & _ad . Rectangle { Top : _bab , Bottom : _fddf - _eceb , Left : _abca , Right : _feb - _gbca } , _fege : [ ] note { } , _aaaa : map [ int64 ] map [ int64 ] int64 { } , _dag : _ecde , _ccad : opts , _efagc : _aeea , _ffda : _egcg , _dcfb : _abde , _agfd : _abca } ; for _bgad , _bdaf := range d . X ( ) . Body . EG_BlockLevelElts { var _gebg [ ] * _bb . EG_ContentBlockContent ; if _bgad < len ( d . X ( ) . Body . EG_BlockLevelElts ) - 1 { _eeff := d . X ( ) . Body . EG_BlockLevelElts [ _bgad + 1 ] ; _gebg = _eeff . EG_ContentBlockContent ; } ; _ccab . addAbsoluteCBCs ( _bdaf . EG_ContentBlockContent , _gebg ) ; } ; _ccab . addEndnotes ( ) ; _ccab . alignSymbolsVertically ( ) ; _ccab . drawPages ( ) ; _ccab . drawHeaderFooter ( ) ; return _bdbd ; } ; func ( _fbfc * convertContext ) newPage ( ) { _bfbe := & page { } ; _bfbe . _fd = _fbfc . _fae ; _bfbe . _fcg = _bfbe . _fd . Top ; if _fbfc . _aegc { _bfbe . _cf = true ; _bfbe . _fcg += _dfea ; } ; _fbfc . _gfbc = append ( _fbfc . _gfbc , _bfbe ) ; _fbfc . _bebb = _bfbe ; } ; func ( _bda * convertContext ) addInlineSymbol ( _eafb * symbol ) { if len ( _bda . _adcc . _be ) > 0 { _dadb := _bda . _adcc . _be [ len ( _bda . _adcc . _be ) - 1 ] . _edf ; if _dadb == "\u0020" { _bda . addCurrentWordToPa
// ConvertToPdf converts document to PDF file. This package is beta, breaking changes can take place.
func ConvertToPdf ( d * _d . Document ) * _ae . Creator { return ConvertToPdfWithOptions ( d , nil ) } ; func _aaeg ( _aaaad * _d . Document ) map [ string ] string { _eaga := map [ string ] string { } ; for _ , _bcgga := range _aaaad . Paragraphs ( ) { for _ , _bafg := range _bcgga . Runs ( ) { for _ , _bdff := range _bafg . X ( ) . EG_RunInnerContent { if _acc := _bdff . InstrText ; _acc != nil { _aaab , _dagd := _bcaff ( _acc . Content ) ; if _aaab != "" && _dagd != "" { _eaga [ _aaab ] = _dagd ; } ; } ; } ; } ; } ; return _eaga ; } ; func _dfaf ( _bgcf * _d . Document , _dbbfb string ) [ ] * _bb . CT_TblStylePr { _efdg := _bgcf . GetStyleByID ( _dbbfb ) ; var _gcbdg [ ] * _bb . CT_TblStylePr ; if _ddcgeb := _efdg . X ( ) ; _ddcgeb != nil { if _fbbb := _ddcgeb . BasedOn ; _fbbb != nil { _dfaf ( _bgcf , _fbbb . ValAttr ) ; } ; if len ( _ddcgeb . TblStylePr ) > 0 { _gcbdg = _ddcgeb . TblStylePr ; } ; } ; return _gcbdg ; } ; func ( _gecad * convertContext ) adjustRightBoundOfLastSpan ( ) { _eafc := _gecad . _dbca . _cd ; _agbbd := _gecad . _adcf . _fb + _gecad . _ebcb . _cc ; _dbg := _agbbd + _gecad . _adcf . _bgf ; for _ , _gfag := range _gecad . _bebb . _bf { if ( ( _agbbd > _gfag . _ebb . Top && _agbbd < _gfag . _ebb . Bottom ) || ( _dbg > _gfag . _ebb . Top && _agbbd < _gfag . _ebb . Bottom ) ) && ( _eafc > _gfag . _ebb . Left ) { _eafc = _gfag . _ebb . Left ; } ; } ; _gecad . _dbca . _cd = _eafc ; } ; func ( _cdcg * convertContext ) addTextSymbol ( _ccc * symbol ) { _ffbg := _ae . New ( ) ; _cead := _ffbg . NewStyledParagraph ( ) ; _cead . SetMargins ( 0 , 0 , 0 , 0 ) ; _gfac := _cead . Append ( _ccc . _edf ) ; _gcg := 0.0 ; if _ccc . _ag != nil { _gfac . Style = * _ccc . _ag ; if _ccc . _ag . CharSpacing != 0 { _gcg = _ccc . _ag . CharSpacing ; } ; } ; if _ccc . _aagg == nil && _ccc . _ggd == nil { _ccc . _gf = _cead . Height ( ) * _ff ; _ccc . _dga = _cead . Height ( ) ; } ; if _ccc . _bea == 0 { _ccc . _bea = _cead . Width ( ) + _gcg ; } ; if _ccc . _gf < _cdcg . _ebcb . _cbb { _ccc . _gf = _cdcg . _ebcb . _cbb ; } ; if len ( _cdcg . _adcc . _be ) > 0 { _gdfa := _cdcg . _adcc . _be [ len ( _cdcg . _adcc . _be ) - 1 ] . _edf ; if _ad . IsNoSpaceLanguage ( _gdfa ) || ( _gdfa == "\u0020" ) != ( _ccc . _edf == "\u0020" ) { _cdcg . addCurrentWordToParagraph ( ) ; _cdcg . newWord ( ) ; } ; } ; _cdcg . _adcc . _be = append ( _cdcg . _adcc . _be , _ccc ) ; _ccc . _daa = _cdcg . _adcc . _fg ; _cdcg . _adcc . _fg += _ccc . _bea ; if _ccc . _edf != "\u0020" { _cdcg . _adcc . _aad = false ; } ; if _ccc . _edf == "\u000d" { _cdcg . adjustHeights ( _ccc . _gf * 1.13 ) ; _cdcg . adjustHeights ( _ccc . _gf ) ; } ; } ; func _ededg ( _fccef * _bb . EG_RunInnerContent ) bool { if _adag := _fccef . Br ; _adag != nil { return _adag . TypeAttr == _bb . ST_BrTypePage ; } ; return false ; } ; func ( _def * convertContext ) addAbsoluteEGPC ( _bed [ ] * _bb . EG_PContent , _bbcb * _bb . CT_PPr ) bool { _gec := len ( _bed ) ; for _ , _bec := range _bed { for _ , _gac := range _bec . FldSimple { if _gac != nil { _def . addAbsoluteEGPC ( _gac . EG_PContent , _bbcb ) ; } ; } ; if _fff := _bec . Hyperlink ; _fff != nil { _def . _bbed = _fff ; _def . addAbsoluteCRC ( _fff . EG_ContentRunContent , _bbcb ) ; } ; _def . _bbed = nil ; if _def . addAbsoluteCRC ( _bec . EG_ContentRunContent , _bbcb ) { if _gec > 1 { _def . moveCurrentParagraphToNewPage ( ) ; continue ; } else { return true ; } ; } ; _gec -- ; } ; return false ; } ; func ( _bebg * convertContext ) addSeparator ( ) { _bebg . newParagraph ( ) ; _bebg . _ebcb . _fecc = true ; _bebg . _ebcb . _gc = _dfea ; if _bebg . currentParagraphOverflowsCurrentPage ( ) { _bebg . moveCurrentParagraphToNewPage ( ) ; } ; _bebg . addCurrentParagraphToCurrentPage ( ) ; } ; func _decc ( _dafea string ) uint16 { _baega , _fafd := _bddc [ _dafea ] ; if ! _fafd { return 0 ; } ; return _baega ; } ; func ( _gbae * convertContext ) addAbsoluteTable ( _adaf * _bb . CT_Tbl ) { _abcd := _adaf . TblGrid ; if _abcd == nil { return ; } ; _ffeb := len ( _abcd . GridCol ) ; if _ffeb == 0 { return ; } ; _fadc := [ ] float64 { } ; _fdcc := [ ] float64 { } ; _cebd := 0.0 ; for _ , _gfbbf := range _abcd . GridCol { _adaff := 0.0 ; if _gfbbf . WAttr . ST_UnsignedDecimalNumber != nil { _adaff = _ad . PointsFromTwips ( int64 ( * _gfbbf . WAttr . ST_UnsignedDecimalNumber ) ) ; } ; _fadc = append ( _fadc , _adaff ) ; _cebd += _adaff ; } ; for _gegd := 0 ; _gegd < _ffeb ; _gegd ++ { _fdcc = append ( _fdcc , _fadc [ _gegd ] / _cebd ) ; } ; _bcee := _gbae . _dgaad . NewTable ( _ffeb ) ; _bcee . SetColumnWidths ( _fdcc ... ) ; _fdb := _gbae . _dgaad . NewTable ( _ffeb ) ; _fdb . SetColumnWidths ( _fdcc ... ) ; _ceg , _ddfe , _fgafc := _fffb ( _gbae . _bbba , _adaf . TblPr ) ; var _afb [ ]
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.
2022-09-02 11:46:53 +00:00
FontDirectory string ; } ; func _faf ( _befc * _bb . CT_PPr , _gbg * _bb . CT_PPrGeneral , _dadbd * _bb . CT_RPr ) * _bb . CT_PPr { if _befc == nil { _befc = _bb . NewCT_PPr ( ) ; } ; if _gbg != nil { if _befc . Jc == nil && _gbg . Jc != nil { _befc . Jc = _gbg . Jc ; } ; if _befc . Spacing == nil { _befc . Spacing = _gbg . Spacing ; } else if _abgc := _gbg . Spacing ; _abgc != nil { if _befc . Spacing . BeforeAttr == nil { _befc . Spacing . BeforeAttr = _abgc . BeforeAttr ; } ; if _befc . Spacing . AfterAttr == nil { _befc . Spacing . AfterAttr = _abgc . AfterAttr ; } ; if _befc . Spacing . LineAttr == nil { _befc . Spacing . LineAttr = _abgc . LineAttr ; } ; } ; if _gbg . ContextualSpacing != nil { _befc . ContextualSpacing = _gbg . ContextualSpacing ; } ; if _gbg . Ind != nil { if _befc . Ind == nil { _befc . Ind = _gbg . Ind ; } else { _cdbc , _ffbf := _befc . Ind . FirstLineAttr == nil , _befc . Ind . HangingAttr == nil ; if _cdbc && _ffbf && _gbg . Ind . FirstLineAttr != nil { _befc . Ind . FirstLineAttr = _gbg . Ind . FirstLineAttr ; _cdbc = false ; } ; if _cdbc && _ffbf && _gbg . Ind . HangingAttr != nil { _befc . Ind . HangingAttr = _gbg . Ind . HangingAttr ; } ; if _befc . Ind . LeftAttr == nil { _befc . Ind . LeftAttr = _gbg . Ind . LeftAttr ; } ; if _befc . Ind . RightAttr == nil { _befc . Ind . RightAttr = _gbg . Ind . RightAttr ; } ; } ; } ; if _befc . Tabs == nil && _gbg . Tabs != nil { _befc . Tabs = _gbg . Tabs ; } ; if _gbg . PBdr != nil { _befc . PBdr = _gbg . PBdr ; } ; } ; if _dadbd != nil { var _aec _bb . CT_ParaRPr ; if _befc . RPr == nil { _aec = * _bb . NewCT_ParaRPr ( ) ; } else { _aec = * _befc . RPr ; } ; if _aec . Color == nil && _dadbd . Color != nil { _aec . Color = _dadbd . Color ; } ; if _aec . Spacing == nil && _dadbd . Spacing != nil { _aec . Spacing = _dadbd . Spacing ; } ; if _aec . Sz == nil && _dadbd . Sz != nil { _aec . Sz = _dadbd . Sz ; } ; if _aec . SzCs == nil && _dadbd . SzCs != nil { _aec . SzCs = _dadbd . SzCs ; } ; if _aec . B == nil && _dadbd . B != nil { _aec . B = _dadbd . B ; } ; if _aec . I == nil && _dadbd . I != nil { _aec . I = _dadbd . I ; } ; if _aec . RFonts == nil && _dadbd . RFonts != nil { _aec . RFonts = _dadbd . RFonts ; } ; if _aec . VertAlign == nil && _dadbd . VertAlign != nil { _aec . VertAlign = _dadbd . VertAlign ; } ; if _aec . Bdr == nil && _dadbd . Bdr != nil { _aec . Bdr = _dadbd . Bdr ; } ; if _aec . Caps == nil && _dadbd . Caps != nil { _aec . Caps = _dadbd . Caps ; } ; if _aec . SmallCaps == nil && _dadbd . SmallCaps != nil { _aec . SmallCaps = _dadbd . SmallCaps ; } ; _befc . RPr = & _aec ; } ; return _befc ; } ; type block struct { _ceb * _ae . Block ; _ec float64 ; _cbea float64 ; _ba bool ; _gb float64 ; _ecg _ae . Color ; } ; var _agbg float64 ; func ( _dbcb * convertContext ) addEmptyLine ( ) { _dbcb . addTextSymbol ( & symbol { _edf : "\u000d" , _bea : 0 , _gf : _dbcb . _ebcb . _cbb } ) ; } ; var _cbcf = map [ int32 ] int32 { 61623 : 8226 , 61607 : 8226 , 61558 : 9830 , 61656 : 8594 , 61692 : 8730 } ; func ( _gdg * convertContext ) addAbsoluteCBCs ( _dbda [ ] * _bb . EG_ContentBlockContent , _ecge [ ] * _bb . EG_ContentBlockContent ) { _gag := "" ; _dfa := false ; for _ , _dbe := range _ecge { for _ , _fbd := range _dbe . P { if len ( _fbd . EG_PContent ) == 0 { _dfa = true ; break ; } ; if _fbd . PPr != nil && _fbd . PPr . PStyle != nil { _gag = _fbd . PPr . PStyle . ValAttr ; break ; } ; } ; } ; for _ , _dgb := range _dbda { for _ , _aea := range _dgb . P { _gdg . newParagraph ( ) ; if _aea . PPr != nil && _aea . PPr . PStyle == nil { _fbda := _gdg . _bbba . Styles . ParagraphStyles ( ) ; for _ , _ggde := range _fbda { if _cgc := _ggde . X ( ) . DefaultAttr ; _cgc != nil { if _efe := _cgc . Bool ; _efe != nil && * _efe { _aea . PPr = _faf ( _aea . PPr , _ggde . X ( ) . PPr , _ggde . X ( ) . RPr ) ; } ; if _bfa := _cgc . ST_OnOff1 ; _bfa == _ef . ST_OnOff1On { _aea . PPr = _faf ( _aea . PPr , _ggde . X ( ) . PPr , _ggde . X ( ) . RPr ) ; } ; break ; } ; } ; } ; _bcg , _dda := _gdg . combinePPrWithStyles ( _aea . PPr ) ; if _dda != nil { _gdg . _fdcd = _dda ; } ; if _aea . PPr != nil && _aea . PPr . PStyle != nil { if _aea . PPr . PStyle . ValAttr != _gag { _aea . PPr . ContextualSpacing = nil ; } ; } ; if _bcg != nil && _bcg . SectPr != nil { for _ , _bga := range _bcg . SectPr . EG_HdrFtrReferences { if _bce := _bga . HeaderReference ; _bce != nil { _gfg := & headerFooterRef { _acdb : true , _bfab : _bce . IdAttr , _baag : _bce . TypeAttr } ; _gdg . _bebb . _fe = append ( _gdg . _bebb . _fe , _gfg ) ; } ; if _gce := _bga . FooterReference ; _gce != nil { _bcc := & headerFooterRef { _dfdb : true , _bfab : _gce . IdAttr , _baag : _gce . TypeAttr } ; _gdg . _bebb . _fe = append ( _gdg . _bebb
2022-06-27 19:44:23 +00:00
// FontStyle represents a kind of font styling. It can be FontStyle_Regular, FontStyle_Bold, FontStyle_Italic and FontStyle_BoldItalic.
2022-09-02 11:46:53 +00:00
type FontStyle = _ad . FontStyle ; func ( _begc * convertContext ) makePdfBlockFromChart ( _eae * _fc . Chart , _gfd , _fbde float64 ) ( * _ae . Block , error ) { _acaa := _eae . CT_RelId . IdAttr ; _ccea := _begc . _bbba . GetChartSpaceByRelId ( _acaa ) ; if _ccea == nil { return nil , _g . New ( "\u004e\u006f\u0020\u0063\u0068\u0061\u0072\u0074\u0073\u0070\u0061\u0063\u0065" ) ; } ; var _debc * _ed . Theme ; _faad := _begc . _bbba . Themes ( ) ; if len ( _faad ) > 0 { _debc = _faad [ 0 ] ; } ; return _ad . MakeBlockFromChartSpace ( _ccea , _gfd , _fbde , _debc ) ; } ; func ( _eef * convertContext ) alignParagraph ( ) { _bbf := _eef . _ebcb ; if _bbf . _bfe == _ae . TextAlignmentLeft { return ; } ; _aegf := len ( _bbf . _aef ) - 1 ; for _dbc , _feca := range _bbf . _aef { _cbeb := len ( _feca . _ce ) - 1 ; for _egde , _eeg := range _feca . _ce { _cgb := true ; _cade := len ( _eeg . _de ) ; _geca := 0.0 ; for _aba := len ( _eeg . _de ) - 1 ; _aba >= 0 ; _aba -- { _gece := _eeg . _de [ _aba ] ; if _cgb && _gece . _aad { _cade = _aba ; } else { _cgb = false ; for _ , _eded := range _gece . _be { _geca += _eded . _bea ; } ; } ; } ; _eeg . _de = _eeg . _de [ : _cade ] ; _dbb := _eeg . _cd - _eeg . _bca - _geca ; switch _bbf . _bfe { case _ae . TextAlignmentRight : _eeg . moveRight ( _dbb ) ; case _ae . TextAlignmentCenter : _eeg . moveRight ( _dbb / 2 ) ; case _ae . TextAlignmentJustify : if _dbc != _aegf || _egde != _cbeb { _fgf := [ ] * word { } ; for _ , _dafg := range _eeg . _de { if _dafg . _aad { _fgf = append ( _fgf , _dafg ) ; } ; } ; _bgd := _dbb / float64 ( len ( _fgf ) ) ; for _ , _dfdg := range _fgf { _dfdg . _fg += _bgd ; } ; var _bfea * word ; for _ , _ggfg := range _eeg . _de { if _bfea != nil { _ggfg . _eg = _bfea . _eg + _bfea . _fg ; } ; _bfea = _ggfg ; } ; } ; } ; } ; } ; } ; func ( _eefgf * convertContext ) makePdfBlockFromCBCs ( _gcceg [ ] [ ] * _bb . EG_ContentBlockContent , _bgde , _ggcd float64 , _efgbg * _ad . Rectangle , _cecf bool , _efcb * prefix ) ( * _ae . Block , error ) { if _efgbg == nil { _efgbg = & _ad . Rectangle { } ; } ; _gcge := & _ad . Rectangle { Top : _efgbg . Top , Bottom : _ggcd - _efgbg . Bottom , Left : _efgbg . Left , Right : _bgde - _efgbg . Right } ; _defe := _ad . MakeTempCreator ( _bgde , _ggcd ) ; _aeedd := & convertContext { _dgaad : _defe , _bbba : _eefgf . _bbba , _fae : _gcge , _fdcd : _efcb } ; for _ , _gab := range _gcceg { _aeedd . addAbsoluteCBCs ( _gab , nil ) ; } ; if _cecf { _dffb := 0.0 ; for _ , _ccfc := range _aeedd . _gfbc { for _ , _ecbf := range _ccfc . _fce { _dffb += ( _ecbf . _gc + _ecbf . _aag . Top + _ecbf . _aag . Bottom ) ; } ; } ; _gcge . Bottom = _dffb - _efgbg . Bottom ; _defe = _ad . MakeTempCreator ( _bgde , _dffb ) ; _aeedd = & convertContext { _dgaad : _defe , _bbba : _eefgf . _bbba , _fae : _gcge , _fdcd : _efcb } ; for _ , _dccef := range _gcceg { _aeedd . addAbsoluteCBCs ( _dccef , nil ) ; } ; } ; _aeedd . alignSymbolsVertically ( ) ; _aeedd . _dgaad . NewPage ( ) ; _aeedd . drawPage ( _aeedd . _gfbc [ len ( _aeedd . _gfbc ) - 1 ] ) ; return _ad . MakeBlockFromCreator ( _defe ) ; } ; func _fadg ( _cbca float64 ) float64 { return _cbca * _da . Millimeter } ; type convertContext struct { _dgaad * _ae . Creator ; _bbba * _d . Document ; _eacd * _bb . CT_PPrGeneral ; _aefg * _bb . CT_RPr ; _fdge * _ae . StyledParagraph ; _gfbc [ ] * page ; _bebb * page ; _fae * _ad . Rectangle ; _ebcb * paragraph ; _adcf * line ; _dbca * span ; _adcc * word ; _bbed * _bb . CT_Hyperlink ; _bcbb * _bb . CT_ParaRPr ; _ffdd * _bb . CT_PPr ; _fege [ ] note ; _fdcd * prefix ; _abcdg bool ; _gggc bool ; _gbc bool ; _agfd float64 ; _ffda float64 ; _dcfb float64 ; _bggd float64 ; _aegc bool ; _aaaa map [ int64 ] map [ int64 ] int64 ; _dag map [ string ] string ; _ccad * Options ; _efagc [ ] * headerFooterRef ; _cdbf [ ] * paragraph ; _dbcd [ ] * paragraph ; } ;
2022-02-25 19:20:45 +00:00
2022-09-02 11:46:53 +00:00
// RegisterFont makes a PdfFont accessible for using in converting to PDF.
func RegisterFont ( name string , style FontStyle , font * _bc . PdfFont ) { _ad . RegisterFont ( name , style , font ) ; } ; func init ( ) { _gdcd = _e . MustCompile ( "\u0053E\u0054 \u0028\u002e\u002b\u0029\u0020\u0022\u0028\u002e\u002b\u0029\u0022" ) ; _febe = _e . MustCompile ( "\u0052\u0045\u0046\u0020\u0028\u002e\u002b\u003f\u0029\u0020" ) ; } ; func ( _gdbb * convertContext ) addAnchorBlocks ( _ecfa [ ] * _bb . EG_PContent ) { for _ , _edg := range _ecfa { for _ , _dcff := range _edg . EG_ContentRunContent { if _cbed := _dcff . R ; _cbed != nil { for _ , _dfca := range _cbed . EG_RunInnerContent { if _efeb := _dfca . Drawing ; _efeb != nil { for _ , _bccc := range _efeb . Anchor { var _cdad , _dcad , _bad , _gbfd float64 ; _gaeb , _bcf := _bccc . PositionH , _bccc . PositionV ; if _eafe := _gaeb . Choice ; _eafe != nil { if _eafe . PosOffset != nil { _cdad = _da . FromEMU ( int64 ( * _eafe . PosOffset ) ) ; } ; } ; if _dad := _bcf . Choice ; _dad != nil { if _dad . PosOffset != nil { _dcad = _da . FromEMU ( int64 ( * _dad . PosOffset ) ) ; } ; } ; if _gdbg := _bccc . Extent ; _gdbg != nil { _gbfd = _da . FromEMU ( _gdbg . CxAttr ) ; _bad = _da . FromEMU ( _gdbg . CyAttr ) ; } ; _gba := _gdbb . _ebcb . _cc + _dcad ; _eag := _gba + _bad ; _fegb := _gdbb . _ebcb . _bg + _cdad ; _eagf := _fegb + _gbfd ; _gecb := _dcad + _bad ; if _gecb > _gdbb . _ebcb . _aeb { _gdbb . _ebcb . _aeb = _gecb ; } ; if _bccc . Choice != nil && _bccc . Choice . WrapNone == nil { _gdbb . _ebcb . _ga = append ( _gdbb . _ebcb . _ga , & zoneToSkip { _ebb : & _ad . Rectangle { Top : _gba , Bottom : _eag , Left : _fegb , Right : _eagf } , _fec : _bccc . Choice } ) ; } ; if _efa := _bccc . Graphic ; _efa != nil { if _cdf := _efa . GraphicData ; _cdf != nil { for _ , _fdc := range _cdf . Any { if _beba , _agc := _fdc . ( * _ede . Pic ) ; _agc { _gfab , _adee := _gdbb . makePdfImageFromGraphics ( _beba ) ; if _adee != nil { _fa . Log . Debug ( "C\u0061\u006e\u006e\u006ft \u0072e\u0061\u0064\u0020\u0069\u006da\u0067\u0065\u003a\u0020\u0025\u0073" , _adee ) ; } ; if _gfab != nil { _gfab . Scale ( _gbfd / _gfab . Width ( ) , _bad / _gfab . Height ( ) ) ; _abc := & image { _aac : _gfab , _fda : _fegb , _fgaf : _gba } ; if _bccc . BehindDocAttr { _gdbb . _ebcb . _bgc = append ( _gdbb . _ebcb . _bgc , _abc ) ; } else { _gdbb . _ebcb . _gd = append ( _gdbb . _ebcb . _gd , _abc ) ; } ; } ; } else if _ecgbg , _beg := _fdc . ( * _fc . Chart ) ; _beg { _aae , _acg := _gdbb . makePdfBlockFromChart ( _ecgbg , _gbfd , _bad ) ; if _acg != nil { _fa . Log . Debug ( "C\u0061\u006e\u006e\u006ft \u0072e\u0061\u0064\u0020\u0062\u006co\u0063\u006b\u003a\u0020\u0025\u0073" , _acg ) ; } ; if _aae != nil { _aab := & block { _ceb : _aae , _ec : _fegb , _cbea : _gba } ; if _bccc . BehindDocAttr { _gdbb . _ebcb . _bbc = append ( _gdbb . _ebcb . _bbc , _aab ) ; } else { _gdbb . _ebcb . _fea = append ( _gdbb . _ebcb . _fea , _aab ) ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; } ; func _deea ( _adgg * _bb . CT_TblWidth , _gcgg , _eccb float64 ) float64 { if _adgg != nil { if _agef := _adgg . WAttr ; _agef != nil { if _ffeg := _agef . ST_DecimalNumberOrPercent ; _ffeg != nil { if _fgcg := _ffeg . ST_UnqualifiedPercentage ; _fgcg != nil { switch _adgg . TypeAttr { case _bb . ST_TblWidthDxa : return float64 ( * _fgcg ) / 20 ; case _bb . ST_TblWidthPct : return float64 ( * _fgcg ) / 100 * _gcgg ; default : return _eccb ; } ; } ; } ; } ; } ; return _eccb ; } ; func ( _caf * convertContext ) drawPage ( _daad * page ) { if _daad . _cf { _deg := _daad . _fd . Top + _dfea * _ca ; _caa := _daad . _fd . Left ; _dgaa := _daad . _fd . Right ; _ad . DrawLine ( _caf . _dgaad , _caa , _deg , _dgaa , _deg , _ffd , _ae . ColorBlack ) ; } ; for _ , _cdc := range _daad . _dd { _dac ( _caf . _dgaad , _cdc ) ; } ; for _ , _cg := range _daad . _fab { _beb ( _caf . _dgaad , _cg ) ; } ; for _ , _fbc := range _daad . _fce { if _fbc . _fecc { _gfa := _fbc . _cc + _dfea * _ca ; _eca := _daad . _fd . Left ; _cafd := _eca + _fadg ( 50 ) ; _ad . DrawLine ( _caf . _dgaad , _eca , _gfa , _cafd , _gfa , _ffd , _ae . ColorBlack ) ; } else { for _ , _gga := range _fbc . _aef { for _ , _fdg := range _gga . _ce { for _ , _bae := range _fdg . _de { for _ , _dba := range _bae . _be { if _dba . _ggd != nil { _dba . _ggd . SetPos ( _bae . _eg + _dba . _daa , _fbc . _cc + _gga . _fb ) ; _caf . _dgaad . Draw ( _dba . _ggd ) ; } else if _dba . _aagg != nil { _dba . _aagg . _ec = _bae . _eg + _dba . _daa ; _dba . _aagg . _cbea = _fbc . _cc + _gga . _fb ; _beb ( _caf . _dgaad , _dba . _aagg ) ; } else { _dgfa := _caf . _dgaad . NewStyledParagraph ( ) ; if _dba . _bbd { _dba . _cdb = 0 ; } else if _dba . _eec { _dba . _cd
2022-06-27 19:44:23 +00:00
2022-09-02 11:46:53 +00:00
// 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 _ad . RegisterFontsFromDirectory ( dirName ) } ; func _bcgc ( _fdded uint16 ) string { switch _fdded { case 0x429 , 0x401 , 0x801 , 0xc01 , 0x1001 , 0x1401 , 0x1801 , 0x1c01 , 0x2001 , 0x2401 , 0x2801 , 0x2c01 , 0x3001 , 0x3401 , 0x3801 , 0x3c01 , 0x4001 , 0x420 , 0x846 , 0x859 , 0x45f , 0x460 , 0x463 , 0x48c : return "\u0041\u0072\u0061\u0062" ; case 0x42b : return "\u0041\u0072\u006d\u006e" ; case 0x445 , 0x845 , 0x44d , 0x458 : return "\u0042\u0065\u006e\u0067" ; case 0x45d : return "\u0043\u0061\u006e\u0073" ; case 0x45c : return "\u0043\u0068\u0065\u0072" ; case 0x419 , 0x402 , 0x281a , 0x422 , 0x819 , 0xc1a , 0x1c1a , 0x201a , 0x301a , 0x423 , 0x428 , 0x82c , 0x42f , 0x43f , 0x440 , 0x843 , 0x444 , 0x450 , 0x46d , 0x485 : return "\u0043\u0072\u0079\u006c" ; case 0x439 , 0x44e , 0x44f , 0x457 , 0x459 , 0x860 , 0x461 , 0x861 : return "\u0044\u0065\u0076\u0061" ; case 0x45e , 0x473 , 0x873 : return "\u0045\u0074\u0068\u0069" ; case 0x437 : return "\u0047\u0065\u006f\u0072" ; case 0x408 : return "\u0047\u0072\u0065\u006b" ; case 0x447 : return "\u0047\u0075\u006a\u0072" ; case 0x446 : return "\u0047\u0075\u0072\u0075" ; case 0x412 : return "\u0048\u0061\u006e\u0067" ; case 0x804 , 0x1004 : return "\u0048\u0061\u006e\u0073" ; case 0x404 , 0xc04 , 0x1404 : return "\u0048\u0061\u006e\u0074" ; case 0x40d , 0x43d : return "\u0048\u0065\u0062\u0072" ; case 0x411 : return "\u004a\u0070\u0061\u006e" ; case 0x453 : return "\u004b\u0068\u006d\u0072" ; case 0x44b : return "\u004b\u006e\u0064\u0061" ; case 0x454 : return "\u004c\u0061\u006f\u006f" ; case 0x409 , 0xc09 , 0x809 , 0x1009 , 0x403 , 0x406 , 0x413 , 0x813 , 0x479 , 0x40b , 0x40c , 0xc0c , 0x407 , 0x807 , 0xc07 , 0x1007 , 0x1407 , 0x410 , 0x414 , 0x814 , 0x416 , 0x816 , 0x40a , 0x41d , 0x405 , 0x40e , 0x415 , 0x41f , 0x42d , 0x424 , 0x426 , 0x427 , 0x418 , 0x818 , 0x241a , 0x41a , 0x491 , 0x83c , 0x430 , 0x431 , 0x432 , 0x433 , 0x434 , 0x435 , 0x436 , 0x425 , 0x456 , 0x41b , 0x1409 , 0x1809 , 0x1c09 , 0x2009 , 0x2409 , 0x2809 , 0x2c09 , 0x3009 , 0x3409 , 0x3809 , 0x3c09 , 0x4009 , 0x4409 , 0x4809 , 0x80a , 0xc0a , 0x100a , 0x140a , 0x180a , 0x1c0a , 0x200a , 0x240a , 0x280a , 0x2c0a , 0x300a , 0x340a , 0x380a , 0x3c0a , 0x400a , 0x440a , 0x480a , 0x4c0a , 0x500a , 0x540a , 0x80c , 0x100c , 0x140c , 0x180c , 0x1c0c , 0x200c , 0x240c , 0x280c , 0x2c0c , 0x300c , 0x340c , 0x3c0c , 0x380c , 0x40f , 0x810 , 0x417 , 0x81a , 0x101a , 0x141a , 0x181a , 0x2c1a , 0x41c , 0x81d , 0x421 , 0x42c , 0x42e , 0x82e , 0x438 , 0x43a , 0x43b , 0x83b , 0xc3b , 0x103b , 0x143b , 0x183b , 0x1c3b , 0x203b , 0x243b , 0x43e , 0x83e , 0x441 , 0x442 , 0x443 , 0x452 , 0x85d , 0x85f , 0x462 , 0x464 , 0x466 , 0x467 , 0x468 , 0x469 , 0x46a , 0x46b , 0x86b , 0xc6b , 0x46c , 0x46e , 0x46f , 0x470 , 0x471 , 0x472 , 0x474 , 0x475 , 0x476 , 0x477 , 0x47a , 0x47c , 0x47e , 0x481 , 0x482 , 0x483 , 0x484 , 0x486 , 0x487 , 0x488 : return "\u004c\u0061\u0074\u006e" ; case 0x44c : return "\u004d\u006c\u0079\u006d" ; case 0x850 : return "\u004d\u006f\u006e\u0067" ; case 0x455 : return "\u004d\u0079\u006d\u0072" ; case 0x448 : return "\u004f\u0072\u0079\u0061" ; case 0x45b : return "\u0053\u0069\u006e\u0068" ; case 0x45a : return "\u0053\u0079\u0072\u0063" ; case 0x449 : return "\u0054\u0061\u006d\u006c" ; case 0x44a : return "\u0054\u0065\u006c\u0075" ; case 0x465 : return "\u0054\u0068\u0061\u0061" ; case 0x41e : return "\u0054\u0068\u0061\u0069" ; case 0x851 , 0x451 : return "\u0054\u0069\u0062\u0074" ; case 0x480 : return "\u0055\u0069\u0067\u0068" ; case 0x42a : return "\u0056\u0069\u0065\u0074" ; case 0x478 : return "\u0059\u0069\u0069\u0069" ; } ; return "" ; } ; func _fffb ( _fdbf * _d . Document , _ecca * _bb . CT_TblPr ) ( * _bb . CT_TblPr , * _bb . CT_PPrGeneral , * _bb . CT_RPr ) { _abaa := _bb . NewCT_PPrGeneral ( ) ; _eceg := _bb . NewCT_RPr ( ) ; if _ecca == nil { _ecca = _bb . NewCT_TblPr ( ) ; } else { if _ecca . TblStyle != nil { _ecca , _abaa , _eceg = _aecg ( _fdbf , _ecca . TblStyle . ValAttr , _ecca , _abaa , _eceg ) ; } ; } ; return _ecca , _abaa , _eceg ; } ; func ( _ddcf * convertContext ) addCurrentWordToParagraph ( ) { for { _gaag := _ddcf . _adcf . _bfd ; _bbcg := _gaag + _ddcf . _adcc . _fg ; if _bbcg > _ddcf . _adcf . _dcc { _ddcf . newLine ( ) ; } ; _bfc := _ddcf . _ebcb . _cc + _ddcf . _adcf . _fb ; _cefa := _bfc + _ddcf . _adcf . _bgf ; _acb := false ; _efea := append ( _ddcf . _bebb . _bf , _ddcf . _ebcb . _ga ... ) ; for _ , _eafa := range _efea { _fabdb := _eafa . _ebb ; if ( ( _bfc > _fabdb . Top && _bfc < _fabdb . Bottom ) || ( _cefa > _fabdb . Top && _cefa < _fabdb . Bottom ) ) && ( ( _gaag > _fabdb . Left && _gaag < _fabdb . Right ) || ( _bbcg > _fabdb . Left && _bbcg < _fabdb . Right ) ) { _acb = true ; if _ddcf . _adcf . _bfd < _fa