Zum Fußzeileninhalt springen
IRONPDF NUTZEN

Wie man eine PDF in einem neuen Tab in Blazor öffnet

Das Öffnen von PDF-Dokumenten in einem neuen Browser-Tab ist eine häufige Anforderung für Blazor-Webanwendungen. Dieses Tutorial zeigt, wie PDFs mit IronPDF generiert und mit JavaScript interop in neuen Tabs angezeigt werden, um den Benutzern ein nahtloses Dokumentenerlebnis zu bieten. Dieses Beispiel konzentriert sich auf eine Blazor-Server-Version.

Voraussetzungen und Einrichtung

Beginnen Sie mit der Erstellung eines neuen Blazor-Serverprojekts in Visual Studio 2022. Installieren Sie IronPDF über die NuGet-Paket-Manager-Konsole:

Install-Package IronPdf

Konfigurieren Sie Ihre IronPDF-Lizenz in Program.cs, um die volle Funktionalität zu ermöglichen:

License.LicenseKey = "YOUR-LICENSE-KEY";
License.LicenseKey = "YOUR-LICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Verständnis der Herausforderung

Blazor-Serveranwendungen können die Browser-Tabs nicht direkt über C#-Code auf dem Server manipulieren. Die Aufgabe von Blazor, ein PDF in einem neuen Tab zu öffnen, erfordert JavaScript-Interop (JS interop), um die serverseitige PDF-Erstellung mit der clientseitigen Fensterverwaltung zu verbinden.

IronPDF ermöglicht Entwicklern, qualitativ hochwertige PDF-Dokumente auf dem Server zu erstellen, die dann mit der window.open()-Funktion von JavaScript angezeigt werden können. Dieser Ansatz bedeutet, ein häufiges Client-Server-Problem in einer .NET-Anwendung zu lösen.

Implementierung von JavaScript-Funktionen in Ihrer Blazor-Web-App

Fügen Sie diesen JavaScript-Code in Ihre _Host.cshtml-Datei ein, um die PDF-Anzeige in neuen Browser-Tabs zu handhaben. Dies ist das Modul, das für die clientseitige Fensterverwaltung verantwortlich ist:

<script>
    window.openPdfInNewTab = function (pdfData, fileName) {
        // Convert base64 to blob
        const byteCharacters = atob(pdfData);
        const byteNumbers = new Array(byteCharacters.length);
        for (let i = 0; i < byteCharacters.length; i++) {
            byteNumbers[i] = byteCharacters.charCodeAt(i);
        }
        const byteArray = new Uint8Array(byteNumbers);
        // The type is 'application/pdf', not 'image/png' or 'image/jpg'
        const blob = new Blob([byteArray], { type: 'application/pdf' }); 
        // Create URL and open in new tab
        const blobUrl = URL.createObjectURL(blob);
        const newWindow = window.open(blobUrl, '_blank');
        if (newWindow) {
            newWindow.document.title = fileName || 'PDF Document';
        }
        // Clean up
        setTimeout(() => URL.revokeObjectURL(blobUrl), 100);
        return newWindow !== null;
    };
</script>
<script>
    window.openPdfInNewTab = function (pdfData, fileName) {
        // Convert base64 to blob
        const byteCharacters = atob(pdfData);
        const byteNumbers = new Array(byteCharacters.length);
        for (let i = 0; i < byteCharacters.length; i++) {
            byteNumbers[i] = byteCharacters.charCodeAt(i);
        }
        const byteArray = new Uint8Array(byteNumbers);
        // The type is 'application/pdf', not 'image/png' or 'image/jpg'
        const blob = new Blob([byteArray], { type: 'application/pdf' }); 
        // Create URL and open in new tab
        const blobUrl = URL.createObjectURL(blob);
        const newWindow = window.open(blobUrl, '_blank');
        if (newWindow) {
            newWindow.document.title = fileName || 'PDF Document';
        }
        // Clean up
        setTimeout(() => URL.revokeObjectURL(blobUrl), 100);
        return newWindow !== null;
    };
</script>
HTML

Die window.openPdfInNewTab JavaScript-Funktion ist entscheidend für die Lösung der Herausforderung, ein neues Tab vom Server aus zu öffnen. Es nimmt die PDF-Daten als Base64-String vom Blazor-Server an und der clientseitige Code wandelt es in ein binäres Blob-Objekt um.

Dieses Blob wird dann verwendet, um eine temporäre URL zu erstellen, die schließlich an window.open(blobUrl, '_blank') übergeben wird, um den Browser zu zwingen, das PDF in einem neuen Tab zu öffnen.

Erstellung der Blazor-Komponente

Erstellen Sie eine neue Razor-Komponente, die PDFs erzeugt und in neuen Tabs öffnet. Dies dient als Hauptvorlage für die Lösung:

@page "/pdf-viewer"
@using IronPdf
@inject IJSRuntime JS
<h3>Open PDF in New Tab</h3>
<div class="mb-3">
    <label>Enter URL:</label>
</div>
<button class="btn btn-primary" @onclick="GenerateAndOpenPdf" 
        disabled="@isProcessing">
    @if (isProcessing)
    {
        <span>Generating PDF...</span>
    }
    else
    {
        <span>Generate and Open PDF</span>
    }
</button>
@if (!string.IsNullOrEmpty(errorMessage))
{
    <div class="alert alert-danger mt-3">@errorMessage</div>
}
@code {
    private string targetUrl = "https://ironpdf.com";
    private bool isProcessing = false;
    private string errorMessage = "";
    private async Task GenerateAndOpenPdf()
    {
        isProcessing = true;
        errorMessage = "";
        try
        {
            // Configure Chrome PDF renderer. Note the rendering details
            var renderer = new ChromePdfRenderer
            {
                RenderingOptions = new ChromePdfRenderOptions
                {
                    MarginTop = 10,
                    MarginBottom = 10,
                    MarginLeft = 10,
                    MarginRight = 10,
                    EnableJavaScript = true,
                    RenderDelay = 500
                }
            };
            // Generate PDF from URL
            var pdfDocument = await Task.Run(() => 
                renderer.RenderUrlAsPdf(targetUrl));
            // Convert to base64
            byte[] pdfBytes = pdfDocument.BinaryData;
            string base64Pdf = Convert.ToBase64String(pdfBytes);
            // Open in new tab via JS interop
            bool success = await JS.InvokeAsync<bool>("openPdfInNewTab", 
                base64Pdf, $"Document_{DateTime.Now:yyyyMMdd_HHmmss}.pdf");
            if (!success)
            {
                // Giving the user an understandable error is key
                errorMessage = "Pop-up blocked. Please allow pop-ups for this site."; 
            }
        }
        catch (Exception ex)
        {
            errorMessage = $"Error: {ex.Message}";
        }
        finally
        {
            isProcessing = false;
        }
    }
}

Dieser Codeblock definiert die hauptsächliche interaktive Seite. Das Razor-Markup erstellt eine einfache Benutzeroberfläche mit einem URL-Eingabefeld und einem Button. Der C# @code-Block handhabt die Logik: Wenn der Button geklickt wird, verwendet er eine ChromePdfRenderer-Instanz, um das PDF aus der vom Benutzer bereitgestellten URL zu erzeugen.

Es konvertiert dann das resultierende PDF-Byte-Array in einen Base64-String und verwendet @inject IJSRuntime JS, um die JavaScript-Funktion aufzurufen, die das Dokument für den Benutzer öffnet.

UI-Ausgabe

Wie man ein PDF in einem neuen Tab in Blazor öffnet: Abbildung 1 - Beispiel für eine einfache Benutzeroberfläche

Ausgabe mit im neuen Tab geöffnetem PDF

Wie man ein PDF in einem neuen Tab in Blazor öffnet: Abbildung 2 - Erstes PDF, das in einem neuen Tab geöffnet wurde

Arbeiten mit dynamischen HTML-Inhalten

Um PDFs aus dynamischen Inhalten anstelle von URLs zu generieren, ändern Sie Ihren Ansatz, um RenderHtmlAsPdf zu verwenden:

private async Task GenerateFromHtml()
{
    // Define CSS styles inside the HTML string for structure and appearance.
    string htmlContent = $@"
        <!DOCTYPE html>
        <html>
        <head>
            <style>
                body {{ font-family: Arial; padding: 20px; }}
                h1 {{ color: #2c3e50; }}
            </style>
        </head>
        <body>
            <h1>{documentTitle}</h1>
            <p>{documentContent}</p>
            <div>Generated: {DateTime.Now}</div>
        </body>
        </html>";
    var renderer = new ChromePdfRenderer();
    var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
    byte[] pdfBytes = pdfDocument.BinaryData;
    await JS.InvokeVoidAsync("openPdfInNewTab", 
        Convert.ToBase64String(pdfBytes), "dynamic.pdf");
}
private async Task GenerateFromHtml()
{
    // Define CSS styles inside the HTML string for structure and appearance.
    string htmlContent = $@"
        <!DOCTYPE html>
        <html>
        <head>
            <style>
                body {{ font-family: Arial; padding: 20px; }}
                h1 {{ color: #2c3e50; }}
            </style>
        </head>
        <body>
            <h1>{documentTitle}</h1>
            <p>{documentContent}</p>
            <div>Generated: {DateTime.Now}</div>
        </body>
        </html>";
    var renderer = new ChromePdfRenderer();
    var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
    byte[] pdfBytes = pdfDocument.BinaryData;
    await JS.InvokeVoidAsync("openPdfInNewTab", 
        Convert.ToBase64String(pdfBytes), "dynamic.pdf");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Die Methode GenerateFromHtml zeigt, wie IronPDF ein PDF aus dynamisch generiertem HTML-Markup anstelle einer bestehenden URL erstellen kann. Es erstellt einen vollständigen HTML-String mit einer Überschrift, Inhalt und dynamischen Daten. Die Lösung für die dynamische Inhaltserstellung ist die Methode RenderHtmlAsPdf.

Aktualisierte Blazor-Server-UI

Wie man ein PDF in einem neuen Tab in Blazor öffnet: Abbildung 3 - Aktualisiertes Beispiel-UI für Ihr Serverprojekt

PDF im neuen Browser-Tab geöffnet

Wie man ein PDF in einem neuen Tab in Blazor öffnet: Abbildung 4 - Beispiel dynamisches PDF erstellt und dann in einem neuen Tab geöffnet

Umgang mit allgemeinen Problemen

Kompatibilität zwischen Browsern

Verschiedene Browser handhaben Blob-URLs unterschiedlich. Testen Sie Ihre Implementierung in Chrome, Firefox, Edge und Safari, um ein konsistentes Verhalten sicherzustellen.

Große Dateien

Für große PDF-Dokumente ziehen Sie in Betracht, serverseitiges Caching zu implementieren, um die Leistung zu verbessern:

services.AddMemoryCache();
// Cache generated PDFs to avoid regeneration
services.AddMemoryCache();
// Cache generated PDFs to avoid regeneration
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Navigationsalternativen

Neben JavaScript-Interop können Sie PDFs über statische Dateimiddleware bereitstellen und standardmäßige HTML-Anker-Tags für eine alternative Navigationsoption verwenden:

<a href="/pdfs/document.pdf" target="_blank">Open PDF</a>
<a href="/pdfs/document.pdf" target="_blank">Open PDF</a>
HTML

Dieser Ansatz funktioniert gut für vorab generierte PDFs, aber es fehlen die dynamischen Erstellungsfähigkeiten der JS-Interop-Methode.

Bewährte Verfahren

  1. Fehlerbehandlung: Wickeln Sie die PDF-Erzeugung immer in try-catch-Blöcke ein und bieten Sie den Benutzern sinnvolle Fehlermeldungen an, wenn ein Problem auftritt.

  2. Leistung: Verwenden Sie async/await-Muster, um UI-Blockierungen während der PDF-Erzeugung zu vermeiden.

  3. Benutzererfahrung: Zeigen Sie Ladeindikatoren während der Generierung an und gehen Sie Szenarien mit Pop-up-Blockern gelassen an.

  4. DOM-Manipulation: Denken Sie daran, dass C# auf dem Server das DOM des Clients nicht direkt manipulieren kann; Daher ist JS interop unverzichtbar. Sie müssen die Höhe oder Breite des neuen Fensters nicht manuell einstellen, da der Browser den PDF-Viewer handhabt.

  5. Sicherheit: Validieren und bereinigen Sie Benutzereingaben, bevor Sie PDFs generieren.

Abschluss

Das Kombinieren der leistungsstarken PDF-Erstellungskapazitäten von IronPDF mit Blazors JavaScript interop bietet eine robuste Lösung zum Öffnen von PDFs in neuen Browser-Tabs. Dieser Ansatz ermöglicht es Entwicklern, dynamische, professionelle PDF-Dokumente zu erstellen, die nahtlos in moderne Blazor-Anwendungen integriert werden, die auf der von Microsoft entwickelten .NET-Technologie basieren.

Bereit, um PDF-Funktionalität in Ihrem Blazor-Projekt zu implementieren? Starten Sie noch heute Ihre kostenlose IronPDF-Testversion. Die Testversion umfasst alle Funktionen ohne Wasserzeichen und umfassenden Support, um Ihren Erfolg sicherzustellen.

Häufig gestellte Fragen

Wie kann ich ein PDF in einem neuen Tab mit Blazor öffnen?

Sie können ein PDF in einem neuen Tab in Blazor öffnen, indem Sie IronPDF zur PDF-Erstellung und JavaScript-Interop zur Anzeige in einem neuen Browserfenster verwenden.

Welche Rolle spielt IronPDF in Blazor-Anwendungen?

IronPDF wird in Blazor-Anwendungen zur Erzeugung von PDF-Dokumenten verwendet, sodass Entwickler PDFs programmgesteuert innerhalb ihrer Anwendungen erstellen und manipulieren können.

Warum wird in Blazor JavaScript-Interop zum Öffnen von PDFs verwendet?

JavaScript-Interop wird in Blazor verwendet, um mit Browser-Funktionen zu interagieren, wie z. B. dem Öffnen eines neuen Tabs, was notwendig ist, um von IronPDF generierte PDFs benutzerfreundlich anzuzeigen.

Kann ich die PDF-Anzeige in einer Blazor-Server-Anwendung implementieren?

Ja, Sie können die PDF-Anzeige in einer Blazor-Server-Anwendung implementieren, indem Sie IronPDF zur PDF-Erstellung und JavaScript-Interop zur Öffnung in einem neuen Tab für eine nahtlose Benutzererfahrung verwenden.

Welche Vorteile bietet das Öffnen von PDFs in einem neuen Tab in Blazor-Apps?

Das Öffnen von PDFs in einem neuen Tab verbessert die Benutzererfahrung, indem es Benutzern ermöglicht, Dokumente anzusehen, ohne die aktuelle Seite zu verlassen, und den Anwendungsstatus intakt zu halten.

Ist es möglich, die PDF-Ausgabe in Blazor unter Verwendung von IronPDF anzupassen?

Ja, IronPDF ermöglicht Ihnen, die PDF-Ausgabe in Blazor-Anwendungen anzupassen, einschließlich der Festlegung von Kopf- und Fußzeilen sowie der Anwendung von Stilen, um spezifische Designanforderungen zu erfüllen.

Welche Blazor-Version wird im Tutorial zum Öffnen von PDFs verwendet?

Das Tutorial konzentriert sich auf die Blazor-Server-Version, um zu demonstrieren, wie man PDFs in einem neuen Tab mithilfe von IronPDF und JavaScript-Interop öffnet.

Wie verbessert die Verwendung von IronPDF die Dokumentenverarbeitung in Blazor?

Die Verwendung von IronPDF in Blazor verbessert die Dokumentenverarbeitung, indem es robuste PDF-Erstellungs- und Manipulationsmöglichkeiten bietet, was es einfach macht, professionelle PDF-Dokumente direkt aus Ihrer Anwendung zu erstellen.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen