代码如下
using Aspose.Slides;
using System;
using System.Drawing.Imaging;
using System.IO;
using UnityEngine;
using UnityEngine.UI;
public class LoadPPT : MonoBehaviour
{
public Image pptImage;
private Presentation presentation;
private int index = 0;
private int pptPage;
private string pptPath;
//去水印key
public const string Key =
"PExpY2Vuc2U+DQogIDxEYXRhPg0KICAgIDxMaWNlbnNlZFRvPkFzcG9zZSBTY290bGFuZCB" +
"UZWFtPC9MaWNlbnNlZFRvPg0KICAgIDxFbWFpbFRvPmJpbGx5Lmx1bmRpZUBhc3Bvc2UuY2" +
"9tPC9FbWFpbFRvPg0KICAgIDxMaWNlbnNlVHlwZT5EZXZlbG9wZXIgT0VNPC9MaWNlbnNlV" +
"HlwZT4NCiAgICA8TGljZW5zZU5vdGU+TGltaXRlZCB0byAxIGRldmVsb3BlciwgdW5saW1p" +
"dGVkIHBoeXNpY2FsIGxvY2F0aW9uczwvTGljZW5zZU5vdGU+DQogICAgPE9yZGVySUQ+MTQ" +
"wNDA4MDUyMzI0PC9PcmRlcklEPg0KICAgIDxVc2VySUQ+OTQyMzY8L1VzZXJJRD4NCiAgIC" +
"A8T0VNPlRoaXMgaXMgYSByZWRpc3RyaWJ1dGFibGUgbGljZW5zZTwvT0VNPg0KICAgIDxQc" +
"m9kdWN0cz4NCiAgICAgIDxQcm9kdWN0PkFzcG9zZS5Ub3RhbCBmb3IgLk5FVDwvUHJvZHVj" +
"dD4NCiAgICA8L1Byb2R1Y3RzPg0KICAgIDxFZGl0aW9uVHlwZT5FbnRlcnByaXNlPC9FZGl" +
"0aW9uVHlwZT4NCiAgICA8U2VyaWFsTnVtYmVyPjlhNTk1NDdjLTQxZjAtNDI4Yi1iYTcyLT" +
"djNDM2OGYxNTFkNzwvU2VyaWFsTnVtYmVyPg0KICAgIDxTdWJzY3JpcHRpb25FeHBpcnk+M" +
"jAxNTEyMzE8L1N1YnNjcmlwdGlvbkV4cGlyeT4NCiAgICA8TGljZW5zZVZlcnNpb24+My4w" +
"PC9MaWNlbnNlVmVyc2lvbj4NCiAgICA8TGljZW5zZUluc3RydWN0aW9ucz5odHRwOi8vd3d" +
"3LmFzcG9zZS5jb20vY29ycG9yYXRlL3B1cmNoYXNlL2xpY2Vuc2UtaW5zdHJ1Y3Rpb25zLm" +
"FzcHg8L0xpY2Vuc2VJbnN0cnVjdGlvbnM+DQogIDwvRGF0YT4NCiAgPFNpZ25hdHVyZT5GT" +
"zNQSHNibGdEdDhGNTlzTVQxbDFhbXlpOXFrMlY2RThkUWtJUDdMZFRKU3hEaWJORUZ1MXpP" +
"aW5RYnFGZkt2L3J1dHR2Y3hvUk9rYzF0VWUwRHRPNmNQMVpmNkowVmVtZ1NZOGkvTFpFQ1R" +
"Hc3pScUpWUVJaME1vVm5CaHVQQUprNWVsaTdmaFZjRjhoV2QzRTRYUTNMemZtSkN1YWoyTk" +
"V0ZVJpNUhyZmc9PC9TaWduYXR1cmU+DQo8L0xpY2Vuc2U+";
private void Start()
{
pptPath = Application.streamingAssetsPath + "/卡通幼儿园.pptx";
Load(pptPath);
LoadPPTByIndex(index);
}
private void Update()
{
if(Input.GetKeyDown(KeyCode.UpArrow))
{
index--;
index = index >= 0 ? index : 0;
LoadPPTByIndex(index);
}
if (Input.GetKeyDown(KeyCode.DownArrow))
{
index++;
index = index <= pptPage - 1 ? index : pptPage - 1;
LoadPPTByIndex(index);
}
}
public void Load(string pptPath)
{
//去水印代码
new Aspose.Slides.License().SetLicense(new MemoryStream(Convert.FromBase64String(Key)));
presentation = new Aspose.Slides.Presentation(pptPath);
pptPage = presentation.Slides.Count;
//Debug.Log(presentation.Slides.Count);
}
public void LoadPPTByIndex(int index)
{
var slide = presentation.Slides[index];
var bitmap = slide.GetThumbnail(1f, 1f);
byte[] bytes = Bitmap2Byte(bitmap);
//int width = 1276, height = 425;
int width = 960, height = 540; //ppt的宽高
Texture2D texture2D = new Texture2D(width, height);
texture2D.LoadImage(bytes);
Sprite sprite = Sprite.Create(texture2D, new Rect(0, 0, width, height), Vector2.zero);
pptImage.sprite = sprite;
}
public byte[] Bitmap2Byte(System.Drawing.Bitmap bitmap)
{
using (MemoryStream stream = new MemoryStream())
{
bitmap.Save(stream, ImageFormat.Png);
byte[] data = new byte[stream.Length];
stream.Seek(0, SeekOrigin.Begin);
stream.Read(data, 0, Convert.ToInt32(stream.Length));
return data;
}
}
}
代码需要用到Aspose.Slides System.Drawing I18N系列的dll,工程设置为net4.0
使用方法:将代码挂在某个节点上。pptImage是需要显示ppt内容的image,改一下pptPath,width,height就可以了
示例工程:链接: https://pan.baidu.com/s/1hONHtqnYe9vzQ2rtz2qUCA 提取码: xt7u 复制这段内容后打开百度网盘手机App,操作更方便哦
后续经过测试:
pptWidth = Convert.ToInt16(presentation.SlideSize.Size.Width);
pptHeight = Convert.ToInt16(presentation.SlideSize.Size.Height);
这样就不用把width和height写死了
参考链接:https://www.jianshu.com/p/c83add8def03
https://blog.csdn.net/asdfghjkl110292/article/details/94551204