如何在 VB.NET 中將 PDF 轉換為 TIFF
在 Windows Forms 應用程式中顯示 PDF 頁面是文件管理工具、報告檢視器和檔案預覽工具的常見需求。 PictureBox 控制項是一個自然的選擇,因為它已經能夠在您的表單中處理影像渲染。 挑戰在於 PDF 檔案不是影像 — 它們需要專門的渲染,才能由任何標準的影像控制項顯示出來。 本指南介紹如何使用 IronPDF 來將 PDF 頁面轉換為點陣圖影像,並在 PictureBox 控制項中顯示它們,並提供頁面導航、列印和儲存支援。
為什麼 PictureBox 不能直接顯示 PDF 檔案?
Windows Forms 中的 PictureBox 控制項 嚴格設計用於圖像格式:BMP、PNG、JPG、GIF、TIFF 和一些其他格式。 當您嘗試將 PDF 檔案路徑指派給 PictureBox.ImageLocation 或將 PDF 資料流載入 PictureBox.Image 時,控制項會拋出例外,因為 PDF 二進位格式不是已識別的影像格式。
一些方法試圖通過 COM 互操作嵌入 Adobe Acrobat 來規避這一點。這會產生一個硬性依賴,即需要在運行應用程式的每台機器上安裝 Adobe Reader,這在企業環境中很難管理。 它還會鎖定為使用者擁有的 Acrobat 版本的渲染引擎,這可能會導致不同機器之間的相容性問題。
一種更簡潔的方法是使用 .NET PDF 函式庫,該函式庫在運行時將 PDF 頁面轉換為點陣圖影像。IronPDF 通過其 ToBitmap 方法提供了這種能力,它將 PDF 文件的每一頁渲染為 AnyBitmap 物件。 然後您可以將該物件轉換為標準 System.Drawing.Bitmap,並直接指派給 PictureBox.Image。 不需要安裝 Adobe,無需 COM 註冊,也不需要在應用程式視窗中嵌入外部檢視器。
此技術適用於 .NET Framework 4.6.2 及以上版本,以及 Windows 上的 .NET 6、8 和 10。 IronPDF 內的渲染引擎是基於 Chrome 的,這意味著即使是具有複雜佈局、嵌入字體和混合影像/文字內容的 PDF 也能產生高保真輸出。
如何為 Windows Forms 專案安裝 IronPDF?
在編寫任何程式碼之前,您需要將 IronPDF 新增到您的專案中。 最快的方法是通過 NuGet 套件管理器 CLI:
dotnet add package IronPdf
或者,使用 Visual Studio 套件管理器控制台:
Install-Package IronPdf
安裝後,確認套件引用出現在您的 .csproj 檔案中。IronPDF 定位於 .NET 6 及更高版本的 Windows,因此如果您在專案檔案中使用跨平台目標,請為 Windows 新增 <RuntimeIdentifiers> 或 <Platforms> 限制。 對於 Windows Forms 專案,當您在 Visual Studio 中建立專案模板時,通常已經配置好這一點。
出於生產環境中的授權目的,請將您的授權金鑰放置在任何 IronPDF 調用之前的應用程式啟動程式碼中:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
在開發和評估期間,IronPDF 以試用模式運行,這會為渲染的輸出新增浮水印。 一個免費試用授權可移除浮水印以供測試。
如何設置 Windows Forms 專案結構?
打開 Visual Studio 並建立一個針對 .NET 10 的新的 Windows Forms 應用專案。專案模板會產生一個 Form1.cs 和一個 Program.cs 進入點。
在設計器表面上,將以下控制項新增到您的表單:
- 一個名為
pictureBoxPdf的PictureBox覆蓋大部分表單,將SizeMode設置為Zoom - 一個名為
btnOpen的Button,文字為"打開 PDF" - 一個名為
btnPrevious的Button,文字為"上一頁" - 一個名為
btnNext的Button,文字為"下一頁" - 一個名為
btnSave的Button,文字為"保存頁面" - 一個名為
btnPrint的Button,文字為"列印" - 一個名為
lblPageInfo的Label用於顯示當前頁碼
PictureBox 上的 SizeMode = Zoom 設置確保 PDF 頁面按比例縮放以適應控制項而不扭曲縱橫比。 這很重要,因為 PDF 頁面的大小不一樣——信紙、A4 和法律規格的尺寸都不相同,您希望檢視器能夠優雅地處理所有這些。
以下是 PDF 檢視器應用程式的完整表單程式碼。 這在 Program.cs 上使用頂級語句,並將完整的檢視器邏輯放在 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
由於使用者在載入文件之前單擊按鈕時會產生空引用錯誤,因此 UpdateNavigationState 幫助方法根據是否載入了 PDF 以及檢視器當前顯示的是哪一頁來禁用或啟用導航和操作按鈕。 這樣可防止在使用者在載入文件之前點擊按鈕時出現空引用錯誤。

如何將 PDF 頁面載入並渲染到 PictureBox?
對 PictureBox 載入 PDF 並將其渲染成 PictureBox 需要兩個步驟:使用 PdfDocument.FromFile 載入文件,然後調用 ToBitmap 將所有頁面轉換為點陣圖物件陣列。
PDF 到影像轉換 方法 ToBitmap 在所請求的 DPI 下渲染 PDF 的每一頁。 較高的 DPI 會生成更清晰的影像,但會使用更多的記憶體。 150 DPI 的值通常是一個好的平衡——在螢幕上可讀,而不需要對於大型文件所需的千兆字節 RAM。
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 方法將 PDF 從磁碟載入到記憶體中。 用 DPI 參數調用 ToBitmap 返回一個 AnyBitmap 物件的陣列,每頁一個。 AnyBitmap 型別是 IronPDF 的格式無關的點陣圖類,而 ToImage<System.Drawing.Bitmap>() 將其轉換為 System.Drawing.Bitmap 型別,PictureBox.Image 期望該型別。
請注意,在指派新 PictureBox.Image 之前,先釋放之前的 PictureBox.Image。 這很重要——每個 Bitmap 物件都持有非托管 GDI+ 資源,未能釋放舊的位圖會導致長期運行的應用程式中的記憶體洩漏。

載入後,檢視器會立即顯示第一頁。 lblPageInfo 標籤更新以顯示當前頁面號碼和總頁數。

如何在 PDF 頁面之間新增頁面導航?
PDF 檢視器僅顯示第一頁對於多頁文件來說無用。 導航按鈕允許使用者在渲染的頁面陣列中向前和向後移動:
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
每個點擊處理器將 currentPageIndex 調整一個,並調用 DisplayCurrentPage,它將 PictureBox.Image 切換到對應的位圖。邊界檢查(currentPageIndex > 0 和 currentPageIndex < pageImages.Length - 1)防止索引越界異常,雖然 UpdateNavigationState 也禁用當超出範圍時的按鈕。
對於較大的文件,您可能還想考慮新增一個頁碼輸入欄位,讓使用者可以鍵入特定頁碼以便直接跳轉到該頁面,或者側面可滾動縮略圖條。pageImages 陣列已經包含了所有渲染的頁面,因此跳轉到任意頁面只是設置 currentPageIndex 到目標索引並調用 DisplayCurrentPage 的問題。

如何從檢視器中保存和列印 PDF 頁面?
文件檢視器通常需要支援保存當前頁面為影像檔案和將文件送至列印機。 IronPDF 使這兩者都很簡單。
將當前頁面保存為影像檔案
當前頁面已經作為 System.Drawing.Bitmap 在 PictureBox.Image 中可用。 使用 Image.Save 保存它,格式由使用者選擇的文件擴展名推斷:
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 文件
對於列印,使用 IronPDF 的 列印方法,它將 PDF 直接發送到 Windows 列印基礎設施——不是渲染的圖像,而是實際的 PDF 內容。 這比列印點陣圖產生的輸出更清晰,因為列印機驅動程式接收到的是矢量 PDF 指令而不是光柵化影像:
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 允許使用者在列印開始之前選擇目標列印機並配置設置。 實際的列印工作由 IronPDF 的內部渲染引擎處理,該引擎與 Windows 列印緩衝系統整合。

如何正確處理記憶體和釋放?
尤其是在較高的 DPI 設置或大型文件中的 PDF 文件和渲染的點陣圖會消耗大量記憶體。 如果沒有正確的釋放,長期運行的檢視器應用程式將逐漸耗盡可用的記憶體。
釋放清單
此模式中正確釋放的關鍵點是:
- 在載入新文件之前,調用
currentPdf?.Dispose()。PdfDocument實作了IDisposable並持有非托管資源。 - 在將新位圖指派給
PictureBox.Image之前,調用pictureBoxPdf.Image?.Dispose()。 每個渲染的頁面都是獨立的非托管 GDI+ 物件。 pageImages陣列持有AnyBitmap物件。 當您從一個頁面導航到另一個頁面且不再需要舊的位圖時,Dispose調用PictureBox.Image處理System.Drawing.Bitmap複製,但當載入新文件時,您可能還希望釋放陣列中的AnyBitmap物件。
覆蓋 Form1.Dispose 當表單關閉時進行清理:
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
這種模式確保所有 IronPDF 和 GDI+ 資源在表單關閉時被釋放,在生產部署中防止記憶體洩漏。
如何僅渲染可見頁面而不是所有頁面?
對於具有數十或數百頁的大型 PDF,使用 ToBitmap 預先渲染所有頁面可能會很慢並且消耗大量記憶體。更有效的方法是按需僅渲染使用者想要查看的頁面。
IronPDF 的 RasterizeToImageFiles 方法支援每頁渲染,但對於記憶體中的使用情況,您也可以使用 PageCount 並一次渲染單個頁面:
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) 重載渲染特定範圍的頁面。 通過對 startPage 和 endPage 傳遞相同的索引,一次只渲染一個頁面。這為更低的最高記憶體使用量進行了每次導航渲染時間的權衡,這對於非常大的文件可能是值得的。
欲了解更多 IronPDF 的影像輸出功能,請參閱 PDF 到影像文件 和 PDF 光柵化指南。
一個實用的 PDF 檢視器還應允許使用者放大內容和旋轉頁面。 對於縮放,動態調整傳遞給 ToBitmap 的 DPI——儲存一個 currentDpi 欄位(從 150 開始),在縮放按鈕單擊時增加或減少 50,然後使用更新的 DPI 調用惰性頁面渲染器。 較高的 DPI 會生成更大的影像,PictureBox 在 Zoom 模式下將其縮放以適應控制項。 使用 Math.Min 和 Math.Max 將範圍限制在 72 到 400 DPI 之間,以避免在低端出現模糊輸出或在高端過度記憶體消耗。
欲了解更高級的渲染選項,包括從 PDF 中提取文字,請參閱 PDF 文字提取指南 和 PDF 圖像提取文件。
您還可以探索 IronPDF 對合併 PDF 文件、新增浮水印、旋轉 PDF 頁面和新增注釋功能的支援,以作為更高級檢視器中的功能。
如何為 Windows Forms 選擇 PDF 渲染庫?
在為 Windows Forms 選擇 PDF 渲染庫時,有幾種選擇方案。 這裡是一個快速比較,以幫助您評估選項:
| 選項 | 外部依賴 | .NET 支援 | 商業授權 | 影像輸出 |
|---|---|---|---|---|
| IronPDF | 無(自成一體) | .NET 4.6.2 — .NET 10 | 是(提供試用) | 高保真在可配置的 DPI |
| Adobe Acrobat COM | 已安裝 Adobe Reader/Acrobat | 僅限 Windows .NET Framework | Adobe 授權 | 取決於安裝的版本 |
| PDFium.NET | PDFium 原生二進位 | .NET 5+ | BSD(開源) | 質量不錯,手動 DPI 控制 |
| GhostScript 包裝器 | 已安裝 GhostScript | 任何(通過 CLI 或 COM) | AGPL 或商業 | 質量不錯,渲染較慢 |
IronPDF 對於 Windows Forms 使用案例的主要優勢是它完全自成一體——不需要在最終使用者的計算機上安裝外部軟體。 IronPDF 授權頁提供了關於定價和免費試用選項的完整詳細資訊。 您可以在 NuGet.org 上找到此套件,以及下載統計和版本歷史記錄。 若想深入了解 PDF 規範如何定義頁面渲染,ISO 發佈的 ISO 32000-2 PDF 標準 描述了 IronPDF 和其他渲染器必須實作的格式。
了解有關 IronPDF 在圖像渲染之外的功能的更多背景知識,IronPDF 文件主頁 涵蓋了 PDF 建立、HTML 到 PDF 轉換、表單處理、數位簽名等多種功能。
您的下一步該怎麼做?
本教程中展示的模式——使用 ToBitmap 渲染,顯示在 PictureBox,使用基於索引的控制項進行導航——為您在 Windows Forms 中提供了一個功能齊全,無依賴的 PDF 檢視器。 從這裡開始,根據您應用程式的需求,有幾個方向值得探索。
對於生產質量的檢視器,考慮使用惰性頁面渲染來有效處理大型文件,新增一個可滾動的縮略圖面板在主檢視器旁邊,並同時曝光與 DPI 參數相關聯的縮放控制功能。 對於文件管理應用,將檢視器與 IronPDF 的文字提取和表單欄位讀取功能結合起來,以建立可搜尋的文件索引。
如果您的工作流程涉及在顯示 PDF 之前程式化生成它們,IronPDF 也支援HTML 到 PDF 轉換 和 從頭開始建立 PDF,所以同樣的函式庫既可用於生成也用於查看。
開始免費試用以取得免浮水印的開發授權金鑰,或者查看完整 API 參考以查看 AnyBitmap 和支援渲染類上的完整方法集。 IronPDF 範例畫廊 還有涵蓋 C# 常見 PDF 任務的現成程式碼樣本。
常見問題
如何在 Windows Forms 的 PictureBox 中使用 C# 顯示 PDF?
using IronPDF 的 ToBitmap 方法將 PDF 頁面渲染為 AnyBitmap 物件,將每個轉換為 System.Drawing.Bitmap,然後指派到 PictureBox.Image。
IronPDF 提供什麼方法來在 C# 中渲染 PDF 頁面?
IronPDF 提供 ToBitmap 方法,將 PDF 頁面渲染為具可配置 DPI 的 AnyBitmap 物件。呼叫 ToImage
是否可以在 PictureBox 中導航 PDF 頁面?
可以。將渲染的頁面位圖儲存在陣列中,增加或減少頁面索引變數。每次導航點擊時將對應的位圖分配到 PictureBox.Image。
using IronPDF 在 Windows Forms 中顯示 PDF 的優勢是什麼?
IronPDF 完全自包含,不需要安裝外部軟體。它支持可配置的 DPI 渲染、頁面導航、列印和文字提取,不依賴於 Adobe Acrobat。
IronPDF 可以處理多頁面的 PDF 並顯示在 PictureBox 中嗎?
可以。ToBitmap 方法對每個頁面返回一個 AnyBitmap。將陣列儲存並通過索引導航,或使用 ToBitmap(dpi, startPage, endPage) 超載方法來按需逐頁渲染。

