Unity loads and displays PPT

Reference link 1

Reference link 2

Precautions:

1. The code needs to use the dll of the Aspose.Slides System.Drawing I18N series, and the project setting is net4.0

2. There is a requirement for the unity version, and System.Drawing.dll must be obtained from the current unity version

3. It may not be loaded normally after exporting. Find the I18N.dll and I18N.West.dll files under the installation directory Editor\Data\MonoBleedingEdge\lib\mono\unityjit of the new version of Unity (such as 2018); copy and paste them into the packaged XX_Data/Managed
folder
.

using System;
using System.Drawing.Imaging;
using Aspose.Slides;
using System.IO;
using UnityEngine;
using UnityEngine.UI;

public class PPTCtrl_fan1 : 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 = "测试.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)));

        pptPath = Application.streamingAssetsPath + "/PPT/"+ pptPath;

        presentation = new Aspose.Slides.Presentation(pptPath);
        pptPage = presentation.Slides.Count;
    
    }

    public void LoadPPTByIndex(int index)
    {
        var slide = presentation.Slides[index];

        var bitmap = slide.GetThumbnail(1f, 1f);

        byte[] bytes = Bitmap2Byte(bitmap);

       

        int pptWidth = Convert.ToInt16(presentation.SlideSize.Size.Width);
        int pptHeight = Convert.ToInt16(presentation.SlideSize.Size.Height);

        Texture2D texture2D = new Texture2D(pptWidth, pptHeight);

        texture2D.LoadImage(bytes);

        Sprite sprite = Sprite.Create(texture2D, new Rect(0, 0, pptWidth, pptHeight), 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;
        }
    }
}

 DLL link: https://pan.baidu.com/s/1e8qksqTcde5_cX2LhIwqcw 
Extraction code: 8174

Guess you like

Origin blog.csdn.net/fanfan_hongyun/article/details/128062733