Zum Fußzeileninhalt springen
IRONPDF NUTZEN

Wie man PDFs in Blazor mit IronPDF anzeigt

Um PDFs in Blazor -Anwendungen anzuzeigen, verwenden Sie die PDF-Viewer-Komponente von IronPDF, die sich in Blazor Server-Apps integriert und eine leistungsstarke PDF-Darstellung mit Funktionen wie Formularausfüllung, Anmerkungen und mobiler Unterstützung bietet – und das alles ohne auf Browser-Tools von Drittanbietern angewiesen zu sein.

Warum benötigt eine Blazor -Anwendung einen dedizierten PDF-Viewer?

Die Anzeige von PDFs in modernen Webanwendungen erfordert eine zuverlässige Viewer-Komponente, die über die grundlegenden Browserfunktionen hinausgeht. Für .NET -Entwickler, die Blazor Anwendungen erstellen, bietet IronPDF eine effektive PDF-Viewer-Lösung, die sich in Ihre Blazor Server-App integrieren lässt. Dies ermöglicht eine leistungsstarke PDF-Darstellung und umfangreiche Funktionalität, ohne auf Browser-Tools von Drittanbietern angewiesen zu sein.

Die native PDF-Unterstützung von Browsern variiert stark zwischen verschiedenen Browsern und Plattformen, was zu uneinheitlichen Benutzererfahrungen führt. Durch die Implementierung eines benutzerdefinierten PDF-Viewers in Ihrer Blazor -Anwendung erhalten Sie die volle Kontrolle über das Anzeigeerlebnis und gewährleisten so eine konsistente Funktionalität auf allen Plattformen. Dies ist besonders wichtig für Anwendungen, die Compliance-Standards und erweiterte Sicherheitsfunktionen erfordern.

Das Blazor Framework – basierend auf Microsofts ASP.NET Core – ermöglicht eine komponentenbasierte Entwicklung, die sich nahtlos in PDF-Bearbeitungsbibliotheken einfügt. Anstatt ein Viewer-Widget eines Drittanbieters von einem externen CDN einzubetten, können Sie eine Komponente erstellen, die genau auf die Anforderungen Ihrer Anwendung zugeschnitten ist.

Wie installiert man IronPDF in einem Blazor -Projekt?

Bevor Sie Ihren Blazor PDF-Viewer implementieren, installieren Sie IronPDF. Fügen Sie es Ihrer Blazor Server-App über NuGet hinzu, entweder über die Paket-Manager-Konsole oder die .NET -Befehlszeilenschnittstelle:

Install-Package IronPdf
Install-Package IronPdf
SHELL
dotnet add package IronPdf
dotnet add package IronPdf
SHELL

Erstellen Sie anschließend eine neue Blazor Anwendung und stellen Sie sicher, dass Sie die neueste Version von .NET installiert haben. Speichern Sie PDF-Dateien im Ordner wwwroot, um einen einfachen Zugriff zu ermöglichen, oder laden Sie sie aus anderen Quellen wie Byte-Arrays oder URLs. Die Installationsübersicht bietet detaillierte Anleitungen für verschiedene Einsatzszenarien.

Welche Voraussetzungen sind erforderlich?

Für die erfolgreiche Implementierung eines Blazor PDF-Viewers stellen Sie sicher, dass Sie Folgendes haben:

  • .NET 10 ist auf Ihrem Entwicklungsrechner installiert
  • Visual Studio 2022 oder Visual Studio Code mit C#-Erweiterungen
  • IronPDF -Lizenzschlüssel (verfügbar über eine kostenlose Testversion )
  • Grundlegendes Verständnis der Blazor -Komponentenstruktur
  • Eine PDF-Beispieldatei zum Testen (bitte im Ordner wwwroot ablegen)

Für die Windows-Bereitstellung stellen Sie sicher, dass Sie die passende Visual C++-Laufzeitumgebung installiert haben. Linux-Benutzer sollten die erforderlichen Abhängigkeiten installieren, während macOS-Entwickler die Kompatibilität mit Intel- bzw. Apple-Silicon-Prozessoren berücksichtigen müssen.

Wo sollten PDF-Dateien gespeichert werden?

Der Speicherort von PDF-Dateien hat erhebliche Auswirkungen auf die Leistung und Sicherheit Ihrer Anwendung. Für Blazor Anwendungen sollten Sie folgende Optionen in Betracht ziehen:

  • wwwroot-Ordner : Ideal für statische PDFs ohne sensible Informationen
  • Azure Blob-Speicher : Für Cloud-Anwendungen, die flexiblen Speicher benötigen.
  • Datenbank als Byte-Arrays : Geeignet für kleinere PDFs, die eine Zugriffskontrolle erfordern.
  • Geschützte Serververzeichnisse : Ideal für sensible Dokumente mit hohen Sicherheitsanforderungen
  • Speicherströme : Optimal für dynamisch generierte PDFs mit HTML zu PDF

Wie erstellt man eine Blazor PDF-Viewer-Komponente?

Entwickeln Sie eine einfache Blazor PDF-Viewer-Komponente, die PDF-Dokumente anzeigen kann. Erstellen Sie eine neue Razor Komponente in Ihrem Projekt:

@page "/pdfviewer"
@rendermode InteractiveServer
@using IronPdf
@inject IJSRuntime JSRuntime
@inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment WebHostEnvironment

<h3>PDF Viewer Component</h3>
<div>
    <button @onclick="LoadPdfDocument">Open File</button>
    <div id="pdfContainer">
        @if (!string.IsNullOrEmpty(pdfUrl))
        {
            <iframe src="@pdfUrl" style="width:100%; height:600px;"></iframe>
        }
    </div>
</div>

@code {
    private string pdfUrl = "";
    private byte[] pdfData = Array.Empty<byte>();

    private async Task LoadPdfDocument()
    {
        var pdfDocument = PdfDocument.FromFile("wwwroot/sample.pdf");
        pdfData = pdfDocument.BinaryData;
        var base64 = Convert.ToBase64String(pdfData);
        pdfUrl = $"data:application/pdf;base64,{base64}";
    }
}
@page "/pdfviewer"
@rendermode InteractiveServer
@using IronPdf
@inject IJSRuntime JSRuntime
@inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment WebHostEnvironment

<h3>PDF Viewer Component</h3>
<div>
    <button @onclick="LoadPdfDocument">Open File</button>
    <div id="pdfContainer">
        @if (!string.IsNullOrEmpty(pdfUrl))
        {
            <iframe src="@pdfUrl" style="width:100%; height:600px;"></iframe>
        }
    </div>
</div>

@code {
    private string pdfUrl = "";
    private byte[] pdfData = Array.Empty<byte>();

    private async Task LoadPdfDocument()
    {
        var pdfDocument = PdfDocument.FromFile("wwwroot/sample.pdf");
        pdfData = pdfDocument.BinaryData;
        var base64 = Convert.ToBase64String(pdfData);
        pdfUrl = $"data:application/pdf;base64,{base64}";
    }
}
Imports IronPdf
Imports Microsoft.AspNetCore.Hosting
Imports Microsoft.AspNetCore.Components
Imports Microsoft.JSInterop

@page "/pdfviewer"
@rendermode InteractiveServer

<h3>PDF Viewer Component</h3>
<div>
    <button @onclick="LoadPdfDocument">Open File</button>
    <div id="pdfContainer">
        @If Not String.IsNullOrEmpty(pdfUrl) Then
            <iframe src="@pdfUrl" style="width:100%; height:600px;"></iframe>
        End If
    </div>
</div>

@Code
    Private pdfUrl As String = ""
    Private pdfData As Byte() = Array.Empty(Of Byte)()

    Private Async Function LoadPdfDocument() As Task
        Dim pdfDocument = PdfDocument.FromFile("wwwroot/sample.pdf")
        pdfData = pdfDocument.BinaryData
        Dim base64 = Convert.ToBase64String(pdfData)
        pdfUrl = $"data:application/pdf;base64,{base64}"
    End Function
End Code
$vbLabelText   $csharpLabel

Dieser Code erstellt eine PDF-Viewer-Komponente, die ein PDF-Dokument lädt und es mithilfe eines iFrames anzeigt. Die Methode LoadPdfDocument liest eine PDF-Datei aus dem Ordner wwwroot und wandelt sie in eine Base64-Daten-URL um, die vom iFrame direkt gerendert wird. Dieser Ansatz funktioniert gut mit verschiedenen PDF-Versionen und unterstützt die UTF-8-Kodierung für internationale Dokumente.

Wie lädt die Komponente PDF-Dateien?

Die Komponente nutzt die Dokumentenladefunktionen von IronPDF, um PDF-Dateien effizient zu lesen. Wenn ein Benutzer auf die Schaltfläche "Datei öffnen" klickt, wird folgende Methode angewendet:

  1. Lädt die PDF-Datei mit PdfDocument.FromFile
  2. Extrahiert Binärdaten aus dem geladenen PDF-Dokument
  3. Konvertiert in das Base64 -Format für Browserkompatibilität
  4. Erstellt eine Daten-URL , die Browser direkt rendern können.

Dieser Ansatz gewährleistet Kompatibilität über verschiedene Browser hinweg und erhält gleichzeitig eine gute Leistung bei der PDF-Anzeige aufrecht. Die Komponente kann verschiedene Papierformate und Seitenausrichtungen verarbeiten.

Ausgabe

Screenshot einer Blazor -PDF-Viewer-Komponente, die eine Beispiel-PDF-Datei mit dem Inhalt

Wie nutzt man JavaScript Interop für eine bessere PDF-Darstellung?

Für eine bessere Kontrolle über die PDF-Inhaltsdarstellung verwenden Sie JavaScript Interop zur Steuerung der PDF-Viewer-Funktionalität. Dieses Muster lädt ein JavaScript Modul asynchron und delegiert das Rendering an die nativen Blob-/URL-APIs des Browsers – eine Technik, die sich gut für den Komponentenlebenszyklus von Blazor eignet:

@page "/pdf-jsinterop"
@rendermode InteractiveServer
@using IronPdf
@inject IJSRuntime JSRuntime
@inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment WebHostEnvironment
@implements IAsyncDisposable

<h3>IronPDF JavaScript Interop Viewer</h3>
<p>Displays PDF using JavaScript Blob/ObjectURL capabilities.</p>

@if (!string.IsNullOrEmpty(ErrorMessage))
{
    <div class="alert alert-danger">Error: @ErrorMessage</div>
}

<div id="@documentId" style="border: 1px solid #ccc; width: 100%; min-height: 600px;">
    Loading PDF...
</div>

@code {
    private string documentId = Guid.NewGuid().ToString();
    private string ErrorMessage = string.Empty;
    private bool pdfLoaded = false;
    private IJSObjectReference? jsModule;

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender && !pdfLoaded)
        {
            try
            {
                jsModule = await JSRuntime.InvokeAsync<IJSObjectReference>(
                    "import", "./pdfViewerInterop.js");
                await LoadPdfWithJavaScript();
                pdfLoaded = true;
            }
            catch (Exception ex)
            {
                ErrorMessage = $"Failed to load JS module: {ex.Message}";
            }
            finally
            {
                StateHasChanged();
            }
        }
    }

    private async Task LoadPdfWithJavaScript()
    {
        if (jsModule is null) return;
        var pdfPath = Path.Combine(WebHostEnvironment.WebRootPath, "sample.pdf");
        if (!File.Exists(pdfPath))
        {
            ErrorMessage = $"File not found: {pdfPath}";
            return;
        }
        var pdf = PdfDocument.FromFile(pdfPath);
        await jsModule.InvokeVoidAsync("displayPdf", documentId, pdf.BinaryData);
    }

    public async ValueTask DisposeAsync()
    {
        if (jsModule is not null)
            await jsModule.DisposeAsync();
    }
}
@page "/pdf-jsinterop"
@rendermode InteractiveServer
@using IronPdf
@inject IJSRuntime JSRuntime
@inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment WebHostEnvironment
@implements IAsyncDisposable

<h3>IronPDF JavaScript Interop Viewer</h3>
<p>Displays PDF using JavaScript Blob/ObjectURL capabilities.</p>

@if (!string.IsNullOrEmpty(ErrorMessage))
{
    <div class="alert alert-danger">Error: @ErrorMessage</div>
}

<div id="@documentId" style="border: 1px solid #ccc; width: 100%; min-height: 600px;">
    Loading PDF...
</div>

@code {
    private string documentId = Guid.NewGuid().ToString();
    private string ErrorMessage = string.Empty;
    private bool pdfLoaded = false;
    private IJSObjectReference? jsModule;

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender && !pdfLoaded)
        {
            try
            {
                jsModule = await JSRuntime.InvokeAsync<IJSObjectReference>(
                    "import", "./pdfViewerInterop.js");
                await LoadPdfWithJavaScript();
                pdfLoaded = true;
            }
            catch (Exception ex)
            {
                ErrorMessage = $"Failed to load JS module: {ex.Message}";
            }
            finally
            {
                StateHasChanged();
            }
        }
    }

    private async Task LoadPdfWithJavaScript()
    {
        if (jsModule is null) return;
        var pdfPath = Path.Combine(WebHostEnvironment.WebRootPath, "sample.pdf");
        if (!File.Exists(pdfPath))
        {
            ErrorMessage = $"File not found: {pdfPath}";
            return;
        }
        var pdf = PdfDocument.FromFile(pdfPath);
        await jsModule.InvokeVoidAsync("displayPdf", documentId, pdf.BinaryData);
    }

    public async ValueTask DisposeAsync()
    {
        if (jsModule is not null)
            await jsModule.DisposeAsync();
    }
}
Imports System
Imports System.IO
Imports System.Threading.Tasks
Imports IronPdf
Imports Microsoft.AspNetCore.Components
Imports Microsoft.AspNetCore.Components.Web
Imports Microsoft.JSInterop
Imports Microsoft.AspNetCore.Hosting

@page "/pdf-jsinterop"
@rendermode InteractiveServer

@inject IJSRuntime JSRuntime
@inject IWebHostEnvironment WebHostEnvironment
@implements IAsyncDisposable

<h3>IronPDF JavaScript Interop Viewer</h3>
<p>Displays PDF using JavaScript Blob/ObjectURL capabilities.</p>

@if Not String.IsNullOrEmpty(ErrorMessage) Then
    <div class="alert alert-danger">Error: @ErrorMessage</div>
End If

<div id="@documentId" style="border: 1px solid #ccc; width: 100%; min-height: 600px;">
    Loading PDF...
</div>

@code {
    Private documentId As String = Guid.NewGuid().ToString()
    Private ErrorMessage As String = String.Empty
    Private pdfLoaded As Boolean = False
    Private jsModule As IJSObjectReference

    Protected Overrides Async Function OnAfterRenderAsync(firstRender As Boolean) As Task
        If firstRender AndAlso Not pdfLoaded Then
            Try
                jsModule = Await JSRuntime.InvokeAsync(Of IJSObjectReference)(
                    "import", "./pdfViewerInterop.js")
                Await LoadPdfWithJavaScript()
                pdfLoaded = True
            Catch ex As Exception
                ErrorMessage = $"Failed to load JS module: {ex.Message}"
            Finally
                StateHasChanged()
            End Try
        End If
    End Function

    Private Async Function LoadPdfWithJavaScript() As Task
        If jsModule Is Nothing Then Return
        Dim pdfPath = Path.Combine(WebHostEnvironment.WebRootPath, "sample.pdf")
        If Not File.Exists(pdfPath) Then
            ErrorMessage = $"File not found: {pdfPath}"
            Return
        End If
        Dim pdf = PdfDocument.FromFile(pdfPath)
        Await jsModule.InvokeVoidAsync("displayPdf", documentId, pdf.BinaryData)
    End Function

    Public Async Function DisposeAsync() As ValueTask Implements IAsyncDisposable.DisposeAsync
        If jsModule IsNot Nothing Then
            Await jsModule.DisposeAsync()
        End If
    End Function
}
$vbLabelText   $csharpLabel

Fügen Sie die entsprechende JavaScript Funktion zu Ihrer Datei wwwroot/pdfViewerInterop.js hinzu. Beachten Sie, dass diese Datei JavaScript (nicht C#) verwendet und als Modul .js gespeichert ist.

export function displayPdf(elementId, data) {
    const blob = new Blob([new Uint8Array(data)], { type: 'application/pdf' });
    const url = URL.createObjectURL(blob);
    const container = document.getElementById(elementId);
    if (!container) return;
    container.innerHTML = '';
    const iframe = document.createElement('iframe');
    iframe.src = url;
    iframe.style.width = '100%';
    iframe.style.height = '600px';
    iframe.style.border = 'none';
    container.appendChild(iframe);
}
export function displayPdf(elementId, data) {
    const blob = new Blob([new Uint8Array(data)], { type: 'application/pdf' });
    const url = URL.createObjectURL(blob);
    const container = document.getElementById(elementId);
    if (!container) return;
    container.innerHTML = '';
    const iframe = document.createElement('iframe');
    iframe.src = url;
    iframe.style.width = '100%';
    iframe.style.height = '600px';
    iframe.style.border = 'none';
    container.appendChild(iframe);
}
The provided code is JavaScript, not C#. Therefore, it cannot be directly converted to VB.NET, as VB.NET is a server-side language and JavaScript is a client-side language. If you have C# code that you need converted to VB.NET, please provide that code for conversion.
$vbLabelText   $csharpLabel

Diese JavaScript Funktion erstellt einen Blob aus den PDF-Daten, generiert eine Objekt-URL und fügt dem Container einen iFrame hinzu. Die Technik unterstützt JavaScript Rendering und benutzerdefinierte Rendering-Verzögerungen für komplexe Dokumente.

Ausgabe

 Die Benutzeroberfläche des IronPDF JavaScript Interop Viewers zeigt ein PDF-Dokument mit dem Inhalt

Wie lädt man PDFs aus mehreren Quellen?

Ihr Blazor PDF-Viewer kann PDF-Dokumente aus verschiedenen Quellen abrufen und anzeigen. Das folgende Beispiel zeigt das Laden von einer URL und von HTML-Inhalten:

private async Task LoadFromUrl(string url)
{
    using var client = new HttpClient();
    client.Timeout = TimeSpan.FromSeconds(30);
    var response = await client.GetAsync(url);
    response.EnsureSuccessStatusCode();
    var stream = await response.Content.ReadAsStreamAsync();
    var pdfDocument = new PdfDocument(stream);
    await DisplayPdfContent(pdfDocument);
}

private async Task LoadFromHtmlContent()
{
    var renderer = new ChromePdfRenderer();
    var htmlContent = "<h1>Generated PDF</h1><p>Dynamic content from Blazor.</p>";
    var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
    await DisplayPdfContent(pdfDocument);
}

private Task DisplayPdfContent(PdfDocument document)
{
    var data = document.BinaryData;
    pdfUrl = $"data:application/pdf;base64,{Convert.ToBase64String(data)}";
    return Task.CompletedTask;
}
private async Task LoadFromUrl(string url)
{
    using var client = new HttpClient();
    client.Timeout = TimeSpan.FromSeconds(30);
    var response = await client.GetAsync(url);
    response.EnsureSuccessStatusCode();
    var stream = await response.Content.ReadAsStreamAsync();
    var pdfDocument = new PdfDocument(stream);
    await DisplayPdfContent(pdfDocument);
}

private async Task LoadFromHtmlContent()
{
    var renderer = new ChromePdfRenderer();
    var htmlContent = "<h1>Generated PDF</h1><p>Dynamic content from Blazor.</p>";
    var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
    await DisplayPdfContent(pdfDocument);
}

private Task DisplayPdfContent(PdfDocument document)
{
    var data = document.BinaryData;
    pdfUrl = $"data:application/pdf;base64,{Convert.ToBase64String(data)}";
    return Task.CompletedTask;
}
Imports System
Imports System.Net.Http
Imports System.Threading.Tasks

Private Async Function LoadFromUrl(url As String) As Task
    Using client As New HttpClient()
        client.Timeout = TimeSpan.FromSeconds(30)
        Dim response = Await client.GetAsync(url)
        response.EnsureSuccessStatusCode()
        Dim stream = Await response.Content.ReadAsStreamAsync()
        Dim pdfDocument As New PdfDocument(stream)
        Await DisplayPdfContent(pdfDocument)
    End Using
End Function

Private Async Function LoadFromHtmlContent() As Task
    Dim renderer As New ChromePdfRenderer()
    Dim htmlContent As String = "<h1>Generated PDF</h1><p>Dynamic content from Blazor.</p>"
    Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
    Await DisplayPdfContent(pdfDocument)
End Function

Private Function DisplayPdfContent(document As PdfDocument) As Task
    Dim data = document.BinaryData
    pdfUrl = $"data:application/pdf;base64,{Convert.ToBase64String(data)}"
    Return Task.CompletedTask
End Function
$vbLabelText   $csharpLabel

Die Methode LoadFromUrl ruft PDF-Dokumente von entfernten Speicherorten ab, während LoadFromHtmlContent zeigt, wie man HTML dynamisch in PDF konvertiert . Die Chrome-Rendering-Engine gewährleistet eine genaue HTML-Konvertierung. Zu den zusätzlichen Datenquellen gehören Azure Blob-Speicher, Datenbank-Speicherstreams und DOCX-Dokumente .

Welche Datenquellenmethode ist die richtige für Ihren Anwendungsfall?

PDF-Quellmethoden für Blazor Anwendungen
Quellentyp Am besten für Leistung Sicherheit
Lokale Dateien Statischer Inhalt Ausgezeichnet Niedrig
URLs Externe Dokumente Gut Medium
HTML-Konvertierung Dynamische Berichte Variable Hoch
Blob-Speicher Enterprise Ausgezeichnet Hoch
Speicherströme Temporäre PDFs Ausgezeichnet Hoch

Ausgabe mit HTML-Inhalt

 Die IronPDF Testoberfläche demonstriert die erfolgreiche PDF-Generierung aus HTML-Inhalten. Optionen zum Laden von einer URL oder zum Generieren aus HTML sind oben sichtbar.

Wie fügt man einem PDF-Viewer interaktive Funktionen hinzu?

Erweitern Sie den PDF-Viewer um Funktionen für Seitennavigation, Drehung, Drucken und Herunterladen:

@code {
    private int currentPage = 1;
    private int totalPages;
    private byte[] pdfData = Array.Empty<byte>();
    private string pdfUrl = "";
    private string rotationClass = "";
    private string documentId = Guid.NewGuid().ToString();

    private async Task NavigateToPage(int page)
    {
        currentPage = page;
        await JSRuntime.InvokeVoidAsync("navigateTo", page);
    }

    private void RotateCounterclockwise()
    {
        rotationClass = "rotate-270";
    }

    private async Task PrintPdf()
    {
        await JSRuntime.InvokeVoidAsync("printDocument", documentId);
    }

    private async Task DownloadPdf()
    {
        await JSRuntime.InvokeVoidAsync("downloadFile", pdfData, "document.pdf");
    }
}
@code {
    private int currentPage = 1;
    private int totalPages;
    private byte[] pdfData = Array.Empty<byte>();
    private string pdfUrl = "";
    private string rotationClass = "";
    private string documentId = Guid.NewGuid().ToString();

    private async Task NavigateToPage(int page)
    {
        currentPage = page;
        await JSRuntime.InvokeVoidAsync("navigateTo", page);
    }

    private void RotateCounterclockwise()
    {
        rotationClass = "rotate-270";
    }

    private async Task PrintPdf()
    {
        await JSRuntime.InvokeVoidAsync("printDocument", documentId);
    }

    private async Task DownloadPdf()
    {
        await JSRuntime.InvokeVoidAsync("downloadFile", pdfData, "document.pdf");
    }
}
Imports System

Public Class CodeBehind
    Private currentPage As Integer = 1
    Private totalPages As Integer
    Private pdfData As Byte() = Array.Empty(Of Byte)()
    Private pdfUrl As String = ""
    Private rotationClass As String = ""
    Private documentId As String = Guid.NewGuid().ToString()

    Private Async Function NavigateToPage(page As Integer) As Task
        currentPage = page
        Await JSRuntime.InvokeVoidAsync("navigateTo", page)
    End Function

    Private Sub RotateCounterclockwise()
        rotationClass = "rotate-270"
    End Sub

    Private Async Function PrintPdf() As Task
        Await JSRuntime.InvokeVoidAsync("printDocument", documentId)
    End Function

    Private Async Function DownloadPdf() As Task
        Await JSRuntime.InvokeVoidAsync("downloadFile", pdfData, "document.pdf")
    End Function
End Class
$vbLabelText   $csharpLabel

Dieser Code fügt Funktionen für Seitennavigation, Drehung , Drucken und Herunterladen hinzu. Bei Dokumenten mit vielen Navigationselementen empfiehlt es sich, Seitenzahlen und Lesezeichen hinzuzufügen. Zu den erweiterten Funktionen gehören beispielsweise Textextraktion und PDF-zu-HTML-Konvertierung.

Ausgabe

Eine voll ausgestattete PDF-Viewer-Komponente, die mit Blazor erstellt wurde und Steuerelemente zur Dokumentennavigation, eine auf 100 % eingestellte Zoom sowie benutzerdefinierte Aktionsschaltflächen mit Optionen zum Laden von PDF-Dateien, Drucken, Herunterladen und Drehen bietet.

Wie gehen Sie mit PDF-Formularen und Anmerkungen um?

Für PDF-Dokumente mit Formularfeldern und Anmerkungen bietet IronPDF solide Unterstützung für das programmatische Lesen und Schreiben von Feldwerten:

private async Task ProcessFormFields()
{
    var pdfDocument = PdfDocument.FromFile("form.pdf");

    foreach (var field in pdfDocument.Form.Fields)
    {
        if (field.Type == PdfFormFieldType.Text)
        {
            field.Value = "User Input";
        }
    }

    await DisplayPdfContent(pdfDocument);
}

private async Task SaveFormData()
{
    var pdfWithFormData = PdfDocument.FromFile("filled-form.pdf");
    var formData = pdfWithFormData.Form.Fields
        .ToDictionary(f => f.Name, f => f.Value);

    var json = System.Text.Json.JsonSerializer.Serialize(formData);
    await File.WriteAllTextAsync("form-data.json", json);

    pdfWithFormData.Form.Flatten();
    pdfWithFormData.SaveAs("form-submission.pdf");
}
private async Task ProcessFormFields()
{
    var pdfDocument = PdfDocument.FromFile("form.pdf");

    foreach (var field in pdfDocument.Form.Fields)
    {
        if (field.Type == PdfFormFieldType.Text)
        {
            field.Value = "User Input";
        }
    }

    await DisplayPdfContent(pdfDocument);
}

private async Task SaveFormData()
{
    var pdfWithFormData = PdfDocument.FromFile("filled-form.pdf");
    var formData = pdfWithFormData.Form.Fields
        .ToDictionary(f => f.Name, f => f.Value);

    var json = System.Text.Json.JsonSerializer.Serialize(formData);
    await File.WriteAllTextAsync("form-data.json", json);

    pdfWithFormData.Form.Flatten();
    pdfWithFormData.SaveAs("form-submission.pdf");
}
Imports System.IO
Imports System.Threading.Tasks
Imports System.Text.Json

Private Async Function ProcessFormFields() As Task
    Dim pdfDocument = PdfDocument.FromFile("form.pdf")

    For Each field In pdfDocument.Form.Fields
        If field.Type = PdfFormFieldType.Text Then
            field.Value = "User Input"
        End If
    Next

    Await DisplayPdfContent(pdfDocument)
End Function

Private Async Function SaveFormData() As Task
    Dim pdfWithFormData = PdfDocument.FromFile("filled-form.pdf")
    Dim formData = pdfWithFormData.Form.Fields.ToDictionary(Function(f) f.Name, Function(f) f.Value)

    Dim json = JsonSerializer.Serialize(formData)
    Await File.WriteAllTextAsync("form-data.json", json)

    pdfWithFormData.Form.Flatten()
    pdfWithFormData.SaveAs("form-submission.pdf")
End Function
$vbLabelText   $csharpLabel

Dies ermöglicht das Ausfüllen von Formularen innerhalb des Blazor PDF-Viewers, sodass Benutzer direkt im Browser mit den Formularfeldern interagieren können. Der Code durchläuft die Formularfelder und setzt die Werte programmatisch, was ideal für Anwendungen ist, die ein dynamisches Vorbefüllen erfordern. IronPDF unterstützt außerdem digitale Signaturen und Textanmerkungen.

Unterstützte Feldtypen sind unter anderem Texteingabefelder, Kontrollkästchen, Optionsfelder, Dropdown-Listen, Felder für digitale Signaturen, mehrzeilige Textbereiche und Datumsauswahlfelder.

Wann sollte man programmatisches bzw. interaktives Ausfüllen von Formularen verwenden?

Vergleich der Vorgehensweisen beim Ausfüllen von Formularen
Ansatz Anwendung bei Vorteile
Programmatic Vorabbelegen bekannter Daten Schneller, konsistenter, automatisiert
Interaktiv Benutzereingabe erforderlich Flexible, sofortige Validierung
Hybrid Teilweise Daten verfügbar Das Beste aus beiden Ansätzen

Um Manipulationen zu verhindern, sollten die Formulare nach dem Absenden flach zusammengelegt werden. Verwenden Sie PDF-Bereinigung zur Gewährleistung der Sicherheit.

Ausgabe

Beispiel für die Formularausfüllfunktion der PDF-Viewer-Komponente, das zeigt, wie Benutzer direkt im Browser mit PDF-Formularen interagieren können

Wie optimiert man die Leistung bei großen PDFs?

Um eine gute Darstellung von PDFs, insbesondere von großen Dateien, zu gewährleisten, sollten Sie das Laden in Blöcken und das Speichermanagement nutzen:

private async Task LoadLargePdf()
{
    const int chunkSize = 1024 * 1024; // 1MB chunks
    var pdfPath = "largefile.pdf";

    using var fileStream = File.OpenRead(pdfPath);
    var buffer = new byte[chunkSize];
    var chunks = new List<byte[]>();
    int bytesRead;

    while ((bytesRead = await fileStream.ReadAsync(buffer)) > 0)
    {
        var chunk = new byte[bytesRead];
        Array.Copy(buffer, chunk, bytesRead);
        chunks.Add(chunk);
    }

    await ProcessPdfChunks(chunks);
}
private async Task LoadLargePdf()
{
    const int chunkSize = 1024 * 1024; // 1MB chunks
    var pdfPath = "largefile.pdf";

    using var fileStream = File.OpenRead(pdfPath);
    var buffer = new byte[chunkSize];
    var chunks = new List<byte[]>();
    int bytesRead;

    while ((bytesRead = await fileStream.ReadAsync(buffer)) > 0)
    {
        var chunk = new byte[bytesRead];
        Array.Copy(buffer, chunk, bytesRead);
        chunks.Add(chunk);
    }

    await ProcessPdfChunks(chunks);
}
Imports System.IO
Imports System.Threading.Tasks

Private Async Function LoadLargePdf() As Task
    Const chunkSize As Integer = 1024 * 1024 ' 1MB chunks
    Dim pdfPath As String = "largefile.pdf"

    Using fileStream As FileStream = File.OpenRead(pdfPath)
        Dim buffer(chunkSize - 1) As Byte
        Dim chunks As New List(Of Byte())()
        Dim bytesRead As Integer

        Do
            bytesRead = Await fileStream.ReadAsync(buffer, 0, buffer.Length)
            If bytesRead > 0 Then
                Dim chunk(bytesRead - 1) As Byte
                Array.Copy(buffer, chunk, bytesRead)
                chunks.Add(chunk)
            End If
        Loop While bytesRead > 0
    End Using

    Await ProcessPdfChunks(chunks)
End Function
$vbLabelText   $csharpLabel

Bei diesem Verfahren werden große PDF-Dateien in Blöcken geladen, wodurch Speicherprobleme vermieden und eine reibungslose Leistung auch bei umfangreichen Dokumenten gewährleistet wird. Es ist besonders nützlich beim Umgang mit PDF-Dateien auf mobilen Geräten oder Systemen mit begrenzten Ressourcen. Weitere Tuning-Optionen finden Sie im Leistungsleitfaden von IronPDF .

Zu den weiteren Optimierungsstrategien gehören Linearisierung für schnelles Web-Viewing, Komprimierung zur Reduzierung der Dateigröße und asynchrone Verarbeitung zur gleichzeitigen Bearbeitung mehrerer PDFs. Gemäß den Best Practices der PDF Association kann die anfängliche Ladezeit großer Dokumente durch linearisierte (weboptimierte) PDFs um 30 bis 60 % reduziert werden.

Ab welcher Dateigröße ist das Laden in Blöcken erforderlich?

Leitfaden zur Ladestrategie für PDF-Dateien
Dateigröße Ladestrategie Memory Impact
Unter 5 MB Direktverladung Minimal
5 -- 20 MB Optionale Chunking-Funktion Mäßig
20–50 MB Empfohlene Stückung Bedeutsam
Über 50 MB Erforderliche Chunking-Aufteilung Kritisch

Serverseitiges Rendering ist von Vorteil bei der Verarbeitung von PDFs, die größer als 100 MB sind, bei der Implementierung komplexer Anmerkungen oder bei der Unterstützung mehrerer gleichzeitiger Benutzer.

Wie sichert man einen Blazor PDF Viewer für passwortgeschützte Dateien?

Bei der Arbeit mit passwortgeschützten PDF-Dateien übergeben Sie das Passwort direkt an PdfDocument.FromFile und konfigurieren Sie die entsprechenden HTTP-Sicherheitsheader:

private async Task LoadSecurePdf(string password)
{
    var pdfDocument = PdfDocument.FromFile("secure.pdf", password);

    var headers = new Dictionary<string, string>
    {
        { "X-Frame-Options", "SAMEORIGIN" },
        { "Content-Security-Policy", "default-src 'self'" },
        { "X-Content-Type-Options", "nosniff" },
        { "Referrer-Policy", "no-referrer" }
    };

    await DisplayPdfContent(pdfDocument);
}
private async Task LoadSecurePdf(string password)
{
    var pdfDocument = PdfDocument.FromFile("secure.pdf", password);

    var headers = new Dictionary<string, string>
    {
        { "X-Frame-Options", "SAMEORIGIN" },
        { "Content-Security-Policy", "default-src 'self'" },
        { "X-Content-Type-Options", "nosniff" },
        { "Referrer-Policy", "no-referrer" }
    };

    await DisplayPdfContent(pdfDocument);
}
Private Async Function LoadSecurePdf(password As String) As Task
    Dim pdfDocument = PdfDocument.FromFile("secure.pdf", password)

    Dim headers = New Dictionary(Of String, String) From {
        {"X-Frame-Options", "SAMEORIGIN"},
        {"Content-Security-Policy", "default-src 'self'"},
        {"X-Content-Type-Options", "nosniff"},
        {"Referrer-Policy", "no-referrer"}
    }

    Await DisplayPdfContent(pdfDocument)
End Function
$vbLabelText   $csharpLabel

Dieser Code demonstriert das Laden passwortgeschützter PDF-Dokumente unter Beibehaltung der Sicherheit durch korrekte Header-Konfiguration. Erwägen Sie digitale Signaturen zur Verbesserung der Authentifizierung. Implementieren Sie eine PDF-Bereinigung , um potenziell schädliche Inhalte zu entfernen und sensible Informationen zu schwärzen.

Beim Umgang mit Passwörtern sollten diese niemals im Klartext oder im clientseitigen Code gespeichert werden. Verwenden Sie sichere Eingabemethoden mit ordnungsgemäßer Validierung, implementieren Sie Sitzungs-Timeouts für sensible Dokumente und löschen Sie Passwörter nach Gebrauch aus dem Speicher. Die Sicherheitsrichtlinien von Microsoft für ASP.NET Core empfehlen, alle vom Benutzer angegebenen Anmeldeinformationen vor der Weitergabe an nachgelagerte APIs stets zu validieren und zu bereinigen.

Clientseitige vs. serverseitige Entschlüsselung

Sicherheitsvergleich von PDF-Entschlüsselungsansätzen
Entschlüsselungstyp Anwendungsfall Sicherheitsstufe
Clientseitig Öffentliche Dokumente Niedrig
Serverseitig Sensible Daten Hoch
Hybrid Gemischte Inhalte Medium

Für maximale Sicherheit sollte die Entschlüsselung stets serverseitig erfolgen und der entschlüsselte Inhalt sicher an den Client gestreamt werden. Implementieren Sie die PDF/A-Konformität für langfristige Archivierungsanforderungen.

Was sind die wichtigsten Erkenntnisse zum Anzeigen von PDFs in Blazor?

Die Implementierung eines Blazor PDF-Viewers mit IronPDF bietet Entwicklern eine Komplettlösung für die Anzeige von PDFs in Webanwendungen. Von der einfachen Anzeige bis hin zu erweiterten Funktionen wie Formularausfüllung und Anmerkungen bietet die PDF-Viewer-Komponente von IronPDF die Funktionalität, die für Professional Anwendungen benötigt wird.

Die gezeigten Beispiele veranschaulichen, wie man einen zuverlässigen Blazor PDF-Viewer erstellt, der verschiedene PDF-Quellen verarbeiten kann, interaktive Funktionen bietet und eine gute Leistung beibehält. Ob Sie einen einfachen Dokumentenbetrachter oder ein komplexes Dokumentenmanagementsystem entwickeln möchten – die Integration von IronPDF mit Blazor Server-Anwendungen macht die Implementierung Professional PDF-Anzeigefunktionen unkompliziert.

Zu den Hauptvorteilen gehören:

  • Plattformübergreifende Kompatibilität mit einheitlicher Darstellung in allen Browsern
  • Erweiterte Sicherheitsfunktionen für sensible Dokumente
  • Leistungsoptimierung für große Dateien durch asynchrones und segmentiertes Laden
  • Umfassende Formularverarbeitungsfunktionen einschließlich digitaler Signaturen
  • Reibungslose Integration mit bestehenden .NET Anwendungen

IronPDF unterstützt Azure, AWS, Docker und herkömmliche Windows-Umgebungen. Bereit, Ihren eigenen Viewer zu entwickeln? Starten Sie mit einer kostenlosen Testversion von IronPDF und konsultieren Sie die vollständige Dokumentation und die Codebeispiele , um effektive PDF-Anzeigeerlebnisse in Ihren Blazor -Anwendungen zu schaffen.

Häufig gestellte Fragen

Wie kann ich ein PDF in einer Blazor-Anwendung mit IronPDF anzeigen?

IronPDF bietet eine umfassende API, die es Ihnen ermöglicht, PDFs in Blazor-Anwendungen zu rendern und anzuzeigen. Durch die Integration von IronPDF können Sie einfach einen leistungsstarken PDF-Viewer-Komponente implementieren.

Welche Vorteile bietet IronPDF für die Anzeige von PDFs in Blazor?

Die Verwendung von IronPDF für die Anzeige von PDFs in Blazor bietet Vorteile wie die Verarbeitung von Formularfeldern, das Erstellen interaktiver Viewer und das nahtlose Rendern hochqualitativer PDFs innerhalb Ihrer Anwendung.

Ist es möglich, Formularfelder in PDFs mit IronPDF in Blazor zu verarbeiten?

Ja, IronPDF ermöglicht die Verarbeitung und Manipulation von Formularfeldern in PDF-Dokumenten in einer Blazor-Anwendung und bietet erweiterte Interaktivität und Nutzerbindung.

Kann IronPDF verwendet werden, um interaktive PDF-Viewer in Blazor zu erstellen?

Diese Webseite bietet einen umfassenden Leitfaden zur Implementierung eines Blazor PDF-Viewers mit IronPDF, einschließlich der PDF-Darstellung, Formularfeldverarbeitung und Erstellung interaktiver Viewer.

Welche Funktionen bietet IronPDF für die PDF-Manipulation in Blazor?

IronPDF bietet Funktionen wie PDF-Rendering, Formularfeldverarbeitung, Textextraktion und Seitenmanipulation und ist damit eine vielseitige Wahl für PDF-Operationen in Blazor.

Wie verbessert IronPDF die PDF-Anzeigeerfahrungen in Blazor-Anwendungen?

IronPDF verbessert die PDF-Anzeigeerfahrungen in Blazor-Anwendungen durch eine reibungslose Darstellung, interaktive Funktionen und robusten Umgang mit PDF-Dokumenten.

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

Iron Support Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an