2016-09-23 33 views
1

我將openxml sdk 2.5與Eric White的電動工具結合使用。我已經設法使用模板文件創建動態pptx演示文稿。 (在C#中) 不幸的是縮略圖在這個過程中丟失了。
有沒有什麼辦法(重新)使用openxml或電動工具創建pptx文件的縮略圖?
我成功地編寫了一些代碼,用圖像改變現有的縮略圖。但是,如果沒有縮略圖,它會給我一個System.NullReferenceException。下面是代碼:以編程方式更改/添加pptx powerpoint的縮略圖。使用Openxml sdk?

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); 
     } 
    } 
} 

編輯: 我意識到這個問題以前(How to generate thumbnail image for a PPTX file in C#?)有人問,答案是「保存演示文稿時啓用預覽截圖」,但是這將意味着我不得不打開每個pptx並手動設置此標誌。我很感激C#解決方案。

預先感謝您!

回答

1

如果縮略圖從未存在,則ThumbnailPart不一定會存在於文檔中,因此代碼中的thumbNailPart變量將爲空。在這種情況下,以及設置ThumbnailPart的圖像,您需要添加零件本身。

通常使用的OpenXML SDK的時候,你會調用AddPart方法傳遞一個new ThumbnailPart,但由於某種原因ThumbnailPart constructorprotected internal,因此不給你訪問。相反,在PresentationDocument上有一個AddThumbnailPart方法,它會創建一個新的ThumbnailPartAddThumbnailPart方法採用內容類型的字符串或enum成員。

加入以下代碼應該解決您的問題:

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

var thumbNailPart = document.ThumbnailPart; 
相關問題