我将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
可访问的,因此您无法使用它。相反,在上有一个AddThumbnailPart
方法PresentationDocument
将创建一个new ThumbnailPart
。该AddThumbnailPart
方法采用内容类型的字符串或ThumbnailPartType
枚举成员。
将以下内容添加到您的代码中应该可以解决您的问题:
if (document.ThumbnailPart == null)
document.AddThumbnailPart(ThumbnailPartType.Jpeg);
var thumbNailPart = document.ThumbnailPart;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句