圖片轉PPT文件

一、源碼

先把實現的代碼放上來,再詳聊遇到的問題。代碼地址:https://github.com/gis2all/csharp-scripts/tree/master/Scripts

二、實現

要實現此功能,需要用到微軟Office的相關庫,Nuget下載好之後就可以引用與PPT有關的API
在這裏插入圖片描述
首先新建一個PPT類

 Application pptApp = new Application();
 Presentations pptPres = pptApp.Presentations;
 Presentation pptPre = pptPres.Add(MsoTriState.msoFalse);

關於MsoTriState枚舉,根據MS文檔 MsoTriState Enum,實際上可以將其當作Bool值,取true或者false,其他值不支持。這裏msoFalse的意思是不啓動PPT程序

字段 含義
msoCTrue 1 Not supported
msoFalse 0 False
msoTriStateMixed -2 Not supported
msoTriStateToggle -3 Not supported
msoTrue -1 True

再添加圖片前我們需要了解PPT組織結構,右側矩形就是一個Slide,而矩形中可以存在多個Shape,這些Shape用來存放文本、圖形、圖片、媒體等資源,多個Slide最後組成一個列表,如下圖所示
在這裏插入圖片描述
所以先需要添加一個Slide,注意起始數值爲1,而不是0

 var slide = pptPre.Slides.Add(1, PpSlideLayout.ppLayoutObject);

可以獲取該Slide的長寬

slideWidth = slide.Master.Width
slideHeight = slide.Master.Height

然後在該Slide中添加一個Shape,這個Shape的Content正是我們想要導出的圖片,圖片來源是本地文件,圖片在Shape中長寬也可以自定義,Shape的長寬也可以自定義,Left/Top爲Shape左上角起始點相對於Slide座標

var shape = slide.Shapes.AddPicture(imageName, MsoTriState.msoTrue, MsoTriState.msoTrue, 0, 0, scaleSize.Width, scaleSize.Height);
shape.Width = scaleSize.Width;
shape.Height = scaleSize.Height;
shape.Left = 0;
shape.Top = 0;

最後保存文件即可

pptPre.SaveAs(pptName, PpSaveAsFileType.ppSaveAsDefault, MsoTriState.msoCTrue);

不過需要注意的是,調用PPT相關API時,貌似不能使用異步方法,如使用程序會莫名終止,所以建議同步方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章