簡體   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