![](/img/trans.png)
[英]Remove all animations pptx from Powerpoint Presentation using 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.