PPT导出图片(延迟绑定),项目代码不依赖Office组件.

这么做的好处是可以通过代码判断客户机的Office版本动态调用对应方法.(适用于少数不兼容的方法.)

 

public class Ppt2JpgLazyBinding
    {
        private object pptApp;
        private Type pptType;
        private object presentations;
        private object presentation;
        private object slides;

        public void ExportToImage(string pptFile)
        {
            var progId = "PowerPoint.Application";
            pptType = Type.GetTypeFromProgID(progId);
            if (pptType != null)
            {
                var imgSaveDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "imgs");
                if (!Directory.Exists(imgSaveDir)) Directory.CreateDirectory(imgSaveDir);
                pptApp = Activator.CreateInstance(pptType);
                presentations = pptType.InvokeMember("Presentations", System.Reflection.BindingFlags.GetProperty, null, pptApp, null);
                try
                {
                    presentation = presentations.GetType()
                                .InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, presentations,
                                    new object[] { pptFile, true, false, false });
                    slides = presentation.GetType()
                        .InvokeMember("Slides", System.Reflection.BindingFlags.GetProperty, null, presentation, null);
                    slides.GetType()
                        .InvokeMember("Count", System.Reflection.BindingFlags.GetProperty, null, slides, null);

                    var enumeratorObj = slides.GetType().InvokeMember("GetEnumerator", BindingFlags.InvokeMethod, null, slides, null);
                    var enumerator = enumeratorObj as IEnumerator;
                    if (enumerator != null)
                    {
                        var pageNo = 1;
                        while (enumerator.MoveNext())
                        {
                            var slideObj = enumerator.Current;
                            slideObj?.GetType()
                                .InvokeMember("Export", BindingFlags.InvokeMethod, null, slideObj, new object[] { $"{imgSaveDir}//{pageNo++.ToString("000")}.jpg", "JPG" });
                        }
                    }
                }
                catch (Exception e)
                {
                    throw new Exception("将PPT导出图片期间异常.", e);
                }
                pptType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, pptApp, null);
            }
        }
    }

 

转载于:https://www.cnblogs.com/tiaf/p/7477134.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值