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.
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
Alternatif olarak, Visual Studio Paket Yöneticisi Konsolu'nu kullanın:
Install-Package IronPdf
Install-Package IronPdf
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"
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,
SizeModeayarıZoomolanPictureBoxadlı birpictureBoxPdf - Metni "Open PDF" olan
btnOpenadlı birButton - Metni "Previous" olan
btnPreviousadlı birButton - Metni "Next" olan
btnNextadlı birButton - Metni "Save Page" olan
btnSaveadlı birButton - Metni "Print" olan
btnPrintadlı birButton - Geçerli sayfa numarasını göstermek için
lblPageInfoadlı birLabel
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
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.

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
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.

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.

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
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.

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
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
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.

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.PdfDocumentIDisposable'i uygular ve yönetilmeyen kaynaklar tutar. PictureBox.Image'ye yeni bir bit eşlemi atamadan öncepictureBoxPdf.Image?.Dispose()çağrısını yapın. Her işlenmiş sayfa, ayrı bir yönetilmeyen GDI+ nesnesidir.AnyBitmapnesnelerini tutanpageImagesdizisi. 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üzerindekiSystem.Drawing.Bitmapkopyayı ele alır, ancak yeni bir belge yüklenirken dizidekiAnyBitmapnesnelerini 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
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
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:
| 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
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.




