Blazor  

How to load PPT in Blazor?

Introduction

I recently gave a presentation at CSharpCon23, and needless to say, it was the most fun and knowledgeable experience I've had in a year and I was proud to share the stage with prominent industry leaders.

After the presentation, during the Q&A session, many students requested a way to share the presentation. This inspired me to explore the idea of loading a presentation on the web. Utilizing my personal website, "https://rikampalkar.github.io", I decided to present the PowerPoint live on the site. Surprisingly, the process was easier than I anticipated. In this article, we will explore how to seamlessly integrate a PowerPoint presentation into Blazor applications.

Let's take a look at the live presentation hosted here => https://rikampalkar.github.io/portfolio/ppt

Gif 1: Output of Live PPT

There is a straightforward way to achieve this. Save your PowerPoint presentation on OneDrive and upload it. In the following Image 1, you can see I have a PowerPoint presentation named "Blazing Apps" uploaded under the folder named "PPT" Ensure that the folder "PPT" is set to public.

Uploading PPT under a public folder in OneDrive

Image 1: Uploading PPT under a public folder in OneDrive

Embedding the PowerPoint Presentation

Now, right-click on the PowerPoint presentation and select the "Embed" option, as shown below.

Fetching Embed option

Image 2: Fetching Embed option

This will open up the embed code, which we need to use in our component. Copy this code and paste it in Notepad; we'll use it later.

Getting Embed code

Image 3: Getting Embed code

The Razor Component

Go ahead and add a component to your Blazor project. Name it as you wish; I am calling it "PPT." This is where the magic happens—it is responsible for hosting your PowerPoint presentation. Now, take a look at line number 6; this is where I've pasted the embed code I copied from Image 3.

@page "/ppt"
@inject IJSRuntime JS;

<div class="iframe-container">
    <BusyIndicator IsLoading="isLoading" />
    <iframe src="https://onedrive.live.com/embed?resid=651BB1024BD1BBB0%216551&authkey=!AO4kW1ZdL1xKqpc&em=2"
            frameborder="0"
            scrolling="no">
    </iframe>
</div>

@code {
    private bool isLoading = true;

    protected override async Task OnInitializedAsync()
    {
        await JS.InvokeVoidAsync("ShowPPTDialog");
        isLoading = false;
    }
}

Listing 1: PPT.razor

The CSS

If you're interested, use this CSS. Ensure you have a suitable container for your iframe. In my case, I've created a container using the following CSS.

.iframe-container {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 98vh;
    border: 8px solid rgba(0, 0, 0, 0.9);
    border-radius: 8px;
    overflow: hidden;
}

.iframe-container iframe {
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0.9);
}

Listing 2: PPT.razor.css

The JS No One Asked For

What's a presentation without a touch of humor? I've spiced up the loading process with a delightful dialog, showcasing loading progress and adding a playful touch to the user experience.

let timerInterval;
window.ShowPPTDialog = () => {
    Swal.fire({
        title: "TicTacToe AI Game in Blazor - Rikam Palkar",
        html: "<p> Presented at Sharda University, Delhi, India</p><p>Event organized by C#Corner</p> </br> Navigate through the presentation using the arrow keys. ( ↑  →  ↓  ← )",
        timer: 3000,
        timerProgressBar: true,
        didOpen: () => {
            Swal.showLoading();
            const timer = Swal.getPopup().querySelector("b");
            timerInterval = setInterval(() => {
                timer.textContent = `${Swal.getTimerLeft()}`;
            }, 100);
        },
        willClose: () => {
            clearInterval(timerInterval);
        }
    }).then((result) => {
        if (result.dismiss === Swal.DismissReason.timer) {
            console.log("Closed by the timer");
        }
    });
}

Listing 3: PPT.js

Conclusion

And there you have it, folks! We've unraveled the secrets of embedding a PowerPoint presentation in Blazor. Feel free to experiment with your own presentations, and remember, in the world of Blazor, the possibilities are as vast as your imagination. Happy coding!