2016-09-23 34 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; 
相关问题