繁体   English   中英

以编程方式更改/添加pptx powerpoint的缩略图。 使用Openxml SDK?

[英]Programmatically change/add thumbnail of pptx powerpoint. With Openxml sdk?

我将openxml sdk 2.5与Eric White的电动工具结合使用。 我设法使用模板文件创建了动态的pptx演示文稿。 (在C#中)不幸的是,缩略图在此过程中丢失了。
有什么方法可以使用openxml或电动工具来(重新)创建pptx文件的缩略图?
我成功编写了一些代码,该代码更改了带有图像的现有缩略图。 但是,当没有缩略图时,它将给我System.NullReferenceException 这是代码:

using OpenXmlPowerTools;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DocumentFormat.OpenXml.Packaging;

namespace ConsoleApplication1
{
    class AddThumbnail_
    {
        public static void ReplaceThumbnail(ThumbnailPart thumbnailPart, string newThumbnail)
        {
            using (
                FileStream imgStream = new FileStream(newThumbnail, FileMode.Open, FileAccess.Read))
            {
                thumbnailPart.FeedData(imgStream);
            }
        }

        static void Main(string[] args)
        {
            var templatePresentation = "Modified.pptx";
            var outputPresentation = "Modified.pptx";
            var baPresentation = File.ReadAllBytes(templatePresentation);
            var pmlMainPresentation = new PmlDocument("Main.pptx", baPresentation);
            OpenXmlMemoryStreamDocument streamDoc = new OpenXmlMemoryStreamDocument(pmlMainPresentation);
            PresentationDocument document = streamDoc.GetPresentationDocument();
            var thumbNailPart = document.ThumbnailPart;
            ReplaceThumbnail(thumbNailPart, @"C:\Path\to\image\image.jpg");
            document.SaveAs(outputPresentation);
        }
    }
}

编辑:我意识到之前曾有人问过这个问题( 如何在C#中为PPTX文件生成缩略图? ),答案是“保存演示文稿时启用预览屏幕截图”,但这意味着我必须打开每个pptx并手动设置此标志。 我将不胜感激C#解决方案。

先感谢您!

如果缩略图从不存在,则ThumbnailPart不一定存在于文档中,因此代码中的thumbNailPart变量将为null。 在这种情况下,除了为ThumbnailPart设置图像外,还需要添加部件本身。

通常,在使用OpenXml SDK时,您将调用AddPart方法,以传入new ThumbnailPart但由于某种原因ThumbnailPart构造函数protected internal ,因此您无法访问。 而是在PresentationDocument上有一个AddThumbnailPart方法,该方法将创建一个新的ThumbnailPart AddThumbnailPart方法采用内容类型的字符串或ThumbnailPartType枚举成员。

在代码中添加以下内容可以解决您的问题:

if (document.ThumbnailPart == null)
    document.AddThumbnailPart(ThumbnailPartType.Jpeg);

var thumbNailPart = document.ThumbnailPart;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM