[英]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.