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.
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
Alternativ können Sie die Visual Studio-Paket-Manager-Konsole verwenden:
Install-Package IronPdf
Install-Package IronPdf
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"
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
PictureBoxmit dem NamenpictureBoxPdf, der den größten Teil des Formulars abdeckt, wobeiSizeModeaufZoomgesetzt ist. - Ein
Buttonmit dem NamenbtnOpenund dem Text "PDF öffnen" - Ein
Buttonmit dem NamenbtnPreviousund dem Text "Vorheriger" - Ein
Buttonmit dem NamenbtnNextund dem Text "Next" - Ein
Buttonmit dem NamenbtnSaveund dem Text "Seite speichern" - Ein
Buttonmit dem NamenbtnPrintund dem Text "Print" - Ein
LabelnamenslblPageInfozur 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
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.

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
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.

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.

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
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.

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
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
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.

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.PdfDocumentimplementiertIDisposableund enthält nicht verwaltete Ressourcen. - Rufen Sie
pictureBoxPdf.Image?.Dispose()auf, bevor SiePictureBox.Imageeine neue Bitmap zuweisen. Jede gerenderte Seite ist ein separates, nicht verwaltetes GDI+-Objekt. - Das Array
pageImagesenthältAnyBitmapObjekte. Wenn Sie von einer Seite wegnavigieren und die alte Bitmap nicht mehr benötigen, kümmert sich der AufrufDisposeaufPictureBox.Imageum dieSystem.Drawing.BitmapKopie. Möglicherweise möchten Sie aber auchAnyBitmapObjekte 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
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
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:
| 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
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.




