2017-08-28 20:56:18 -05:00
//
2020-08-23 14:15:53 +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/
2024-10-17 17:05:28 +00:00
package presentation ; import ( _baf "archive/zip" ; _gf "bytes" ; _cba "encoding/xml" ; _ga "errors" ; _ff "fmt" ; _ea "github.com/unidoc/unioffice" ; _dab "github.com/unidoc/unioffice/common" ; _ba "github.com/unidoc/unioffice/common/logger" ; _ge "github.com/unidoc/unioffice/common/tempstorage" ;
_fa "github.com/unidoc/unioffice/drawing" ; _da "github.com/unidoc/unioffice/internal/formatutils" ; _bd "github.com/unidoc/unioffice/internal/license" ; _dfg "github.com/unidoc/unioffice/measurement" ; _fc "github.com/unidoc/unioffice/schema/soo/dml" ; _g "github.com/unidoc/unioffice/schema/soo/dml/chart" ;
_df "github.com/unidoc/unioffice/schema/soo/ofc/sharedTypes" ; _fe "github.com/unidoc/unioffice/schema/soo/pkg/relationships" ; _ffc "github.com/unidoc/unioffice/schema/soo/pml" ; _f "github.com/unidoc/unioffice/zippkg" ; _a "image" ; _cb "image/jpeg" ; _gg "io" ; _gge "math" ;
_eaa "os" ; _e "path" ; _fg "sort" ; _d "strconv" ; _c "strings" ; ) ;
2020-08-23 14:15:53 +00:00
2024-10-17 17:05:28 +00:00
// NotesViewPr returns the NotesViewPr property.
func ( _cded ViewProperties ) NotesViewPr ( ) * _ffc . CT_NotesViewProperties { return _cded . _cgdg . NotesViewPr ; } ;
2024-05-08 13:54:39 +00:00
2024-10-17 17:05:28 +00:00
// ClrMru returns the ClrMru property.
func ( _ecfd PresentationProperties ) ClrMru ( ) * _fc . CT_ColorMRU { return _ecfd . _bfbd . ClrMru } ;
2024-05-08 13:54:39 +00:00
2024-10-17 17:05:28 +00:00
// SlideMasters returns the slide masters defined in the presentation.
func ( _bdgb * Presentation ) SlideMasters ( ) [ ] SlideMaster { _dd := [ ] SlideMaster { } ; for _agfe , _dfcb := range _bdgb . _fdea { if _agfe < len ( _bdgb . _ccae ) { _dd = append ( _dd , SlideMaster { _bdgb , _bdgb . _ccae [ _agfe ] , _dfcb } ) ; } ; } ; return _dd ; } ;
2024-05-08 13:54:39 +00:00
2024-10-17 17:05:28 +00:00
// SetText sets the text of a placeholder for the initial paragraph. This is a
// shortcut method that is useful for things like titles which only contain a
// single paragraph.
func ( _cfa PlaceHolder ) SetText ( text string ) { _cfa . Clear ( ) ; _ecfg := _fc . NewEG_TextRun ( ) ; _ecfg . R = _fc . NewCT_RegularTextRun ( ) ; _ecfg . R . T = text ; if len ( _cfa . _eag . TxBody . P ) == 0 { _cfa . _eag . TxBody . P = append ( _cfa . _eag . TxBody . P , _fc . NewCT_TextParagraph ( ) ) ;
} ; _cfa . _eag . TxBody . P [ 0 ] . EG_TextRun = nil ; _cfa . _eag . TxBody . P [ 0 ] . EG_TextRun = append ( _cfa . _eag . TxBody . P [ 0 ] . EG_TextRun , _ecfg ) ; } ;
2022-02-25 19:20:45 +00:00
2024-10-17 17:05:28 +00:00
// GetImageByRelID returns an ImageRef with the associated relation ID in the
// slide.
func ( _fdag * Slide ) GetImageByRelID ( relID string ) ( _dab . ImageRef , bool ) { _febd := _fdag . getSlideRels ( ) ; if ( _febd == _dab . Relationships { } ) { return _dab . ImageRef { } , false ; } ; _fedb := _febd . GetTargetByRelId ( relID ) ; for _ , _efcgb := range _fdag . _caff . Images { if _efcgb . Target ( ) == _fedb { return _efcgb , true ;
} ; } ; return _dab . ImageRef { } , false ; } ;
2021-08-23 20:44:48 +00:00
2024-10-17 17:05:28 +00:00
// SetSize sets the slide size, take argument of SlideScreenSize.
func ( _eccd * SlideSize ) SetSize ( sz SlideScreenSize ) { _eccd . _bgbf . CxAttr = sz [ 0 ] ; _eccd . _bgbf . CyAttr = sz [ 1 ] ; } ;
2021-01-04 16:11:39 +00:00
2024-10-17 17:05:28 +00:00
// Slide represents a slide of a presentation.
type Slide struct { _beeb * _ffc . CT_SlideIdListEntry ; _gede * _ffc . Sld ; _caff * Presentation ; _afg * _fc . CT_ColorMapping ; } ;
2024-05-08 13:54:39 +00:00
2024-10-17 17:05:28 +00:00
// SetOffsetX sets horizontal offset of text box in distance units (see measurement package).
func ( _babd TextBox ) SetOffsetX ( offX float64 ) { _bcc := _babd . getOff ( ) ; _ggb := _dfg . ToEMU ( offX ) ; _bcc . XAttr = _fc . ST_Coordinate { ST_CoordinateUnqualified : & _ggb } ; } ;
2022-04-09 14:27:46 +00:00
2024-10-17 17:05:28 +00:00
// Close closes the presentation, removing any temporary files that might have been
// created when opening a document.
func ( _deg * Presentation ) Close ( ) error { if _deg . TmpPath != "" { return _ge . RemoveAll ( _deg . TmpPath ) ; } ; return nil ; } ; func ( _fd * chart ) RelId ( ) string { return _fd . _gaf } ;
2022-01-15 21:17:38 +00:00
2024-10-17 17:05:28 +00:00
// TableInfo is used for keep information about a table, a row and a cell where the text is located.
type TableInfo struct { Table * _fc . CT_Table ; Row * _fc . CT_TableRow ; Cell * _fc . CT_TableCell ; RowIndex int ; ColIndex int ; } ;
2021-09-22 16:41:01 +00:00
2024-10-17 17:05:28 +00:00
// PresentationText is an array of extracted text items which has some methods for representing extracted text.
type PresentationText struct { Slides [ ] * SlideText ; } ;
2022-02-25 19:20:45 +00:00
2024-09-16 09:59:58 +00:00
// GetColorBySchemeColor returns *dml.CT_Color mapped to scheme colors like dk1, lt1 etc. depending on what theme is used in the presentation.
2024-10-17 17:05:28 +00:00
func ( _aebe * Slide ) GetColorBySchemeColor ( schClr _fc . ST_SchemeColorVal ) * _fc . CT_Color { _aebe . ensureClrMap ( ) ; _cag := _aebe . _afg ; if _cag == nil { return nil ; } ; var _gef _fc . ST_ColorSchemeIndex ; switch schClr . String ( ) { case "\u0062\u0067\u0031" : _gef = _cag . Bg1Attr ;
case "\u0062\u0067\u0032" : _gef = _cag . Bg2Attr ; case "\u0074\u0078\u0031" : _gef = _cag . Tx1Attr ; case "\u0074\u0078\u0032" : _gef = _cag . Tx2Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0031" : _gef = _cag . Accent1Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0032" : _gef = _cag . Accent2Attr ;
case "\u0061c\u0063\u0065\u006e\u0074\u0033" : _gef = _cag . Accent3Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0034" : _gef = _cag . Accent4Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0035" : _gef = _cag . Accent5Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0036" : _gef = _cag . Accent6Attr ;
case "\u0068\u006c\u0069n\u006b" : _gef = _cag . HlinkAttr ; case "\u0066\u006f\u006c\u0048\u006c\u0069\u006e\u006b" : _gef = _cag . FolHlinkAttr ; case "\u0064\u006b\u0031" : _gef = _fc . ST_ColorSchemeIndexDk1 ; case "\u0064\u006b\u0032" : _gef = _fc . ST_ColorSchemeIndexDk2 ;
case "\u006c\u0074\u0031" : _gef = _fc . ST_ColorSchemeIndexLt1 ; case "\u006c\u0074\u0032" : _gef = _fc . ST_ColorSchemeIndexLt2 ; default : _gef = _fc . ST_ColorSchemeIndexUnset ; } ; _ffbe := _aebe . _caff . _ccf [ 0 ] ; _cdecf := _ffbe . ThemeElements ; if _cdecf == nil { return nil ;
} ; var _dgae * _fc . CT_Color ; _gcab := _cdecf . ClrScheme ; switch _gef . String ( ) { case "\u0064\u006b\u0031" : _dgae = _gcab . Dk1 ; case "\u0064\u006b\u0032" : _dgae = _gcab . Dk2 ; case "\u006c\u0074\u0031" : _dgae = _gcab . Lt1 ; case "\u006c\u0074\u0032" : _dgae = _gcab . Lt2 ;
case "\u0061c\u0063\u0065\u006e\u0074\u0031" : _dgae = _gcab . Accent1 ; case "\u0061c\u0063\u0065\u006e\u0074\u0032" : _dgae = _gcab . Accent2 ; case "\u0061c\u0063\u0065\u006e\u0074\u0033" : _dgae = _gcab . Accent3 ; case "\u0061c\u0063\u0065\u006e\u0074\u0034" : _dgae = _gcab . Accent4 ;
case "\u0061c\u0063\u0065\u006e\u0074\u0035" : _dgae = _gcab . Accent5 ; case "\u0061c\u0063\u0065\u006e\u0074\u0036" : _dgae = _gcab . Accent6 ; case "\u0068\u006c\u0069n\u006b" : _dgae = _gcab . Hlink ; case "\u0066\u006f\u006c\u0048\u006c\u0069\u006e\u006b" : _dgae = _gcab . FolHlink ;
default : return nil ; } ; return _dgae ; } ;
2020-08-23 14:15:53 +00:00
2024-10-17 17:05:28 +00:00
// HtmlPubPr returns the HtmlPubPr property.
func ( _cbfg PresentationProperties ) HtmlPubPr ( ) * _ffc . CT_HtmlPublishProperties { return _cbfg . _bfbd . HtmlPubPr ; } ;
2021-04-23 20:00:00 +00:00
2024-10-17 17:05:28 +00:00
// Image is an image within a slide.
type Image struct { _dc * _ffc . CT_Picture } ; func _fec ( _dgab [ ] * _ffc . CT_GroupShapeChoice ) [ ] * _ffc . CT_GroupShapeChoice { var _eagc [ ] * _ffc . CT_GroupShapeChoice ; for _ , _ecc := range _dgab { if len ( _ecc . Pic ) == 0 { _eagc = append ( _eagc , _ecc ) ; } ; } ; return _eagc ;
2024-06-20 13:33:45 +00:00
} ;
2020-06-07 20:13:15 +07:00
2024-10-17 17:05:28 +00:00
// SlideSize returns presentation slide size.
func ( _fdgb * Presentation ) SlideSize ( ) SlideSize { if _fdgb . _aee . SldSz == nil { _fdgb . _aee . SldSz = _ffc . NewCT_SlideSize ( ) ; } ; return SlideSize { _fdgb . _aee . SldSz , _fdgb } ; } ;
2023-09-16 17:56:36 +00:00
2024-10-17 17:05:28 +00:00
// PlaceHolder is a place holder from a slide.
type PlaceHolder struct { _eag * _ffc . CT_Shape ; _bea * _ffc . Sld ; } ;
2017-10-03 09:55:27 -05:00
2024-10-17 17:05:28 +00:00
// GetLayoutImageByRelID returns an ImageRef with the associated relation ID in the
// slide layout.
func ( _fbfb * Slide ) GetLayoutImageByRelID ( relID string ) ( _dab . ImageRef , bool ) { _dgdf := _fbfb . getSlideLayoutRels ( ) ; if ( _dgdf == _dab . Relationships { } ) { return _dab . ImageRef { } , false ; } ; _bcdd := _dgdf . GetTargetByRelId ( relID ) ; for _ , _egbe := range _fbfb . _caff . Images { if _egbe . Target ( ) == _bcdd { return _egbe , true ;
} ; } ; return _dab . ImageRef { } , false ; } ; type rectangle struct { _fdg int64 ; _cg int64 ; _bf int64 ; _cf int64 ; } ;
2024-04-03 00:10:23 +07:00
2024-10-17 17:05:28 +00:00
// Type returns the placeholder type
func ( _ab PlaceHolder ) Type ( ) _ffc . ST_PlaceholderType { return _ab . _eag . NvSpPr . NvPr . Ph . TypeAttr } ;
2023-04-15 17:27:31 +00:00
2024-10-17 17:05:28 +00:00
// GetColorBySchemeColor returns *dml.CT_Color mapped to scheme colors like dk1, lt1 etc. depending on what theme is used in the presentation.
func ( _ege * Presentation ) GetColorBySchemeColor ( schClr _fc . ST_SchemeColorVal ) * _fc . CT_Color { if len ( _ege . _fdea ) == 0 || len ( _ege . _ccf ) == 0 { return nil ; } ; var _ddd _fc . ST_ColorSchemeIndex ; _ecg := _ege . _fdea [ 0 ] ; _aeee := _ecg . ClrMap ; switch schClr . String ( ) { case "\u0062\u0067\u0031" : _ddd = _aeee . Bg1Attr ;
case "\u0062\u0067\u0032" : _ddd = _aeee . Bg2Attr ; case "\u0074\u0078\u0031" : _ddd = _aeee . Tx1Attr ; case "\u0074\u0078\u0032" : _ddd = _aeee . Tx2Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0031" : _ddd = _aeee . Accent1Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0032" : _ddd = _aeee . Accent2Attr ;
case "\u0061c\u0063\u0065\u006e\u0074\u0033" : _ddd = _aeee . Accent3Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0034" : _ddd = _aeee . Accent4Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0035" : _ddd = _aeee . Accent5Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0036" : _ddd = _aeee . Accent6Attr ;
case "\u0068\u006c\u0069n\u006b" : _ddd = _aeee . HlinkAttr ; case "\u0066\u006f\u006c\u0048\u006c\u0069\u006e\u006b" : _ddd = _aeee . FolHlinkAttr ; case "\u0064\u006b\u0031" : _ddd = _fc . ST_ColorSchemeIndexDk1 ; case "\u0064\u006b\u0032" : _ddd = _fc . ST_ColorSchemeIndexDk2 ;
case "\u006c\u0074\u0031" : _ddd = _fc . ST_ColorSchemeIndexLt1 ; case "\u006c\u0074\u0032" : _ddd = _fc . ST_ColorSchemeIndexLt2 ; default : _ddd = _fc . ST_ColorSchemeIndexUnset ; } ; _adaa := _ege . _ccf [ 0 ] ; _cggg := _adaa . ThemeElements ; if _cggg == nil { return nil ; } ;
var _acdf * _fc . CT_Color ; _dbfe := _cggg . ClrScheme ; switch _ddd . String ( ) { case "\u0064\u006b\u0031" : _acdf = _dbfe . Dk1 ; case "\u0064\u006b\u0032" : _acdf = _dbfe . Dk2 ; case "\u006c\u0074\u0031" : _acdf = _dbfe . Lt1 ; case "\u006c\u0074\u0032" : _acdf = _dbfe . Lt2 ;
case "\u0061c\u0063\u0065\u006e\u0074\u0031" : _acdf = _dbfe . Accent1 ; case "\u0061c\u0063\u0065\u006e\u0074\u0032" : _acdf = _dbfe . Accent2 ; case "\u0061c\u0063\u0065\u006e\u0074\u0033" : _acdf = _dbfe . Accent3 ; case "\u0061c\u0063\u0065\u006e\u0074\u0034" : _acdf = _dbfe . Accent4 ;
case "\u0061c\u0063\u0065\u006e\u0074\u0035" : _acdf = _dbfe . Accent5 ; case "\u0061c\u0063\u0065\u006e\u0074\u0036" : _acdf = _dbfe . Accent6 ; case "\u0068\u006c\u0069n\u006b" : _acdf = _dbfe . Hlink ; case "\u0066\u006f\u006c\u0048\u006c\u0069\u006e\u006b" : _acdf = _dbfe . FolHlink ;
default : return nil ; } ; return _acdf ; } ;
2021-01-04 16:11:39 +00:00
2024-10-17 17:05:28 +00:00
// SetWidth sets width of slide screen size with given value in EMU units.
func ( _fdgf * SlideScreenSize ) SetWidth ( val int32 ) { _fdgf [ 0 ] = val } ;
2021-01-04 16:11:39 +00:00
2024-10-17 17:05:28 +00:00
// Presentation returns a slide's presentation.
func ( _dgcd Slide ) Presentation ( ) * Presentation { return _dgcd . _caff } ; func ( _fefg sort2d ) Swap ( i , j int ) { _fefg [ i ] , _fefg [ j ] = _fefg [ j ] , _fefg [ i ] } ;
2022-09-02 11:46:53 +00:00
2024-10-17 17:05:28 +00:00
// NewPresentationProperties constructs a new PresentationProperties.
func NewPresentationProperties ( ) PresentationProperties { return PresentationProperties { _bfbd : _ffc . NewPresentationPr ( ) } ; } ; func ( _cggc * Presentation ) addLayoutFromSlide ( _afec Slide ) error { _eagga := 1 ; for _ , _fda := range _cggc . Images { if _agba , _fgd := _da . StringToNumbers ( _fda . Target ( ) ) ;
_fgd && _agba >= _eagga { _eagga = _agba + 1 ; } ; } ; _cggc . _age = append ( _cggc . _age , _afec . GetSlideLayout ( ) ) ; _dbdf := _afec . getSlideLayoutRels ( ) ; for _ , _eefc := range _dbdf . X ( ) . Relationship { if _eefc . TypeAttr == _ea . ImageType { _eee , _ffcd := _afec . _caff . GetImageByTarget ( _eefc . TargetAttr ) ;
if _ffcd { if _abb , _gbe := _da . StringToNumbers ( _eee . Target ( ) ) ; _gbe && _abb < _eagga { _eee . SetTarget ( _c . ReplaceAll ( _eee . Target ( ) , _ff . Sprint ( _abb ) , _ff . Sprint ( _eagga ) ) ) ; _eefc . TargetAttr = _eee . Target ( ) ; _eagga = _eagga + 1 ; } ; _cggc . Images = append ( _cggc . Images , _eee ) ;
} ; } ; } ; _cggc . _cffc = append ( _cggc . _cffc , _dbdf ) ; if len ( _cggc . _fdea ) > 0 && len ( _cggc . _ccae ) > 0 { _edf := _cggc . _ccae [ 0 ] . AddAutoRelationship ( _ea . DocTypePresentation , _ea . SlideMasterType , len ( _cggc . _age ) , _ea . SlideLayoutType ) ; _fbga := _ffc . NewCT_SlideLayoutIdListEntry ( ) ;
_fbga . IdAttr = _ea . Uint32 ( 2147483649 ) ; _fbga . RIdAttr = _edf . ID ( ) ; for _ , _dbc := range _cggc . _fdea [ 0 ] . SldLayoutIdLst . SldLayoutId { if * _dbc . IdAttr >= * _fbga . IdAttr { _fbga . IdAttr = _ea . Uint32 ( ( * _dbc . IdAttr + 1 ) ) ; } ; } ; _cggc . _fdea [ 0 ] . SldLayoutIdLst . SldLayoutId = append ( _cggc . _fdea [ 0 ] . SldLayoutIdLst . SldLayoutId , _fbga ) ;
} ; _aae := _ea . AbsoluteFilename ( _ea . DocTypePresentation , _ea . SlideLayoutType , len ( _cggc . _age ) ) ; _cggc . ContentTypes . AddOverride ( _aae , _ea . SlideLayoutContentType ) ; return nil ; } ; func ( _gcgca * Slide ) getSlideRels ( ) _dab . Relationships { _gfdb := _gcgca . _caff ;
for _affd , _gaa := range _gfdb . Slides ( ) { if * _gcgca . _gede == * _gaa . _gede { return _gfdb . _cdec [ _affd ] ; } ; } ; return _dab . Relationships { } ; } ;
2024-05-22 00:21:11 +00:00
2024-10-17 17:05:28 +00:00
// RemoveSlide removes a slide from a presentation.
func ( _bebc * Presentation ) RemoveSlide ( s Slide ) error { _aaa := false ; _afed := 0 ; for _gdfd , _dgac := range _bebc . _babe { if _dgac == s . _gede { if _bebc . _aee . SldIdLst . SldId [ _gdfd ] != s . _beeb { return _ga . New ( "i\u006e\u0063\u006f\u006e\u0073\u0069s\u0074\u0065\u006e\u0063\u0079\u0020i\u006e\u0020\u0073\u006c\u0069\u0064\u0065s\u0020\u0061\u006e\u0064\u0020\u0049\u0044\u0020\u006c\u0069s\u0074" ) ;
} ; copy ( _bebc . _babe [ _gdfd : ] , _bebc . _babe [ _gdfd + 1 : ] ) ; _bebc . _babe = _bebc . _babe [ 0 : len ( _bebc . _babe ) - 1 ] ; copy ( _bebc . _cdec [ _gdfd : ] , _bebc . _cdec [ _gdfd + 1 : ] ) ; _bebc . _cdec = _bebc . _cdec [ 0 : len ( _bebc . _cdec ) - 1 ] ; copy ( _bebc . _aee . SldIdLst . SldId [ _gdfd : ] , _bebc . _aee . SldIdLst . SldId [ _gdfd + 1 : ] ) ;
_bebc . _aee . SldIdLst . SldId = _bebc . _aee . SldIdLst . SldId [ 0 : len ( _bebc . _aee . SldIdLst . SldId ) - 1 ] ; copy ( _bebc . _acc [ _gdfd : ] , _bebc . _acc [ _gdfd + 1 : ] ) ; _bebc . _acc = _bebc . _acc [ 0 : len ( _bebc . _acc ) - 1 ] ; _aaa = true ; _afed = _gdfd ; } ; } ; if ! _aaa { return _ga . New ( "u\u006ea\u0062\u006c\u0065\u0020\u0074\u006f\u0020\u0066i\u006e\u0064\u0020\u0073li\u0064\u0065" ) ;
} ; _gbg := _ea . AbsoluteFilename ( _ea . DocTypePresentation , _ea . SlideType , 0 ) ; return _bebc . ContentTypes . RemoveOverrideByIndex ( _gbg , _afed ) ; } ;
2022-09-02 11:46:53 +00:00
2024-10-17 17:05:28 +00:00
// ExtLst returns the ExtLst property.
func ( _eec PresentationProperties ) ExtLst ( ) * _ffc . CT_ExtensionList { return _eec . _bfbd . ExtLst } ;
2023-12-28 15:53:06 +00:00
2024-10-17 17:05:28 +00:00
// TextBox is a text box within a slide.
type TextBox struct { _cgd * _ffc . CT_Shape } ;
2024-09-16 09:59:58 +00:00
2024-10-17 17:05:28 +00:00
// Text returns text from a slide as one string separated with line breaks.
func ( _acd * SlideText ) Text ( ) string { _gcc := _gf . NewBuffer ( [ ] byte { } ) ; for _ , _ecf := range _acd . Items { if _ecf . Text != "" { _gcc . WriteString ( _ecf . Text ) ; _gcc . WriteString ( "\u000a" ) ; } ; } ; return _gcc . String ( ) ; } ;
2021-09-22 16:41:01 +00:00
2024-06-20 13:33:45 +00:00
// X returns the inner wrapped XML type.
2024-10-17 17:05:28 +00:00
func ( _aed ViewProperties ) X ( ) * _ffc . ViewPr { return _aed . _cgdg } ;
2021-09-22 16:41:01 +00:00
2024-10-17 17:05:28 +00:00
// AddSlide adds a new slide to the presentation.
func ( _fbb * Presentation ) AddSlide ( ) Slide { _cad := _ffc . NewCT_SlideIdListEntry ( ) ; _cad . IdAttr = _fbb . nextSlideID ( ) ; _fbb . _aee . SldIdLst . SldId = append ( _fbb . _aee . SldIdLst . SldId , _cad ) ; _aag := _ffc . NewSld ( ) ; _aag . CSld . SpTree . NvGrpSpPr . CNvPr . IdAttr = 1 ;
_aag . CSld . SpTree . GrpSpPr . Xfrm = _fc . NewCT_GroupTransform2D ( ) ; _aag . CSld . SpTree . GrpSpPr . Xfrm . Off = _fc . NewCT_Point2D ( ) ; _aag . CSld . SpTree . GrpSpPr . Xfrm . Off . XAttr . ST_CoordinateUnqualified = _ea . Int64 ( 0 ) ; _aag . CSld . SpTree . GrpSpPr . Xfrm . Off . YAttr . ST_CoordinateUnqualified = _ea . Int64 ( 0 ) ;
_aag . CSld . SpTree . GrpSpPr . Xfrm . Ext = _fc . NewCT_PositiveSize2D ( ) ; _aag . CSld . SpTree . GrpSpPr . Xfrm . Ext . CxAttr = int64 ( 0 * _dfg . Point ) ; _aag . CSld . SpTree . GrpSpPr . Xfrm . Ext . CyAttr = int64 ( 0 * _dfg . Point ) ; _aag . CSld . SpTree . GrpSpPr . Xfrm . ChOff = _aag . CSld . SpTree . GrpSpPr . Xfrm . Off ;
_aag . CSld . SpTree . GrpSpPr . Xfrm . ChExt = _aag . CSld . SpTree . GrpSpPr . Xfrm . Ext ; _fbb . _babe = append ( _fbb . _babe , _aag ) ; _fbb . _acc = append ( _fbb . _acc , len ( _fbb . _babe ) ) ; _bacd := _fbb . _bfg . AddAutoRelationship ( _ea . DocTypePresentation , _ea . OfficeDocumentType , len ( _fbb . _babe ) , _ea . SlideType ) ;
_cad . RIdAttr = _bacd . ID ( ) ; _eefg := _ea . AbsoluteFilename ( _ea . DocTypePresentation , _ea . SlideType , len ( _fbb . _babe ) ) ; _fbb . ContentTypes . AddOverride ( _eefg , _ea . SlideContentType ) ; _gdd := _dab . NewRelationships ( ) ; _fbb . _cdec = append ( _fbb . _cdec , _gdd ) ;
_gdd . AddAutoRelationship ( _ea . DocTypePresentation , _ea . SlideType , len ( _fbb . _age ) , _ea . SlideLayoutType ) ; return Slide { _cad , _aag , _fbb , nil } ; } ;
2021-09-22 16:41:01 +00:00
2024-10-17 17:05:28 +00:00
// PresentationProperties contains document specific properties.
type PresentationProperties struct { _bfbd * _ffc . PresentationPr } ;
2024-09-16 09:59:58 +00:00
2024-10-17 17:05:28 +00:00
// Paragraphs returns the paragraphs defined in the placeholder.
func ( _eaacd PlaceHolder ) Paragraphs ( ) [ ] _fa . Paragraph { _cd := [ ] _fa . Paragraph { } ; for _ , _acec := range _eaacd . _eag . TxBody . P { _cd = append ( _cd , _fa . MakeParagraph ( _acec ) ) ; } ; return _cd ; } ;
2024-04-03 00:10:23 +07:00
2024-10-17 17:05:28 +00:00
// CopySlide copies existing slide from another presentation and inserts it as a last one.
func ( _fced * Presentation ) CopySlide ( s Slide ) ( Slide , error ) { _bace := _ffc . NewCT_SlideIdListEntry ( ) ; _bace . IdAttr = _fced . nextSlideID ( ) ; _fced . _aee . SldIdLst . SldId = append ( _fced . _aee . SldIdLst . SldId , _bace ) ; _egfg := s . GetSlideLayout ( ) ; _abd := true ;
for _ , _ggf := range _fced . _age { if _ggf == _egfg { _abd = false ; break ; } ; } ; if _abd { _fced . addLayoutFromSlide ( s ) ; } ; _fced . _babe = append ( _fced . _babe , s . _gede ) ; _fced . _acc = append ( _fced . _acc , len ( _fced . _babe ) ) ; _ccfa := _fced . _bfg . AddAutoRelationship ( _ea . DocTypePresentation , _ea . OfficeDocumentType , len ( _fced . _babe ) , _ea . SlideType ) ;
_bace . RIdAttr = _ccfa . ID ( ) ; _ccdf := _ea . AbsoluteFilename ( _ea . DocTypePresentation , _ea . SlideType , len ( _fced . _babe ) ) ; _fced . ContentTypes . AddOverride ( _ccdf , _ea . SlideContentType ) ; _bbea := _dab . NewRelationships ( ) ; _fced . _cdec = append ( _fced . _cdec , _bbea ) ;
_gfg := len ( _fced . _cdec ) - 1 ; for _dfe , _dbd := range _fced . _age { if _dbd == _egfg { _bca := _fced . _cffc [ _dfe ] ; for _ , _ggaf := range _bca . X ( ) . Relationship { if _ggaf . TypeAttr != _ea . SlideMasterType { _fced . _cdec [ _gfg ] . X ( ) . Relationship = append ( _fced . _cdec [ _gfg ] . X ( ) . Relationship , _ggaf ) ;
} ; } ; _bbea . AddAutoRelationship ( _ea . DocTypePresentation , _ea . SlideType , _dfe + 1 , _ea . SlideLayoutType ) ; } ; } ; _efga := Slide { _bace , s . _gede , _fced , nil } ; return _efga , nil ; } ;
2021-09-22 16:41:01 +00:00
2024-10-17 17:05:28 +00:00
// ExtractText returns text from a slide as a SlideText object.
func ( _ebe * Slide ) ExtractText ( ) * SlideText { _gee := _af ( _ebe . _caff , _ebe . _gede . CSld . SpTree . Choice , [ ] rectangle { } , [ ] * TextItem { } ) ; _fg . Sort ( sort2d ( _gee ) ) ; return & SlideText { Items : _gee } ; } ;
2022-09-02 11:46:53 +00:00
2024-10-17 17:05:28 +00:00
// NormalViewPr returns the NormalViewPr property.
func ( _dce ViewProperties ) NormalViewPr ( ) * _ffc . CT_NormalViewProperties { return _dce . _cgdg . NormalViewPr ; } ;
2022-09-02 11:46:53 +00:00
2024-10-17 17:05:28 +00:00
// GetPlaceholder returns a placeholder given its type. If there are multiplace
// placeholders of the same type, this method returns the first one. You must use the
// PlaceHolders() method to access the others.
func ( _cfe Slide ) GetPlaceholder ( t _ffc . ST_PlaceholderType ) ( PlaceHolder , error ) { for _ , _fedg := range _cfe . _gede . CSld . SpTree . Choice { for _ , _eaec := range _fedg . Sp { if _eaec . NvSpPr != nil && _eaec . NvSpPr . NvPr != nil && _eaec . NvSpPr . NvPr . Ph != nil { if _eaec . NvSpPr . NvPr . Ph . TypeAttr == t { return PlaceHolder { _eaec , _cfe . _gede } , nil ;
} ; } ; } ; } ; return PlaceHolder { } , _ga . New ( "\u0075\u006e\u0061\u0062\u006c\u0065\u0020\u0074\u006f\u0020\u0066i\u006e\u0064\u0020\u0070\u006c\u0061\u0063\u0065\u0068\u006fl\u0064\u0065\u0072" ) ; } ;
2022-12-06 11:56:49 +00:00
2024-10-17 17:05:28 +00:00
// ShowCommentsAttr returns the WebPr property.
func ( _dag ViewProperties ) ShowCommentsAttr ( ) * bool { return _dag . _cgdg . ShowCommentsAttr } ; var _eac = false ;
2022-02-05 13:05:36 +00:00
2024-10-17 17:05:28 +00:00
// Index returns the placeholder index
func ( _cbag PlaceHolder ) Index ( ) uint32 { if _cbag . _eag . NvSpPr . NvPr . Ph . IdxAttr == nil { return 0 ; } ; return * _cbag . _eag . NvSpPr . NvPr . Ph . IdxAttr ; } ;
2022-02-05 13:05:36 +00:00
2024-10-17 17:05:28 +00:00
// Name returns the name of the slide layout.
func ( _cffeb SlideLayout ) Name ( ) string { if _cffeb . _cefa . CSld != nil && _cffeb . _cefa . CSld . NameAttr != nil { return * _cffeb . _cefa . CSld . NameAttr ; } ; return "" ; } ;
2023-12-12 23:20:29 +00:00
2024-10-17 17:05:28 +00:00
// PlaceHolders returns all of the content place holders within a given slide.
func ( _febg Slide ) PlaceHolders ( ) [ ] PlaceHolder { _gbed := [ ] PlaceHolder { } ; for _ , _bebg := range _febg . _gede . CSld . SpTree . Choice { for _ , _dgd := range _bebg . Sp { if _dgd . NvSpPr != nil && _dgd . NvSpPr . NvPr != nil && _dgd . NvSpPr . NvPr . Ph != nil { _gbed = append ( _gbed , PlaceHolder { _dgd , _febg . _gede } ) ;
} ; } ; } ; return _gbed ; } ;
2023-12-12 23:20:29 +00:00
2024-10-17 17:05:28 +00:00
// AddDefaultSlideWithLayout tries to replicate what PowerPoint does when
// inserting a slide with a new style by clearing placeholder content and removing
// some placeholders. Use AddSlideWithLayout if you need more control.
func ( _fgg * Presentation ) AddDefaultSlideWithLayout ( l SlideLayout ) ( Slide , error ) { _gdc , _afc := _fgg . AddSlideWithLayout ( l ) ; for _ , _bga := range _gdc . PlaceHolders ( ) { _bga . Clear ( ) ; switch _bga . Type ( ) { case _ffc . ST_PlaceholderTypeFtr , _ffc . ST_PlaceholderTypeDt , _ffc . ST_PlaceholderTypeSldNum : _bga . Remove ( ) ;
} ; } ; return _gdc , _afc ; } ;
2023-12-12 23:20:29 +00:00
2024-10-17 17:05:28 +00:00
// AddImageToRels adds an image relationship to a slide without putting image on the slide.
func ( _afce Slide ) AddImageToRels ( img _dab . ImageRef ) string { _eedb := 0 ; for _bfaf , _gedc := range _afce . _caff . Images { if _gedc == img { _eedb = _bfaf + 1 ; break ; } ; } ; var _dda string ; for _gaef , _gbbd := range _afce . _caff . Slides ( ) { if _gbbd . _gede == _afce . _gede { _eaggc := _ff . Sprintf ( "\u002e\u002e\u002f\u006ded\u0069\u0061\u002f\u0069\u006d\u0061\u0067\u0065\u0025\u0064\u002e\u0025\u0073" , _eedb , img . Format ( ) ) ;
_gbfg := _afce . _caff . _cdec [ _gaef ] . AddRelationship ( _eaggc , _ea . ImageType ) ; _dda = _gbfg . ID ( ) ; } ; } ; return _dda ; } ; func ( _bfgg * Presentation ) saveToFile ( _dgce string , _debb bool ) error { _fefa , _caf := _eaa . Create ( _dgce ) ; if _caf != nil { return _caf ;
} ; defer _fefa . Close ( ) ; return _bfgg . save ( _fefa , _debb ) ; } ;
2024-09-16 09:59:58 +00:00
2024-10-17 17:05:28 +00:00
// SaveToFile writes the Presentation out to a file.
func ( _eecd * Presentation ) SaveToFile ( path string ) error { return _eecd . saveToFile ( path , false ) } ;
2023-04-15 17:27:31 +00:00
2024-10-17 17:05:28 +00:00
// Size returns slide size value as SlideScreenSize.
func ( _fgcfe * SlideSize ) Size ( ) SlideScreenSize { return SlideScreenSize { _fgcfe . _bgbf . CxAttr , _fgcfe . _bgbf . CyAttr } ; } ;
2023-04-15 17:27:31 +00:00
2024-10-17 17:05:28 +00:00
// New initializes and returns a new presentation
func New ( ) * Presentation { _eeg := _eagg ( ) ; _eeg . ContentTypes . AddOverride ( "/\u0070\u0070\u0074\u002fpr\u0065s\u0065\u006e\u0074\u0061\u0074i\u006f\u006e\u002e\u0078\u006d\u006c" , "\u0061\u0070\u0070\u006c\u0069\u0063\u0061t\u0069\u006f\u006e\u002f\u0076\u006e\u0064\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006c\u0066\u006f\u0072m\u0061\u0074\u0073\u002d\u006ff\u0066\u0069\u0063\u0065\u0064\u006f\u0063\u0075\u006de\u006e\u0074\u002e\u0070\u0072\u0065\u0073\u0065\u006e\u0074\u0061\u0074\u0069\u006f\u006e\u006d\u006c\u002e\u0070\u0072\u0065\u0073\u0065\u006e\u0074\u0061\u0074\u0069\u006f\u006e\u002e\u006d\u0061\u0069\u006e\u002b\u0078\u006d\u006c" ) ;
_eeg . Rels . AddRelationship ( "\u0064\u006f\u0063\u0050\u0072\u006f\u0070\u0073\u002f\u0063\u006f\u0072e\u002e\u0078\u006d\u006c" , "\u0068\u0074\u0074\u0070\u003a\u002f\u002f\u0073\u0063\u0068\u0065\u006d\u0061s\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006c\u0066o\u0072\u006d\u0061\u0074\u0073\u002e\u006f\u0072\u0067\u002f\u0070\u0061\u0063\u006ba\u0067\u0065\u002f\u0032\u0030\u0030\u0036\u002f\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0073\u0068\u0069\u0070\u0073\u002f\u006d\u0065\u0074\u0061\u0064\u0061\u0074\u0061/\u0063\u006f\u0072\u0065\u002d\u0070\u0072\u006f\u0070e\u0072\u0074i\u0065\u0073" ) ;
_eeg . Rels . AddRelationship ( "\u0064\u006fc\u0050\u0072\u006fp\u0073\u002f\u0061\u0070\u0070\u002e\u0078\u006d\u006c" , "\u0068t\u0074\u0070\u003a\u002f\u002f\u0073\u0063\u0068\u0065\u006d\u0061\u0073\u002eo\u0070\u0065\u006ex\u006d\u006c\u0066\u006f\u0072\u006da\u0074\u0073.\u006f\u0072\u0067\u002f\u006f\u0066\u0066\u0069\u0063\u0065\u0044\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u002f\u0032\u0030\u0030\u0036\u002f\u0072\u0065\u006c\u0061\u0074i\u006f\u006e\u0073\u0068\u0069p\u0073\u002f\u0065x\u0074\u0065\u006e\u0064\u0065d\u002d\u0070\u0072\u006f\u0070\u0065\u0072\u0074\u0069\u0065\u0073" ) ;
_eeg . Rels . AddRelationship ( "p\u0070t\u002f\u0070\u0072\u0065\u0073\u0065\u006e\u0074a\u0074\u0069\u006f\u006e.x\u006d\u006c" , "\u0068\u0074\u0074\u0070\u003a\u002f\u002fs\u0063\u0068\u0065\u006d\u0061\u0073\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006c\u0066\u006f\u0072\u006da\u0074\u0073\u002e\u006f\u0072g\u002f\u006f\u0066\u0066\u0069\u0063\u0065\u0044\u006fc\u0075\u006d\u0065\u006e\u0074\u002f\u0032\u0030\u0030\u0036\u002f\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0073\u0068\u0069\u0070\u0073\u002f\u006f\u0066\u0066\u0069\u0063\u0065\u0044\u006f\u0063\u0075\u006d\u0065\u006e\u0074" ) ;
_eeg . Rels . AddRelationship ( "\u0070\u0070\u0074\u002f\u0070\u0072\u0065\u0073\u0050\u0072\u006f\u0070s\u002e\u0078\u006d\u006c" , "ht\u0074\u0070\u003a\u002f\u002f\u0073\u0063he\u006d\u0061\u0073\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006c\u0066\u006f\u0072\u006da\u0074\u0073\u002e\u006f\u0072\u0067\u002f\u006f\u0066\u0066\u0069\u0063\u0065\u0044\u006f\u0063\u0075\u006d\u0065\u006et\u002f\u0032\u0030\u0030\u0036\u002fr\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0073\u0068i\u0070s\u002f\u0070\u0072\u0065\u0073\u0050\u0072\u006f\u0070\u0073" ) ;
_eeg . Rels . AddRelationship ( "\u0070\u0070\u0074\u002f\u0076\u0069\u0065\u0077\u0050\u0072\u006f\u0070s\u002e\u0078\u006d\u006c" , "ht\u0074\u0070\u003a\u002f\u002f\u0073\u0063he\u006d\u0061\u0073\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006c\u0066\u006f\u0072\u006da\u0074\u0073\u002e\u006f\u0072\u0067\u002f\u006f\u0066\u0066\u0069\u0063\u0065\u0044\u006f\u0063\u0075\u006d\u0065\u006et\u002f\u0032\u0030\u0030\u0036\u002fr\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0073\u0068i\u0070s\u002f\u0076\u0069\u0065\u0077\u0050\u0072\u006f\u0070\u0073" ) ;
_eeg . Rels . AddRelationship ( "\u0070\u0070\u0074\u002fta\u0062\u006c\u0065\u0053\u0074\u0079\u006c\u0065\u0073\u002e\u0078\u006d\u006c" , "\u0068\u0074\u0074\u0070\u003a\u002f\u002fs\u0063\u0068\u0065\u006d\u0061\u0073\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006cf\u006fr\u006d\u0061\u0074\u0073\u002e\u006fr\u0067\u002f\u006f\u0066\u0066\u0069\u0063e\u0044\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u002f\u0032\u0030\u0030\u0036\u002f\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0073h\u0069\u0070\u0073\u002f\u0074\u0061\u0062\u006c\u0065\u0053\u0074\u0079\u006ce\u0073" ) ;
_eeg . _aee . SldMasterIdLst = _ffc . NewCT_SlideMasterIdList ( ) ; _ffd := _ffc . NewSldMaster ( ) ; _ffd . ClrMap . Bg1Attr = _fc . ST_ColorSchemeIndexLt1 ; _ffd . ClrMap . Bg2Attr = _fc . ST_ColorSchemeIndexLt2 ; _ffd . ClrMap . Tx1Attr = _fc . ST_ColorSchemeIndexDk1 ; _ffd . ClrMap . Tx2Attr = _fc . ST_ColorSchemeIndexDk2 ;
_ffd . ClrMap . Accent1Attr = _fc . ST_ColorSchemeIndexAccent1 ; _ffd . ClrMap . Accent2Attr = _fc . ST_ColorSchemeIndexAccent2 ; _ffd . ClrMap . Accent3Attr = _fc . ST_ColorSchemeIndexAccent3 ; _ffd . ClrMap . Accent4Attr = _fc . ST_ColorSchemeIndexAccent4 ; _ffd . ClrMap . Accent5Attr = _fc . ST_ColorSchemeIndexAccent5 ;
_ffd . ClrMap . Accent6Attr = _fc . ST_ColorSchemeIndexAccent6 ; _ffd . ClrMap . HlinkAttr = _fc . ST_ColorSchemeIndexHlink ; _ffd . ClrMap . FolHlinkAttr = _fc . ST_ColorSchemeIndexFolHlink ; _eeg . _fdea = append ( _eeg . _fdea , _ffd ) ; _eeg . _fee = append ( _eeg . _fee , len ( _eeg . _fdea ) ) ;
_aad := _ea . AbsoluteFilename ( _ea . DocTypePresentation , _ea . SlideMasterType , 1 ) ; _eeg . ContentTypes . AddOverride ( _aad , _ea . SlideMasterContentType ) ; _dabg := _eeg . _bfg . AddAutoRelationship ( _ea . DocTypePresentation , _ea . OfficeDocumentType , 1 , _ea . SlideMasterType ) ;
_dba := _ffc . NewCT_SlideMasterIdListEntry ( ) ; _dba . IdAttr = _ea . Uint32 ( 2147483648 ) ; _dba . RIdAttr = _dabg . ID ( ) ; _eeg . _aee . SldMasterIdLst . SldMasterId = append ( _eeg . _aee . SldMasterIdLst . SldMasterId , _dba ) ; _gbb := _dab . NewRelationships ( ) ; _eeg . _ccae = append ( _eeg . _ccae , _gbb ) ;
_edag := _ffc . NewSldLayout ( ) ; _fce := _gbb . AddAutoRelationship ( _ea . DocTypePresentation , _ea . SlideMasterType , 1 , _ea . SlideLayoutType ) ; _fbg := _ea . AbsoluteFilename ( _ea . DocTypePresentation , _ea . SlideLayoutType , 1 ) ; _eeg . ContentTypes . AddOverride ( _fbg , _ea . SlideLayoutContentType ) ;
_gbb . AddAutoRelationship ( _ea . DocTypePresentation , _ea . SlideMasterType , 1 , _ea . ThemeType ) ; _eeg . _age = append ( _eeg . _age , _edag ) ; _ffd . SldLayoutIdLst = _ffc . NewCT_SlideLayoutIdList ( ) ; _bbd := _ffc . NewCT_SlideLayoutIdListEntry ( ) ; _bbd . IdAttr = _ea . Uint32 ( 2147483649 ) ;
_bbd . RIdAttr = _fce . ID ( ) ; _ffd . SldLayoutIdLst . SldLayoutId = append ( _ffd . SldLayoutIdLst . SldLayoutId , _bbd ) ; _fed := _dab . NewRelationships ( ) ; _eeg . _cffc = append ( _eeg . _cffc , _fed ) ; _fed . AddAutoRelationship ( _ea . DocTypePresentation , _ea . SlideType , 1 , _ea . SlideMasterType ) ;
_eeg . _aee . NotesSz . CxAttr = 6858000 ; _eeg . _aee . NotesSz . CyAttr = 9144000 ; _faca := _fc . NewTheme ( ) ; _faca . NameAttr = _ea . String ( "\u0075n\u0069o\u0066\u0066\u0069\u0063\u0065\u0020\u0054\u0068\u0065\u006d\u0065" ) ; _faca . ThemeElements . ClrScheme . NameAttr = "\u004f\u0066\u0066\u0069\u0063\u0065" ;
_faca . ThemeElements . ClrScheme . Dk1 . SysClr = _fc . NewCT_SystemColor ( ) ; _faca . ThemeElements . ClrScheme . Dk1 . SysClr . LastClrAttr = _ea . String ( "\u0030\u0030\u0030\u0030\u0030\u0030" ) ; _faca . ThemeElements . ClrScheme . Dk1 . SysClr . ValAttr = _fc . ST_SystemColorValWindowText ;
_faca . ThemeElements . ClrScheme . Lt1 . SysClr = _fc . NewCT_SystemColor ( ) ; _faca . ThemeElements . ClrScheme . Lt1 . SysClr . LastClrAttr = _ea . String ( "\u0066\u0066\u0066\u0066\u0066\u0066" ) ; _faca . ThemeElements . ClrScheme . Lt1 . SysClr . ValAttr = _fc . ST_SystemColorValWindow ;
_faca . ThemeElements . ClrScheme . Dk2 . SrgbClr = _fc . NewCT_SRgbColor ( ) ; _faca . ThemeElements . ClrScheme . Dk2 . SrgbClr . ValAttr = "\u0034\u0034\u0035\u0034\u0036\u0061" ; _faca . ThemeElements . ClrScheme . Lt2 . SrgbClr = _fc . NewCT_SRgbColor ( ) ; _faca . ThemeElements . ClrScheme . Lt2 . SrgbClr . ValAttr = "\u0065\u0037\u0065\u0037\u0065\u0036" ;
_faca . ThemeElements . ClrScheme . Accent1 . SrgbClr = _fc . NewCT_SRgbColor ( ) ; _faca . ThemeElements . ClrScheme . Accent1 . SrgbClr . ValAttr = "\u0034\u0034\u0037\u0032\u0063\u0034" ; _faca . ThemeElements . ClrScheme . Accent2 . SrgbClr = _fc . NewCT_SRgbColor ( ) ; _faca . ThemeElements . ClrScheme . Accent2 . SrgbClr . ValAttr = "\u0065\u0064\u0037\u0064\u0033\u0031" ;
_faca . ThemeElements . ClrScheme . Accent3 . SrgbClr = _fc . NewCT_SRgbColor ( ) ; _faca . ThemeElements . ClrScheme . Accent3 . SrgbClr . ValAttr = "\u0061\u0035\u0061\u0035\u0061\u0035" ; _faca . ThemeElements . ClrScheme . Accent4 . SrgbClr = _fc . NewCT_SRgbColor ( ) ; _faca . ThemeElements . ClrScheme . Accent4 . SrgbClr . ValAttr = "\u0066\u0066\u0063\u0030\u0030\u0030" ;
_faca . ThemeElements . ClrScheme . Accent5 . SrgbClr = _fc . NewCT_SRgbColor ( ) ; _faca . ThemeElements . ClrScheme . Accent5 . SrgbClr . ValAttr = "\u0035\u0062\u0039\u0062\u0064\u0035" ; _faca . ThemeElements . ClrScheme . Accent6 . SrgbClr = _fc . NewCT_SRgbColor ( ) ; _faca . ThemeElements . ClrScheme . Accent6 . SrgbClr . ValAttr = "\u0037\u0030\u0061\u0064\u0034\u0037" ;
_faca . ThemeElements . ClrScheme . Hlink . SrgbClr = _fc . NewCT_SRgbColor ( ) ; _faca . ThemeElements . ClrScheme . Hlink . SrgbClr . ValAttr = "\u0030\u0035\u0036\u0033\u0063\u0031" ; _faca . ThemeElements . ClrScheme . FolHlink . SrgbClr = _fc . NewCT_SRgbColor ( ) ; _faca . ThemeElements . ClrScheme . FolHlink . SrgbClr . ValAttr = "\u0039\u0035\u0034\u0066\u0037\u0032" ;
_faca . ThemeElements . FontScheme . NameAttr = "\u004f\u0066\u0066\u0069\u0063\u0065" ; _faca . ThemeElements . FontScheme . MajorFont . Latin . TypefaceAttr = "\u0043\u0061\u006c\u0069\u0062\u0072\u0069\u0020\u004c\u0069\u0067\u0068\u0074" ; _faca . ThemeElements . FontScheme . MinorFont . Latin . TypefaceAttr = "\u0043a\u006c\u0069\u0062\u0072\u0069" ;
_faca . ThemeElements . FmtScheme . NameAttr = _ea . String ( "\u004f\u0066\u0066\u0069\u0063\u0065" ) ; _gda := _fc . NewEG_FillProperties ( ) ; _faca . ThemeElements . FmtScheme . FillStyleLst . EG_FillProperties = append ( _faca . ThemeElements . FmtScheme . FillStyleLst . EG_FillProperties , _gda ) ;
_gda . SolidFill = & _fc . CT_SolidColorFillProperties { SchemeClr : & _fc . CT_SchemeColor { ValAttr : _fc . ST_SchemeColorValPhClr } } ; _gda = _fc . NewEG_FillProperties ( ) ; _faca . ThemeElements . FmtScheme . FillStyleLst . EG_FillProperties = append ( _faca . ThemeElements . FmtScheme . FillStyleLst . EG_FillProperties , _gda ) ;
_faca . ThemeElements . FmtScheme . FillStyleLst . EG_FillProperties = append ( _faca . ThemeElements . FmtScheme . FillStyleLst . EG_FillProperties , _gda ) ; _gda . GradFill = & _fc . CT_GradientFillProperties { RotWithShapeAttr : _ea . Bool ( true ) , GsLst : & _fc . CT_GradientStopList { } , Lin : & _fc . CT_LinearShadeProperties { } } ;
_gda . GradFill . Lin . AngAttr = _ea . Int32 ( 5400000 ) ; _gda . GradFill . Lin . ScaledAttr = _ea . Bool ( false ) ; _ecfda := _fc . NewCT_GradientStop ( ) ; _ecfda . PosAttr . ST_PositiveFixedPercentageDecimal = _ea . Int32 ( 0 ) ; _ecfda . SchemeClr = & _fc . CT_SchemeColor { ValAttr : _fc . ST_SchemeColorValPhClr } ;
_gda . GradFill . GsLst . Gs = append ( _gda . GradFill . GsLst . Gs , _ecfda ) ; _ecfda = _fc . NewCT_GradientStop ( ) ; _ecfda . PosAttr . ST_PositiveFixedPercentageDecimal = _ea . Int32 ( 50000 ) ; _ecfda . SchemeClr = & _fc . CT_SchemeColor { ValAttr : _fc . ST_SchemeColorValPhClr } ;
_gda . GradFill . GsLst . Gs = append ( _gda . GradFill . GsLst . Gs , _ecfda ) ; _faca . ThemeElements . FmtScheme . LnStyleLst = _fc . NewCT_LineStyleList ( ) ; for _dfb := 0 ; _dfb < 3 ; _dfb ++ { _deb := _fc . NewCT_LineProperties ( ) ; _deb . WAttr = _ea . Int32 ( int32 ( 6350 * ( _dfb + 1 ) ) ) ;
_deb . CapAttr = _fc . ST_LineCapFlat ; _deb . CmpdAttr = _fc . ST_CompoundLineSng ; _deb . AlgnAttr = _fc . ST_PenAlignmentCtr ; _faca . ThemeElements . FmtScheme . LnStyleLst . Ln = append ( _faca . ThemeElements . FmtScheme . LnStyleLst . Ln , _deb ) ; } ; _faca . ThemeElements . FmtScheme . EffectStyleLst = _fc . NewCT_EffectStyleList ( ) ;
for _bcff := 0 ; _bcff < 3 ; _bcff ++ { _cac := _fc . NewCT_EffectStyleItem ( ) ; _cac . EffectLst = _fc . NewCT_EffectList ( ) ; _faca . ThemeElements . FmtScheme . EffectStyleLst . EffectStyle = append ( _faca . ThemeElements . FmtScheme . EffectStyleLst . EffectStyle , _cac ) ; } ;
_gae := _fc . NewEG_FillProperties ( ) ; _gae . SolidFill = & _fc . CT_SolidColorFillProperties { SchemeClr : & _fc . CT_SchemeColor { ValAttr : _fc . ST_SchemeColorValPhClr } } ; _faca . ThemeElements . FmtScheme . BgFillStyleLst . EG_FillProperties = append ( _faca . ThemeElements . FmtScheme . BgFillStyleLst . EG_FillProperties , _gae ) ;
_faca . ThemeElements . FmtScheme . BgFillStyleLst . EG_FillProperties = append ( _faca . ThemeElements . FmtScheme . BgFillStyleLst . EG_FillProperties , _gae ) ; _faca . ThemeElements . FmtScheme . BgFillStyleLst . EG_FillProperties = append ( _faca . ThemeElements . FmtScheme . BgFillStyleLst . EG_FillProperties , _gda ) ;
_eeg . _ccf = append ( _eeg . _ccf , _faca ) ; _fbf := _ea . AbsoluteFilename ( _ea . DocTypePresentation , _ea . ThemeType , 1 ) ; _eeg . ContentTypes . AddOverride ( _fbf , _ea . ThemeContentType ) ; _eeg . _bfg . AddAutoRelationship ( _ea . DocTypePresentation , _ea . OfficeDocumentType , 1 , _ea . ThemeType ) ;
_aadf := _dab . NewRelationships ( ) ; _eeg . _dged = append ( _eeg . _dged , _aadf ) ; _eeg . _gga = append ( _eeg . _gga , len ( _eeg . _ccf ) ) ; return _eeg ; } ;
2021-11-10 11:45:21 +00:00
2024-10-17 17:05:28 +00:00
// ClearAll completely clears a placeholder. To be useable, at least one
// paragraph must be added after ClearAll via AddParagraph.
func ( _agd PlaceHolder ) ClearAll ( ) { _agd . _eag . SpPr = _fc . NewCT_ShapeProperties ( ) ; _agd . _eag . TxBody = _fc . NewCT_TextBody ( ) ; _agd . _eag . TxBody . LstStyle = _fc . NewCT_TextListStyle ( ) ; } ;
2022-02-05 13:05:36 +00:00
2024-10-17 17:05:28 +00:00
// NotesTextViewPr returns the NotesTextViewPr property.
func ( _fbd ViewProperties ) NotesTextViewPr ( ) * _ffc . CT_NotesTextViewProperties { return _fbd . _cgdg . NotesTextViewPr ; } ;
2024-04-03 00:10:23 +07:00
2024-10-17 17:05:28 +00:00
// WebPr returns the WebPr property.
func ( _cde PresentationProperties ) WebPr ( ) * _ffc . CT_WebProperties { return _cde . _bfbd . WebPr } ;
2022-04-09 14:27:46 +00:00
2024-10-17 17:05:28 +00:00
// Properties returns the properties of the TextBox.
func ( _fddg TextBox ) Properties ( ) _fa . ShapeProperties { if _fddg . _cgd . SpPr == nil { _fddg . _cgd . SpPr = _fc . NewCT_ShapeProperties ( ) ; } ; return _fa . MakeShapeProperties ( _fddg . _cgd . SpPr ) ; } ;
2022-02-05 13:05:36 +00:00
2024-10-17 17:05:28 +00:00
// AddTable adds an empty table to a slide.
func ( _bfgd Slide ) AddTable ( ) * _dab . Table { _gaefb := _ffc . NewCT_GroupShapeChoice ( ) ; _bfgd . _gede . CSld . SpTree . Choice = append ( _bfgd . _gede . CSld . SpTree . Choice , _gaefb ) ; _abddc := _ffc . NewCT_GraphicalObjectFrame ( ) ; _gaefb . GraphicFrame = append ( _gaefb . GraphicFrame , _abddc ) ;
_abddc . Xfrm . Off = _fc . NewCT_Point2D ( ) ; _bce := int64 ( 1 ) ; _abddc . Xfrm . Off . XAttr = _fc . ST_Coordinate { ST_CoordinateUnqualified : & _bce } ; _abddc . Xfrm . Off . YAttr = _fc . ST_Coordinate { ST_CoordinateUnqualified : & _bce } ; _gfd := _abddc . Graphic . CT_GraphicalObject . GraphicData ;
_gfd . UriAttr = "\u0068\u0074\u0074\u0070\u003a\u002f\u002f\u0073\u0063\u0068\u0065\u006d\u0061\u0073\u002eo\u0070\u0065\u006e\u0078\u006d\u006c\u0066\u006f\u0072\u006d\u0061\u0074\u0073.\u006f\u0072\u0067\u002f\u0064\u0072\u0061\u0077\u0069\u006e\u0067\u006dl/\u0032\u0030\u0030\u0036\u002f\u0074\u0061\u0062\u006c\u0065" ;
_ebg := _dab . NewTableWithXfrm ( _abddc . Xfrm ) ; _gfd . Any = append ( _gfd . Any , _ebg . X ( ) ) ; return _ebg ; } ;
2023-09-16 17:56:36 +00:00
2024-10-17 17:05:28 +00:00
// SlideLayout is a layout from which slides can be created.
type SlideLayout struct { _cefa * _ffc . SldLayout } ;
2022-02-05 13:05:36 +00:00
2024-10-17 17:05:28 +00:00
// X returns the inner wrapped XML type.
func ( _dddg SlideLayout ) X ( ) * _ffc . SldLayout { return _dddg . _cefa } ;
2024-07-28 07:48:26 +00:00
2024-10-17 17:05:28 +00:00
// SorterViewPr returns the SorterViewPr property.
func ( _baff ViewProperties ) SorterViewPr ( ) * _ffc . CT_SlideSorterViewProperties { return _baff . _cgdg . SorterViewPr ; } ;
2024-07-28 07:48:26 +00:00
2024-10-17 17:05:28 +00:00
// Open opens and reads a document from a file (.pptx).
func Open ( filename string ) ( * Presentation , error ) { _add , _afd := _eaa . Open ( filename ) ; if _afd != nil { return nil , _ff . Errorf ( "e\u0072r\u006f\u0072\u0020\u006f\u0070\u0065\u006e\u0069n\u0067\u0020\u0025\u0073: \u0025\u0073" , filename , _afd ) ; } ; defer _add . Close ( ) ;
_fga , _afd := _eaa . Stat ( filename ) ; if _afd != nil { return nil , _ff . Errorf ( "e\u0072r\u006f\u0072\u0020\u006f\u0070\u0065\u006e\u0069n\u0067\u0020\u0025\u0073: \u0025\u0073" , filename , _afd ) ; } ; _ = _fga ; return Read ( _add , _fga . Size ( ) ) ; } ;
2022-02-05 13:05:36 +00:00
2024-09-16 09:59:58 +00:00
// SlideSize represents a slide size of a presentation.
2024-10-17 17:05:28 +00:00
type SlideSize struct { _bgbf * _ffc . CT_SlideSize ; _bgcc * Presentation ; } ;
2024-06-20 13:33:45 +00:00
2024-10-17 17:05:28 +00:00
// AddImage adds an image textbox to a slide.
func ( _fbee Slide ) AddImage ( img _dab . ImageRef ) Image { _cgab := _ffc . NewCT_GroupShapeChoice ( ) ; _fbee . _gede . CSld . SpTree . Choice = append ( _fbee . _gede . CSld . SpTree . Choice , _cgab ) ; _bfef := _ffc . NewCT_Picture ( ) ; _cgab . Pic = append ( _cgab . Pic , _bfef ) ;
_bfef . NvPicPr . CNvPicPr = _fc . NewCT_NonVisualPictureProperties ( ) ; _bfef . NvPicPr . CNvPicPr . PicLocks = _fc . NewCT_PictureLocking ( ) ; _bfef . NvPicPr . CNvPicPr . PicLocks . NoChangeAspectAttr = _ea . Bool ( true ) ; _bfef . BlipFill = _fc . NewCT_BlipFillProperties ( ) ;
_bfef . BlipFill . Blip = _fc . NewCT_Blip ( ) ; _dffae := _fbee . AddImageToRels ( img ) ; _bfef . BlipFill . Blip . EmbedAttr = _ea . String ( _dffae ) ; _bfef . BlipFill . Stretch = _fc . NewCT_StretchInfoProperties ( ) ; _bfef . BlipFill . Stretch . FillRect = _fc . NewCT_RelativeRect ( ) ;
_bfef . SpPr = _fc . NewCT_ShapeProperties ( ) ; _bfef . SpPr . PrstGeom = _fc . NewCT_PresetGeometry2D ( ) ; _bfef . SpPr . PrstGeom . PrstAttr = _fc . ST_ShapeTypeRect ; _accc := Image { _bfef } ; _fea := img . Size ( ) ; _accc . Properties ( ) . SetWidth ( _dfg . Distance ( _fea . X ) * _dfg . Pixel72 ) ;
_accc . Properties ( ) . SetHeight ( _dfg . Distance ( _fea . Y ) * _dfg . Pixel72 ) ; _accc . Properties ( ) . SetPosition ( 0 , 0 ) ; return _accc ; } ;
2023-12-12 23:20:29 +00:00
2024-10-17 17:05:28 +00:00
// X returns TextBox's underlying *pml.CT_Shape.
func ( _dddgd TextBox ) X ( ) * _ffc . CT_Shape { return _dddgd . _cgd } ;
2023-12-12 23:20:29 +00:00
2024-10-17 17:05:28 +00:00
// GetTableStyleById returns *dml.CT_TableStyle by its style id.
func ( _gcgc * Presentation ) GetTableStyleById ( id string ) * _fc . CT_TableStyle { _edad := _gcgc . _edaa . TblStyle ( ) ; for _ , _dggg := range _edad { if _dggg . StyleIdAttr == id { return _dggg ; } ; } ; return nil ; } ;
2023-12-12 23:20:29 +00:00
2024-10-17 17:05:28 +00:00
// AddSlideWithLayout adds a new slide with content copied from a layout. Normally you should
// use AddDefaultSlideWithLayout as it will do some post processing similar to PowerPoint to
// clear place holder text, etc.
func ( _cdd * Presentation ) AddSlideWithLayout ( l SlideLayout ) ( Slide , error ) { _afe := _ffc . NewCT_SlideIdListEntry ( ) ; _afe . IdAttr = _cdd . nextSlideID ( ) ; _cdd . _aee . SldIdLst . SldId = append ( _cdd . _aee . SldIdLst . SldId , _afe ) ; _febc := _ffc . NewSld ( ) ; _dfbg := _gf . Buffer { } ;
_agc := _cba . NewEncoder ( & _dfbg ) ; _fbc := _cba . StartElement { Name : _cba . Name { Local : "\u0073\u006c\u0069d\u0065" } } ; _fbc . Attr = append ( _fbc . Attr , _cba . Attr { Name : _cba . Name { Local : "\u0078\u006d\u006cn\u0073" } , Value : "\u0068\u0074\u0074\u0070\u003a\u002f\u002f\u0073\u0063\u0068\u0065\u006d\u0061\u0073\u002e\u006f\u0070\u0065\u006e\u0078m\u006c\u0066\u006f\u0072\u006d\u0061\u0074\u0073\u002eo\u0072\u0067\u002f\u0070\u0072\u0065\u0073\u0065\u006e\u0074\u0061\u0074\u0069o\u006e\u006d\u006c\u002f\u0032\u00300\u0036\u002f\u006da\u0069\u006e" } ) ;
_fbc . Attr = append ( _fbc . Attr , _cba . Attr { Name : _cba . Name { Local : "\u0078m\u006c\u006e\u0073\u003a\u0061" } , Value : "\u0068\u0074\u0074\u0070\u003a\u002f\u002f\u0073\u0063\u0068\u0065m\u0061\u0073\u002e\u006f\u0070\u0065\u006e\u0078m\u006cf\u006f\u0072\u006d\u0061\u0074\u0073\u002e\u006f\u0072\u0067\u002f\u0064\u0072\u0061\u0077\u0069\u006e\u0067m\u006c\u002f\u0032\u0030\u0030\u0036\u002f\u006d\u0061\u0069\u006e" } ) ;
_fbc . Attr = append ( _fbc . Attr , _cba . Attr { Name : _cba . Name { Local : "\u0078m\u006c\u006e\u0073\u003a\u0070" } , Value : "\u0068\u0074\u0074\u0070\u003a\u002f\u002f\u0073\u0063\u0068\u0065\u006d\u0061\u0073\u002e\u006f\u0070\u0065\u006e\u0078m\u006c\u0066\u006f\u0072\u006d\u0061\u0074\u0073\u002eo\u0072\u0067\u002f\u0070\u0072\u0065\u0073\u0065\u006e\u0074\u0061\u0074\u0069o\u006e\u006d\u006c\u002f\u0032\u00300\u0036\u002f\u006da\u0069\u006e" } ) ;
_fbc . Attr = append ( _fbc . Attr , _cba . Attr { Name : _cba . Name { Local : "\u0078m\u006c\u006e\u0073\u003a\u0072" } , Value : "\u0068\u0074\u0074\u0070\u003a\u002f/\u0073\u0063\u0068\u0065\u006da\u0073\u002e\u006f\u0070\u0065\u006ex\u006d\u006c\u0066\u006f\u0072m\u0061\u0074\u0073\u002e\u006f\u0072\u0067\u002f\u006f\u0066\u0066\u0069c\u0065\u0044\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u002f\u0032\u0030\u0030\u0036\u002fr\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0073h\u0069\u0070\u0073" } ) ;
_fbc . Attr = append ( _fbc . Attr , _cba . Attr { Name : _cba . Name { Local : "\u0078\u006d\u006c\u006e\u0073\u003a\u0073\u0068" } , Value : "\u0068\u0074\u0074\u0070\u003a/\u002f\u0073\u0063\u0068\u0065m\u0061s\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006c\u0066\u006f\u0072\u006d\u0061\u0074\u0073\u002e\u006f\u0072\u0067/\u006f\u0066\u0066\u0069\u0063\u0065\u0044\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u002f\u0032\u0030\u0030\u0036\u002f\u0073\u0068\u0061\u0072e\u0064\u0054\u0079\u0070\u0065\u0073" } ) ;
_fbc . Attr = append ( _fbc . Attr , _cba . Attr { Name : _cba . Name { Local : "\u0078m\u006c\u006e\u0073\u003a\u0078\u006dl" } , Value : "\u0068\u0074tp\u003a\u002f\u002fw\u0077\u0077\u002e\u00773.o\u0072g/\u0058\u004d\u004c\u002f\u0031\u0039\u00398/\u006e\u0061\u006d\u0065\u0073\u0070\u0061c\u0065" } ) ;
if _bdb := l . _cefa . CSld . MarshalXML ( _agc , _fbc ) ; _bdb != nil { return Slide { } , _bdb ; } ; _agc . Flush ( ) ; _dadf := _cba . NewDecoder ( & _dfbg ) ; _febc . CSld = _ffc . NewCT_CommonSlideData ( ) ; if _ccd := _dadf . Decode ( _febc . CSld ) ; _ccd != nil { return Slide { } , _ccd ;
} ; _febc . CSld . NameAttr = nil ; _febc . CSld . SpTree . Choice = _fec ( _febc . CSld . SpTree . Choice ) ; _cdd . _babe = append ( _cdd . _babe , _febc ) ; _cdd . _acc = append ( _cdd . _acc , len ( _cdd . _babe ) ) ; _gcfa := _cdd . _bfg . AddAutoRelationship ( _ea . DocTypePresentation , _ea . OfficeDocumentType , len ( _cdd . _babe ) , _ea . SlideType ) ;
_afe . RIdAttr = _gcfa . ID ( ) ; _gfeb := _ea . AbsoluteFilename ( _ea . DocTypePresentation , _ea . SlideType , len ( _cdd . _babe ) ) ; _cdd . ContentTypes . AddOverride ( _gfeb , _ea . SlideContentType ) ; _dbf := _dab . NewRelationships ( ) ; _cdd . _cdec = append ( _cdd . _cdec , _dbf ) ;
_afb := len ( _cdd . _cdec ) - 1 ; for _cgb , _bff := range _cdd . _age { if _bff == l . X ( ) { _fbbg := _cdd . _cffc [ _cgb ] ; for _ , _fcd := range _fbbg . X ( ) . Relationship { if _fcd . TypeAttr != _ea . SlideMasterType { _cdd . _cdec [ _afb ] . X ( ) . Relationship = append ( _cdd . _cdec [ _afb ] . X ( ) . Relationship , _fcd ) ;
} ; } ; _dbf . AddAutoRelationship ( _ea . DocTypePresentation , _ea . SlideType , _cgb + 1 , _ea . SlideLayoutType ) ; } ; } ; _cab := Slide { _afe , _febc , _cdd , nil } ; return _cab , nil ; } ; func _af ( _ee * Presentation , _bb [ ] * _ffc . CT_GroupShapeChoice , _fcf [ ] rectangle , _ffcb [ ] * TextItem ) [ ] * TextItem { for _ , _ec := range _bb { _cff := append ( [ ] rectangle { } , _fcf ... ) ;
for _ , _beg := range _ec . Sp { _ffcb = append ( _ffcb , _fdf ( _ee , _beg , nil , nil , _beg . SpPr . Xfrm , 0 , _fcf , _beg . TxBody . P ) ... ) ; } ; for _ , _bg := range _ec . GraphicFrame { if _bg != nil && _bg . Graphic != nil && _bg . Graphic . GraphicData != nil { _ggc := _bg . Xfrm ;
for _ , _cc := range _bg . Graphic . GraphicData . Any { if _gc , _bdg := _cc . ( * _fc . Tbl ) ; _bdg { _cbd := & _gc . CT_Table ; _dgc := 0 ; for _ccc , _bbf := range _gc . Tr { for _ccb , _cca := range _bbf . Tc { _ebf := & TableInfo { Table : _cbd , Row : _bbf , Cell : _cca , RowIndex : _ccc , ColIndex : _ccb } ;
_ffcb = append ( _ffcb , _fdf ( _ee , nil , _bg , _ebf , _ggc , _dgc , _fcf , _cca . TxBody . P ) ... ) ; _dgc ++ ; } ; } ; } ; } ; } ; } ; for _ , _ca := range _ec . GrpSp { if _ca . GrpSpPr != nil { _ag := _ca . GrpSpPr . Xfrm ; var _agb , _bac int64 ; if _ag . Off != nil { _gd , _bag := _ag . Off . XAttr . ST_CoordinateUnqualified , _ag . Off . YAttr . ST_CoordinateUnqualified ;
if _gd != nil && _bag != nil { if _geg := _ag . Ext ; _geg != nil { _agb , _bac = _geg . CxAttr , _geg . CyAttr ; } ; _cff = append ( _cff , rectangle { _fdg : * _gd , _cg : * _bag , _bf : * _gd + _agb , _cf : * _bag + _bac } ) ; } ; } ; } ; _ffcb = _af ( _ee , _ca . Choice , _cff , _ffcb ) ; } ; } ; return _ffcb ;
} ;
2024-07-28 07:48:26 +00:00
2024-10-17 17:05:28 +00:00
// NewViewProperties constructs a new ViewProperties.
func NewViewProperties ( ) ViewProperties { return ViewProperties { _cgdg : _ffc . NewViewPr ( ) } } ; func ( _bgb sort2d ) Len ( ) int { return len ( _bgb ) } ;
2024-07-28 07:48:26 +00:00
2024-10-17 17:05:28 +00:00
// X returns the inner wrapped XML type.
func ( _acdd * Presentation ) X ( ) * _ffc . Presentation { return _acdd . _aee } ; func ( _gba * Presentation ) Validate ( ) error { if _bgg := _gba . _aee . Validate ( ) ; _bgg != nil { return _bgg ; } ; for _eabg , _gbac := range _gba . Slides ( ) { if _eadg := _gbac . ValidateWithPath ( _ff . Sprintf ( "\u0053l\u0069\u0064\u0065\u005b\u0025\u0064]" , _eabg ) ) ;
_eadg != nil { return _eadg ; } ; } ; for _dffa , _ccg := range _gba . _fdea { if _fgcf := _ccg . ValidateWithPath ( _ff . Sprintf ( "\u0053l\u0069d\u0065\u004d\u0061\u0073\u0074\u0065\u0072\u005b\u0025\u0064\u005d" , _dffa ) ) ; _fgcf != nil { return _fgcf ; } ; } ; for _dgg , _fgag := range _gba . _age { if _ada := _fgag . ValidateWithPath ( _ff . Sprintf ( "\u0053l\u0069d\u0065\u004c\u0061\u0079\u006f\u0075\u0074\u005b\u0025\u0064\u005d" , _dgg ) ) ;
_ada != nil { return _ada ; } ; } ; return nil ; } ; func ( _cda * Presentation ) save ( _daec _gg . Writer , _eagd bool ) error { const _bge = "\u0050\u0072\u0065\u0073en\u0074\u0061\u0074\u0069\u006f\u006e\u003a\u0070\u002e\u0053\u0061\u0076\u0065" ; if _eed := _cda . _aee . Validate ( ) ;
_eed != nil { _ba . Log . Debug ( "\u0076\u0061\u006c\u0069\u0064\u0061\u0074\u0069\u006f\u006e\u0020\u0065\u0072\u0072\u006fr\u0020i\u006e\u0020\u0064\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u003a\u0020\u0025\u0073" , _eed ) ; } ; if ! _bd . GetLicenseKey ( ) . IsLicensed ( ) && ! _eac { _ff . Println ( "\u0055\u006e\u006ci\u0063\u0065\u006e\u0073e\u0064\u0020\u0076\u0065\u0072\u0073\u0069o\u006e\u0020\u006f\u0066\u0020\u0055\u006e\u0069\u004f\u0066\u0066\u0069\u0063\u0065" ) ;
_ff . Println ( "\u002d\u0020\u0047e\u0074\u0020\u0061\u0020\u0074\u0072\u0069\u0061\u006c\u0020\u006c\u0069\u0063\u0065\u006e\u0073\u0065\u0020\u006f\u006e\u0020\u0068\u0074\u0074\u0070\u0073\u003a\u002f\u002fu\u006e\u0069\u0064\u006f\u0063\u002e\u0069\u006f" ) ;
return _ga . New ( "\u0075\u006e\u0069\u006f\u0066\u0066\u0069\u0063\u0065\u0020\u006ci\u0063\u0065\u006e\u0073\u0065\u0020\u0072\u0065\u0071\u0075i\u0072\u0065\u0064" ) ; } ; _adf := "\u0075n\u006b\u006e\u006f\u0077\u006e" ; if _fcee , _gcg := _daec . ( * _eaa . File ) ;
_gcg { _adf = _fcee . Name ( ) ; } ; if len ( _cda . _ade ) == 0 { _bdba , _agf := _bd . GenRefId ( "\u0070\u0077" ) ; if _agf != nil { _ba . Log . Error ( "\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v" , _agf ) ; return _agf ; } ; _cda . _ade = _bdba ; } ; if _bagb := _bd . Track ( _cda . _ade , _bge , _adf ) ;
_bagb != nil { _ba . Log . Error ( "\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v" , _bagb ) ; return _bagb ; } ; if _eagd { _cda . ContentTypes . RemoveOverride ( "\u0061\u0070\u0070\u006c\u0069\u0063\u0061t\u0069\u006f\u006e\u002f\u0076\u006e\u0064\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006c\u0066\u006f\u0072m\u0061\u0074\u0073\u002d\u006ff\u0066\u0069\u0063\u0065\u0064\u006f\u0063\u0075\u006de\u006e\u0074\u002e\u0070\u0072\u0065\u0073\u0065\u006e\u0074\u0061\u0074\u0069\u006f\u006e\u006d\u006c\u002e\u0070\u0072\u0065\u0073\u0065\u006e\u0074\u0061\u0074\u0069\u006f\u006e\u002e\u006d\u0061\u0069\u006e\u002b\u0078\u006d\u006c" ) ;
_cda . ContentTypes . EnsureOverride ( "/\u0070\u0070\u0074\u002fpr\u0065s\u0065\u006e\u0074\u0061\u0074i\u006f\u006e\u002e\u0078\u006d\u006c" , "\u0061\u0070pl\u0069\u0063\u0061\u0074\u0069\u006f\u006e\u002f\u0076\u006e\u0064\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006c\u0066o\u0072\u006d\u0061\u0074s\u002d\u006f\u0066\u0066ic\u0065\u0064o\u0063u\u006d\u0065\u006e\u0074\u002e\u0070r\u0065\u0073\u0065n\u0074\u0061t\u0069\u006f\u006e\u006d\u006c\u002e\u0074\u0065\u006d\u0070\u006c\u0061\u0074\u0065.\u006d\u0061\u0069\u006e\u002b\u0078\u006d\u006c" ) ;
} else { _cda . ContentTypes . RemoveOverride ( "\u0061\u0070pl\u0069\u0063\u0061\u0074\u0069\u006f\u006e\u002f\u0076\u006e\u0064\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006c\u0066o\u0072\u006d\u0061\u0074s\u002d\u006f\u0066\u0066ic\u0065\u0064o\u0063u\u006d\u0065\u006e\u0074\u002e\u0070r\u0065\u0073\u0065n\u0074\u0061t\u0069\u006f\u006e\u006d\u006c\u002e\u0074\u0065\u006d\u0070\u006c\u0061\u0074\u0065.\u006d\u0061\u0069\u006e\u002b\u0078\u006d\u006c" ) ;
_cda . ContentTypes . EnsureOverride ( "/\u0070\u0070\u0074\u002fpr\u0065s\u0065\u006e\u0074\u0061\u0074i\u006f\u006e\u002e\u0078\u006d\u006c" , "\u0061\u0070\u0070\u006c\u0069\u0063\u0061t\u0069\u006f\u006e\u002f\u0076\u006e\u0064\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006c\u0066\u006f\u0072m\u0061\u0074\u0073\u002d\u006ff\u0066\u0069\u0063\u0065\u0064\u006f\u0063\u0075\u006de\u006e\u0074\u002e\u0070\u0072\u0065\u0073\u0065\u006e\u0074\u0061\u0074\u0069\u006f\u006e\u006d\u006c\u002e\u0070\u0072\u0065\u0073\u0065\u006e\u0074\u0061\u0074\u0069\u006f\u006e\u002e\u006d\u0061\u0069\u006e\u002b\u0078\u006d\u006c" ) ;
} ; _dea := _ea . DocTypePresentation ; _eecg := _baf . NewWriter ( _daec ) ; defer _eecg . Close ( ) ; if _ggd := _f . MarshalXML ( _eecg , _ea . BaseRelsFilename , _cda . Rels . X ( ) ) ; _ggd != nil { return _ggd ; } ; if _cade := _f . MarshalXMLByType ( _eecg , _dea , _ea . ExtendedPropertiesType , _cda . AppProperties . X ( ) ) ;
_cade != nil { return _cade ; } ; if _cfff := _f . MarshalXMLByType ( _eecg , _dea , _ea . CorePropertiesType , _cda . CoreProperties . X ( ) ) ; _cfff != nil { return _cfff ; } ; if _cgbc := _f . MarshalXMLByType ( _eecg , _dea , _ea . PresentationPropertiesType , _cda . _bcb . X ( ) ) ;
_cgbc != nil { return _cgbc ; } ; if _bcg := _f . MarshalXMLByType ( _eecg , _dea , _ea . ViewPropertiesType , _cda . _cfbg . X ( ) ) ; _bcg != nil { return _bcg ; } ; if _gbf := _f . MarshalXMLByType ( _eecg , _dea , _ea . TableStylesType , _cda . _edaa . X ( ) ) ; _gbf != nil { return _gbf ;
} ; if _cda . CustomProperties . X ( ) != nil { if _ecag := _f . MarshalXMLByType ( _eecg , _dea , _ea . CustomPropertiesType , _cda . CustomProperties . X ( ) ) ; _ecag != nil { return _ecag ; } ; } ; if _cda . Thumbnail != nil { _bba , _fbfg := _eecg . Create ( "\u0064\u006f\u0063Pr\u006f\u0070\u0073\u002f\u0074\u0068\u0075\u006d\u0062\u006e\u0061\u0069\u006c\u002e\u006a\u0070\u0065\u0067" ) ;
if _fbfg != nil { return _fbfg ; } ; if _dacb := _cb . Encode ( _bba , _cda . Thumbnail , nil ) ; _dacb != nil { return _dacb ; } ; } ; _ffe := _ea . AbsoluteFilename ( _dea , _ea . OfficeDocumentType , 0 ) ; if _bfab := _f . MarshalXML ( _eecg , _ffe , _cda . _aee ) ; _bfab != nil { return _bfab ;
} ; if _ead := _f . MarshalXML ( _eecg , _f . RelationsPathFor ( _ffe ) , _cda . _bfg . X ( ) ) ; _ead != nil { return _ead ; } ; for _ebeg , _dfed := range _cda . _babe { if _dfed == nil { continue ; } ; _gac := _ea . AbsoluteFilename ( _ea . DocTypePresentation , _ea . SlideType , _cda . _acc [ _ebeg ] ) ;
_f . MarshalXML ( _eecg , _gac , _dfed ) ; if ! _cda . _cdec [ _ebeg ] . IsEmpty ( ) { _edcb := _f . RelationsPathFor ( _gac ) ; _f . MarshalXML ( _eecg , _edcb , _cda . _cdec [ _ebeg ] . X ( ) ) ; } ; } ; for _egg , _afea := range _cda . _fdea { if _afea == nil { continue ; } ; _ggcc := _ea . AbsoluteFilename ( _ea . DocTypePresentation , _ea . SlideMasterType , _cda . _fee [ _egg ] ) ;
_f . MarshalXML ( _eecg , _ggcc , _afea ) ; if ! _cda . _ccae [ _egg ] . IsEmpty ( ) { _ffg := _f . RelationsPathFor ( _ggcc ) ; _f . MarshalXML ( _eecg , _ffg , _cda . _ccae [ _egg ] . X ( ) ) ; } ; } ; for _dfa , _addd := range _cda . _age { if _addd == nil { continue ; } ; _aaeb := _ea . AbsoluteFilename ( _ea . DocTypePresentation , _ea . SlideLayoutType , _dfa + 1 ) ;
_f . MarshalXML ( _eecg , _aaeb , _addd ) ; if ! _cda . _cffc [ _dfa ] . IsEmpty ( ) { _fefe := _f . RelationsPathFor ( _aaeb ) ; _f . MarshalXML ( _eecg , _fefe , _cda . _cffc [ _dfa ] . X ( ) ) ; } ; } ; for _fdd , _cdc := range _cda . _ccf { if _cdc == nil { continue ; } ; _abdde := _ea . AbsoluteFilename ( _ea . DocTypePresentation , _ea . ThemeType , _cda . _gga [ _fdd ] ) ;
_f . MarshalXML ( _eecg , _abdde , _cdc ) ; if ! _cda . _dged [ _fdd ] . IsEmpty ( ) { _gce := _f . RelationsPathFor ( _abdde ) ; _f . MarshalXML ( _eecg , _gce , _cda . _dged [ _fdd ] . X ( ) ) ; } ; } ; for _geb , _bgf := range _cda . _bbfa { _cdg := _ea . AbsoluteFilename ( _dea , _ea . ChartType , _geb + 1 ) ;
_f . MarshalXML ( _eecg , _cdg , _bgf ) ; } ; for _bcgd , _ffbc := range _cda . _bee { _gfb := _ea . AbsoluteFilename ( _dea , _ea . HandoutMasterType , _bcgd + 1 ) ; _f . MarshalXML ( _eecg , _gfb , _ffbc ) ; } ; for _aeea , _eff := range _cda . _dae { if _eff == nil { continue ; } ; _fabf := _ea . AbsoluteFilename ( _dea , _ea . NotesMasterType , _cda . _gbc [ _aeea ] ) ;
_f . MarshalXML ( _eecg , _fabf , _eff ) ; } ; for _cfbf , _dfaa := range _cda . Images { _gfa := _cfbf + 1 ; if _gad , _caba := _da . StringToNumbers ( _dfaa . Target ( ) ) ; _caba && _gfa != _gad { _gfa = _gad ; } ; if _fffc := _dab . AddImageToZip ( _eecg , _dfaa , _gfa , _ea . DocTypePresentation ) ;
_fffc != nil { return _fffc ; } ; } ; _cda . ContentTypes . EnsureDefault ( "\u0070\u006e\u0067" , "\u0069m\u0061\u0067\u0065\u002f\u0070\u006eg" ) ; _cda . ContentTypes . EnsureDefault ( "\u006a\u0070\u0065\u0067" , "\u0069\u006d\u0061\u0067\u0065\u002f\u006a\u0070\u0065\u0067" ) ;
_cda . ContentTypes . EnsureDefault ( "\u006a\u0070\u0067" , "\u0069\u006d\u0061\u0067\u0065\u002f\u006a\u0070\u0065\u0067" ) ; _cda . ContentTypes . EnsureDefault ( "\u0077\u006d\u0066" , "i\u006d\u0061\u0067\u0065\u002f\u0078\u002d\u0077\u006d\u0066" ) ; if _cbfc := _f . MarshalXML ( _eecg , _ea . ContentTypesFilename , _cda . ContentTypes . X ( ) ) ;
_cbfc != nil { return _cbfc ; } ; if _ggg := _cda . WriteExtraFiles ( _eecg ) ; _ggg != nil { return _ggg ; } ; return nil ; } ;
2024-07-28 07:48:26 +00:00
2024-10-17 17:05:28 +00:00
// Save writes the presentation out to a writer in the Zip package format
func ( _def * Presentation ) Save ( w _gg . Writer ) error { return _def . save ( w , false ) } ;
2024-07-28 07:48:26 +00:00
2024-10-17 17:05:28 +00:00
// X returns the inner wrapped XML type.
func ( _fge PresentationProperties ) X ( ) * _ffc . PresentationPr { return _fge . _bfbd } ;
2023-12-12 23:20:29 +00:00
2024-10-17 17:05:28 +00:00
// SetOffsetY sets vertical offset of text box in distance units (see measurement package).
func ( _fdc TextBox ) SetOffsetY ( offY float64 ) { _bedd := _fdc . getOff ( ) ; _aecg := _dfg . ToEMU ( offY ) ; _bedd . YAttr = _fc . ST_Coordinate { ST_CoordinateUnqualified : & _aecg } ; } ;
2024-04-03 00:10:23 +07:00
2024-10-17 17:05:28 +00:00
// AddImage adds an image to the document package, returning a reference that
// can be used to add the image to a run and place it in the document contents.
func ( _gea * Presentation ) AddImage ( i _dab . Image ) ( _dab . ImageRef , error ) { _aggd := _dab . MakeImageRef ( i , & _gea . DocBase , _gea . _bfg ) ; if i . Data == nil && i . Path == "" { return _aggd , _ga . New ( "\u0069\u006d\u0061\u0067\u0065\u0020\u006d\u0075\u0073\u0074 \u0068\u0061\u0076\u0065\u0020\u0064\u0061t\u0061\u0020\u006f\u0072\u0020\u0061\u0020\u0070\u0061\u0074\u0068" ) ;
} ; if i . Format == "" { return _aggd , _ga . New ( "\u0069\u006d\u0061\u0067\u0065\u0020\u006d\u0075\u0073\u0074 \u0068\u0061\u0076\u0065\u0020\u0061\u0020v\u0061\u006c\u0069\u0064\u0020\u0066\u006f\u0072\u006d\u0061\u0074" ) ; } ; if i . Size . X == 0 || i . Size . Y == 0 { return _aggd , _ga . New ( "\u0069\u006d\u0061\u0067e\u0020\u006d\u0075\u0073\u0074\u0020\u0068\u0061\u0076\u0065 \u0061 \u0076\u0061\u006c\u0069\u0064\u0020\u0073i\u007a\u0065" ) ;
} ; if i . Path != "" { _abg := _ge . Add ( i . Path ) ; if _abg != nil { return _aggd , _abg ; } ; } ; _gea . Images = append ( _gea . Images , _aggd ) ; _gea . ContentTypes . EnsureDefault ( "\u0070\u006e\u0067" , "\u0069m\u0061\u0067\u0065\u002f\u0070\u006eg" ) ; _gea . ContentTypes . EnsureDefault ( "\u006a\u0070\u0065\u0067" , "\u0069\u006d\u0061\u0067\u0065\u002f\u006a\u0070\u0065\u0067" ) ;
_gea . ContentTypes . EnsureDefault ( "\u006a\u0070\u0067" , "\u0069\u006d\u0061\u0067\u0065\u002f\u006a\u0070\u0065\u0067" ) ; _gea . ContentTypes . EnsureDefault ( "\u0077\u006d\u0066" , "i\u006d\u0061\u0067\u0065\u002f\u0078\u002d\u0077\u006d\u0066" ) ; _gea . ContentTypes . EnsureDefault ( i . Format , "\u0069\u006d\u0061\u0067\u0065\u002f" + i . Format ) ;
return _aggd , nil ; } ;
2023-04-15 17:27:31 +00:00
2024-10-17 17:05:28 +00:00
// SaveToFileAsTemplate writes the Presentation out to a file as a template.
func ( _agcc * Presentation ) SaveToFileAsTemplate ( path string ) error { return _agcc . saveToFile ( path , true ) ; } ;
2024-09-16 09:59:58 +00:00
// GetChartSpaceByRelId returns a *crt.ChartSpace with the associated relation ID in the
// slide.
2024-10-17 17:05:28 +00:00
func ( _bfag * Slide ) GetChartSpaceByRelId ( relId string ) * _g . ChartSpace { _bcgb := _bfag . getSlideRels ( ) ; if ( _bcgb == _dab . Relationships { } ) { return nil ; } ; _dacbf := _bcgb . GetTargetByRelId ( relId ) ; for _ , _bege := range _bfag . _caff . _bbfa { if _dacbf == _bege . Target ( ) { return _bege . _dfd ;
} ; } ; return nil ; } ; func _fdf ( _bgc * Presentation , _cbf * _ffc . CT_Shape , _eef * _ffc . CT_GraphicalObjectFrame , _fgb * TableInfo , _fab * _fc . CT_Transform2D , _eaf int , _fef [ ] rectangle , _cbe [ ] * _fc . CT_TextParagraph ) [ ] * TextItem { _cbc := [ ] * TextItem { } ; var _ace , _cfd , _bbg , _gfe , _gdf , _fgc int64 ;
_feb := _fab == nil ; _fad := 0 ; for _ , _baa := range _cbe { for _ , _cbgc := range _baa . EG_TextRun { if _bef := _cbgc . R ; _bef != nil { if ! _feb { if _fab . Off != nil { if _dad := _fab . Ext ; _dad != nil { _gdf , _fgc = _dad . CxAttr , _dad . CyAttr ; } ; if _bgcd := _fab . Off . XAttr . ST_CoordinateUnqualified ;
_bgcd != nil { _ace = * _bgcd ; _cfd = _ace + _gdf ; _feb = true ; } ; if _db := _fab . Off . YAttr . ST_CoordinateUnqualified ; _db != nil { _bbg = * _db ; _gfe = _bbg + _fgc ; _feb = true ; } ; } ; } ; _bab := append ( [ ] rectangle { } , _fef ... ) ; _bab = append ( _bab , rectangle { _fdg : _ace , _bf : _cfd , _cg : _bbg , _cf : _gfe } ) ;
_cbc = append ( _cbc , & TextItem { Presentation : _bgc , Shape : _cbf , GraphicFrame : _eef , TableInfo : _fgb , Paragraph : _baa , Run : _bef , Text : _bef . T , _eb : _bab , _dg : _eaf , _eae : _fad } ) ; _fad ++ ; } ; } ; } ; return _cbc ; } ;
2024-09-16 09:59:58 +00:00
// SlideMaster is the slide master for a presentation.
2024-10-17 17:05:28 +00:00
type SlideMaster struct { _adead * Presentation ; _adae _dab . Relationships ; _fae * _ffc . SldMaster ; } ;
2024-09-16 09:59:58 +00:00
// X returns the inner wrapped XML type.
2024-10-17 17:05:28 +00:00
func ( _eaac PlaceHolder ) X ( ) * _ffc . CT_Shape { return _eaac . _eag } ; type chart struct { _dfd * _g . ChartSpace ; _gaf string ; _gfc string ; } ;
2023-12-12 23:20:29 +00:00
2024-10-17 17:05:28 +00:00
// NewSlideScreenSize returns slide screen size with default MS PowerPoint slide screen size 16x9.
func NewSlideScreenSize ( ) SlideScreenSize { return NewSlideScreenSizeWithValue ( SlideScreenSize16x9 [ 0 ] , SlideScreenSize16x9 [ 1 ] ) ; } ;
2023-12-12 23:20:29 +00:00
2024-09-16 09:59:58 +00:00
// GetLayoutByName retrieves a slide layout given a layout name.
2024-10-17 17:05:28 +00:00
func ( _ebfd * Presentation ) GetLayoutByName ( name string ) ( SlideLayout , error ) { for _ , _gbae := range _ebfd . _age { if _gbae . CSld . NameAttr != nil && name == * _gbae . CSld . NameAttr { return SlideLayout { _gbae } , nil ; } ; } ; return SlideLayout { } , _ga . New ( "\u0075\u006eab\u006c\u0065\u0020t\u006f\u0020\u0066\u0069nd \u006cay\u006f\u0075\u0074\u0020\u0077\u0069\u0074h \u0074\u0068\u0061\u0074\u0020\u006e\u0061m\u0065" ) ;
2024-09-16 09:59:58 +00:00
} ;
2023-06-10 07:12:37 +00:00
2024-10-17 17:05:28 +00:00
// ValidateWithPath validates the slide passing path informaton for a better
// error message.
func ( _dgf Slide ) ValidateWithPath ( path string ) error { if _bcffb := _dgf . _gede . ValidateWithPath ( path ) ; _bcffb != nil { return _bcffb ; } ; for _ , _gfbb := range _dgf . _gede . CSld . SpTree . Choice { for _ , _baaa := range _gfbb . Sp { if _baaa . TxBody != nil { if len ( _baaa . TxBody . P ) == 0 { return _ga . New ( path + "\u0020\u003a \u0073\u006c\u0069\u0064\u0065 \u0073\u0068\u0061\u0070\u0065 \u0077\u0069\u0074\u0068\u0020\u0061\u0020\u0074\u0078\u0062\u006f\u0064\u0079\u0020\u006d\u0075\u0073\u0074\u0020\u0063\u006f\u006e\u0074\u0061\u0069\u006e\u0020\u0070\u0061\u0072\u0061\u0067\u0072\u0061\u0070\u0068\u0073" ) ;
} ; } ; } ; } ; return nil ; } ;
2023-09-16 17:56:36 +00:00
2024-10-17 17:05:28 +00:00
// GetImageByTarget returns an ImageRef with the given target in the
// document.
func ( _bdc * Presentation ) GetImageByTarget ( target string ) ( _dab . ImageRef , bool ) { for _ , _abf := range _bdc . Images { if _abf . Target ( ) == target { return _abf , true ; } ; } ; return _dab . ImageRef { } , false ; } ;
2023-08-06 17:57:53 +00:00
2024-10-17 17:05:28 +00:00
// SaveAsTemplate writes the presentation out to a writer in the Zip package format as a template
func ( _dbad * Presentation ) SaveAsTemplate ( w _gg . Writer ) error { return _dbad . save ( w , true ) } ;
2023-06-10 07:12:37 +00:00
2024-10-17 17:05:28 +00:00
// ExtractText returns text from a presentation as a PresentationText object.
func ( _be * Presentation ) ExtractText ( ) * PresentationText { _dac := [ ] * SlideText { } ; for _ , _ac := range _be . Slides ( ) { _eg := _ac . ExtractText ( ) ; if _eg != nil { _dac = append ( _dac , _eg ) ; } ; } ; return & PresentationText { Slides : _dac } ; } ;
2023-09-16 17:56:36 +00:00
2024-10-17 17:05:28 +00:00
// Height returns slide screen size height in EMU units.
func ( _dfdcg * SlideScreenSize ) Height ( ) int32 { return _dfdcg [ 1 ] } ;
2023-09-16 17:56:36 +00:00
2024-10-17 17:05:28 +00:00
// Themes returns an array of presentation themes.
func ( _eba * Presentation ) Themes ( ) [ ] * _fc . Theme { return _eba . _ccf } ;
2023-09-16 17:56:36 +00:00
2024-10-17 17:05:28 +00:00
// NewSlideScreenSizeWithValue returns slide screen size with given width and height.
// Width and Height value is in EMU units, use our measurement.ToEMU to convert the -
// width and height value.
func NewSlideScreenSizeWithValue ( width , height int32 ) SlideScreenSize { return SlideScreenSize { width , height } ; } ;
2023-06-10 07:12:37 +00:00
2024-10-17 17:05:28 +00:00
// ViewProperties contains presentation specific properties.
type ViewProperties struct { _cgdg * _ffc . ViewPr } ;
2023-08-06 17:57:53 +00:00
2024-10-17 17:05:28 +00:00
// Clear clears the placeholder contents and adds a single empty paragraph. The
// empty paragrah is required by PowerPoint or it will report the file as being
// invalid.
func ( _bfe PlaceHolder ) Clear ( ) { _bfe . ClearAll ( ) ; _cgg := _fc . NewCT_TextParagraph ( ) ; _bfe . _eag . TxBody . P = [ ] * _fc . CT_TextParagraph { _cgg } ; _cgg . EndParaRPr = _fc . NewCT_TextCharacterProperties ( ) ; _cgg . EndParaRPr . LangAttr = _ea . String ( "\u0065\u006e\u002dU\u0053" ) ;
} ;
2023-09-16 17:56:36 +00:00
2024-10-17 17:05:28 +00:00
// Presentation is the a presentation base document.
type Presentation struct { _dab . DocBase ; _aee * _ffc . Presentation ; _bfg _dab . Relationships ; _babe [ ] * _ffc . Sld ; _cdec [ ] _dab . Relationships ; _acc [ ] int ; _fdea [ ] * _ffc . SldMaster ; _ccae [ ] _dab . Relationships ; _fee [ ] int ; _age [ ] * _ffc . SldLayout ; _cffc [ ] _dab . Relationships ;
_ccf [ ] * _fc . Theme ; _dged [ ] _dab . Relationships ; _gga [ ] int ; _edaa _dab . TableStyles ; _bcb PresentationProperties ; _cfbg ViewProperties ; _fadf [ ] * _fc . CT_Hyperlink ; _bbfa [ ] * chart ; _bee [ ] * _ffc . HandoutMaster ; _dae [ ] * _ffc . NotesMaster ; _gbc [ ] int ; _cga [ ] * _ea . XSDAny ;
_bfd map [ string ] string ; _ade string ; } ;
2023-09-16 17:56:36 +00:00
2024-10-17 17:05:28 +00:00
// LastViewAttr returns the LastViewAttr property.
func ( _cefe ViewProperties ) LastViewAttr ( ) _ffc . ST_ViewType { return _cefe . _cgdg . LastViewAttr } ;
2023-09-16 17:56:36 +00:00
2024-10-17 17:05:28 +00:00
// SlideLayouts returns the slide layouts defined in the presentation.
func ( _geca * Presentation ) SlideLayouts ( ) [ ] SlideLayout { _dde := [ ] SlideLayout { } ; for _ , _gcd := range _geca . _age { if _gcd == nil { continue ; } ; if _gcd . CSld . NameAttr == nil { continue ; } ; _dde = append ( _dde , SlideLayout { _gcd } ) ; } ; return _dde ; } ; func ( _baag * Presentation ) nextSlideID ( ) uint32 { _eegd := uint32 ( 256 ) ;
for _ , _cdf := range _baag . _aee . SldIdLst . SldId { if _cdf . IdAttr >= _eegd { _eegd = _cdf . IdAttr + 1 ; } ; } ; return _eegd ; } ;
2023-12-12 23:20:29 +00:00
2024-10-17 17:05:28 +00:00
// AddTextBox adds an empty textbox to a slide.
func ( _fdff Slide ) AddTextBox ( ) TextBox { _gadb := _ffc . NewCT_GroupShapeChoice ( ) ; _fdff . _gede . CSld . SpTree . Choice = append ( _fdff . _gede . CSld . SpTree . Choice , _gadb ) ; _baggf := _ffc . NewCT_Shape ( ) ; _gadb . Sp = append ( _gadb . Sp , _baggf ) ; _baggf . SpPr = _fc . NewCT_ShapeProperties ( ) ;
_baggf . SpPr . Xfrm = _fc . NewCT_Transform2D ( ) ; _baggf . SpPr . PrstGeom = _fc . NewCT_PresetGeometry2D ( ) ; _baggf . SpPr . PrstGeom . PrstAttr = _fc . ST_ShapeTypeRect ; _baggf . NvSpPr = _ffc . NewCT_ShapeNonVisual ( ) ; _baggf . NvSpPr . CNvSpPr = _fc . NewCT_NonVisualDrawingShapeProps ( ) ;
_cecg := true ; _baggf . NvSpPr . CNvSpPr . TxBoxAttr = & _cecg ; _baggf . TxBody = _fc . NewCT_TextBody ( ) ; _baggf . TxBody . BodyPr = _fc . NewCT_TextBodyProperties ( ) ; _baggf . TxBody . BodyPr . WrapAttr = _fc . ST_TextWrappingTypeSquare ; _baggf . TxBody . BodyPr . SpAutoFit = _fc . NewCT_TextShapeAutofit ( ) ;
_efcg := TextBox { _baggf } ; _efcg . Properties ( ) . SetWidth ( 3 * _dfg . Inch ) ; _efcg . Properties ( ) . SetHeight ( 1 * _dfg . Inch ) ; _efcg . Properties ( ) . SetPosition ( 0 , 0 ) ; return _efcg ; } ;
2023-12-28 15:53:06 +00:00
2024-10-17 17:05:28 +00:00
// AddTable adds a new table to a placeholder.
func ( _dge PlaceHolder ) AddTable ( ) * _dab . Table { _dge . Clear ( ) ; _gec := _ffc . NewCT_GroupShapeChoice ( ) ; _dge . _bea . CSld . SpTree . Choice = append ( _dge . _bea . CSld . SpTree . Choice , _gec ) ; _bed := _ffc . NewCT_GraphicalObjectFrame ( ) ; _gec . GraphicFrame = append ( _gec . GraphicFrame , _bed ) ;
_bed . Xfrm . Off = _fc . NewCT_Point2D ( ) ; _fff := int64 ( 1 ) ; _bed . Xfrm . Off . XAttr = _fc . ST_Coordinate { ST_CoordinateUnqualified : & _fff } ; _bed . Xfrm . Off . YAttr = _fc . ST_Coordinate { ST_CoordinateUnqualified : & _fff } ; _bebe := _bed . Graphic . CT_GraphicalObject . GraphicData ;
_bebe . UriAttr = "\u0068\u0074\u0074\u0070\u003a\u002f\u002f\u0073\u0063\u0068\u0065\u006d\u0061\u0073\u002eo\u0070\u0065\u006e\u0078\u006d\u006c\u0066\u006f\u0072\u006d\u0061\u0074\u0073.\u006f\u0072\u0067\u002f\u0064\u0072\u0061\u0077\u0069\u006e\u0067\u006dl/\u0032\u0030\u0030\u0036\u002f\u0074\u0061\u0062\u006c\u0065" ;
_bfbf := _dab . NewTableWithXfrm ( _bed . Xfrm ) ; _bebe . Any = append ( _bebe . Any , _bfbf . X ( ) ) ; return _bfbf ; } ;
2024-06-20 13:33:45 +00:00
2024-10-17 17:05:28 +00:00
// GetImageByRelID returns an ImageRef with the associated relation ID in the
// document.
func ( _dbb * Presentation ) GetImageByRelID ( relID string ) ( _dab . ImageRef , bool ) { for _ , _gbd := range _dbb . Images { if _gbd . RelID ( ) == relID { return _gbd , true ; } ; } ; return _dab . ImageRef { } , false ; } ;
2024-06-20 13:33:45 +00:00
2024-10-17 17:05:28 +00:00
// ShowPr returns the ShowPr property.
func ( _fbe PresentationProperties ) ShowPr ( ) * _ffc . CT_ShowProperties { return _fbe . _bfbd . ShowPr } ;
2024-06-20 13:33:45 +00:00
2024-10-17 17:05:28 +00:00
// MoveSlide moves a slide with given number to position targetPos within a presentation.
func ( _ebfa * Presentation ) MoveSlide ( slideNumber , targetPos int ) error { if slideNumber < 0 || slideNumber >= len ( _ebfa . _babe ) { return _ga . New ( "\u0073\u006c\u0069\u0064eN\u0075\u006d\u0062\u0065\u0072\u0020\u0069\u0073\u0020\u0069\u006e\u0076\u0061\u006ci\u0064" ) ;
} ; if targetPos < 0 || targetPos >= len ( _ebfa . _babe ) { return _ga . New ( "t\u0061r\u0067\u0065\u0074\u0050\u006f\u0073\u0020\u0069s\u0020\u0069\u006e\u0076al\u0069\u0064" ) ; } ; if slideNumber == targetPos { return nil ; } ; _befe := _ebfa . _babe [ slideNumber ] ; _bdaa := _ebfa . _cdec [ slideNumber ] ;
if slideNumber < targetPos { copy ( _ebfa . _babe [ slideNumber : targetPos ] , _ebfa . _babe [ slideNumber + 1 : targetPos + 1 ] ) ; copy ( _ebfa . _cdec [ slideNumber : targetPos ] , _ebfa . _cdec [ slideNumber + 1 : targetPos + 1 ] ) ; copy ( _ebfa . _acc [ slideNumber : targetPos ] , _ebfa . _acc [ slideNumber + 1 : targetPos + 1 ] ) ;
} else { copy ( _ebfa . _babe [ targetPos + 1 : slideNumber + 1 ] , _ebfa . _babe [ targetPos : slideNumber ] ) ; copy ( _ebfa . _cdec [ targetPos + 1 : slideNumber + 1 ] , _ebfa . _cdec [ targetPos : slideNumber ] ) ; copy ( _ebfa . _acc [ targetPos + 1 : slideNumber + 1 ] , _ebfa . _acc [ targetPos : slideNumber ] ) ;
} ; _ebfa . _babe [ targetPos ] = _befe ; _ebfa . _cdec [ targetPos ] = _bdaa ; return nil ; } ;
2024-06-20 13:33:45 +00:00
2024-10-17 17:05:28 +00:00
// OpenTemplate opens a template file.
func OpenTemplate ( fn string ) ( * Presentation , error ) { _bbb , _ce := Open ( fn ) ; if _ce != nil { return nil , _ce ; } ; return _bbb , nil ; } ;
2024-02-17 03:37:07 +00:00
2024-10-17 17:05:28 +00:00
// Width returns slide screen size width in EMU units.
func ( _fggd * SlideScreenSize ) Width ( ) int32 { return _fggd [ 0 ] } ;
2024-05-22 00:21:11 +00:00
2024-10-17 17:05:28 +00:00
// GetPlaceholderByIndex returns a placeholder given its index. If there are multiplace
// placeholders of the same index, this method returns the first one. You must use the
// PlaceHolders() method to access the others.
func ( _ffa Slide ) GetPlaceholderByIndex ( idx uint32 ) ( PlaceHolder , error ) { for _ , _bgea := range _ffa . _gede . CSld . SpTree . Choice { for _ , _gged := range _bgea . Sp { if _gged . NvSpPr != nil && _gged . NvSpPr . NvPr != nil && _gged . NvSpPr . NvPr . Ph != nil { if ( idx == 0 && _gged . NvSpPr . NvPr . Ph . IdxAttr == nil ) || ( _gged . NvSpPr . NvPr . Ph . IdxAttr != nil && * _gged . NvSpPr . NvPr . Ph . IdxAttr == idx ) { return PlaceHolder { _gged , _ffa . _gede } , nil ;
} ; } ; } ; } ; return PlaceHolder { } , _ga . New ( "\u0075\u006e\u0061\u0062\u006c\u0065\u0020\u0074\u006f\u0020\u0066i\u006e\u0064\u0020\u0070\u006c\u0061\u0063\u0065\u0068\u006fl\u0064\u0065\u0072" ) ; } ;
2024-05-22 00:21:11 +00:00
2024-10-17 17:05:28 +00:00
// GridSpacing returns the GridSpacing property.
func ( _affa ViewProperties ) GridSpacing ( ) * _fc . CT_PositiveSize2D { return _affa . _cgdg . GridSpacing } ;
2024-05-22 00:21:11 +00:00
2024-10-17 17:05:28 +00:00
// Read reads a document from an io.Reader.
func Read ( r _gg . ReaderAt , size int64 ) ( * Presentation , error ) { const _ceac = "\u0070\u0072\u0065\u0073\u0065\u006e\u0074\u0061\u0074\u0069\u006f\u006e:\u0052\u0065\u0061\u0064" ; if ! _bd . GetLicenseKey ( ) . IsLicensed ( ) && ! _eac { _ff . Println ( "\u0055\u006e\u006ci\u0063\u0065\u006e\u0073e\u0064\u0020\u0076\u0065\u0072\u0073\u0069o\u006e\u0020\u006f\u0066\u0020\u0055\u006e\u0069\u004f\u0066\u0066\u0069\u0063\u0065" ) ;
_ff . Println ( "\u002d\u0020\u0047e\u0074\u0020\u0061\u0020\u0074\u0072\u0069\u0061\u006c\u0020\u006c\u0069\u0063\u0065\u006e\u0073\u0065\u0020\u006f\u006e\u0020\u0068\u0074\u0074\u0070\u0073\u003a\u002f\u002fu\u006e\u0069\u0064\u006f\u0063\u002e\u0069\u006f" ) ;
return nil , _ga . New ( "\u0075\u006e\u0069\u006f\u0066\u0066\u0069\u0063\u0065\u0020\u006ci\u0063\u0065\u006e\u0073\u0065\u0020\u0072\u0065\u0071\u0075i\u0072\u0065\u0064" ) ; } ; _egd := "\u0075n\u006b\u006e\u006f\u0077\u006e" ; if _adb , _ebegb := r . ( * _eaa . File ) ;
_ebegb { _egd = _adb . Name ( ) ; } ; _cbcf := _eagg ( ) ; _fdgg , _gag := _bd . GenRefId ( "\u0070\u0072" ) ; if _gag != nil { _ba . Log . Error ( "\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v" , _gag ) ; return nil , _gag ; } ; _cbcf . _ade = _fdgg ; if _afeg := _bd . Track ( _cbcf . _ade , _ceac , _egd ) ;
_afeg != nil { _ba . Log . Error ( "\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v" , _afeg ) ; return nil , _afeg ; } ; _cfc , _gag := _ge . TempDir ( "\u0075\u006e\u0069\u006f\u0066\u0066\u0069\u0063\u0065-\u0070\u0070\u0074\u0078" ) ; if _gag != nil { return nil , _gag ; } ; _cbcf . TmpPath = _cfc ;
_adab , _gag := _baf . NewReader ( r , size ) ; if _gag != nil { return nil , _ff . Errorf ( "\u0070a\u0072s\u0069\u006e\u0067\u0020\u007a\u0069\u0070\u003a\u0020\u0025\u0073" , _gag ) ; } ; _dec := [ ] * _baf . File { } ; _dec = append ( _dec , _adab . File ... ) ; _bbde := false ; for _ , _aaeg := range _dec { if _aaeg . FileHeader . Name == "\u0064\u006f\u0063\u0050ro\u0070\u0073\u002f\u0063\u0075\u0073\u0074\u006f\u006d\u002e\u0078\u006d\u006c" { _bbde = true ;
break ; } ; } ; if _bbde { _cbcf . CreateCustomProperties ( ) ; } ; _aef := _f . DecodeMap { } ; _aef . SetOnNewRelationshipFunc ( _cbcf . onNewRelationship ) ; _aef . AddTarget ( _ea . ContentTypesFilename , _cbcf . ContentTypes . X ( ) , "" , 0 ) ; _aef . AddTarget ( _ea . BaseRelsFilename , _cbcf . Rels . X ( ) , "" , 0 ) ;
if _cadd := _aef . Decode ( _dec ) ; _cadd != nil { return nil , _cadd ; } ; for _ , _gfgb := range _dec { if _gfgb == nil { continue ; } ; if _ccgd := _cbcf . AddExtraFileFromZip ( _gfgb ) ; _ccgd != nil { return nil , _ccgd ; } ; } ; if _bbde { _bdd := false ; for _ , _cffe := range _cbcf . Rels . X ( ) . Relationship { if _cffe . TargetAttr == "\u0064\u006f\u0063\u0050ro\u0070\u0073\u002f\u0063\u0075\u0073\u0074\u006f\u006d\u002e\u0078\u006d\u006c" { _bdd = true ;
break ; } ; } ; if ! _bdd { _cbcf . AddCustomRelationships ( ) ; } ; } ; return _cbcf , nil ; } ; type sort2d [ ] * TextItem ;
2024-05-22 00:21:11 +00:00
2024-10-17 17:05:28 +00:00
// X returns the inner wrapped XML type.
func ( _fcedd SlideMaster ) X ( ) * _ffc . SldMaster { return _fcedd . _fae } ;
2024-02-17 03:37:07 +00:00
2024-10-17 17:05:28 +00:00
// Text returns text from a presentation as one string separated with line breaks.
func ( _egb * PresentationText ) Text ( ) string { _ef := _gf . NewBuffer ( [ ] byte { } ) ; for _ , _ad := range _egb . Slides { _ef . WriteString ( _ad . Text ( ) ) ; } ; return _ef . String ( ) ; } ;
2024-04-03 00:10:23 +07:00
2024-10-17 17:05:28 +00:00
// AddParagraph adds a paragraph to the text box
func ( _gagg TextBox ) AddParagraph ( ) _fa . Paragraph { _dfgd := _fc . NewCT_TextParagraph ( ) ; _gagg . _cgd . TxBody . P = append ( _gagg . _cgd . TxBody . P , _dfgd ) ; return _fa . MakeParagraph ( _dfgd ) ; } ;
2024-05-04 18:48:06 +00:00
2024-10-17 17:05:28 +00:00
// Sid returns the sid of slide
func ( _fcaa Slide ) Sid ( ) * _ffc . CT_SlideIdListEntry { return _fcaa . _beeb } ;
2024-05-04 18:48:06 +00:00
2024-10-17 17:05:28 +00:00
// PrnPr returns the PrnPr property.
func ( _gca PresentationProperties ) PrnPr ( ) * _ffc . CT_PrintProperties { return _gca . _bfbd . PrnPr } ;
2024-05-22 00:21:11 +00:00
2024-10-17 17:05:28 +00:00
// Remove removes a placeholder from a presentation.
func ( _dfc PlaceHolder ) Remove ( ) error { for _bfc , _ffbd := range _dfc . _bea . CSld . SpTree . Choice { for _ , _gb := range _ffbd . Sp { if _gb == _dfc . _eag { copy ( _dfc . _bea . CSld . SpTree . Choice [ _bfc : ] , _dfc . _bea . CSld . SpTree . Choice [ _bfc + 1 : ] ) ; _dfc . _bea . CSld . SpTree . Choice = _dfc . _bea . CSld . SpTree . Choice [ 0 : len ( _dfc . _bea . CSld . SpTree . Choice ) - 1 ] ;
return nil ; } ; } ; } ; return _ga . New ( "\u0070\u006c\u0061\u0063\u0065\u0068\u006f\u006c\u0064\u0065r\u0020\u006e\u006f\u0074\u0020\u0066\u006fu\u006e\u0064\u0020\u0069\u006e\u0020\u0073\u006c\u0069\u0064\u0065" ) ; } ;
2024-05-04 18:48:06 +00:00
2024-10-17 17:05:28 +00:00
// SetHeight sets height of slide screen size with given value in EMU units.
func ( _cdce * SlideScreenSize ) SetHeight ( val int32 ) { _cdce [ 1 ] = val } ;
2024-05-04 18:48:06 +00:00
2024-10-17 17:05:28 +00:00
// Properties returns the properties of the TextBox.
func ( _fde Image ) Properties ( ) _fa . ShapeProperties { if _fde . _dc . SpPr == nil { _fde . _dc . SpPr = _fc . NewCT_ShapeProperties ( ) ; } ; return _fa . MakeShapeProperties ( _fde . _dc . SpPr ) ; } ;
2024-05-08 13:54:39 +00:00
2024-10-17 17:05:28 +00:00
// SlideLayouts returns a slice of all layouts in SlideMaster.
func ( _dada SlideMaster ) SlideLayouts ( ) [ ] SlideLayout { _cdde := map [ string ] int { } ; _cabf := [ ] SlideLayout { } ; for _ , _aeeae := range _dada . _adae . Relationships ( ) { _gdcf := _c . Replace ( _aeeae . Target ( ) , ".\u002e\u002f\u0073\u006c\u0069\u0064e\u004c\u0061\u0079\u006f\u0075\u0074\u0073\u002f\u0073l\u0069\u0064\u0065L\u0061y\u006f\u0075\u0074" , "" , - 1 ) ;
_gdcf = _c . Replace ( _gdcf , "\u002e\u0078\u006d\u006c" , "" , - 1 ) ; if _fgbe , _fdga := _d . ParseInt ( _gdcf , 10 , 32 ) ; _fdga == nil { _cdde [ _aeeae . ID ( ) ] = int ( _fgbe ) ; } ; } ; for _ , _feaa := range _dada . _fae . SldLayoutIdLst . SldLayoutId { if _gde , _edd := _cdde [ _feaa . RIdAttr ] ;
_edd { _ebfg := _dada . _adead . _age [ _gde - 1 ] ; _cabf = append ( _cabf , SlideLayout { _ebfg } ) ; } ; } ; return _cabf ; } ;
2024-05-22 00:21:11 +00:00
2024-10-17 17:05:28 +00:00
// ExtLst returns the ExtLst property.
func ( _dggb ViewProperties ) ExtLst ( ) * _ffc . CT_ExtensionList { return _dggb . _cgdg . ExtLst } ;
// SlideViewPr returns the SlideViewPr property.
func ( _eeda ViewProperties ) SlideViewPr ( ) * _ffc . CT_SlideViewProperties { return _eeda . _cgdg . SlideViewPr ; } ;
// SetTextAnchor controls the text anchoring
func ( _eecgg TextBox ) SetTextAnchor ( a _fc . ST_TextAnchoringType ) { _eecgg . _cgd . TxBody . BodyPr = _fc . NewCT_TextBodyProperties ( ) ; _eecgg . _cgd . TxBody . BodyPr . AnchorAttr = a ; } ;
// Type returns the type of the slide layout.
func ( _bafb SlideLayout ) Type ( ) _ffc . ST_SlideLayoutType { return _bafb . _cefa . TypeAttr } ;
// SlideScreenSize represents the slide screen size as a 2 element array
// representing the width and height in EMU units.
type SlideScreenSize [ 2 ] int32 ; func ( _ae * chart ) Target ( ) string { return _ae . _gfc } ; func ( _abad TextBox ) getOff ( ) * _fc . CT_Point2D { if _abad . _cgd . SpPr == nil { _abad . _cgd . SpPr = _fc . NewCT_ShapeProperties ( ) ; } ; if _abad . _cgd . SpPr . Xfrm == nil { _abad . _cgd . SpPr . Xfrm = _fc . NewCT_Transform2D ( ) ;
} ; if _abad . _cgd . SpPr . Xfrm . Off == nil { _abad . _cgd . SpPr . Xfrm . Off = _fc . NewCT_Point2D ( ) ; } ; return _abad . _cgd . SpPr . Xfrm . Off ; } ;
2024-05-22 00:21:11 +00:00
2024-09-16 09:59:58 +00:00
// GetSlideLayout returns a slide layout related to the slide.
2024-10-17 17:05:28 +00:00
func ( _fade * Slide ) GetSlideLayout ( ) * _ffc . SldLayout { _bbdef := _fade . getSlideRels ( ) ; for _ , _aeba := range _bbdef . Relationships ( ) { if _aeba . Type ( ) == _ea . SlideLayoutType { if _bebf , _degb := _da . StringToNumbers ( _aeba . Target ( ) ) ; _degb { return _fade . _caff . _age [ _bebf - 1 ] ;
} ; return nil ; } ; } ; return nil ; } ; func ( _bacee * Presentation ) onNewRelationship ( _dcc * _f . DecodeMap , _ebfe , _aega string , _gbbb [ ] * _baf . File , _cea * _fe . Relationship , _ede _f . Target ) error { _dcb := _ea . DocTypePresentation ; switch _aega { case _ea . OfficeDocumentType : _bacee . _aee = _ffc . NewPresentation ( ) ;
_dcc . AddTarget ( _ebfe , _bacee . _aee , _aega , 0 ) ; _dcc . AddTarget ( _f . RelationsPathFor ( _ebfe ) , _bacee . _bfg . X ( ) , _aega , 0 ) ; _cea . TargetAttr = _ea . RelativeFilename ( _dcb , _ede . Typ , _aega , 0 ) ; case _ea . CorePropertiesType : _dcc . AddTarget ( _ebfe , _bacee . CoreProperties . X ( ) , _aega , 0 ) ;
_cea . TargetAttr = _ea . RelativeFilename ( _dcb , _ede . Typ , _aega , 0 ) ; case _ea . CustomPropertiesType : _dcc . AddTarget ( _ebfe , _bacee . CustomProperties . X ( ) , _aega , 0 ) ; _cea . TargetAttr = _ea . RelativeFilename ( _dcb , _ede . Typ , _aega , 0 ) ; case _ea . PresentationPropertiesType : _dcc . AddTarget ( _ebfe , _bacee . _bcb . X ( ) , _aega , 0 ) ;
_cea . TargetAttr = _ea . RelativeFilename ( _dcb , _ede . Typ , _aega , 0 ) ; case _ea . ViewPropertiesType : _dcc . AddTarget ( _ebfe , _bacee . _cfbg . X ( ) , _aega , 0 ) ; _cea . TargetAttr = _ea . RelativeFilename ( _dcb , _ede . Typ , _aega , 0 ) ; case _ea . TableStylesType : _dcc . AddTarget ( _ebfe , _bacee . _edaa . X ( ) , _aega , 0 ) ;
_cea . TargetAttr = _ea . RelativeFilename ( _dcb , _ede . Typ , _aega , 0 ) ; case _ea . HyperLinkType : _cdaa := _fc . NewCT_Hyperlink ( ) ; _bfggd := uint32 ( len ( _bacee . _fadf ) ) ; _dcc . AddTarget ( _ebfe , _cdaa , _aega , _bfggd ) ; _bacee . _fadf = append ( _bacee . _fadf , _cdaa ) ;
case _ea . CustomXMLType : if _bgd , _dacbd := _da . StringToNumbers ( _ebfe ) ; _dacbd { if len ( _bacee . _cga ) < _bgd { _efe := & _ea . XSDAny { } ; _dcc . AddTarget ( _ebfe , _efe , _aega , uint32 ( _bgd ) ) ; _bacee . _cga = append ( _bacee . _cga , _efe ) ; _cea . TargetAttr = _ea . RelativeFilename ( _dcb , _ede . Typ , _aega , _bgd ) ;
} ; } ; case _ea . ChartType : _bagg := chart { _dfd : _g . NewChartSpace ( ) } ; _aab := uint32 ( len ( _bacee . _bbfa ) ) ; _dcc . AddTarget ( _ebfe , _bagg . _dfd , _aega , _aab ) ; _bacee . _bbfa = append ( _bacee . _bbfa , & _bagg ) ; _cea . TargetAttr = _ea . RelativeFilename ( _dcb , _ede . Typ , _aega , len ( _bacee . _bbfa ) ) ;
_bagg . _gfc = _cea . TargetAttr ; case _ea . HandoutMasterType : _gada := _ffc . NewHandoutMaster ( ) ; _cae := uint32 ( len ( _bacee . _bee ) ) ; _dcc . AddTarget ( _ebfe , _gada , _aega , _cae ) ; _bacee . _bee = append ( _bacee . _bee , _gada ) ; _cea . TargetAttr = _ea . RelativeFilename ( _dcb , _ede . Typ , _aega , len ( _bacee . _bee ) ) ;
case _ea . NotesMasterType : if _gbaf , _efc := _da . StringToNumbers ( _ebfe ) ; _efc { if len ( _bacee . _dae ) < _gbaf { _ddf := _ffc . NewNotesMaster ( ) ; _bacee . _dae = append ( _bacee . _dae , _ddf ) ; _bacee . _gbc = append ( _bacee . _gbc , _gbaf ) ; _dcc . AddTarget ( _ebfe , _ddf , _aega , uint32 ( _gbaf ) ) ;
_cea . TargetAttr = _ea . RelativeFilename ( _dcb , _ede . Typ , _aega , _gbaf ) ; } ; } ; case _ea . ExtendedPropertiesType : _dcc . AddTarget ( _ebfe , _bacee . AppProperties . X ( ) , _aega , 0 ) ; _cea . TargetAttr = _ea . RelativeFilename ( _dcb , _ede . Typ , _aega , 0 ) ; case _ea . SlideType : if _dfdc , _efb := _da . StringToNumbers ( _ebfe ) ;
_efb { if len ( _bacee . _babe ) < _dfdc { _gbcg := _ffc . NewSld ( ) ; _bacee . _babe = append ( _bacee . _babe , _gbcg ) ; _bacee . _acc = append ( _bacee . _acc , _dfdc ) ; _dcc . AddTarget ( _ebfe , _gbcg , _aega , uint32 ( _dfdc ) ) ; _cea . TargetAttr = _ea . RelativeFilename ( _dcb , _ede . Typ , _aega , _dfdc ) ;
_abe := _dab . NewRelationships ( ) ; _dcc . AddTarget ( _f . RelationsPathFor ( _ebfe ) , _abe . X ( ) , _aega , 0 ) ; if len ( _bacee . _cdec ) >= _dfdc { _bacee . _cdec [ _dfdc - 1 ] = _abe ; } else { _bacee . _cdec = append ( _bacee . _cdec , _abe ) ; } ; } ; } ; case _ea . SlideMasterType : if _beac , _gbcb := _da . StringToNumbers ( _ebfe ) ;
_gbcb { if len ( _bacee . _fdea ) < _beac { _aca := _ffc . NewSldMaster ( ) ; if ! _dcc . AddTarget ( _ebfe , _aca , _aega , uint32 ( _beac ) ) { return nil ; } ; _bacee . _fdea = append ( _bacee . _fdea , _aca ) ; _bacee . _fee = append ( _bacee . _fee , _beac ) ; _cea . TargetAttr = _ea . RelativeFilename ( _dcb , _ede . Typ , _aega , _beac ) ;
_aaga := _dab . NewRelationships ( ) ; _dcc . AddTarget ( _f . RelationsPathFor ( _ebfe ) , _aaga . X ( ) , _aega , 0 ) ; if len ( _bacee . _ccae ) >= _beac { _bacee . _ccae [ _beac - 1 ] = _aaga ; } else { _bacee . _ccae = append ( _bacee . _cdec , _aaga ) ; } ; } ; } ; case _ea . SlideLayoutType : if _bfbe , _fcg := _da . StringToNumbers ( _ebfe ) ;
_fcg { _ebff := _ffc . NewSldLayout ( ) ; if ! _dcc . AddTarget ( _ebfe , _ebff , _aega , uint32 ( _bfbe ) ) { return nil ; } ; for _eebf := len ( _bacee . _age ) ; _eebf < _bfbe ; _eebf ++ { _bacee . _age = append ( _bacee . _age , nil ) ; } ; _bacee . _age [ _bfbe - 1 ] = _ebff ; _cea . TargetAttr = _ea . RelativeFilename ( _dcb , _ede . Typ , _aega , _bfbe ) ;
for _dcf := len ( _bacee . _cffc ) ; _dcf < _bfbe ; _dcf ++ { _bacee . _cffc = append ( _bacee . _cffc , _dab . NewRelationships ( ) ) ; } ; _cdcf := _dab . NewRelationships ( ) ; _dcc . AddTarget ( _f . RelationsPathFor ( _ebfe ) , _cdcf . X ( ) , _aega , 0 ) ; _bacee . _cffc [ _bfbe - 1 ] = _cdcf ;
} ; case _ea . ThumbnailType : for _cddc , _gdb := range _gbbb { if _gdb == nil { continue ; } ; if _gdb . Name == _ebfe { _efa , _gdba := _gdb . Open ( ) ; if _gdba != nil { return _ff . Errorf ( "e\u0072\u0072\u006f\u0072\u0020\u0072e\u0061\u0064\u0069\u006e\u0067\u0020\u0074\u0068\u0075m\u0062\u006e\u0061i\u006c:\u0020\u0025\u0073" , _gdba ) ;
} ; _bacee . Thumbnail , _ , _gdba = _a . Decode ( _efa ) ; _efa . Close ( ) ; if _gdba != nil { return _ff . Errorf ( "\u0065\u0072\u0072\u006fr\u0020\u0064\u0065\u0063\u006f\u0064\u0069\u006e\u0067\u0020t\u0068u\u006d\u0062\u006e\u0061\u0069\u006c\u003a \u0025\u0073" , _gdba ) ;
} ; _gbbb [ _cddc ] = nil ; } ; } ; case _ea . ThemeType : if _dccc , _fbcf := _da . StringToNumbers ( _ebfe ) ; _fbcf { if len ( _bacee . _ccf ) < _dccc { _ggcf := _fc . NewTheme ( ) ; if ! _dcc . AddTarget ( _ebfe , _ggcf , _aega , uint32 ( _dccc ) ) { return nil ; } ; _bacee . _ccf = append ( _bacee . _ccf , _ggcf ) ;
_bacee . _gga = append ( _bacee . _gga , _dccc ) ; _cea . TargetAttr = _ea . RelativeFilename ( _dcb , _ede . Typ , _aega , _dccc ) ; _dcbd := _dab . NewRelationships ( ) ; _dcc . AddTarget ( _f . RelationsPathFor ( _ebfe ) , _dcbd . X ( ) , _aega , 0 ) ; if len ( _bacee . _dged ) >= _dccc { _bacee . _dged [ _dccc - 1 ] = _dcbd ;
} else { _bacee . _dged = append ( _bacee . _dged , _dcbd ) ; } ; } ; } ; case _ea . ImageType : _ebfe = _e . Clean ( _ebfe ) ; if _cgag , _bbeag := _bacee . _bfd [ _ebfe ] ; _bbeag { _cea . TargetAttr = _cgag ; return nil ; } ; _gece := "" ; for _eadb , _dcfg := range _gbbb { if _dcfg == nil { continue ;
} ; if _dcfg . Name == _ebfe { _fcb , _daa := _f . ExtractToDiskTmp ( _dcfg , _bacee . TmpPath ) ; if _daa != nil { return _daa ; } ; _cgae , _daa := _dab . ImageFromStorage ( _fcb ) ; if _daa != nil { return _daa ; } ; _gece = _cgae . Format ; if _cgae . Format == "\u006a\u0070\u0065\u0067" && _c . HasSuffix ( _ebfe , "\u006a\u0070\u0067" ) { _gece = "\u006a\u0070\u0067" ;
} ; _ccbg := _dab . MakeImageRef ( _cgae , & _bacee . DocBase , _bacee . _bfg ) ; _ccbg . SetTarget ( "\u002e\u002e\u002f" + _ebfe [ 4 : ] ) ; _bacee . Images = append ( _bacee . Images , _ccbg ) ; _gbbb [ _eadb ] = nil ; _cec := len ( _bacee . Images ) ; if _acfa , _fbba := _da . StringToNumbers ( _ebfe ) ;
_fbba { _cec = _acfa ; } ; _dcc . RecordIndex ( _ebfe , _cec ) ; break ; } ; } ; _ffcg := _dcc . IndexFor ( _ebfe ) ; _cea . TargetAttr = _ea . RelativeImageFilename ( _dcb , _ede . Typ , _aega , _ffcg , _gece ) ; _bacee . _bfd [ _ebfe ] = _cea . TargetAttr ; default : _ba . Log . Debug ( "\u0075\u006e\u0073\u0075\u0070p\u006f\u0072\u0074\u0065\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006fn\u0073\u0068\u0069\u0070\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0073\u0020\u0074\u0067\u0074\u003a\u0020\u0025\u0073" , _aega , _ebfe ) ;
} ; return nil ; } ;
2024-05-22 00:21:11 +00:00
2024-10-17 17:05:28 +00:00
// SlideText is an array of extracted text items which has some methods for representing extracted text from a slide.
type SlideText struct { Items [ ] * TextItem ; } ;
2024-05-22 00:21:11 +00:00
2024-10-17 17:05:28 +00:00
// Less is for implementing sorting of two locations. Symbols share the same location if they are in the same paragraph or table. One location is 'less' than another first by y coordinate, if y coordinates are equal or differ by less than yEpsilon, then x coordinates are compared, then if they are also equal, indexes of locations in the table are compared, then positions of locations in a paragraph.
func ( _bcf sort2d ) Less ( i , j int ) bool { _aec , _cce := _bcf [ i ] , _bcf [ j ] ; _dff , _bda := _aec . _eb , _cce . _eb ; _aa , _cfg := len ( _dff ) - 1 , len ( _bda ) - 1 ; _gafe , _efg := 0 , 0 ; for { _ged , _edc , _gcf , _ebfb , _dga , _eab , _ffb , _fb := _dff [ _gafe ] . _cg , _bda [ _efg ] . _cg , _dff [ _gafe ] . _cf , _bda [ _efg ] . _cf , _dff [ _gafe ] . _fdg , _bda [ _efg ] . _fdg , _dff [ _gafe ] . _bf , _bda [ _efg ] . _bf ;
if _ged == _edc || ( ( _gge . Abs ( float64 ( _ged ) - float64 ( _edc ) ) < _acf ) && ( ( _ged >= _edc && _ged <= _ebfb ) || ( _edc >= _ged && _edc <= _gcf ) ) && ( _ffb < _eab || _dga > _fb ) ) { if _dga == _eab { if _gafe < _aa && _efg < _cfg { _gafe ++ ; _efg ++ ; continue ; } ; if _gafe >= _aa && _efg >= _cfg { break ;
} ; return _gafe >= _aa ; } else { return _dga < _eab ; } ; } else { return _ged < _edc ; } ; } ; _eca , _eda , _edb , _gab := _aec . _dg , _cce . _dg , _aec . _eae , _cce . _eae ; if _eca == _eda { return _edb <= _gab ; } ; return _eca < _eda ; } ; func _eagg ( ) * Presentation { _bfa := & Presentation { _aee : _ffc . NewPresentation ( ) } ;
_bfa . _aee . SldIdLst = _ffc . NewCT_SlideIdList ( ) ; _bfa . _aee . ConformanceAttr = _df . ST_ConformanceClassTransitional ; _bfa . AppProperties = _dab . NewAppProperties ( ) ; _bfa . CoreProperties = _dab . NewCoreProperties ( ) ; _bfa . _edaa = _dab . NewTableStyles ( ) ; _bfa . ContentTypes = _dab . NewContentTypes ( ) ;
_bfa . Rels = _dab . NewRelationships ( ) ; _bfa . _bfg = _dab . NewRelationships ( ) ; _bfa . _bcb = NewPresentationProperties ( ) ; _bfa . _cfbg = NewViewProperties ( ) ; _bfa . _bfd = map [ string ] string { } ; return _bfa ; } ; var ( SlideScreenSize16x9 = SlideScreenSize { 12192000 , 6858000 } ;
SlideScreenSize4x3 = SlideScreenSize { 9144000 , 6858000 } ; SlideScreenSizeA4 = SlideScreenSize { 9906000 , 6858000 } ; ) ; func ( _abbd * Slide ) getSlideLayoutRels ( ) _dab . Relationships { _ddef := _abbd . _caff ; for _adea , _fdb := range _ddef . SlideLayouts ( ) { if * _abbd . GetSlideLayout ( ) . CSld == * _fdb . _cefa . CSld { return _ddef . _cffc [ _adea ] ;
} ; } ; return _dab . Relationships { } ; } ;
2024-05-22 00:21:11 +00:00
2024-10-17 17:05:28 +00:00
// AddParagraph adds a new paragraph to a placeholder.
func ( _bad PlaceHolder ) AddParagraph ( ) _fa . Paragraph { _adg := _fa . MakeParagraph ( _fc . NewCT_TextParagraph ( ) ) ; _bad . _eag . TxBody . P = append ( _bad . _eag . TxBody . P , _adg . X ( ) ) ; return _adg ; } ;
2024-07-28 07:48:26 +00:00
2024-10-17 17:05:28 +00:00
// OutlineViewPr returns the OutlineViewPr property.
func ( _fddd ViewProperties ) OutlineViewPr ( ) * _ffc . CT_OutlineViewProperties { return _fddd . _cgdg . OutlineViewPr ; } ; func ( _bc * chart ) X ( ) * _g . ChartSpace { return _bc . _dfd } ;
2024-07-28 07:48:26 +00:00
2024-10-17 17:05:28 +00:00
// X returns the inner wrapped XML type.
func ( _ddb * SlideSize ) X ( ) * _ffc . CT_SlideSize { return _ddb . _bgbf } ;
// X returns the inner wrapped XML type.
func ( _deff Slide ) X ( ) * _ffc . Sld { return _deff . _gede } ;
// GetTextBoxes returns a list of all text boxes from a slide.
func ( _dcaf Slide ) GetTextBoxes ( ) [ ] * TextBox { _cdb := [ ] * TextBox { } ; _cgagb := _dcaf . _gede . CSld . SpTree . Choice ; for _ , _adaac := range _cgagb { for _ , _bfbeg := range _adaac . Sp { if _bfbeg . NvSpPr . CNvSpPr . TxBoxAttr != nil && * _bfbeg . NvSpPr . CNvSpPr . TxBoxAttr { _cdb = append ( _cdb , & TextBox { _bfbeg } ) ;
} ; } ; } ; return _cdb ; } ; func ( _dgfc * Slide ) ensureClrMap ( ) { if len ( _dgfc . _caff . _fdea ) == 0 || len ( _dgfc . _caff . _ccf ) == 0 { return ; } ; _bdgg := _dgfc . _caff . _fdea [ 0 ] ; _bdgf := _bdgg . ClrMap ; if _dabc := _dgfc . _gede . ClrMapOvr ; _dabc != nil { if _gff := _dabc . Choice ;
_gff != nil { if _gff . MasterClrMapping == nil { if _cef := _gff . OverrideClrMapping ; _cef != nil { if _cef . Bg1Attr != _fc . ST_ColorSchemeIndexUnset { _bdgf . Bg1Attr = _cef . Bg1Attr ; } ; if _cef . Tx1Attr != _fc . ST_ColorSchemeIndexUnset { _bdgf . Tx1Attr = _cef . Tx1Attr ;
} ; if _cef . Bg2Attr != _fc . ST_ColorSchemeIndexUnset { _bdgf . Bg2Attr = _cef . Bg2Attr ; } ; if _cef . Tx2Attr != _fc . ST_ColorSchemeIndexUnset { _bdgf . Tx2Attr = _cef . Tx2Attr ; } ; if _cef . Accent1Attr != _fc . ST_ColorSchemeIndexUnset { _bdgf . Accent1Attr = _cef . Accent1Attr ;
} ; if _cef . Accent2Attr != _fc . ST_ColorSchemeIndexUnset { _bdgf . Accent2Attr = _cef . Accent2Attr ; } ; if _cef . Accent3Attr != _fc . ST_ColorSchemeIndexUnset { _bdgf . Accent3Attr = _cef . Accent3Attr ; } ; if _cef . Accent4Attr != _fc . ST_ColorSchemeIndexUnset { _bdgf . Accent4Attr = _cef . Accent4Attr ;
} ; if _cef . Accent5Attr != _fc . ST_ColorSchemeIndexUnset { _bdgf . Accent5Attr = _cef . Accent5Attr ; } ; if _cef . Accent6Attr != _fc . ST_ColorSchemeIndexUnset { _bdgf . Accent6Attr = _cef . Accent6Attr ; } ; if _cef . HlinkAttr != _fc . ST_ColorSchemeIndexUnset { _bdgf . HlinkAttr = _cef . HlinkAttr ;
} ; if _cef . FolHlinkAttr != _fc . ST_ColorSchemeIndexUnset { _bdgf . FolHlinkAttr = _cef . FolHlinkAttr ; } ; } ; } ; } ; } ; _dgfc . _afg = _bdgf ; } ;
// Slides returns the slides in the presentation.
func ( _dadb * Presentation ) Slides ( ) [ ] Slide { _dffg := [ ] Slide { } ; for _agfd , _agg := range _dadb . _babe { _dffg = append ( _dffg , Slide { _dadb . _aee . SldIdLst . SldId [ _agfd ] , _agg , _dadb , nil } ) ; } ; return _dffg ; } ; const _acf float64 = 500000 ;
// TextItem is used for keeping text with references to a paragraph and run, a shape or a table, a row and a cell where it is located.
type TextItem struct { Text string ; Presentation * Presentation ; Shape * _ffc . CT_Shape ; GraphicFrame * _ffc . CT_GraphicalObjectFrame ; Paragraph * _fc . CT_TextParagraph ; Run * _fc . CT_RegularTextRun ; TableInfo * TableInfo ; _eb [ ] rectangle ; _dg int ; _eae int ; } ;