Renderuj strony PDF w PictureBox Windows Forms | Przewodnik C#
Wyświetlanie stron PDF w aplikacji Windows Forms jest częstym wymaganiem w przypadku narzędzi do zarządzania dokumentami, przeglądarek raportów i programów do podglądu plików. Kontrolka PictureBox jest naturalnym wyborem, ponieważ już obsługuje renderowanie obrazów w formularzu. Wyzwaniem jest to, że pliki PDF nie są obrazami — wymagają specjalnego renderowania, zanim jakikolwiek standardowy element sterujący obrazem będzie mógł je wyświetlić. W niniejszym przewodniku opisano, jak używać IronPDF do konwersji stron PDF na obrazy bitmapowe i wyświetlania ich w kontrolce PictureBox, wraz z obsługą nawigacji po stronach, drukowania i zapisywania.
!{--01001100010010010100001001010010010000010101001001011001010111110100011101000101010101000101111101010011010101000100000101010010010101000100010101000100010111110101011101001001010100010010000101111101010000010100100100111101000100010101010100001101010100010111110101010001010010010010010100000101001100010111110100001001001100010011110100001101001011--}
Dlaczego PictureBox nie może wyświetlać plików PDF bezpośrednio?
Kontrolka PictureBox w Windows Forms jest przeznaczona wyłącznie dla formatów obrazów: BMP, PNG, JPG, GIF, TIFF i kilku innych. Podczas próby przypisania ścieżki do pliku PDF do PictureBox.ImageLocation lub załadowania strumienia PDF do PictureBox.Image kontrolka zgłasza wyjątek, ponieważ format binarny PDF nie jest rozpoznawanym formatem obrazu.
Niektóre rozwiązania próbują obejść ten problem poprzez osadzenie programu Adobe Acrobat za pomocą interoperacyjności COM. Powoduje to silną zależność od zainstalowania programu Adobe Reader na każdym komputerze, na którym działa aplikacja — jest to ograniczenie wdrożeniowe, które trudno jest zarządzać w środowiskach Enterprise. Blokuje również silnik renderujący do wersji programu Acrobat, którą posiada użytkownik, co może powodować problemy z kompatybilnością na różnych komputerach.
Bardziej przejrzystym podejściem jest użycie biblioteki .NET PDF, która konwertuje strony PDF na obrazy bitmapowe w czasie wykonywania. IronPDF zapewnia dokładnie tę funkcję poprzez swoją metodę ToBitmap, która renderuje każdą stronę dokumentu PDF do obiektu AnyBitmap. Następnie można przekonwertować ten obiekt na standardowy System.Drawing.Bitmap i przypisać go bezpośrednio do PictureBox.Image. Nie wymaga instalacji Adobe, rejestracji COM ani zewnętrznej przeglądarki osadzonej w oknie aplikacji.
Technika ta działa w środowisku .NET Framework 4.6.2 i nowszych wersjach, a także w .NET 6, 8 i 10 w systemie Windows. Silnik renderujący w IronPDF jest oparty na przeglądarce Chrome, co oznacza, że zapewnia wysoką jakość wydruku nawet w przypadku plików PDF o złożonym układzie, zawierających osadzone czcionki oraz mieszaną zawartość graficzną i tekstową.
Jak zainstalować IronPDF w projekcie Windows Forms?
Przed napisaniem jakiegokolwiek kodu należy dodać IronPDF do projektu. Najszybszym sposobem jest użycie interfejsu CLI menedżera pakietów NuGet:
dotnet add package IronPdf
dotnet add package IronPdf
Alternatywnie można użyć konsoli menedżera pakietów Visual Studio:
Install-Package IronPdf
Install-Package IronPdf
Po instalacji sprawdź, czy odwołanie do pakietu pojawia się w pliku .csproj. IronPDF jest przeznaczony dla systemu Windows na platformie .NET 6 i nowszych, więc jeśli w pliku projektu używasz docelowej platformy wieloplatformowej, dodaj ograniczenie <RuntimeIdentifiers> lub <Platforms> dla systemu Windows. W przypadku projektów Windows Forms jest to zazwyczaj już skonfigurowane podczas tworzenia szablonu projektu w Visual Studio.
Aby uzyskać licencję na użytek produkcyjny, umieść klucz licencyjny w kodzie uruchamiającym aplikację przed jakimkolwiek wywołaniem IronPDF:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Podczas tworzenia i testowania IronPDF działa w trybie próbnym, co powoduje dodanie znaku wodnego do renderowanego wyniku. Bezpłatna licencja próbna usuwa znak wodny na potrzeby testowania.
Jak skonfigurować strukturę projektu Windows Forms?
Otwórz program Visual Studio i utwórz nowy projekt aplikacji Windows Forms przeznaczony dla platformy .NET 10. Szablon projektu generuje punkty wejścia Form1.cs oraz Program.cs.
Na powierzchni projektanta dodaj do formularza następujące kontrolki:
PictureBoxo nazwiepictureBoxPdfobejmujący większość formularza, zSizeModeustawionym naZoomButtono nazwiebtnOpenz tekstem "Otwórz PDF"Buttono nazwiebtnPreviousz tekstem "Poprzedni"Buttono nazwiebtnNextz tekstem "Dalej"Buttono nazwiebtnSavez tekstem "Zapisz stronę"Buttono nazwiebtnPrintz tekstem "PRINT"Labelo nazwielblPageInfodo wyświetlania numeru bieżącej strony
Ustawienie SizeMode = Zoom w PictureBox zapewnia, że strony PDF są skalowane proporcjonalnie, aby dopasować się do kontrolki bez zniekształcania proporcji. Jest to ważne, ponieważ strony PDF mają różne rozmiary — formaty Letter, A4 i Legal mają różne wymiary, a chcesz, aby przeglądarka obsługiwała je wszystkie bez problemów.
Poniżej znajduje się pełny kod formularza dla aplikacji do przeglądania plików PDF. Wykorzystuje to instrukcje najwyższego poziomu w Program.cs i umieszcza pełną logikę przeglądarki wewnątrz 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
Metoda pomocnicza UpdateNavigationState wyłącza lub włącza przyciski nawigacyjne i przyciski akcji w zależności od tego, czy plik PDF został załadowany oraz która strona jest aktualnie wyświetlana w przeglądarce. Zapobiega to błędom odwołania do wartości null, gdy użytkownicy klikają przyciski przed załadowaniem dokumentu.

Jak załadować i wyrenderować strony PDF w PictureBox?
Wczytanie pliku PDF i renderowanie go do PictureBox obejmuje dwa etapy: wczytanie dokumentu za pomocą PdfDocument.FromFile, a następnie wywołanie ToBitmap w celu przekształcenia wszystkich stron w tablicę obiektów bitmapowych.
Metoda konwersji pliku PDF na obraz ToBitmap renderuje każdą stronę w pliku PDF w żądanej rozdzielczości DPI. Wyższa rozdzielczość DPI zapewnia ostrzejszy obraz, ale zużywa więcej pamięci. Wartość 150 DPI stanowi zazwyczaj dobry kompromis dla przeglądarki dokumentów — zapewnia czytelność na ekranie bez konieczności wykorzystywania gigabajtów pamięci RAM w przypadku dużych dokumentów.
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
Metoda PdfDocument.FromFile ładuje plik PDF z dysku do pamięci. Wywołanie ToBitmap z parametrem DPI zwraca tablicę obiektów AnyBitmap, po jednym na stronę. Typ AnyBitmap to niezależna od formatu klasa bitmapowa IronPDF, a ToImage<System.Drawing.Bitmap>() konwertuje ją na typ System.Drawing.Bitmap, którego oczekuje PictureBox.Image.
Należy zwrócić uwagę, że poprzedni PictureBox.Image jest usuwany przed przypisaniem nowego. To ważne — każdy obiekt Bitmap przechowuje niezarządzane zasoby GDI+, a brak usunięcia starych map bitowych powoduje wycieki pamięci w długo działających aplikacjach.

Po załadowaniu przeglądarka natychmiast wyświetla pierwszą stronę. Etykieta lblPageInfo aktualizuje się, aby pokazać bieżący numer strony i całkowitą liczbę stron.

Jak dodać nawigację między stronami w pliku PDF?
Przeglądarka plików PDF, która wyświetla tylko pierwszą stronę, nie jest przydatna w przypadku dokumentów wielostronicowych. Przyciski nawigacyjne pozwalają użytkownikom poruszać się do przodu i do tyłu po wyświetlonej tablicy stron:
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
Każda procedura obsługi kliknięcia zmienia wartość currentPageIndex o jeden i wywołuje DisplayCurrentPage, co zamienia PictureBox.Image na odpowiednią mapę bitową. Kontrole granic (currentPageIndex > 0 i currentPageIndex < pageImages.Length - 1) zapobiegają wyjątkom indeksu poza granicami, chociaż UpdateNavigationState również wyłącza przyciski, gdy znajdują się poza zakresem.
W przypadku większych dokumentów warto rozważyć dodanie pola do wpisania numeru strony, w którym użytkownicy będą mogli wpisać konkretny numer strony, aby przejść bezpośrednio do niej, lub przewijalnego paska miniatur po boku. Tablica pageImages zawiera już wszystkie wyrenderowane strony, więc przejście do dowolnej strony polega po prostu na ustawieniu currentPageIndex na docelowy indeks i wywołaniu DisplayCurrentPage.

Jak zapisać i wydrukować strony PDF z przeglądarki?
Programy do przeglądania dokumentów zazwyczaj muszą umożliwiać zarówno zapisanie bieżącej strony jako pliku graficznego, jak i wysłanie dokumentu do drukarki. IronPDF sprawia, że obie te rzeczy są proste.
Zapisywanie bieżącej strony jako pliku graficznego
Obecna strona jest już dostępna jako System.Drawing.Bitmap w PictureBox.Image. Zapisz go przy użyciu Image.Save w formacie wynikającym z rozszerzenia pliku wybranego przez użytkownika:
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
Drukowanie dokumentu PDF
Do drukowania należy użyć metody PRINT biblioteki IronPDF, która wysyła plik PDF bezpośrednio do infrastruktury drukowania systemu Windows — nie renderowane obrazy, ale rzeczywistą zawartość pliku PDF. Daje to znacznie ostrzejszy wydruk niż drukowanie bitmapy, ponieważ sterownik drukarki otrzymuje instrukcje wektorowego pliku PDF zamiast obrazu rastrowanego:
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
PrintDialog pozwala użytkownikowi wybrać docelową drukarkę i skonfigurować ustawienia przed rozpoczęciem drukowania. Rzeczywiste zadanie drukowania jest obsługiwane przez wewnętrzny silnik renderujący IronPDF, który integruje się z buforem wydruku systemu Windows.

Jak prawidłowo zarządzać pamięcią i jej zwalnianiem?
Dokumenty PDF i renderowane mapy bitowe zajmują dużo pamięci, zwłaszcza przy wyższych ustawieniach DPI lub w przypadku dużych dokumentów. Bez odpowiedniego zarządzania pamięcią długo działająca aplikacja do przeglądania plików stopniowo wyczerpie dostępną pamięć.
Lista kontrolna utylizacji
Kluczowe punkty dotyczące poprawnego przetłumaczenia w tym wzorcu to:
- Wywołaj
currentPdf?.Dispose()przed załadowaniem nowego dokumentu.PdfDocumentimplementujeIDisposablei przechowuje zasoby niezarządzane. - Wywołaj
pictureBoxPdf.Image?.Dispose()przed przypisaniem nowej mapy bitowej doPictureBox.Image. Każda renderowana strona jest oddzielnym, niezarządzanym obiektem GDI+. - Tablica
pageImageszawiera obiektyAnyBitmap. Gdy opuszczasz stronę i nie potrzebujesz już starej mapy bitowej, wywołanieDisposenaPictureBox.Imageobsługuje kopięSystem.Drawing.Bitmap, ale możesz również chcieć usunąć obiektyAnyBitmapz tablicy podczas ładowania nowego dokumentu.
Zastąp Form1.Dispose, aby wyczyścić po zamknięciu formularza:
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
Ten wzorzec zapewnia, że wszystkie zasoby IronPDF i GDI+ są zwalniane po zamknięciu formularza, co zapobiega wyciekom pamięci w środowiskach produkcyjnych.
Jak wyświetlić tylko widoczną stronę zamiast wszystkich stron?
W przypadku dużych plików PDF zawierających dziesiątki lub setki stron renderowanie wszystkich stron z góry za pomocą ToBitmap może być powolne i wymagać dużej ilości pamięci. Bardziej wydajnym podejściem jest renderowanie tylko tej strony, którą użytkownik chce zobaczyć, na żądanie.
Podejście RasterizeToImageFiles firmy IronPDF obsługuje renderowanie poszczególnych stron, ale w przypadku wykorzystania w pamięci można również użyć PageCount i renderować pojedyncze strony:
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
Przeładowanie ToBitmap(dpi, startPage, endPage) renderuje określony zakres stron. Przekazując ten sam indeks zarówno dla startPage, jak i endPage, renderowana jest tylko jedna strona na raz. Pozwala to zamienić czas renderowania na każdą nawigację na niższe szczytowe zużycie pamięci, co może być opłacalne w przypadku bardzo dużych dokumentów.
Więcej informacji na temat możliwości IronPDF w zakresie generowania obrazów można znaleźć w dokumentacji dotyczącej konwersji plików PDF na obrazy oraz w przewodniku po rasteryzacji plików PDF.
Praktyczna przeglądarka plików PDF powinna również umożliwiać użytkownikom powiększanie treści i obracanie stron. W przypadku Zoom należy dynamicznie dostosowywać wartość DPI przekazaną do ToBitmap — zapisać pole currentDpi (z wartością początkową 150), zwiększać lub zmniejszać je o 50 przy kliknięciach przycisku Zoom, a następnie wywołać renderer strony typu lazy z zaktualizowaną wartością DPI. Wyższa rozdzielczość DPI powoduje wygenerowanie większego obrazu, który w trybie PictureBox w Zoom jest skalowany tak, aby dopasować się do kontrolki. Ogranicz zakres do wartości od 72 do 400 DPI, używając Math.Min i Math.Max, aby uniknąć rozmytego wydruku przy niskich wartościach lub nadmiernego zużycia pamięci przy wysokich wartościach.
Aby uzyskać informacje na temat bardziej zaawansowanych opcji renderowania, w tym wyodrębniania tekstu z plików PDF wraz z renderowaniem obrazów, zapoznaj się z przewodnikiem dotyczącym wyodrębniania tekstu z plików PDF oraz dokumentacją dotyczącą wyodrębniania obrazów z plików PDF.
Możesz również zapoznać się z obsługą IronPDF w zakresie łączenia dokumentów PDF, dodawania znaków wodnych, obracania stron PDF oraz dodawania adnotacji jako funkcji w bardziej zaawansowanej przeglądarce.
Jak wybrać bibliotekę renderowania plików PDF dla Windows Forms?
Przy wyborze biblioteki do renderowania plików PDF dla Windows Forms istnieje kilka alternatyw. Oto krótkie porównanie, które pomoże Ci ocenić dostępne opcje:
| Opcja | Zależności zewnętrzne | Wsparcie dla .NET | Licencja komercyjna | Wynik obrazu |
|---|---|---|---|---|
| IronPDF | Brak (samodzielny) | .NET 4.6.2 -- .NET 10 | Tak (dostępna wersja próbna) | Wysoka wierność przy konfigurowalnej rozdzielczości DPI |
| Adobe Acrobat COM | Zainstalowany program Adobe Reader/Acrobat | Tylko Windows .NET Framework | Licencja Adobe | W zależności od zainstalowanej wersji |
| PDFium.NET | Natywne pliki binarne PDFium | .NET 5+ | BSD (open source) | Dobra jakość, ręczna regulacja DPI |
| Owijki GhostScript | Zainstalowano GhostScript | Dowolne (poprzez CLI lub COM) | AGPL lub komercyjne | Dobra jakość, wolniejsze renderowanie |
Główną zaletą IronPDF w zastosowaniach z wykorzystaniem Windows Forms jest to, że jest to rozwiązanie w pełni samodzielne — nie wymaga instalacji żadnego zewnętrznego oprogramowania na komputerach użytkowników końcowych. Strona licencyjna IronPDF zawiera pełne informacje na temat cen i opcji bezpłatnej wersji próbnej. Pakiet można znaleźć na stronie NuGet.org wraz ze statystykami pobrań i historią wersji. Aby dokładniej zapoznać się z tym, jak specyfikacja PDF definiuje renderowanie stron, warto zajrzeć do normy ISO 32000-2 dotyczącej formatu PDF, opublikowanej przez ISO, która opisuje format, który muszą implementować IronPDF i inne renderery.
Aby uzyskać dodatkowe informacje na temat możliwości IronPDF wykraczających poza renderowanie obrazów, strona główna dokumentacji IronPDF obejmuje tworzenie plików PDF, konwersję HTML do PDF, obsługę formularzy, podpisy cyfrowe i wiele więcej.
Jakie są Twoje kolejne kroki?
Schemat przedstawiony w tym samouczku — renderowanie za pomocą ToBitmap, wyświetlanie w PictureBox, nawigacja za pomocą elementów sterujących opartych na indeksie — zapewnia funkcjonalną, niezależną przeglądarkę plików PDF w Windows Forms. W zależności od wymagań aplikacji warto rozważyć kilka kierunków działania.
Aby uzyskać przeglądarkę o jakości produkcyjnej, warto rozważyć leniwe renderowanie stron w celu wydajnego obsługiwania dużych dokumentów, dodanie panelu miniatur z możliwością przewijania obok głównej przeglądarki oraz udostępnienie elementów sterujących Zoomem powiązanych z parametrem DPI. W przypadku aplikacji do zarządzania dokumentami połącz przeglądarkę z funkcjami wyodrębniania tekstu i odczytu pól formularzy IronPDF, aby tworzyć indeksy dokumentów z możliwością wyszukiwania.
Jeśli Twój proces pracy obejmuje programowe generowanie plików PDF przed ich wyświetleniem, IronPDF obsługuje również konwersję HTML do PDF oraz tworzenie plików PDF od podstaw, dzięki czemu ta sama biblioteka obsługuje zarówno generowanie, jak i przeglądanie.
Rozpocznij bezpłatną licencję probną, aby uzyskać klucz licencyjny bez znaku wodnego do celów programistycznych, lub zapoznaj się z pełną dokumentacją API, aby zobaczyć kompletny zestaw metod dostępnych w PdfDocument, AnyBitmap oraz klasach renderujących. Galeria przykładów IronPDF zawiera również gotowe do uruchomienia fragmenty kodu obejmujące typowe zadania związane z plikami PDF w języku C#.
Często Zadawane Pytania
Jak moge wyswietlic PDF w PictureBox Windows Forms za pomoca C#?
Uzyj metody ToBitmap z IronPDF, aby renderowac strony PDF jako obiekty AnyBitmap, przekonwertuj kazdy na System.Drawing.Bitmap i przypisz do PictureBox.Image.
Jaka metode oferuje IronPDF do renderowania stron PDF w C#?
IronPDF oferuje metode ToBitmap, ktora renderuje strony PDF jako obiekty AnyBitmap przy konfigurowalnym DPI. Wywolaj ToImage
Czy mozna nawigowac po stronach PDF w PictureBox?
Tak. Przechowuj wyrenderowane bitmapy stron w tablicy i inkrementuj lub dekrementuj zmienna indeksu strony. Przypisz odpowiednia bitmape do PictureBox.Image przy kazdym kliknieciu nawigacji.
Jakie sa zalety uzywania IronPDF do wyswietlania PDF w Windows Forms?
IronPDF jest w pelni samodzielny i nie wymaga instalacji zewnetrznego oprogramowania. Obsluguje konfigurowalne renderowanie DPI, nawigacje po stronach, drukowanie i ekstrakcje tekstu bez jakiejkolwiek zaleznosci od Adobe Acrobat.
Czy IronPDF moze obsluzyc wielostronicowe PDF do wyswietlenia w PictureBox?
Tak. ToBitmap zwraca jeden AnyBitmap na strone. Przechowuj tablice i nawiguj po indeksie lub uzyj przeciążenia ToBitmap(dpi, startPage, endPage) dla renderowania na żądanie.




