Altbilgi içeriğine atla
IRONPDF KULLANARAK

Windows Formları PictureBox'ında PDF Sayfalarını Yansıtan | C# Kılavuzu

Windows Form uygulaması içinde PDF sayfaları görüntülemek, belge yönetim araçları, rapor görüntüleyiciler ve dosya önizleme yardımcıları için sıkça istenen bir gereksinimdir. Formunuzda zaten görüntü işleme özelliği olduğu için PictureBox kontrolü doğal bir adaydır. Sorun şu ki, PDF dosyaları görüntü değil -- herhangi bir standart görüntü kontrolünün onları görüntülemeden önce özel bir oluşturma gerekmektedir. Bu kılavuz, PDF sayfalarını bitmap görüntülerine dönüştürmek ve bunları bir PictureBox kontrolü içinde görüntülemek için IronPDF kullanımını, sayfa gezinme, yazdırma ve kaydetme desteğiyle birlikte ele alır.

Şimdi IronPDF ile başlayın.
green arrow pointer

PictureBox Neden Doğrudan PDF Dosyalarını Gösteremez?

Windows Forms'taki PictureBox kontrolü kesinlikle BMP, PNG, JPG, GIF, TIFF ve diğer bazıları gibi görüntü formatları için tasarlanmıştır. Bir PDF dosya yolunu PictureBox.ImageLocation'a atamaya veya bir PDF akışını PictureBox.Image'e yüklemeye çalıştığınızda, kontrol bir istisna fırlatır çünkü PDF ikili formatı tanınan bir görüntü formatı değildir.

Bazı yaklaşımlar, COM etkileşimi ile Adobe Acrobat'ı yerleştirerek bunu aşmaya çalışır. Bu, uygulamanızı çalıştıran her makinede Adobe Reader'ın kurulu olmasına katı bir bağımlılık yaratır -- yönetilmesi zor bir kurulum kısıtlaması. Ayrıca oluşturma motorunu kullanıcının sahip olduğu Acrobat sürümüne kilitler, bu da farklı makinelerde uyumluluk sorunlarına neden olabilir.

Daha temiz bir yaklaşım, çalışma zamanında PDF sayfalarını bitmap görüntülere dönüştüren bir .NET PDF kütüphanesi kullanmaktır. IronPDF, ToBitmap yöntemi aracılığıyla tam da bu yeteneği sunar; bu yöntem, bir PDF belgesinin her sayfasını bir AnyBitmap nesnesine dönüştürür. Bu nesneyi ardından standard bir System.Drawing.Bitmap'a dönüştürebilir ve doğrudan PictureBox.Image'e atayabilirsiniz. Adobe kurulumu gerekmez, COM kaydı gerektirmez ve uygulama pencerenize gömülü bir dış görüntüleyici olmaz.

Bu teknik, Windows'ta .NET Framework 4.6.2 ve üzeri ile .NET 6, 8 ve 10'da çalışır. IronPDF içindeki oluşturma motoru Chrome tabanlıdır, yani karmaşık düzenler, gömülü yazı tipleri ve karışık görüntü/metin içeriği olan PDF'ler için dahi yüksek sadakatli çıktı üretir.

Windows Forms Projesi İçin IronPDF Nasıl Kurulur?

Herhangi bir kod yazmadan önce projenize IronPDF eklemeniz gerekir. En hızlı yol NuGet Paket Yöneticisi CLI'sidir:

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

Alternatif olarak, Visual Studio Paket Yöneticisi Konsolu'nu kullanın:

Install-Package IronPdf
Install-Package IronPdf
SHELL

Kurulumdan sonra, paket referansının .csproj dosyanızda görünüp görünmediğini doğrulayın. IronPDF, .NET 6 ve sonrası için Windows'a yöneliktir, bu yüzden proje dosyanızda platformlar arası bir hedef kullanıyorsanız, Windows için bir <RuntimeIdentifiers> veya <Platforms> kısıtlaması ekleyin. Windows Forms projeleri için bu genellikle Visual Studio'da proje şablonunu oluşturduğunuzda zaten yapılandırılmıştır.

Üretim lisansı için, lisans anahtarınızı uygulamanızın başlangıç kodunda IronPDF çağrılarından önce yerleştirin:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Geliştirme ve değerlendirme sırasında, IronPDF deneme modunda çalışır ve oluşturulan çıktıya bir filigran ekler. ücretsiz deneme lisansı, test amaçları için filigranı kaldırır.

Windows Forms Proje Yapısı Nasıl Ayarlanır?

Visual Studio'yu açın ve .NET 10'u hedefleyen yeni bir Windows Forms App projesi oluşturun. Proje şablonu bir Form1.cs ve bir Program.cs giriş noktası oluşturur.

Tasarım yüzeyinde, formunuza aşağıdaki kontrolleri ekleyin:

  • Formun çoğunu kaplayan, SizeMode ayarı Zoom olan PictureBox adlı bir pictureBoxPdf
  • Metni "Open PDF" olan btnOpen adlı bir Button
  • Metni "Previous" olan btnPrevious adlı bir Button
  • Metni "Next" olan btnNext adlı bir Button
  • Metni "Save Page" olan btnSave adlı bir Button
  • Metni "Print" olan btnPrint adlı bir Button
  • Geçerli sayfa numarasını göstermek için lblPageInfo adlı bir Label

PictureBox üzerindeki SizeMode = Zoom ayarı, PDF sayfalarının orantıyı bozmadan kontrolü sığması için ölçeklenmesini sağlar. Bu önemlidir çünkü PDF sayfalarının boyutları farklıdır -- mektup, A4 ve yasal formatların tamamının farklı boyutları vardır ve izleyicinin bunların hepsini düzgün bir şekilde çalışması istenir.

Aşağıda PDF görüntüleyici uygulaması için tam form kodu bulunmaktadır. Bu, Program.cs'da üst düzey ifadeler kullanır ve tam görüntüleyici mantığını Form1.cs içine yerleştirir:

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

UpdateNavigationState yardımcı metodu, bir PDF yüklenip yüklenmediğine ve görüntüleyicinin şu an hangi sayfayı gösterdiğine bağlı olarak gezinme ve eylem düğmelerini devre dışı bırakır veya etkinleştirir. Bu, kullanıcıların bir belgeyi yüklemeden önce düğmelere tıkladığında boş referans hatalarını önler.

 VB .NET PictureBox'ta PDF Görüntüleme: Windows Forms'ta PDF Sayfalarını Görüntü Olarak İşleme: Resim 1 - IronPDF Yükleme

PDF Sayfalarını PictureBox İçine Nasıl Yükler ve Render Ederiz?

Bir PDF'yi yüklemek ve PictureBox içine işlemek iki adım içerir: belgeyi PdfDocument.FromFile ile yüklemek ve ardından tüm sayfaları bitmap nesneleri dizisine dönüştürmek için ToBitmap çağrısı yapmak.

PDF'den görüntüye dönüşüm metodu ToBitmap, PDF'deki her sayfayı istenen DPI'da işler. Daha yüksek DPI daha keskin görüntüler üretir ancak daha fazla bellek kullanır. Bir belge görüntüleyici için genellikle 150 DPI değeri iyi bir dengedir -- ekranda okunabilir, ancak büyük belgeler için gigabaytlarca RAM gerektirmez.

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

PdfDocument.FromFile metodu, PDF'yi diskten belleğe yükler. DPI parametresi ile ToBitmap çağrısı, her sayfa için bir AnyBitmap nesnesi döndüren bir dizi döndürür. AnyBitmap türü, IronPDF'nin format bağımsız bitmap sınıfıdır ve ToImage<System.Drawing.Bitmap>() bunu System.Drawing.Bitmap türüne dönüştürür ki PictureBox.Image bunu bekler.

Önceki PictureBox.Image'ın yenisi atanırken atıldığını fark edin. Bu önemlidir -- her Bitmap nesnesi yönetilmeyen GDI+ kaynakları tutar ve eski bit eşlemlerinin atılmaması uzun süre çalışan uygulamalarda bellek sızıntılarına neden olur.

 VB .NET PictureBox'ta PDF Görüntüleme: Windows Forms'ta PDF Sayfalarını Görüntü Olarak İşleme: Resim 2 - Kullanıma hazır boş Windows form örneği

Yüklendikten sonra izleyici, ilk sayfayı hemen görüntüler. lblPageInfo etiketi, geçerli sayfa numarasını ve toplam sayfa sayısını göstermek için güncellenir.

 VB .NET PictureBox'ta PDF Görüntüleme: Windows Forms'ta PDF Sayfalarını Görüntü Olarak İşleme: Resim 3 - Görüntüleyicimizde görüntülenen örnek giriş PDF'i

PDF Sayfaları Arasında Sayfa Gezinmesi Nasıl Eklenir?

Sadece ilk sayfayı gösteren bir PDF görüntüleyici, çok sayfalı belgeler için kullanışlı değildir. Gezinme düğmeleri, kullanıcıların render edilen sayfa dizisi boyunca ileriye ve geriye hareket etmelerine izin verir:

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

Her tıklama işlemcisi currentPageIndex'yi bir artırır ve DisplayCurrentPage çağrısını yapar; bu, PictureBox.Image'yi karşılık gelen bitmap ile değiştirir. Bounds kontrolleri (currentPageIndex > 0 ve currentPageIndex < pageImages.Length - 1) dizin dışı istisnalarını önler, ancak UpdateNavigationState ayrıca düğmeleri aralığın dışında olacakları zaman etkisiz hale getirir.

Daha büyük belgeler için kullanıcıların belirli bir sayfa numarası yazıp o sayfaya doğrudan atlayabileceği bir sayfa numarası giriş alanı veya yanda kaydırılabilir bir küçük resim çubuğu eklemeyi düşünmek isteyebilirsiniz. pageImages dizisi zaten tüm işlenmiş sayfaları içerir, bu yüzden keyfi bir sayfaya atlamak, currentPageIndex'yı hedef indekse ayarlamak ve DisplayCurrentPage çağrısı yapmak kadar basittir.

 VB .NET PictureBox'ta PDF Görüntüleme: Windows Forms'ta PDF Sayfalarını Görüntü Olarak İşleme: Resim 4 - Dügmelerimizle sayfa 2'ye gezinme

Görüntüleyiciden PDF Sayfalarını Kaydetme ve Yazdırma Nasıl Yapılır?

Belge görüntüleyiciler genellikle hem mevcut sayfayı bir görüntü dosyası olarak kaydetmeyi hem de belgeyi bir yazıcıya göndermeyi desteklemelidir. IronPDF her ikisini de kolaylaştırır.

Mevcut Sayfayı Görüntü Dosyası Olarak Kaydetme

Geçerli sayfa, zaten System.Drawing.Bitmap olarak PictureBox.Image içinde mevcuttur. Kullanıcının seçtiği dosya uzantısından türetilen format ile Image.Save kullanarak kaydedin:

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

PDF Belgesini Yazdırma

Yazdırma için, PDF'i doğrudan Windows yazdırma altyapısına gönderen IronPDF'in Yazdırma yöntemi kullanın -- render edilen görüntüler değil, gerçek PDF içeriği. Bu, bir bit eşlemi yazdırmaktan çok daha keskin çıktılar üretir çünkü yazıcı sürücüsü, rasterize edilmiş bir görüntü yerine vektör PDF talimatlarını alır:

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, kullanıcıya yazıcıyı seçme ve ayarlarını yazdırmaya başlamadan önce yapılandırma fırsatı verir. Gerçek yazdırma işi, Windows yazdırma sıraya alıcı ile entegre olan IronPDF'nin dahili işleme motoru tarafından ele alınır.

 VB .NET PictureBox'ta PDF Görüntüleme: Windows Forms'ta PDF Sayfalarını Görüntü Olarak İşleme: Resim 5 - İşlev gören yazdırma düğmesi örneği

Bellek ve Çıkarma Nasıl Doğru Bir Şekilde Yönetilir?

PDF belgeleri ve işlenmiş bit eşlemleri, özellikle yüksek DPI ayarlarında veya büyük belgelerde önemli bellek tüketir. Uygun bir çıkarma olmadan, uzun süre çalışan bir görüntüleyici uygulaması yavaş yavaş mevcut belleği tüketir.

Çıkarma Kontrol Listesi

Bu desen için doğru çıkarma anahtar noktaları şunlardır:

  • Yeni bir belge yüklemeden önce currentPdf?.Dispose() çağrısını yapın. PdfDocument IDisposable'i uygular ve yönetilmeyen kaynaklar tutar.
  • PictureBox.Image'ye yeni bir bit eşlemi atamadan önce pictureBoxPdf.Image?.Dispose() çağrısını yapın. Her işlenmiş sayfa, ayrı bir yönetilmeyen GDI+ nesnesidir.
  • AnyBitmap nesnelerini tutan pageImages dizisi. Bir sayfadan başka bir sayfaya geçtiğinizde ve eski bit eşlemi artık ihtiyaç duymadığınızda, Dispose çağrısı PictureBox.Image üzerindeki System.Drawing.Bitmap kopyayı ele alır, ancak yeni bir belge yüklenirken dizideki AnyBitmap nesnelerini de çıkarmak isteyebilirsiniz.

Form kapandığında temizlemek için Form1.Dispose'i geçersiz kılın:

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

Bu desen, tüm IronPDF ve GDI+ kaynaklarının form kapandığında serbest bırakılmasını sağlar ve bu, üretim dağıtımlarında bellek sızıntılarını önler.

Sadece Görünen Sayfa Nasıl İşlenir, Tüm Sayfalar Nasıl İşlenebilir?

Onlarca veya yüzlerce sayfadan oluşan büyük PDF'ler için, tüm sayfaları önceden ToBitmap ile işlemek yavaş ve bellek yoğun olabilir. Daha verimli bir yaklaşım, kullanıcının görmek istediği sayfayı talep üzerine işlemektir.

IronPDF'nin RasterizeToImageFiles yaklaşımı sayfa bazında işlemeyi destekler, ancak bellek içi kullanım için PageCount'i de kullanabilirsiniz ve aynı anda tek bir sayfa işleyebilirsiniz:

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

ToBitmap(dpi, startPage, endPage) aşırı yüklemesi belirli bir sayfa aralığını işler. Hem startPage hem de endPage için aynı indeksi geçerek, yalnızca bir sayfa her seferinde işlenir. Bu, çok büyük belgeler için değerli olabilecek şekilde daha düşük bellek kullanımına karşı navigasyon başına işleme süresini takas eder.

IronPDF'nin görüntü çıkış yetenekleri hakkında daha fazla bilgi için, PDF'den görüntüye dönüşüm belgeleri ve PDF rasterizasyon kılavuzuna bakın.

Kapsamlı bir PDF görüntüleyici, kullanıcıların içeriğe yakınlaştırma yapmasına ve sayfaları çevirmesine de izin vermelidir. Yakınlaştırma için, ToBitmap'ye geçirilen DPI'yı dinamik olarak ayarlayın -- bir currentDpi alanı depolayın (150'den başlayarak), kaydırma düğmesi tıklamalarında 50 artırın veya azaltın, ardından güncellenmiş DPI ile tembel sayfa işleyiciyi çağırın. Daha yüksek DPI, Zoom modundaki PictureBox kontrolü sığdıracak daha büyük bir görüntü üretir. Aralığı, düşük uçta bulanık çıktıyı veya yüksek uçta aşırı bellek tüketimini önlemek için 72 ile 400 DPI arasında Math.Min ve Math.Max kullanarak sınırlayın.

Diğer gelişmiş işleme seçenekleri için, PDF içinden metin çıkartmayı, görüntü işlemenin yanı sıra metin çıkartmayı içeren PDF metin çıkartma kılavuzuna ve PDF görsel çıkartma belgelerine bakın.

IronPDF'nin PDF belgelerini birleştirme, su nişanı ekleme, PDF sayfalarını döndürme ve açıklamalar ekleme desteğini daha gelişmiş bir görüntüleyicide özellikler olarak keşfedebilirsiniz.

Windows Forms için Bir PDF Görüntüleme Kütüphanesi Nasıl Seçilir?

Windows Forms için bir PDF işleme kütüphanesi seçerken, birkaç alternatif mevcuttur. İşte seçenekleri değerlendirmenize yardımcı olacak hızlı bir karşılaştırma:

Windows Forms Uygulamaları için PDF İşleme Seçenekleri
Seçenek Harici Bağımlılık .NET Destegi Ticari Lisans Görüntü Çıkışı
IronPDF Yok (kendine ait) .NET 4.6.2 -- .NET 10 Evet (deneme sürümü mevcut) Yüksek doğruluk, yapılandırılabilir DPI
Adobe Acrobat COM Adobe Reader/Acrobat yüklü Yalnızca Windows .NET Framework Adobe lisansı Yüklü sürüme bağlı
PDFium.NET PDFium yerel ikili dosyaları .NET 5+ BSD (açık kaynak) İyi kalite, manuel DPI kontrolü
GhostScript sarmalayıcıları GhostScript yüklü Herhangi (CLI veya COM aracılığıyla) AGPL veya ticari İyi kalite, daha yavaş işleme

IronPDF'nin Windows Forms kullanım senaryolarındaki ana avantajı, tamamen kendi içinde bulunmasıdır -- son kullanıcı makinelerine herhangi bir harici yazılım yüklemeye gerek yoktur. IronPDF lisanslama sayfası, fiyatlandırma ve ücretsiz deneme seçeneği hakkında tam bilgiye sahiptir. Paketi NuGet.org'da bulabilir, indirme istatistiklerini ve sürüm geçmişini görebilirsiniz. PDF spesifikasyonunun sayfa işleme tanımlarını daha derin bir şekilde incelemek için, ISO tarafından yayımlanan ISO 32000-2 PDF standardı, IronPDF ve diğer işleyicilerin uygulaması gereken formatı açıklar.

Görüntü işleme dışında IronPDF'nin yetenekleri hakkında ek bağlam için, IronPDF belgeleri ana sayfası PDF oluşturma, HTML'den PDF dönüşümü, form işleme, dijital imzalar ve daha pek çok konuyu ele alır.

Sıradaki Adımlarınız Neler?

Bu öğreticide gösterilen desen -- ToBitmap ile işleme, PictureBox'de görüntüleme, dizin bazlı kontrollerle gezinme -- size işlevsel, bağımlılıksız bir Windows Forms PDF görüntüleyici sunar. Buradan hareketle, uygulamanızın gereksinimlerine bağlı olarak keşfetmeye değer birkaç yön bulunmaktadır.

Üretim kalitesinde bir görüntüleyici için, büyük belgeleri verimli bir şekilde işlemek için tembel sayfa işleme kullanmayı, ana görüntüleyicinin yanında kaydırılabilir bir küçük panel eklemeyi ve DPI parametresiyle bağlı yakınlaştırma kontrolleri açmayı düşünün. Belge yönetimi uygulamaları için, görüntüleyiciyi IronPDF'nin metin çıkartma ve form alanı okuma yetenekleriyle birleştirerek aranabilir belge dizinleri oluşturmaya yönelik kullanın.

İş akışınızda PDF'leri programlı olarak oluşturmak ve ardından görüntülemek varsa, IronPDF ayrıca HTML'den PDF'ye dönüşüm ve sıfırdan PDF oluşturma özelliklerini de destekler, bu nedenle aynı kütüphane hem oluşturma hem de görüntüleme işlemlerini ele alır.

Ücretsiz bir deneme başlatın ve geliştirme için filigransız bir lisans anahtarı alın veya PdfDocument ve AnyBitmap üzerindeki tüm yöntemleri görmek için tam API referansını inceleyin. IronPDF örnek galerisinde C#'ta yaygın PDF görevlerini kapsayan çalıştırılabilir kod örnekleri de bulunmaktadır.

Sıkça Sorulan Sorular

C# içinde bir Windows Forms PictureBox'da PDF'yi nasıl gösterebilirim?

IronPDF'un ToBitmap yöntemini kullanarak PDF sayfalarını AnyBitmap nesneleri olarak işlemleyin, her birini System.Drawing.Bitmap'e dönüştürün ve PictureBox.Image'e atayın.

IronPDF, C#’ta PDF sayfalarını işlemek için hangi yöntemi sağlar?

IronPDF, PDF sayfalarını ayarlanabilir bir DPI’da AnyBitmap nesneleri olarak işleyen ToBitmap yöntemini sağlar. PictureBox kullanımı için ToImage()’i çağırın.

Bir PictureBox’da PDF sayfaları arasında gezinmek mümkün mü?

Evet. İşlenen sayfa bit eşlemlerini bir dizide saklayın ve bir sayfa indeks değişkenini artırın veya azaltın. Her gezinme tıklamasında ilgili bit eşlemi PictureBox.Image'e atayın.

Windows Forms'da PDF'leri göstermek için IronPDF kullanmanın avantajları nelerdir?

IronPDF tamamen kendi kendine yeterli ve harici bir yazılım kurulumuna ihtiyaç duymaz. Ayarlanabilir DPI işleme, sayfa gezinme, yazdırma ve metin çıkarma desteği sunar ve herhangi bir Adobe Acrobat bağımlılığı yoktur.

IronPDF, PictureBox'da gösterim için çok sayfalı PDF'leri işleyebilir mi?

Evet. ToBitmap her sayfa için bir AnyBitmap döndürür. Diziyi saklayın ve indeksle gezin, ya da sayfa başına isteğe bağlı işleme için ToBitmap(dpi, startPage, endPage) aşırı yüklemesini kullanın.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında lisans derecesine sahiptir (Carleton Üniversitesi) ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirme üzerine uzmanlaşmıştır. Kullanıcı dostu ve estetik açıdan hoş arayüzler tasarlamaya tutkuyla bağlı olan Curtis, modern çerç...

Daha Fazlasını Oku

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara