Zum Fußzeileninhalt springen
IRONPDF NUTZEN

PDF-Seiten in Windows Forms PictureBox rendern | C#-Leitfaden

Die Anzeige von PDF-Seiten innerhalb einer Windows Forms-Anwendung ist eine häufige Anforderung für Dokumentenmanagement-Tools, Berichtsanzeigeprogramme und Dateivorschau-Dienstprogramme. Das Steuerelement PictureBox bietet sich an, da es die Bildwiedergabe in Ihrem Formular bereits übernimmt. Die Herausforderung besteht darin, dass PDF-Dateien keine Bilder sind – sie erfordern eine spezielle Darstellung, bevor sie von einem Standard-Bildbearbeitungsprogramm angezeigt werden können. Dieser Leitfaden erklärt, wie man mit IronPDF PDF-Seiten in Bitmap-Bilder umwandelt und diese in einem PictureBox-Steuerelement anzeigt, inklusive Unterstützung für Seitennavigation, Drucken und Speichern.

Starten Sie jetzt mit IronPDF.
green arrow pointer

Warum kann PictureBox PDF-Dateien nicht direkt anzeigen?

Das PictureBox Steuerelement in Windows Forms ist ausschließlich für Bildformate wie BMP, PNG, JPG, GIF, TIFF und einige wenige andere ausgelegt. Beim Versuch, PictureBox.ImageLocation einen PDF-Dateipfad zuzuweisen oder einen PDF-Stream in PictureBox.Image zu laden, löst das Steuerelement eine Ausnahme aus, da das binäre PDF-Format kein anerkanntes Bildformat ist.

Einige Ansätze versuchen, dieses Problem durch die Einbettung von Adobe Acrobat über COM-Interop zu umgehen. Dies führt zu einer zwingenden Abhängigkeit davon, dass Adobe Reader auf jedem Rechner installiert sein muss, auf dem die Anwendung ausgeführt wird – eine Bereitstellungseinschränkung, die in Enterprise schwer zu handhaben ist. Außerdem wird die Rendering-Engine an die jeweilige Acrobat-Version des Benutzers gebunden, was zu Kompatibilitätsproblemen auf verschiedenen Rechnern führen kann.

Eine elegantere Lösung ist die Verwendung einer .NET PDF-Bibliothek, die PDF-Seiten zur Laufzeit in Bitmap-Bilder umwandelt. IronPDF bietet genau diese Funktionalität mit seiner Methode ToBitmap, die jede Seite eines PDF-Dokuments in ein AnyBitmap-Objekt rendert. Anschließend können Sie dieses Objekt in ein Standardobjekt vom Typ System.Drawing.Bitmap konvertieren und es direkt PictureBox.Image zuweisen. Keine Adobe-Installation erforderlich, keine COM-Registrierung und kein externer Viewer in Ihrem Anwendungsfenster eingebettet.

Diese Technik funktioniert unter .NET Framework 4.6.2 und höher sowie unter .NET 6, 8 und 10 unter Windows. Die Rendering-Engine von IronPDF basiert auf Chrome, was bedeutet, dass sie auch bei PDFs mit komplexen Layouts, eingebetteten Schriftarten und gemischten Bild-/Textinhalten eine hohe Ausgabequalität liefert.

Wie installiert man IronPDF für ein Windows Forms-Projekt?

Bevor Sie mit dem Programmieren beginnen, müssen Sie IronPDF zu Ihrem Projekt hinzufügen. Am schnellsten geht es über die Befehlszeilenschnittstelle des NuGet Paketmanagers:

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

Alternativ können Sie die Visual Studio-Paket-Manager-Konsole verwenden:

Install-Package IronPdf
Install-Package IronPdf
SHELL

Prüfen Sie nach der Installation, ob der Paketverweis in Ihrer .csproj-Datei vorhanden ist. IronPDF ist für Windows mit .NET 6 und höher ausgelegt. Wenn Sie in Ihrer Projektdatei ein plattformübergreifendes Ziel verwenden, fügen Sie eine <RuntimeIdentifiers>- oder <Platforms>-Beschränkung für Windows hinzu. Bei Windows Forms-Projekten ist dies normalerweise bereits konfiguriert, wenn Sie die Projektvorlage in Visual Studio erstellen.

Für die Lizenzierung im Produktivbetrieb fügen Sie Ihren Lizenzschlüssel in den Startcode Ihrer Anwendung ein, bevor IronPDF aufgerufen wird:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Während der Entwicklungs- und Evaluierungsphase läuft IronPDF im Testmodus, wodurch dem gerenderten Ergebnis ein Wasserzeichen hinzugefügt wird. Eine kostenlose Testlizenz entfernt das Wasserzeichen zu Testzwecken.

Wie richtet man die Projektstruktur in Windows Forms ein?

Öffnen Sie Visual Studio und erstellen Sie ein neues Windows Forms App-Projekt, das auf .NET 10 abzielt. Die Projektvorlage generiert einen Form1.cs und einen Program.cs Einstiegspunkt.

Fügen Sie auf der Designeroberfläche die folgenden Steuerelemente zu Ihrem Formular hinzu:

  • Ein PictureBox mit dem Namen pictureBoxPdf, der den größten Teil des Formulars abdeckt, wobei SizeMode auf Zoom gesetzt ist.
  • Ein Button mit dem Namen btnOpen und dem Text "PDF öffnen"
  • Ein Button mit dem Namen btnPrevious und dem Text "Vorheriger"
  • Ein Button mit dem Namen btnNext und dem Text "Next"
  • Ein Button mit dem Namen btnSave und dem Text "Seite speichern"
  • Ein Button mit dem Namen btnPrint und dem Text "Print"
  • Ein Label namens lblPageInfo zur Anzeige der aktuellen Seitenzahl

Die Einstellung SizeMode = Zoom auf dem PictureBox stellt sicher, dass PDF-Seiten proportional skaliert werden, um in das Steuerelement zu passen, ohne das Seitenverhältnis zu verzerren. Dies ist wichtig, da PDF-Seiten unterschiedliche Größen haben – Letter-, A4- und Legal-Formate haben alle unterschiedliche Abmessungen, und Sie möchten, dass der Betrachter alle problemlos verarbeiten kann.

Nachfolgend finden Sie den vollständigen Formularcode für die PDF-Viewer-Anwendung. Hierbei werden Anweisungen auf oberster Ebene in Program.cs verwendet und die gesamte Viewer-Logik in Form1.cs platziert:

using IronPdf;
using IronSoftware.Drawing;
using System.Drawing;

public partial class Form1 : Form
{
    private PdfDocument? currentPdf;
    private AnyBitmap[]? pageImages;
    private int currentPageIndex = 0;

    public Form1()
    {
        InitializeComponent();
        pictureBoxPdf.SizeMode = PictureBoxSizeMode.Zoom;
        UpdateNavigationState();
    }

    private void UpdateNavigationState()
    {
        bool hasPdf = pageImages != null && pageImages.Length > 0;
        btnPrevious.Enabled = hasPdf && currentPageIndex > 0;
        btnNext.Enabled = hasPdf && currentPageIndex < (pageImages?.Length - 1 ?? 0);
        btnSave.Enabled = hasPdf;
        btnPrint.Enabled = hasPdf;
        lblPageInfo.Text = hasPdf
            ? $"Page {currentPageIndex + 1} of {pageImages!.Length}"
            : "No document loaded";
    }
}
using IronPdf;
using IronSoftware.Drawing;
using System.Drawing;

public partial class Form1 : Form
{
    private PdfDocument? currentPdf;
    private AnyBitmap[]? pageImages;
    private int currentPageIndex = 0;

    public Form1()
    {
        InitializeComponent();
        pictureBoxPdf.SizeMode = PictureBoxSizeMode.Zoom;
        UpdateNavigationState();
    }

    private void UpdateNavigationState()
    {
        bool hasPdf = pageImages != null && pageImages.Length > 0;
        btnPrevious.Enabled = hasPdf && currentPageIndex > 0;
        btnNext.Enabled = hasPdf && currentPageIndex < (pageImages?.Length - 1 ?? 0);
        btnSave.Enabled = hasPdf;
        btnPrint.Enabled = hasPdf;
        lblPageInfo.Text = hasPdf
            ? $"Page {currentPageIndex + 1} of {pageImages!.Length}"
            : "No document loaded";
    }
}
Imports IronPdf
Imports IronSoftware.Drawing
Imports System.Drawing

Public Partial Class Form1
    Inherits Form

    Private currentPdf As PdfDocument
    Private pageImages As AnyBitmap()
    Private currentPageIndex As Integer = 0

    Public Sub New()
        InitializeComponent()
        pictureBoxPdf.SizeMode = PictureBoxSizeMode.Zoom
        UpdateNavigationState()
    End Sub

    Private Sub UpdateNavigationState()
        Dim hasPdf As Boolean = pageImages IsNot Nothing AndAlso pageImages.Length > 0
        btnPrevious.Enabled = hasPdf AndAlso currentPageIndex > 0
        btnNext.Enabled = hasPdf AndAlso currentPageIndex < If(pageImages?.Length - 1, 0)
        btnSave.Enabled = hasPdf
        btnPrint.Enabled = hasPdf
        lblPageInfo.Text = If(hasPdf, $"Page {currentPageIndex + 1} of {pageImages.Length}", "No document loaded")
    End Sub
End Class
$vbLabelText   $csharpLabel

Die Hilfsmethode UpdateNavigationState deaktiviert oder aktiviert Navigations- und Aktionsschaltflächen, je nachdem, ob eine PDF-Datei geladen wurde und welche Seite der Betrachter gerade anzeigt. Dadurch werden NullReferenceExceptions vermieden, die auftreten, wenn Benutzer auf Schaltflächen klicken, bevor ein Dokument geladen wird.

VB .NET PDF in PictureBox anzeigen: PDF-Seiten als Bilder in Windows Forms rendern: Bild 1 - IronPDF installieren

Wie lädt und rendert man PDF-Seiten in einer PictureBox?

Das Laden einer PDF-Datei und deren Darstellung im PictureBox-Format umfasst zwei Schritte: das Laden des Dokuments mit PdfDocument.FromFile und anschließend den Aufruf von ToBitmap, um alle Seiten in ein Array von Bitmap-Objekten umzuwandeln.

Die PDF-zu-Bild-Konvertierungsmethode ToBitmap rendert jede Seite im PDF mit der angeforderten DPI-Zahl. Höhere DPI-Werte erzeugen schärfere Bilder, benötigen aber mehr Speicherplatz. Ein Wert von 150 DPI ist in der Regel ein guter Kompromiss für einen Dokumentenbetrachter – gut lesbar auf dem Bildschirm, ohne dass für große Dokumente Gigabytes an RAM benötigt werden.

private void btnOpen_Click(object sender, EventArgs e)
{
    using OpenFileDialog openDialog = new OpenFileDialog();
    openDialog.Filter = "PDF Files|*.pdf";
    openDialog.Title = "Select a PDF Document";

    if (openDialog.ShowDialog() == DialogResult.OK)
    {
        LoadPdfDocument(openDialog.FileName);
    }
}

private void LoadPdfDocument(string filePath)
{
    currentPdf?.Dispose();
    currentPdf = PdfDocument.FromFile(filePath);

    // Render all pages as bitmaps at 150 DPI
    pageImages = currentPdf.ToBitmap(150);
    currentPageIndex = 0;

    DisplayCurrentPage();
    UpdateNavigationState();
}

private void DisplayCurrentPage()
{
    if (pageImages == null || pageImages.Length == 0) return;

    // Convert AnyBitmap to System.Drawing.Bitmap for PictureBox
    System.Drawing.Bitmap bitmap = pageImages[currentPageIndex].ToImage<System.Drawing.Bitmap>();
    pictureBoxPdf.Image?.Dispose();
    pictureBoxPdf.Image = bitmap;

    UpdateNavigationState();
}
private void btnOpen_Click(object sender, EventArgs e)
{
    using OpenFileDialog openDialog = new OpenFileDialog();
    openDialog.Filter = "PDF Files|*.pdf";
    openDialog.Title = "Select a PDF Document";

    if (openDialog.ShowDialog() == DialogResult.OK)
    {
        LoadPdfDocument(openDialog.FileName);
    }
}

private void LoadPdfDocument(string filePath)
{
    currentPdf?.Dispose();
    currentPdf = PdfDocument.FromFile(filePath);

    // Render all pages as bitmaps at 150 DPI
    pageImages = currentPdf.ToBitmap(150);
    currentPageIndex = 0;

    DisplayCurrentPage();
    UpdateNavigationState();
}

private void DisplayCurrentPage()
{
    if (pageImages == null || pageImages.Length == 0) return;

    // Convert AnyBitmap to System.Drawing.Bitmap for PictureBox
    System.Drawing.Bitmap bitmap = pageImages[currentPageIndex].ToImage<System.Drawing.Bitmap>();
    pictureBoxPdf.Image?.Dispose();
    pictureBoxPdf.Image = bitmap;

    UpdateNavigationState();
}
Private Sub btnOpen_Click(sender As Object, e As EventArgs) Handles btnOpen.Click
    Using openDialog As New OpenFileDialog()
        openDialog.Filter = "PDF Files|*.pdf"
        openDialog.Title = "Select a PDF Document"

        If openDialog.ShowDialog() = DialogResult.OK Then
            LoadPdfDocument(openDialog.FileName)
        End If
    End Using
End Sub

Private Sub LoadPdfDocument(filePath As String)
    currentPdf?.Dispose()
    currentPdf = PdfDocument.FromFile(filePath)

    ' Render all pages as bitmaps at 150 DPI
    pageImages = currentPdf.ToBitmap(150)
    currentPageIndex = 0

    DisplayCurrentPage()
    UpdateNavigationState()
End Sub

Private Sub DisplayCurrentPage()
    If pageImages Is Nothing OrElse pageImages.Length = 0 Then Return

    ' Convert AnyBitmap to System.Drawing.Bitmap for PictureBox
    Dim bitmap As System.Drawing.Bitmap = pageImages(currentPageIndex).ToImage(Of System.Drawing.Bitmap)()
    pictureBoxPdf.Image?.Dispose()
    pictureBoxPdf.Image = bitmap

    UpdateNavigationState()
End Sub
$vbLabelText   $csharpLabel

Die Methode PdfDocument.FromFile lädt die PDF-Datei von der Festplatte in den Arbeitsspeicher. Der Aufruf von ToBitmap mit einem DPI-Parameter gibt ein Array von AnyBitmap-Objekten zurück, eines pro Seite. Der Typ AnyBitmap ist die formatunabhängige Bitmap-Klasse von IronPDF, und ToImage<System.Drawing.Bitmap>() konvertiert ihn in den Typ System.Drawing.Bitmap, den PictureBox.Image erwartet.

Beachten Sie, dass der vorherige PictureBox.Image verworfen wird, bevor ein neuer zugewiesen wird. Dies ist wichtig -- jedes Bitmap Objekt enthält nicht verwaltete GDI+ Ressourcen, und das Versäumnis, alte Bitmaps zu entsorgen, verursacht Speicherlecks in langlaufenden Anwendungen.

VB .NET PDF in PictureBox anzeigen: PDF-Seiten als Bilder in Windows Forms rendern: Bild 2 - Beispiel eines leeren Windows Forms, das sofort einsatzbereit ist

Nach dem Laden zeigt der Viewer sofort die erste Seite an. Das Label lblPageInfo wird aktualisiert und zeigt die aktuelle Seitenzahl und die Gesamtseitenzahl an.

VB .NET PDF in PictureBox anzeigen: PDF-Seiten als Bilder in Windows Forms rendern: Bild 3 - Beispiel einer im Viewer angezeigten PDF-Eingabe

Wie fügt man eine Seitennavigation zwischen PDF-Seiten ein?

Ein PDF-Viewer, der nur die erste Seite anzeigt, ist für mehrseitige Dokumente nicht brauchbar. Mithilfe der Navigationsschaltflächen können Benutzer in der gerenderten Seitenstruktur vor- und zurücknavigieren:

private void btnPrevious_Click(object sender, EventArgs e)
{
    if (currentPageIndex > 0)
    {
        currentPageIndex--;
        DisplayCurrentPage();
    }
}

private void btnNext_Click(object sender, EventArgs e)
{
    if (pageImages != null && currentPageIndex < pageImages.Length - 1)
    {
        currentPageIndex++;
        DisplayCurrentPage();
    }
}
private void btnPrevious_Click(object sender, EventArgs e)
{
    if (currentPageIndex > 0)
    {
        currentPageIndex--;
        DisplayCurrentPage();
    }
}

private void btnNext_Click(object sender, EventArgs e)
{
    if (pageImages != null && currentPageIndex < pageImages.Length - 1)
    {
        currentPageIndex++;
        DisplayCurrentPage();
    }
}
Private Sub btnPrevious_Click(sender As Object, e As EventArgs)
    If currentPageIndex > 0 Then
        currentPageIndex -= 1
        DisplayCurrentPage()
    End If
End Sub

Private Sub btnNext_Click(sender As Object, e As EventArgs)
    If pageImages IsNot Nothing AndAlso currentPageIndex < pageImages.Length - 1 Then
        currentPageIndex += 1
        DisplayCurrentPage()
    End If
End Sub
$vbLabelText   $csharpLabel

Jeder Klick-Handler passt den Wert von currentPageIndex um eins an und ruft DisplayCurrentPage auf, wodurch PictureBox.Image durch die entsprechende Bitmap ersetzt wird. Die Bereichsprüfungen (currentPageIndex > 0 und currentPageIndex < pageImages.Length - 1) verhindern Index-Out-of-Bounds-Ausnahmen. Zusätzlich deaktiviert UpdateNavigationState die Schaltflächen, wenn sie außerhalb des Bereichs liegen würden.

Bei größeren Dokumenten könnten Sie auch ein Eingabefeld für die Seitenzahl hinzufügen, in dem Benutzer direkt zu dieser Seite springen können, oder eine scrollbare Miniaturansicht am Rand. Das Array pageImages enthält bereits alle gerenderten Seiten. Um zu einer beliebigen Seite zu springen, muss man lediglich currentPageIndex auf den Zielindex setzen und DisplayCurrentPage aufrufen.

VB .NET PDF in PictureBox anzeigen: PDF-Seiten als Bilder in Windows Forms rendern: Bild 4 - Navigation zu Seite 2 mit unseren Schaltflächen

Wie kann ich PDF-Seiten aus dem Viewer speichern und drucken?

Dokumentenbetrachter müssen üblicherweise sowohl das Speichern der aktuellen Seite als Bilddatei als auch das Senden des Dokuments an einen Drucker unterstützen. IronPDF macht beides unkompliziert.

Speichern der aktuellen Seite als Bilddatei

Die aktuelle Seite ist bereits als System.Drawing.Bitmap in PictureBox.Image verfügbar. Speichern Sie die Datei unter Image.Save mit dem Format, das sich aus der vom Benutzer gewählten Dateierweiterung ergibt:

private void btnSave_Click(object sender, EventArgs e)
{
    if (pictureBoxPdf.Image == null) return;

    using SaveFileDialog saveDialog = new SaveFileDialog();
    saveDialog.Filter = "PNG Image|*.png|JPEG Image|*.jpg|TIFF Image|*.tif";
    saveDialog.Title = "Save Page As Image";
    saveDialog.FileName = $"page_{currentPageIndex + 1}";

    if (saveDialog.ShowDialog() == DialogResult.OK)
    {
        pictureBoxPdf.Image.Save(saveDialog.FileName);
    }
}
private void btnSave_Click(object sender, EventArgs e)
{
    if (pictureBoxPdf.Image == null) return;

    using SaveFileDialog saveDialog = new SaveFileDialog();
    saveDialog.Filter = "PNG Image|*.png|JPEG Image|*.jpg|TIFF Image|*.tif";
    saveDialog.Title = "Save Page As Image";
    saveDialog.FileName = $"page_{currentPageIndex + 1}";

    if (saveDialog.ShowDialog() == DialogResult.OK)
    {
        pictureBoxPdf.Image.Save(saveDialog.FileName);
    }
}
Private Sub btnSave_Click(sender As Object, e As EventArgs)
    If pictureBoxPdf.Image Is Nothing Then Return

    Using saveDialog As New SaveFileDialog()
        saveDialog.Filter = "PNG Image|*.png|JPEG Image|*.jpg|TIFF Image|*.tif"
        saveDialog.Title = "Save Page As Image"
        saveDialog.FileName = $"page_{currentPageIndex + 1}"

        If saveDialog.ShowDialog() = DialogResult.OK Then
            pictureBoxPdf.Image.Save(saveDialog.FileName)
        End If
    End Using
End Sub
$vbLabelText   $csharpLabel

Drucken des PDF-Dokuments

Zum Drucken verwenden Sie die Druckmethode von IronPDF, die die PDF-Datei direkt an die Windows-Druckinfrastruktur sendet – nicht die gerenderten Bilder, sondern den eigentlichen PDF-Inhalt. Dies führt zu einer wesentlich schärferen Ausgabe als beim Drucken einer Bitmap, da der Druckertreiber die Vektor-PDF-Anweisungen anstelle eines gerasterten Bildes empfängt:

private void btnPrint_Click(object sender, EventArgs e)
{
    if (currentPdf == null) return;

    using PrintDialog printDialog = new PrintDialog();
    if (printDialog.ShowDialog() == DialogResult.OK)
    {
        currentPdf.Print();
    }
}
private void btnPrint_Click(object sender, EventArgs e)
{
    if (currentPdf == null) return;

    using PrintDialog printDialog = new PrintDialog();
    if (printDialog.ShowDialog() == DialogResult.OK)
    {
        currentPdf.Print();
    }
}
Private Sub btnPrint_Click(sender As Object, e As EventArgs)
    If currentPdf Is Nothing Then Return

    Using printDialog As New PrintDialog()
        If printDialog.ShowDialog() = DialogResult.OK Then
            currentPdf.Print()
        End If
    End Using
End Sub
$vbLabelText   $csharpLabel

Mit dem Befehl PrintDialog kann der Benutzer den Zieldrucker auswählen und die Einstellungen konfigurieren, bevor der Druckvorgang beginnt. Der eigentliche Druckauftrag wird von der internen Rendering-Engine von IronPDF abgewickelt, die in den Windows-Druckspooler integriert ist.

VB .NET PDF in PictureBox anzeigen: PDF-Seiten als Bilder in Windows Forms rendern: Bild 5 - Beispiel für die Funktionsweise der Druckschaltfläche

Wie handhabt man Speicher und Datenfreigabe korrekt?

PDF-Dokumente und gerenderte Bitmaps verbrauchen erheblichen Speicherplatz, insbesondere bei höheren DPI-Einstellungen oder bei großen Dokumenten. Ohne ordnungsgemäße Entsorgung wird eine lange laufende Viewer-Anwendung nach und nach den verfügbaren Speicher erschöpfen.

Entsorgungs-Checkliste

Die wichtigsten Punkte für die korrekte Entsorgung gemäß diesem Muster sind:

  • Rufen Sie currentPdf?.Dispose() auf, bevor Sie ein neues Dokument laden. PdfDocument implementiert IDisposable und enthält nicht verwaltete Ressourcen.
  • Rufen Sie pictureBoxPdf.Image?.Dispose() auf, bevor Sie PictureBox.Image eine neue Bitmap zuweisen. Jede gerenderte Seite ist ein separates, nicht verwaltetes GDI+-Objekt.
  • Das Array pageImages enthält AnyBitmap Objekte. Wenn Sie von einer Seite wegnavigieren und die alte Bitmap nicht mehr benötigen, kümmert sich der Aufruf Dispose auf PictureBox.Image um die System.Drawing.Bitmap Kopie. Möglicherweise möchten Sie aber auch AnyBitmap Objekte im Array freigeben, wenn Sie ein neues Dokument laden.

Überschreiben Sie Form1.Dispose, um beim Schließen des Formulars aufzuräumen:

protected override void Dispose(bool disposing)
{
    if (disposing)
    {
        currentPdf?.Dispose();
        pictureBoxPdf.Image?.Dispose();

        if (pageImages != null)
        {
            foreach (var bitmap in pageImages)
                bitmap.Dispose();
        }

        components?.Dispose();
    }
    base.Dispose(disposing);
}
protected override void Dispose(bool disposing)
{
    if (disposing)
    {
        currentPdf?.Dispose();
        pictureBoxPdf.Image?.Dispose();

        if (pageImages != null)
        {
            foreach (var bitmap in pageImages)
                bitmap.Dispose();
        }

        components?.Dispose();
    }
    base.Dispose(disposing);
}
Protected Overrides Sub Dispose(disposing As Boolean)
    If disposing Then
        currentPdf?.Dispose()
        pictureBoxPdf.Image?.Dispose()

        If pageImages IsNot Nothing Then
            For Each bitmap In pageImages
                bitmap.Dispose()
            Next
        End If

        components?.Dispose()
    End If
    MyBase.Dispose(disposing)
End Sub
$vbLabelText   $csharpLabel

Dieses Muster stellt sicher, dass alle IronPDF und GDI+-Ressourcen beim Schließen des Formulars freigegeben werden, wodurch Speicherlecks in Produktionsumgebungen verhindert werden.

Wie kann man nur die sichtbare Seite anstatt aller Seiten rendern?

Bei großen PDFs mit Dutzenden oder Hunderten von Seiten kann das Vorab-Rendern aller Seiten mit ToBitmap langsam und speicherintensiv sein. Effizienter ist es, nur die vom Benutzer gewünschte Seite bedarfsgesteuert zu rendern.

Der RasterizeToImageFiles -Ansatz von IronPDF unterstützt das Rendern einzelner Seiten. Für die Nutzung im Arbeitsspeicher können Sie jedoch auch PageCount verwenden und jeweils eine Seite rendern:

private void DisplayPageLazy(int pageIndex)
{
    if (currentPdf == null) return;

    // Render only the requested page
    AnyBitmap[] singlePage = currentPdf.ToBitmap(150, pageIndex, pageIndex);

    System.Drawing.Bitmap bitmap = singlePage[0].ToImage<System.Drawing.Bitmap>();
    pictureBoxPdf.Image?.Dispose();
    pictureBoxPdf.Image = bitmap;

    singlePage[0].Dispose();

    lblPageInfo.Text = $"Page {pageIndex + 1} of {currentPdf.PageCount}";
    UpdateNavigationState();
}
private void DisplayPageLazy(int pageIndex)
{
    if (currentPdf == null) return;

    // Render only the requested page
    AnyBitmap[] singlePage = currentPdf.ToBitmap(150, pageIndex, pageIndex);

    System.Drawing.Bitmap bitmap = singlePage[0].ToImage<System.Drawing.Bitmap>();
    pictureBoxPdf.Image?.Dispose();
    pictureBoxPdf.Image = bitmap;

    singlePage[0].Dispose();

    lblPageInfo.Text = $"Page {pageIndex + 1} of {currentPdf.PageCount}";
    UpdateNavigationState();
}
Private Sub DisplayPageLazy(pageIndex As Integer)
    If currentPdf Is Nothing Then Return

    ' Render only the requested page
    Dim singlePage As AnyBitmap() = currentPdf.ToBitmap(150, pageIndex, pageIndex)

    Dim bitmap As System.Drawing.Bitmap = singlePage(0).ToImage(Of System.Drawing.Bitmap)()
    pictureBoxPdf.Image?.Dispose()
    pictureBoxPdf.Image = bitmap

    singlePage(0).Dispose()

    lblPageInfo.Text = $"Page {pageIndex + 1} of {currentPdf.PageCount}"
    UpdateNavigationState()
End Sub
$vbLabelText   $csharpLabel

Die Überladung ToBitmap(dpi, startPage, endPage) rendert einen bestimmten Seitenbereich. Durch die Verwendung desselben Index für startPage und endPage wird jeweils nur eine Seite gerendert. Dies reduziert die Renderzeit pro Navigation zugunsten eines geringeren maximalen Speicherverbrauchs, was insbesondere bei sehr großen Dokumenten von Vorteil sein kann.

Weitere Informationen zu den Bildausgabefunktionen von IronPDF finden Sie in der Dokumentation zur PDF-zu-Bild-Konvertierung und im Leitfaden zur PDF-Rasterisierung .

Ein praktischer PDF-Viewer sollte es dem Benutzer auch ermöglichen, in den Inhalt Zoom und Seiten zu drehen. Für den Zoom wird die an ToBitmap übergebene DPI dynamisch angepasst -- ein Feld currentDpi (beginnend bei 150) wird gespeichert, bei Klicks auf die Zoom Schaltfläche wird es um 50 erhöht oder verringert, und anschließend wird der Lazy Page Renderer mit der aktualisierten DPI aufgerufen. Höhere DPI-Werte erzeugen ein größeres Bild, das im Modus PictureBox in Zoom an die Steuereinheit angepasst wird. Begrenzen Sie den Bereich zwischen 72 und 400 DPI mit Math.Min und Math.Max, um entweder unscharfe Ausgaben im unteren Bereich oder übermäßigen Speicherverbrauch im oberen Bereich zu vermeiden.

Weitere Informationen zu erweiterten Rendering-Optionen, einschließlich der Extraktion von Text aus PDFs neben dem Bild-Rendering, finden Sie im PDF-Textextraktionsleitfaden und in der PDF-Bildextraktionsdokumentation .

Sie können auch die Unterstützung von IronPDF für das Zusammenführen von PDF-Dokumenten , das Hinzufügen von Wasserzeichen , das Drehen von PDF-Seiten und das Hinzufügen von Anmerkungen als Funktionen in einem erweiterten Viewer erkunden.

Wie wählt man eine PDF-Rendering-Bibliothek für Windows Forms aus?

Bei der Auswahl einer PDF-Rendering-Bibliothek für Windows Forms stehen Ihnen mehrere Alternativen zur Verfügung. Hier finden Sie einen kurzen Vergleich, der Ihnen bei der Bewertung der Optionen helfen soll:

PDF-Rendering-Optionen für Windows Forms-Anwendungen
Option Externe Abhängigkeit .NET-Support Kommerzielle Lizenz Bildausgabe
IronPDF Keine (in sich abgeschlossen) .NET 4.6.2 -- .NET 10 Yes (Testversion verfügbar) Hohe Wiedergabetreue bei konfigurierbarer DPI-Einstellung
Adobe Acrobat COM Adobe Reader/Acrobat installiert Nur Windows .NET Framework Adobe-Lizenz Abhängig von der installierten Version
PDFium.NET PDFium native Binärdateien .NET 5+ BSD (Open Source) Gute Qualität, manuelle DPI-Steuerung
GhostScript-Wrapper GhostScript installiert Beliebig (über CLI oder COM) AGPL oder kommerziell Gute Qualität, langsamere Darstellung

Der Hauptvorteil von IronPDF für Windows Forms-Anwendungsfälle besteht darin, dass es vollständig in sich geschlossen ist – es muss keine externe Software auf den Endbenutzerrechnern installiert werden. Auf der IronPDF -Lizenzseite finden Sie alle Details zu Preisen und der kostenlosen Testoption. Das Paket finden Sie auf NuGet zusammen mit Downloadstatistiken und Versionsverlauf. Für einen detaillierteren Einblick in die Definition der Seitenwiedergabe in der PDF-Spezifikation beschreibt der von der ISO veröffentlichte ISO 32000-2 PDF-Standard das Format, das IronPDF und andere Renderer implementieren müssen.

Für weiterführende Informationen zu den Funktionen von IronPDF, die über die Bildwiedergabe hinausgehen, bietet die IronPDF -Dokumentation unter anderem Anleitungen zur PDF-Erstellung, HTML-zu-PDF-Konvertierung, Formularverarbeitung und digitalen Signaturen.

Was sind Ihre nächsten Schritte?

Das in diesem Tutorial gezeigte Muster – Rendern mit ToBitmap, Anzeigen in PictureBox, Navigieren mit indexbasierten Steuerelementen – bietet Ihnen einen funktionalen, unabhängigen PDF-Viewer in Windows Forms. Von hier aus lohnt es sich, je nach den Anforderungen Ihrer Anwendung verschiedene Richtungen zu erkunden.

Für einen Viewer in Produktionsqualität empfiehlt sich das verzögerte Rendern von Seiten, um große Dokumente effizient zu verarbeiten, das Hinzufügen eines scrollbaren Miniaturansichtenfelds neben dem Hauptviewer sowie die Bereitstellung von Zoom Steuerelementen, die an den DPI-Parameter gekoppelt sind. Für Dokumentenmanagement-Anwendungen kombinieren Sie den Viewer mit den Textextraktions- und Formularfeldlesefunktionen von IronPDF, um durchsuchbare Dokumentenindizes zu erstellen.

Wenn Ihr Workflow das programmgesteuerte Generieren von PDFs vor deren Anzeige beinhaltet, unterstützt IronPDF auch die Konvertierung von HTML zu PDF sowie die Erstellung von PDFs von Grund auf , sodass dieselbe Bibliothek sowohl die Generierung als auch die Anzeige übernimmt.

Starten Sie eine kostenlose Testphase , um einen Lizenzschlüssel ohne Wasserzeichen für die Entwicklung zu erhalten, oder sehen Sie sich die vollständige API-Referenz an , um den kompletten Satz der auf PdfDocument, AnyBitmap und den zugehörigen Rendering-Klassen verfügbaren Methoden zu sehen. Die IronPDF Beispielgalerie enthält außerdem sofort lauffähige Codebeispiele, die gängige PDF-Aufgaben in C# abdecken.

Häufig gestellte Fragen

Wie kann ich ein PDF in einem Windows Forms PictureBox mit C# anzeigen?

Verwenden Sie die ToBitmap-Methode von IronPDF, um PDF-Seiten als AnyBitmap-Objekte zu rendern, konvertieren Sie jedes in ein System.Drawing.Bitmap und weisen Sie es PictureBox.Image zu.

Welche Methode bietet IronPDF zum Rendern von PDF-Seiten in C#?

IronPDF bietet die ToBitmap-Methode an, die PDF-Seiten als AnyBitmap-Objekte bei einstellbarer DPI rendert. Rufen Sie ToImage() auf, um sie für die Verwendung in PictureBox zu konvertieren.

Ist es möglich, PDF-Seiten in einer PictureBox zu navigieren?

Ja. Speichern Sie die gerenderten Seiten-Bitmaps in einem Array und erhöhen oder verringern Sie eine Seitenindexvariable. Weisen Sie bei jedem Navigationsklick das entsprechende Bitmap der PictureBox.Image zu.

Welche Vorteile hat die Verwendung von IronPDF für die Anzeige von PDF-Dateien in Windows Forms?

IronPDF ist vollständig eigenständig und erfordert keine externe Softwareinstallation. Es unterstützt konfigurierbares DPI-Rendering, Seitennavigation, Drucken und Textextraktion, ohne Abhängigkeit von Adobe Acrobat.

Kann IronPDF mehrseitige PDFs für die Anzeige in der PictureBox verarbeiten?

Ja. ToBitmap gibt ein AnyBitmap pro Seite zurück. Speichern Sie das Array und navigieren Sie per Index, oder verwenden Sie das Overload ToBitmap(dpi, startPage, endPage) für bedarfsgerechtes Rendering pro Seite.

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