zoukankan      html  css  js  c++  java
  • 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);
                }
            }
        }
    没有困难创造困难也要上!
  • 相关阅读:
    Python-炫酷二维码
    Dictionary 序列化与反序列化
    获取数据库所有表名与字段名
    LinQ To Object 基本用法
    使用jq操作脚本生成元素的事件
    表单验证如何让select设置为必选
    js实现复制功能兼容ios
    微信小程序使用函数防抖解决重复点击消耗性能问题
    electronr进行签名与公证
    使用electron在mac升级签名后进行升级出现“QRLUpdaterErrorDomain”的错误
  • 原文地址:https://www.cnblogs.com/tiaf/p/7477134.html
Copyright © 2011-2022 走看看