Wie man PDF zu TIFF in VB.NET konvertiert
Die Anzeige von PDF-Seiten innerhalb einer Windows Forms-Anwendung ist eine häufige Anforderung für Dokumentenmanagement-Tools, Berichtsanzeigeprogramme und Dateivorschau-Dienstprogramme. Die PictureBox Steuerung ist ein natürlicher Kandidat, weil sie bereits die Bildwiedergabe in Ihrem Formular handhabt. 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 Sie IronPDF verwenden, um PDF-Seiten in Bitmap-Bilder zu konvertieren und sie innerhalb einer PictureBox Steuerung anzuzeigen, zusammen mit Seiten-Navigation, Druck- und Speicherunterstützung.
Warum kann PictureBox PDF-Dateien nicht direkt anzeigen?
Die PictureBox-Steuerung in Windows Forms ist strikt für Bildformate ausgelegt: BMP, PNG, JPG, GIF, TIFF und einige andere. Wenn Sie versuchen, einen PDF-Dateipfad an PictureBox.ImageLocation zuzuweisen oder einen PDF-Stream in PictureBox.Image zu laden, wirft die Steuerung eine Ausnahme, weil das PDF-Binärformat 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.
Ein saubererer Ansatz ist die Verwendung einer .NET PDF-Bibliothek, die PDF-Seiten zur Laufzeit in Bitmap-Bilder umwandelt. IronPDF bietet genau diese Möglichkeit durch seine ToBitmap Methode, welche jede Seite eines PDF-Dokuments in ein AnyBitmap Objekt rendert. Sie können dann dieses Objekt in einen standardmäßigen System.Drawing.Bitmap umwandeln und direkt an 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
Alternativ können Sie die Visual Studio-Paket-Manager-Konsole verwenden:
Install-Package IronPdf
Nach der Installation bestätigen Sie, dass der Paketverweis in Ihrer .csproj Datei erscheint. IronPDF zielt auf Windows ab .NET 6 und höher, also wenn Sie ein plattformübergreifendes Ziel in Ihrer Projektdatei verwenden, fügen Sie eine <RuntimeIdentifiers> oder <Platforms> Einschrä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. Das Projekt-Template generiert ein Form1.cs und einen Program.cs Einstiegspunkt.
Fügen Sie auf der Designeroberfläche die folgenden Steuerelemente zu Ihrem Formular hinzu:
- Eine
PictureBoxnamenspictureBoxPdf, die den größten Teil des Formulars abdeckt, mitSizeModeaufZoomgesetzt - Ein
ButtonnamensbtnOpenmit dem Text "Open PDF" - Ein
ButtonnamensbtnPreviousmit dem Text "Previous" - Ein
ButtonnamensbtnNextmit dem Text "Next" - Ein
ButtonnamensbtnSavemit dem Text "Save Page" - Ein
ButtonnamensbtnPrintmit dem Text "Print" - Ein
LabelnamenslblPageInfozur Anzeige der aktuellen Seitennummer
Die SizeMode = Zoom Einstellung auf der PictureBox sorgt dafür, dass PDF-Seiten proportional skaliert werden, um in die Steuerung 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. Dies nutzt Top-Level-Anweisungen in Program.cs und setzt die gesamte Viewer-Logik in Form1.cs:
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 UpdateNavigationState Hilfsmethode deaktiviert oder aktiviert Navigations- und Aktionsschaltflächen basierend darauf, ob ein PDF geladen wurde und welche Seite der Viewer derzeit 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 eines PDFs und das Rendern in die PictureBox erfordert zwei Schritte: Laden des Dokuments mit PdfDocument.FromFile und dann Aufruf von ToBitmap, um alle Seiten in ein Array von Bitmap-Objekten zu konvertieren.
Die PDF-zu-Bild-Konvertierung Methode ToBitmap rendert jede Seite im PDF mit der gewünschten DPI. 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 PdfDocument.FromFile Methode lädt das PDF von der Festplatte in den Speicher. Der Aufruf von ToBitmap mit einem DPI-Parameter gibt ein Array von AnyBitmap Objekten zurück, eines pro Seite. Der AnyBitmap Typ ist IronPDF's formatspezifische Bitmap-Klasse, und ToImage<System.Drawing.Bitmap>() konvertiert sie in den System.Drawing.Bitmap Typ, den PictureBox.Image erwartet.
Beachten Sie, dass der vorherige PictureBox.Image vor der Zuweisung eines neuen aufgelöst wird. Dies ist wichtig -- jedes Bitmap Objekt hält nicht verwaltete GDI+ Ressourcen und das Unterlassen der Auflösung alter Bitmaps verursacht Speicherlecks in langlaufenden Anwendungen.

Nach dem Laden zeigt der Viewer sofort die erste Seite an. Das lblPageInfo Label wird aktualisiert, um die aktuelle Seitennummer und die Gesamtanzahl der Seiten anzuzeigen.

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 die currentPageIndex um eins an und ruft DisplayCurrentPage auf, welches die PictureBox.Image auf das entsprechende Bitmap wechselt. Die Bereichsüberprüfungen (currentPageIndex > 0 und currentPageIndex < pageImages.Length - 1) verhindern Index-überlauf, obwohl UpdateNavigationState auch die Schaltflächen deaktiviert, wenn sie außerhalb des Bereichs wären.
Für größere Dokumente könnten Sie auch in Betracht ziehen, ein Eingabefeld für die Seitennummer hinzuzufügen, in dem Benutzer eine bestimmte Seitennummer eingeben können, um direkt zu dieser Seite zu springen, oder einen scrollbaren Thumbnail-Streifen an der Seite hinzuzufügen. Das pageImages Array enthält bereits alle gerenderten Seiten, daher ist das Springen zu einer beliebigen Seite einfach eine Frage des Setzens von currentPageIndex auf den Zielindex und Aufruf von DisplayCurrentPage.

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 es mit Image.Save, wobei das Format aus der vom Benutzer gewählten Dateierweiterung abgeleitet wird:
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
Die PrintDialog ermöglicht dem Benutzer die Auswahl des Ziel-Druckers und die Konfiguration der Einstellungen, bevor der Druck 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 hält nicht verwaltete Ressourcen. - Rufen Sie
pictureBoxPdf.Image?.Dispose()auf, bevor Sie ein neues Bitmap anPictureBox.Imagezuweisen. Jede gerenderte Seite ist ein separates, nicht verwaltetes GDI+-Objekt. - Das
pageImagesArray hältAnyBitmapObjekte. Wenn Sie von einer Seite weg navigieren und das alte Bitmap nicht mehr benötigen, kümmert sich derDisposeAnruf auf demPictureBox.Imageum dieSystem.Drawing.BitmapKopie, aber Sie möchten möglicherweise auchAnyBitmapObjekte im Array auflösen, wenn Sie ein neues Dokument laden.
Überschreiben Sie Form1.Dispose, um aufzuräumen, wenn das Formular geschlossen wird:
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?
Für große PDFs mit Dutzenden oder Hunderten von Seiten kann das Rendern aller Seiten im Voraus mit ToBitmap langsam und speicherintensiv sein. Ein effizienterer Ansatz ist es, nur die Seite zu rendern, die der Benutzer sehen möchte, auf Abruf.
IronPDF's RasterizeToImageFiles Ansatz unterstützt das rendereinzelseitige Rendering, aber für die Nutzung im Speicher können Sie auch PageCount verwenden und eine einzelne Seite pro Sitzung 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
Der ToBitmap(dpi, startPage, endPage) Overload rendert einen bestimmten Seitenbereich. Indem Sie den gleichen Index für beide startPage und endPage übergeben, wird jeweils nur eine Seite gerendert. Dies tauscht die Rendering-Zeit pro Navigation für einen niedrigeren Spitzen-Speicherverbrauch, was sich bei sehr großen Dokumenten lohnen 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 das Zoomen passen Sie die zu ToBitmap übergebene DPI dynamisch an -- speichern Sie ein currentDpi Feld (beginnend bei 150), erhöhen oder verringern Sie es um 50 bei Klicks auf die Zoomtaste, und rufen Sie den Lazy-Page-Renderer mit der aktualisierten DPI auf. Eine höhere DPI erzeugt ein größeres Bild, das die PictureBox im Zoom Modus zur Anpassung an die Steuerung skaliert. Begrenzen Sie den Bereich zwischen 72 und 400 DPI mit Math.Min und Math.Max, um entweder unscharfe Ausgaben am unteren Ende zu vermeiden oder übermäßigen Speicherverbrauch am oberen Ende.
Weitere Informationen zu erweiterten Rendering-T>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 T>Optionen helfen soll:
| T>Option | Externe Abhängigkeit | .NET-Support | Kommerzielle Lizenz | Bildausgabe |
|---|---|---|---|---|
| IronPDF | Keine (in sich abgeschlossen) | .NET 4.6.2 -- .NET 10 | Ja (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 -- mit ToBitmap rendern, in PictureBox anzeigen, mit indexbasierten Steuerelementen navigieren -- bietet Ihnen einen funktionalen, abhängigkeitsfreien 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 Testversion, um einen wasserzeichenfreien Lizenzschlüssel für die Entwicklung zu erhalten, oder überprüfen Sie die vollständige API-Referenz, um die vollständige Methodenliste zu sehen, die auf PdfDocument, AnyBitmap und den unterstützenden Rendering-Klassen verfügbar ist. 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.

