Przejdź do treści stopki
KORZYSTANIE Z IRONPDF

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
SHELL

Alternatywnie można użyć konsoli menedżera pakietów Visual Studio:

Install-Package IronPdf
Install-Package IronPdf
SHELL

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"
$vbLabelText   $csharpLabel

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:

  • PictureBox o nazwie pictureBoxPdf obejmujący większość formularza, z SizeMode ustawionym na Zoom
  • Button o nazwie btnOpen z tekstem "Otwórz PDF"
  • Button o nazwie btnPrevious z tekstem "Poprzedni"
  • Button o nazwie btnNext z tekstem "Dalej"
  • Button o nazwie btnSave z tekstem "Zapisz stronę"
  • Button o nazwie btnPrint z tekstem "PRINT"
  • Label o nazwie lblPageInfo do 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
$vbLabelText   $csharpLabel

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.

VB .NET Wyświetlanie plików PDF w PictureBox: Renderowanie stron PDF jako obrazów w Windows Forms: Obraz 1 — Instalacja IronPDF

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
$vbLabelText   $csharpLabel

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.

VB .NET Wyświetlanie plików PDF w PictureBox: Renderowanie stron PDF jako obrazów w Windows Forms: Obraz 2 – Przykładowy pusty formularz Windows Forms gotowy do użycia

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.

VB .NET Wyświetlanie plików PDF w PictureBox: Renderowanie stron PDF jako obrazów w Windows Forms: Obraz 3 – Przykładowy plik PDF wyświetlony w naszej przeglądarce

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
$vbLabelText   $csharpLabel

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.

VB .NET Wyświetlanie plików PDF w PictureBox: Renderowanie stron PDF jako obrazów w Windows Forms: Obraz 4 — Przejście do strony 2 za pomocą naszych przycisków

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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.

VB .NET Wyświetlanie plików PDF w PictureBox: Renderowanie stron PDF jako obrazów w Windows Forms: Obraz 5 – Przykład działania przycisku PRINT

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. PdfDocument implementuje IDisposable i przechowuje zasoby niezarządzane.
  • Wywołaj pictureBoxPdf.Image?.Dispose() przed przypisaniem nowej mapy bitowej do PictureBox.Image. Każda renderowana strona jest oddzielnym, niezarządzanym obiektem GDI+.
  • Tablica pageImages zawiera obiekty AnyBitmap. Gdy opuszczasz stronę i nie potrzebujesz już starej mapy bitowej, wywołanie Dispose na PictureBox.Image obsługuje kopię System.Drawing.Bitmap, ale możesz również chcieć usunąć obiekty AnyBitmap z 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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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:

Opcje renderowania plików PDF dla aplikacji Windows Forms
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(), aby skonwertowac dla uzycia z PictureBox.

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.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie