Jak przekonwertować PDF na TIFF w VB.NET
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. Kontrola PictureBox jest naturalnym kandydatem, poniewaz juz obsluguje renderowanie obrazow w twoim 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ć. Ten przewodnik przeprowadzi przez uzycie IronPDF do konwersji stron PDF na obrazy bitmapowe i ich wyswietlanie wewnatrz kontroli PictureBox, wraz z obsluga nawigacji po stronach, drukowania i zapisywania.
Dlaczego PictureBox nie może wyświetlać plików PDF bezpośrednio?
Kontrola PictureBox w Windows Forms jest zaprojektowana wylacznie dla formatow obrazow: BMP, PNG, JPG, GIF, TIFF oraz kilku innych. Gdy probujesz przypisac sciezke pliku PDF do PictureBox.ImageLocation lub zaladowac strumien PDF do PictureBox.Image, kontrolka wyrzuci wyjatek, poniewaz binarny format 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.
Czystsze podejscie to uzycie biblioteki .NET do PDF, ktora konwertuje strony PDF na obrazy bitmapowe w czasie rzeczywistym. IronPDF zapewnia dokladnie taka mozliwosc poprzez metode ToBitmap, ktora renderuje kazda strone dokumentu PDF na obiekt AnyBitmap. Mozesz nastepnie przekonwertowac ten obiekt na standardowy System.Drawing.Bitmap i przypisac go bezposrednio 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
Alternatywnie można użyć konsoli menedżera pakietów Visual Studio:
Install-Package IronPdf
Po instalacji, potwierdz, ze odniesienie do pakietu pojawia sie w pliku .csproj. IronPDF jest przeznaczony dla Windows w .NET 6 i nowszych, wiec jesli uzywasz multiplatformowego celu w pliku projektu, dodaj ograniczenie <RuntimeIdentifiers> lub <Platforms> dla 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. Bezplatna licencja próbna usuwa znak wodny na potrzeby testowania.
Jak skonfigurować strukturę projektu Windows Forms?
Otworz Visual Studio i utworz nowy projekt aplikacji formularzy Windows skierowany na .NET 10. Szablon projektu generuje Form1.cs oraz punkt wejscia Program.cs.
Na powierzchni projektanta dodaj do formularza następujące kontrolki:
PictureBoxo nazwiepictureBoxPdfzajmujacy wiekszosc formularza, zSizeModeustawionym naZoomButtono nazwiebtnOpenz tekstem "Open PDF"Buttono nazwiebtnPreviousz tekstem "Previous"Buttono nazwiebtnNextz tekstem "Next"Buttono nazwiebtnSavez tekstem "Save Page"Buttono nazwiebtnPrintz tekstem "Print"Labelo nazwielblPageInfodo wyswietlania numeru obecnej strony
Ustawienie SizeMode = Zoom na PictureBox zapewnia, ze strony PDF skalowane sa proporcjonalnie, aby dopasowac sie do kontroli bez znieksztalcenia wspolczynnika 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. To uzywa deklaracji na najwyzszym poziomie w Program.cs i umieszcza cala logike przegladarki wewnatrz 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 wylacza lub wlacza przyciski nawigacji i akcji w zaleznosci od tego, czy PDF zostal zaladowany i ktora strone aktualnie pokazuje przegladarka. 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?
Ladowanie PDF i jego renderowanie do PictureBox obejmuje dwa kroki: ladowanie dokumentu za pomoca PdfDocument.FromFile, a nastepnie wywolanie ToBitmap w celu konwersji wszystkich stron na tablice obiektow bitmapowych.
Metoda konwersji PDF na obraz ToBitmap renderuje kazda strone PDF przy zadanym 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 laduje PDF z dysku do pamieci. Wywolanie ToBitmap z parametrem DPI zwraca tablice obiektow AnyBitmap, po jednym na strone. Typ AnyBitmap to bezformatowa klasa bitmapowa IronPDF, a ToImage<System.Drawing.Bitmap>() konwertuje go do typu System.Drawing.Bitmap, ktorego oczekuje PictureBox.Image.
Zauwaz, ze poprzedni PictureBox.Image jest usuwany przed przypisaniem nowego. To jest wazne -- kazdy obiekt Bitmap przechowuje niezarzadzane zasoby GDI+, a zaniedbanie usuniecia starych bitmap generuje wycieki pamieci w aplikacjach dzialajacych dlugo.

Po załadowaniu przeglądarka natychmiast wyświetla pierwszą stronę. Etykieta lblPageInfo aktualizuje sie, aby pokazac numer obecnej strony i liczbe wszystkich 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
Kazde obslugiwane klikniecie zmienia currentPageIndex o jeden i wywoluje DisplayCurrentPage, ktore przelacza PictureBox.Image na odpowiednia bitmape. Sprawdzenia zakresu (currentPageIndex > 0 i currentPageIndex < pageImages.Length - 1) zapobiegaja wyrzucaniu wyjatkow o przekroczeniu zakresu indeksu, chociaz UpdateNavigationState rowniez wylacza przyciski, gdy sa poza zakresem.
Dla wiekszych dokumentow, warto takze rozwazyc dodanie pola wprowadzania numeru strony, gdzie uzytkownicy moga wpisac konkretny numer strony, aby przejsc bezposrednio do tej strony lub pasek miniatur z boku. Tablica pageImages juz zawiera wszystkie renderowane strony, wiec przeskok do dowolnej strony to tylko kwestia ustawienia currentPageIndex na zaintersowany indeks i wywolania 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 juz dostepna jako System.Drawing.Bitmap w PictureBox.Image. Zapisz to uzywajac Image.Save z formatem wywiedzionym z rozszerzenia pliku wybranego przez uzytkownika:
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
Kontrola PrintDialog pozwala uzytkownikowi wybrac docelowa drukarke i skonfigurowac ustawienia przed rozpoczeciem 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:
- Wywolaj
currentPdf?.Dispose()przed zaladowaniem nowego dokumentu.PdfDocumentimplementujeIDisposablei przechowuje niezarzadzane zasoby. - Wywolaj
pictureBoxPdf.Image?.Dispose()przed przypisaniem nowej bitmapy doPictureBox.Image. Każda renderowana strona jest oddzielnym, niezarządzanym obiektem GDI+. - Tablica
pageImagesprzechowuje obiektyAnyBitmap. Kiedy przechodzisz z jednej strony i nie potrzebujesz juz starej bitmapy, wywolanieDisposenaPictureBox.Imageobsługuje kopiowanieSystem.Drawing.Bitmap, ale mozesz rowniez chciec usunac obiektyAnyBitmapw tablicy podczas ladowania nowego dokumentu.
Zastap Form1.Dispose, aby posprzatac, gdy formularz sie zamyka:
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?
Dla duzych PDFow z dziesiatkami lub setkami stron, renderowanie wszystkich stron na raz za pomoca ToBitmap moze byc wolne i kosztowne pamieciowo. Bardziej efektywne podejscie to renderowanie tylko strony, ktora uzytkownik chce zobaczyc, na zadanie.
Podejscie RasterizeToImageFiles IronPDF wspiera renderowanie pojedynczej strony, ale dla zastosowan w pamieci mozesz takze uzyc PageCount i renderowac tylko jedna strone na raz:
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
Przeciazenie ToBitmap(dpi, startPage, endPage) renderuje okreslony zakres stron. Przekazujac ten sam indeks dla startPage i endPage, tylko jedna strona jest renderowana na raz. Taka zamiana czasu renderowania przy kazdej nawigacji na mniejsze zuzycie pamieci moze byc oplacalna przy bardzo duzych dokumentach.
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. Dla zoomu, dynamicznie dostosuj DPI przekazywane do ToBitmap -- przechowuj pole currentDpi (rozpocznij od 150), zwiekszaj lub zmniejszaj je o 50 przy kliknieciach przyciskow zoomu, a nastepnie wywolaj lenietego renderera stron z akualizowanym DPI. Wyższe DPI wytwarza większy obraz, ktory w trybie Zoom PictureBox skaluje do rozmiaru kontroli. Ogranicz zakres miedzy 72 a 400 DPI za pomocą Math.Min i Math.Max, aby uniknać rozmytego wyjscia przy nizszym koncu lub nadmiernego zuzycia pamieci przy wyzszym.
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?
Wzor przedstawiony w tym przewodniku -- renderowanie za pomoca ToBitmap, wyswietlanie w PictureBox, nawigacja za pomoca kontroli opartej na indeksie -- daje funkcjonalna, niezalezna od zalezności przegladarke 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.
Zacznij bezplatna probe, aby uzyskac klucz licencyjny wolny od znakow wodnych do rozwoju, lub przejrzyj pelna dokumentacje API, aby zobaczyc kompletny zestaw metod dostepnych na PdfDocument, AnyBitmap i wspierajace klasy renderujące. 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 mogę wyswietlic PDF w PictureBox Windows Forms za pomoca C#?
Uzyj metody ToBitmap z IronPDF, aby renderować 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, która renderuje strony PDF jako obiekty AnyBitmap przy konfigurowalnym DPI. Wywolaj ToImage
Czy można 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 używania IronPDF do wyswietlania PDF w Windows Forms?
IronPDF jest w pelni samodzielny i nie wymaga instalacji zewnetrznego oprogramowania. Obsługuje konfigurowalne renderowanie DPI, nawigacje po stronach, drukowanie i ekstrakcje tekstu bez jakiejkolwiek zależności od Adobe Acrobat.
Czy IronPDF może 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.

