1、转换步骤
(1) 引入COM组件Microsoft.Office.Interop.PowerPoint;
(2) 创建Microsoft.Office.Interop.PowerPoint.Application;
(3) 打开PPT文档Application.Presentations.Open;
(4) 根据PPT宽高比(PageSetup.SlideWidth、PageSetup.SlideHeight)设置合适的宽高;
(5) 遍历幻灯片集合Presentation.Slides;
(6) 使用幻灯片(Slide)的Export方法导出图片。
2、注意事项
(1) PPT导出图片的过程是阻塞执行的,可根据情况将每一页的导出作为原子操作,实现异步执行;
(2) 打开PPT的路径不能使用“/”,应将“/”替换为“”;
(3) 保存的PPT每一页图片路径同上处理。
3、示例代码
(1) PptTool.cs
using System; using Microsoft.Office.Interop.PowerPoint; using System.Drawing.Imaging; using System.IO; using Microsoft.Office.Core; namespace OfficeTools.Tools { public class PptTool { private Application _app; public void Init() { _app = new Application { DisplayAlerts = PpAlertLevel.ppAlertsNone }; } public void UnInit() { try { _app?.Quit(); } catch (Exception e) { Console.WriteLine(e); } _app = null; GC.Collect(); } public bool Convert2Images(string filePath, string imageFolder, ImageFormat imageFormat, int width, ref int height) { //正斜杠替换为反斜杠 filePath = filePath.Replace('/', '\'); if (!File.Exists(filePath)) { return false; } Presentation presentation = null; try { var fileName = Path.GetFileNameWithoutExtension(filePath); imageFolder = imageFolder.Replace('/', '\'); imageFolder = imageFolder.TrimEnd('\'); imageFolder += $"\{fileName}"; if (!Directory.Exists(imageFolder)) { Directory.CreateDirectory(imageFolder); } //以非只读方式打开,方便操作结束后保存 presentation = _app.Presentations.Open( filePath, MsoTriState.msoTrue, //ReadOnly: true MsoTriState.msoTrue, //Untitled: true MsoTriState.msoFalse); //WithWindow: false //获取真实分辨率及其比率 //SlideWidth:幻灯片的宽度(以磅为单位) //SlideHeight:幻灯片的高度(以磅为单位) var slideWidth = presentation.PageSetup.SlideWidth; var slideHeight = presentation.PageSetup.SlideHeight; height = (int) (width * slideHeight / slideWidth); var suffix = imageFormat.ToString().ToLower(); var index = 0; foreach (Slide slide in presentation.Slides) { var newFileName = $"{imageFolder}\{++index}.{suffix}"; slide.Export(newFileName, suffix, width, height); } } catch (Exception e) { Console.WriteLine(e); return false; } finally { presentation?.Close(); } return true; } } }
(2) 调用代码
public void Test() { var pptTool = new PptTool(); pptTool.Init(); var filePath = @"D: est.pptx"; var width = 1920; var height = width; pptTool.Convert2Images(filePath, Environment.CurrentDirectory, ImageFormat.Png, width, ref height); pptTool.UnInit(); }