跳至頁尾內容
移民指南

如何在 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 的創建、編輯、合併或其他操作功能。

  1. 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 的比較

方面PdfiumViewerIronPDF
主要關注點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 的限制和本機二進位複雜性。


開始之前

先決條件

  1. .NET 環境: .NET框架 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet 存取權限:能夠安裝 NuGet 套件
  3. 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
SHELL

許可證配置

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

識別 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" .
SHELL

完整 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;
$vbLabelText   $csharpLabel

核心類別映射

PdfiumViewerIronPDF筆記
PdfDocumentPdfDocument同名不同功能
PdfViewer(無等效項)IronPDF專注於後端開發
PdfRendererChromePdfRendererPDF 建立
(無法使用)HtmlHeaderFooter頁首/頁尾

文件載入映射

PdfiumViewerIronPDF筆記
PdfDocument.Load(path)PdfDocument.FromFile(path)從檔案載入
PdfDocument.Load(stream)PdfDocument.FromStream(stream)從串流中載入
PdfDocument.Load(bytes)PdfDocument.FromBinaryData(bytes)從位元組加載

文檔屬性映射

PdfiumViewerIronPDF筆記
document.PageCountdocument.PageCount相同的
document.PageSizesdocument.Pages[i].Width/Height按頁訪問
document.GetPageSize(index)document.Pages[index].Width/Height直接屬性

頁面渲染映射

PdfiumViewerIronPDF筆記
document.Render(pageIndex, dpiX, dpiY, forPrinting)pdf.ToBitmap(pageIndex)傳回點陣圖數組
document.Render(pageIndex, width, height, dpiX, dpiY, flags)pdf.RasterizeToImageFiles(path, dpi)批次渲染

儲存文件映射

PdfiumViewerIronPDF筆記
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}");
    }
}
$vbLabelText   $csharpLabel

(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}");
$vbLabelText   $csharpLabel

這個例子凸顯了一個根本性的功能缺陷。 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);
}
$vbLabelText   $csharpLabel

(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!");
$vbLabelText   $csharpLabel

這個例子展示了這兩個函式庫之間最顯著的功能差異。 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);
        }
    }
}
$vbLabelText   $csharpLabel

(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}");
$vbLabelText   $csharpLabel

PdfiumViewer 的優點之一就在於此——將 PDF 渲染成圖像是它的主要強項。 這兩個庫都能有效地完成這項任務,但方式不同。

PdfiumViewer 使用document.Render(pageIndex, dpiX, dpiY, forPrinting)和巢狀的using語句進行正確處置。 您需要匯入System.DrawingSystem.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" />
SHELL

關鍵遷移說明

無內建檢視器控制

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 });
$vbLabelText   $csharpLabel

對於檢視需求,可以考慮使用Process.Start()在預設 PDF 檢視器、具有 PDF 路徑的 WebBrowser 控制項或第三方檢視器控制項(如 Syncfusion、DevExpress 或 Telerik)中開啟。

文件載入方式變更

// PdfiumViewer
PdfDocument.Load(path)

// IronPDF
PdfDocument.FromFile(path)
// PdfiumViewer
PdfDocument.Load(path)

// IronPDF
PdfDocument.FromFile(path)
$vbLabelText   $csharpLabel

儲存方法更改

// PdfiumViewer
document.Save(path)

// IronPDF
pdf.SaveAs(path)
// PdfiumViewer
document.Save(path)

// IronPDF
pdf.SaveAs(path)
$vbLabelText   $csharpLabel

渲染方法變更

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

頁面大小訪問變更

// 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}");
$vbLabelText   $csharpLabel

功能對比總結

特徵PdfiumViewerIronPDF
載入PDF
渲染到影像
內建檢視器
列印 PDF
提取文字
從 HTML 創建
從 URL 建立
合併PDF
拆分PDF
添加浮水印
頁首/頁尾
表格填寫
密碼保護
WinForms 支持
ASP.NET 支援
.NET Core 支援有限的
主動維護不確定

遷移清單

遷移前

  • 識別程式碼庫中所有 PdfiumViewer 的使用情況
  • 使用 PdfViewer 控制項列出 WinForms
  • 記錄目前渲染 DPI 設定
  • 檢查本地二進位引用
  • 確定列印功能使用情況
  • 計畫檢視器控制項取代策略
  • 取得 IronPDF 許可證密鑰

軟體包變更

  • 移除PdfiumViewer NuGet 套件
  • 移除PdfiumViewer.Native.x86.v8-xfa軟體包
  • 刪除PdfiumViewer.Native.x64.v8-xfa軟體包
  • 從 x86/ 和 x64/ 資料夾中刪除原生 pdfium.dll 二進位文件 安裝IronPdf NuGet 套件: 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、合併、浮水印、安全功能)
  • 更新文檔

柯蒂斯·週
技術撰稿人

Curtis Chau擁有卡爾頓大學電腦科學學士學位,專長於前端開發,精通Node.js、TypeScript、JavaScript和React。他熱衷於打造直覺美觀的使用者介面,喜歡使用現代框架,並擅長撰寫結構清晰、視覺效果出色的使用者手冊。

除了開發工作之外,柯蒂斯對物聯網 (IoT) 也抱有濃厚的興趣,致力於探索硬體和軟體整合的創新方法。閒暇時,他喜歡玩遊戲和製作 Discord 機器人,將他對科技的熱愛與創造力結合。