如何在 C# 中將 PdfiumViewer 遷移到 IronPDF
從 PdfiumViewer 遷移到 IronPDF,可將您的 .NET PDF 工作流程從僅供查看的 Windows Forms 程式庫(依賴原生二進位檔案)遷移到全面的 PDF 解決方案,該方案能夠處理所有 .NET 應用程式類型的 PDF 建立、操作、文字擷取和渲染。本指南提供了一個完整的分步遷移路徑,該路徑消除了平台限制,並添加了 PdfiumViewer 無法提供的功能。
為什麼要從 PdfiumViewer 遷移到 IronPDF
了解 PdfiumViewer
PdfiumViewer 是一個 .NET 封裝程序,用於封裝 PDFium,PDFium 是 Google 開發的 PDF 渲染引擎,在 Chrome 瀏覽器中使用。 它提供了一種簡單而強大的解決方案,可將 PDF 檢視功能直接整合到 Windows Forms 應用程式中,提供高效能、高保真的 PDF 渲染功能。
但是,必須記住,PdfiumViewer 只是一個檢視器。 它不支援 PDF 的建立、編輯或操作,這對於需要查看功能以外的其他功能的應用程式來說可能是一個限制。 此外,其不確定的維護狀態給生產應用帶來了風險——其持續開發和維護存在一些不確定性,這可能會給長期專案帶來擔憂。
PdfiumViewer 的關鍵局限性
1.僅查看功能:無法從 HTML、圖像或透過程式設計方式建立 PDF。 PdfiumViewer 的功能僅限於查看 PDF 文件——與 IronPDF 等庫不同,它不支援 PDF 的創建、編輯、合併或其他操作功能。
- Windows Forms 特有:該程式庫專注於 Windows Forms 應用程序,不提供對其他使用者介面框架的支援。
3.不支援 PDF 操作:無法合併、拆分或修改 PDF 內容。
4.本機二進位依賴項:需要特定於平台的 PDFium 二進位(x86 和 x64 pdfium.dll 檔案)。
5.維護不確定:更新有限,長期支援不明確。
6.無文字擷取: PdfiumViewer 沒有內建的文字擷取功能-您需要使用 OCR 或其他函式庫。 它只能將頁面渲染成圖像。
7.不支援 HTML 轉 PDF: PdfiumViewer 主要是 PDF 檢視器/渲染器,而不是生成器。 它無法直接將HTML轉換為PDF。 您需要使用像 wkhtmltopdf 或類似的其他庫。
8.無頁首/頁尾:無法新增頁碼或重複內容。
9.無浮水印:無法在有疊加層的文件上加蓋水印。
10.無安全功能:無法加密或密碼保護 PDF 檔案。
PdfiumViewer 與 IronPDF 的比較
| 方面 | PdfiumViewer | IronPDF |
|---|---|---|
| 主要關注點 | WinForms PDF 檢視器 | 完整的 PDF 解決方案 |
| 執照 | Apache 2.0 | 商業的 |
| PDF 建立 | ✗ | ✓(HTML、URL、圖片) |
| PDF 處理 | ✗ | ✓(合併、拆分、編輯) |
| HTML 轉 PDF | ✗ | ✓(鉻引擎) |
| 文字擷取 | ✗ | ✓ |
| 水印 | ✗ | ✓ |
| 頁首/頁尾 | ✗ | ✓ |
| 安全 | ✗ | ✓ |
| 內建檢視器 | ✓ | ✗(側重後端) |
| 平台支援 | 僅限 Windows Forms | 控制台、Web、桌面 |
| 框架支援 | .NET框架 | .NET框架 Core 5+ |
| 維護 | 不確定 | 積極的 |
對於計劃在 2025 年和 2026 年採用 .NET 10 和 C# 14 的團隊,IronPDF 提供了一個全面、積極維護的基礎,該基礎適用於所有 .NET 應用程式類型,消除了 Windows Forms 的限制和本機二進位複雜性。
開始之前
先決條件
- .NET 環境: .NET框架 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet 存取權限:能夠安裝 NuGet 套件
- IronPDF 許可證:請從ironpdf.com取得您的許可證密鑰。
NuGet 套件變更
# Remove PdfiumViewer packages
dotnet remove package PdfiumViewer
dotnet remove package PdfiumViewer.Native.x86.v8-xfa
dotnet remove package PdfiumViewer.Native.x64.v8-xfa
# Install IronPDF
dotnet add package IronPdf# Remove PdfiumViewer packages
dotnet remove package PdfiumViewer
dotnet remove package PdfiumViewer.Native.x86.v8-xfa
dotnet remove package PdfiumViewer.Native.x64.v8-xfa
# Install IronPDF
dotnet add package IronPdf許可證配置
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";識別 PdfiumViewer 使用情況
# Find PdfiumViewer usage
grep -r "PdfiumViewer\|PdfViewer\|PdfDocument\.Load" --include="*.cs" .
# Find native binary references
grep -r "pdfium\.dll\|Native\.x86\|Native\.x64" --include="*.csproj" .
# Find viewer control usage
grep -r "PdfViewer" --include="*.cs" --include="*.Designer.cs" .# Find PdfiumViewer usage
grep -r "PdfiumViewer\|PdfViewer\|PdfDocument\.Load" --include="*.cs" .
# Find native binary references
grep -r "pdfium\.dll\|Native\.x86\|Native\.x64" --include="*.csproj" .
# Find viewer control usage
grep -r "PdfViewer" --include="*.cs" --include="*.Designer.cs" .完整 API 參考
命名空間變更
// PdfiumViewer
using PdfiumViewer;
// IronPDF
using IronPdf;
using IronPdf.Rendering;
using IronPdf.Editing;// PdfiumViewer
using PdfiumViewer;
// IronPDF
using IronPdf;
using IronPdf.Rendering;
using IronPdf.Editing;核心類別映射
| PdfiumViewer | IronPDF | 筆記 |
|---|---|---|
PdfDocument | PdfDocument | 同名不同功能 |
PdfViewer | (無等效項) | IronPDF專注於後端開發 |
PdfRenderer | ChromePdfRenderer | PDF 建立 |
| (無法使用) | HtmlHeaderFooter | 頁首/頁尾 |
文件載入映射
| PdfiumViewer | IronPDF | 筆記 |
|---|---|---|
PdfDocument.Load(path) | PdfDocument.FromFile(path) | 從檔案載入 |
PdfDocument.Load(stream) | PdfDocument.FromStream(stream) | 從串流中載入 |
PdfDocument.Load(bytes) | PdfDocument.FromBinaryData(bytes) | 從位元組加載 |
文檔屬性映射
| PdfiumViewer | IronPDF | 筆記 |
|---|---|---|
document.PageCount | document.PageCount | 相同的 |
document.PageSizes | document.Pages[i].Width/Height | 按頁訪問 |
document.GetPageSize(index) | document.Pages[index].Width/Height | 直接屬性 |
頁面渲染映射
| PdfiumViewer | IronPDF | 筆記 |
|---|---|---|
document.Render(pageIndex, dpiX, dpiY, forPrinting) | pdf.ToBitmap(pageIndex) | 傳回點陣圖數組 |
document.Render(pageIndex, width, height, dpiX, dpiY, flags) | pdf.RasterizeToImageFiles(path, dpi) | 批次渲染 |
儲存文件映射
| PdfiumViewer | IronPDF | 筆記 |
|---|---|---|
document.Save(path) | pdf.SaveAs(path) | 不同的方法名稱 |
document.Save(stream) | pdf.Stream | 訪問串流 |
| (無法使用) | pdf.BinaryData | 取得位元組 |
PdfiumViewer 中暫不支援新功能
| IronPDF 功能 | 描述 |
|---|---|
pdf.ExtractAllText() | 從所有頁面中提取文本 |
pdf.ExtractTextFromPage(index) | 從指定頁面提取文本 |
ChromePdfRenderer.RenderHtmlAsPdf() | 從 HTML 創建 |
ChromePdfRenderer.RenderUrlAsPdf() | 從 URL 建立 |
PdfDocument.Merge() | 合併PDF文件 |
pdf.CopyPages() | 提取頁面 |
pdf.RemovePages() | 刪除頁面 |
pdf.ApplyWatermark() | 添加浮水印 |
pdf.AddHtmlHeaders() | 新增標題 |
pdf.AddHtmlFooters() | 新增頁腳 |
pdf.SecuritySettings | 密碼保護 |
pdf.Form | 表格填寫 |
程式碼遷移範例
範例 1:從 PDF 中提取文本
之前(PdfiumViewer):
// NuGet: Install-Package PdfiumViewer
using PdfiumViewer;
using System;
using System.Text;
string pdfPath = "document.pdf";
// PDFiumViewer has limited text extraction capabilities
// It's primarily designed for rendering, not text extraction
using (var document = PdfDocument.Load(pdfPath))
{
int pageCount = document.PageCount;
Console.WriteLine($"Total pages: {pageCount}");
// PDFiumViewer does not have built-in text extraction
// You would need to use OCR or another library
// It can only render pages as images
for (int i = 0; i < pageCount; i++)
{
var pageImage = document.Render(i, 96, 96, false);
Console.WriteLine($"Rendered page {i + 1}");
}
}// NuGet: Install-Package PdfiumViewer
using PdfiumViewer;
using System;
using System.Text;
string pdfPath = "document.pdf";
// PDFiumViewer has limited text extraction capabilities
// It's primarily designed for rendering, not text extraction
using (var document = PdfDocument.Load(pdfPath))
{
int pageCount = document.PageCount;
Console.WriteLine($"Total pages: {pageCount}");
// PDFiumViewer does not have built-in text extraction
// You would need to use OCR or another library
// It can only render pages as images
for (int i = 0; i < pageCount; i++)
{
var pageImage = document.Render(i, 96, 96, false);
Console.WriteLine($"Rendered page {i + 1}");
}
}(IronPDF 之後):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
string pdfPath = "document.pdf";
// Open and extract text from PDF
PdfDocument pdf = PdfDocument.FromFile(pdfPath);
// Extract text from all pages
string allText = pdf.ExtractAllText();
Console.WriteLine("Extracted Text:");
Console.WriteLine(allText);
// Extract text from specific page
string pageText = pdf.ExtractTextFromPage(0);
Console.WriteLine($"\nFirst page text: {pageText}");
Console.WriteLine($"\nTotal pages: {pdf.PageCount}");// NuGet: Install-Package IronPdf
using IronPdf;
using System;
string pdfPath = "document.pdf";
// Open and extract text from PDF
PdfDocument pdf = PdfDocument.FromFile(pdfPath);
// Extract text from all pages
string allText = pdf.ExtractAllText();
Console.WriteLine("Extracted Text:");
Console.WriteLine(allText);
// Extract text from specific page
string pageText = pdf.ExtractTextFromPage(0);
Console.WriteLine($"\nFirst page text: {pageText}");
Console.WriteLine($"\nTotal pages: {pdf.PageCount}");這個例子凸顯了一個根本性的功能缺陷。 PdfiumViewer明確指出它"沒有內建文字擷取功能","需要使用OCR或其他函式庫"——它只能將頁面渲染成圖像。 如果您需要使用 PdfiumViewer 從 PDF 中提取文本,則必須將其渲染成圖像並運行 OCR。
IronPDF 提供原生文本提取功能,可以使用ExtractAllText()提取整個文件的文本,或使用ExtractTextFromPage(index)提取特定頁面的文本。 無需 OCR,無需任何變通方法—直接從 PDF 內容中提取文字。 有關其他選項,請參閱文字擷取文件。
範例 2:HTML 轉 PDF
之前(PdfiumViewer):
// NuGet: Install-Package PdfiumViewer
using PdfiumViewer;
using System.IO;
using System.Drawing.Printing;
// PDFiumViewer is primarily a PDF viewer/renderer, not a generator
// It cannot directly convert HTML to PDF
// You would need to use another library to first create the PDF
// Then use PDFiumViewer to display it:
string htmlContent = "<h1>Hello World</h1><p>This is a test document.</p>";
// This functionality is NOT available in PDFiumViewer
// You would need a different library like wkhtmltopdf or similar
// PDFiumViewer can only open and display existing PDFs:
string existingPdfPath = "output.pdf";
using (var document = PdfDocument.Load(existingPdfPath))
{
// Can only render/display existing PDF
var image = document.Render(0, 300, 300, true);
}// NuGet: Install-Package PdfiumViewer
using PdfiumViewer;
using System.IO;
using System.Drawing.Printing;
// PDFiumViewer is primarily a PDF viewer/renderer, not a generator
// It cannot directly convert HTML to PDF
// You would need to use another library to first create the PDF
// Then use PDFiumViewer to display it:
string htmlContent = "<h1>Hello World</h1><p>This is a test document.</p>";
// This functionality is NOT available in PDFiumViewer
// You would need a different library like wkhtmltopdf or similar
// PDFiumViewer can only open and display existing PDFs:
string existingPdfPath = "output.pdf";
using (var document = PdfDocument.Load(existingPdfPath))
{
// Can only render/display existing PDF
var image = document.Render(0, 300, 300, true);
}(IronPDF 之後):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
string htmlContent = "<h1>Hello World</h1><p>This is a test document.</p>";
// Create a PDF from HTML string
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);
// Save the PDF
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully!");// NuGet: Install-Package IronPdf
using IronPdf;
using System;
string htmlContent = "<h1>Hello World</h1><p>This is a test document.</p>";
// Create a PDF from HTML string
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);
// Save the PDF
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully!");這個例子展示了這兩個函式庫之間最顯著的功能差異。 PdfiumViewer 明確指出"此功能在 PDFiumViewer 中不可用",並且"您需要像 wkhtmltopdf 或類似庫"——PdfiumViewer 只能打開和顯示現有的 PDF。
IronPDF 透過ChromePdfRenderer提供原生 HTML 到 PDF 的轉換,該渲染器內部使用 Chromium 引擎來精確渲染 HTML、CSS 和 JavaScript。 RenderHtmlAsPdf()方法直接將 HTML 字串轉換為 PDF 文件。 IronPDF 也可以使用RenderUrlAsPdf()渲染 URL,使用RenderHtmlFileAsPdf()渲染 HTML 檔案。 請參閱HTML 轉 PDF 文件以取得完整範例。
範例 3:PDF 轉影像
之前(PdfiumViewer):
// NuGet: Install-Package PdfiumViewer
using PdfiumViewer;
using System;
using System.Drawing;
using System.Drawing.Imaging;
string pdfPath = "document.pdf";
string outputImage = "page1.png";
// PDFiumViewer excels at rendering PDFs to images
using (var document = PdfDocument.Load(pdfPath))
{
// Render first page at 300 DPI
int dpi = 300;
using (var image = document.Render(0, dpi, dpi, true))
{
// Save as PNG
image.Save(outputImage, ImageFormat.Png);
Console.WriteLine($"Page rendered to {outputImage}");
}
// Render all pages
for (int i = 0; i < document.PageCount; i++)
{
using (var pageImage = document.Render(i, 150, 150, true))
{
pageImage.Save($"page_{i + 1}.png", ImageFormat.Png);
}
}
}// NuGet: Install-Package PdfiumViewer
using PdfiumViewer;
using System;
using System.Drawing;
using System.Drawing.Imaging;
string pdfPath = "document.pdf";
string outputImage = "page1.png";
// PDFiumViewer excels at rendering PDFs to images
using (var document = PdfDocument.Load(pdfPath))
{
// Render first page at 300 DPI
int dpi = 300;
using (var image = document.Render(0, dpi, dpi, true))
{
// Save as PNG
image.Save(outputImage, ImageFormat.Png);
Console.WriteLine($"Page rendered to {outputImage}");
}
// Render all pages
for (int i = 0; i < document.PageCount; i++)
{
using (var pageImage = document.Render(i, 150, 150, true))
{
pageImage.Save($"page_{i + 1}.png", ImageFormat.Png);
}
}
}(IronPDF 之後):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Linq;
string pdfPath = "document.pdf";
string outputImage = "page1.png";
// Open PDF and convert to images
PdfDocument pdf = PdfDocument.FromFile(pdfPath);
// Convert first page to image
var firstPageImage = pdf.ToBitmap(0);
firstPageImage[0].Save(outputImage);
Console.WriteLine($"Page rendered to {outputImage}");
// Convert all pages to images
var allPageImages = pdf.ToBitmap();
for (int i = 0; i < allPageImages.Length; i++)
{
allPageImages[i].Save($"page_{i + 1}.png");
Console.WriteLine($"Saved page {i + 1}");
}
Console.WriteLine($"Total pages converted: {pdf.PageCount}");// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Linq;
string pdfPath = "document.pdf";
string outputImage = "page1.png";
// Open PDF and convert to images
PdfDocument pdf = PdfDocument.FromFile(pdfPath);
// Convert first page to image
var firstPageImage = pdf.ToBitmap(0);
firstPageImage[0].Save(outputImage);
Console.WriteLine($"Page rendered to {outputImage}");
// Convert all pages to images
var allPageImages = pdf.ToBitmap();
for (int i = 0; i < allPageImages.Length; i++)
{
allPageImages[i].Save($"page_{i + 1}.png");
Console.WriteLine($"Saved page {i + 1}");
}
Console.WriteLine($"Total pages converted: {pdf.PageCount}");PdfiumViewer 的優點之一就在於此——將 PDF 渲染成圖像是它的主要強項。 這兩個庫都能有效地完成這項任務,但方式不同。
PdfiumViewer 使用document.Render(pageIndex, dpiX, dpiY, forPrinting)和巢狀的using語句進行正確處置。 您需要匯入System.Drawing和System.Drawing.Imaging才能使用ImageFormat列舉。
IronPDF 使用pdf.ToBitmap(pageIndex) ,它傳回一個點陣圖陣列。 如果沒有嵌套的處置要求,這種模式就更簡單了。 對於批次操作,不帶參數的ToBitmap()函數會傳回所有頁面。 您也可以使用RasterizeToImageFiles()直接輸出檔案。 如需其他渲染選項,請參閱PDF 轉影像文件。
移除原生依賴項
從 PdfiumViewer 遷移到 IronPDF 的一個顯著優勢是消除了原生二進位檔案的管理。
之前(PdfiumViewer)- 複雜部署
MyApp/
├── bin/
│ ├── MyApp.dll
│ ├── PdfiumViewer.dll
│ ├── x86/
│ │ └── pdfium.dll
│ └── x64/
│ └── pdfium.dll(IronPDF)之後 - 乾淨部署
MyApp/
├── bin/
│ ├── MyApp.dll
│ └── IronPdf.dll # 包含所有內容移除本地二進位引用
# Delete native PDFium binaries
rm -rf x86/ x64/ runtimes/
# Remove from .csproj native package references
# <PackageReference Include="PdfiumViewer.Native.x86.v8-xfa" />
# <PackageReference Include="PdfiumViewer.Native.x64.v8-xfa" /># Delete native PDFium binaries
rm -rf x86/ x64/ runtimes/
# Remove from .csproj native package references
# <PackageReference Include="PdfiumViewer.Native.x86.v8-xfa" />
# <PackageReference Include="PdfiumViewer.Native.x64.v8-xfa" />關鍵遷移說明
無內建檢視器控制
IronPDF 專注於後端開發,不包含視覺化的 PDF 檢視器控制:
// PdfiumViewer: Built-in viewer control
pdfViewer.Document = document;
// IronPDF: Use external viewer or web-based approach
pdf.SaveAs(tempPath);
Process.Start(new ProcessStartInfo(tempPath) { UseShellExecute = true });// PdfiumViewer: Built-in viewer control
pdfViewer.Document = document;
// IronPDF: Use external viewer or web-based approach
pdf.SaveAs(tempPath);
Process.Start(new ProcessStartInfo(tempPath) { UseShellExecute = true });對於檢視需求,可以考慮使用Process.Start()在預設 PDF 檢視器、具有 PDF 路徑的 WebBrowser 控制項或第三方檢視器控制項(如 Syncfusion、DevExpress 或 Telerik)中開啟。
文件載入方式變更
// PdfiumViewer
PdfDocument.Load(path)
// IronPDF
PdfDocument.FromFile(path)// PdfiumViewer
PdfDocument.Load(path)
// IronPDF
PdfDocument.FromFile(path)儲存方法更改
// PdfiumViewer
document.Save(path)
// IronPDF
pdf.SaveAs(path)// PdfiumViewer
document.Save(path)
// IronPDF
pdf.SaveAs(path)渲染方法變更
// PdfiumViewer: Returns image with nested using
using (var image = document.Render(0, 150, 150, true))
{
image.Save("page.png", ImageFormat.Png);
}
// IronPDF: Returns bitmap array
var images = pdf.ToBitmap(0);
images[0].Save("page.png");// PdfiumViewer: Returns image with nested using
using (var image = document.Render(0, 150, 150, true))
{
image.Save("page.png", ImageFormat.Png);
}
// IronPDF: Returns bitmap array
var images = pdf.ToBitmap(0);
images[0].Save("page.png");頁面大小訪問變更
// PdfiumViewer
var size = document.PageSizes[index];
Console.WriteLine($"{size.Width} x {size.Height}");
// IronPDF
var page = pdf.Pages[index];
Console.WriteLine($"{page.Width} x {page.Height}");// PdfiumViewer
var size = document.PageSizes[index];
Console.WriteLine($"{size.Width} x {size.Height}");
// IronPDF
var page = pdf.Pages[index];
Console.WriteLine($"{page.Width} x {page.Height}");功能對比總結
| 特徵 | PdfiumViewer | IronPDF |
|---|---|---|
| 載入PDF | ✓ | ✓ |
| 渲染到影像 | ✓ | ✓ |
| 內建檢視器 | ✓ | ✗ |
| 列印 PDF | ✓ | ✓ |
| 提取文字 | ✗ | ✓ |
| 從 HTML 創建 | ✗ | ✓ |
| 從 URL 建立 | ✗ | ✓ |
| 合併PDF | ✗ | ✓ |
| 拆分PDF | ✗ | ✓ |
| 添加浮水印 | ✗ | ✓ |
| 頁首/頁尾 | ✗ | ✓ |
| 表格填寫 | ✗ | ✓ |
| 密碼保護 | ✗ | ✓ |
| WinForms 支持 | ✓ | ✓ |
| ASP.NET 支援 | ✗ | ✓ |
| .NET Core 支援 | 有限的 | ✓ |
| 主動維護 | 不確定 | ✓ |
遷移清單
遷移前
- 識別程式碼庫中所有 PdfiumViewer 的使用情況
- 使用 PdfViewer 控制項列出 WinForms
- 記錄目前渲染 DPI 設定
- 檢查本地二進位引用
- 確定列印功能使用情況
- 計畫檢視器控制項取代策略
- 取得 IronPDF 許可證密鑰
軟體包變更
- 移除
PdfiumViewerNuGet 套件 - 移除
PdfiumViewer.Native.x86.v8-xfa軟體包 - 刪除
PdfiumViewer.Native.x64.v8-xfa軟體包 - 從 x86/ 和 x64/ 資料夾中刪除原生 pdfium.dll 二進位文件 安裝
IronPdfNuGet 套件:dotnet add package IronPdf
程式碼更改
- 在啟動時新增許可證金鑰配置
- 將
PdfDocument.Load()替換為PdfDocument.FromFile() - 將
document.Save()替換為pdf.SaveAs() - 將
document.Render()替換為pdf.ToBitmap()或RasterizeToImageFiles() - 將
document.PageSizes[i]替換為pdf.Pages[i].Width/Height - 將 PdfViewer 控制項替換為外部檢視器或 Process.Start()
- 新增功能(文字擷取、HTML 轉 PDF 等)
移民後
- 測試渲染輸出質量
- 測試列印功能
- 在目標平台上進行測試
- 新增功能(HTML 轉 PDF、合併、浮水印、安全功能)
- 更新文檔






