如何在 C# 中從 PdfiumViewer 轉移到 IronPDF
從PdfiumViewer遷移到IronPDF,將您的.NET PDF工作流程從Windows Forms查看器/渲染器轉移到Google的PDFium,一個具有本機二進位依賴項且僅支持頁面級別文字擷取的解決方案,轉變為一個全面的PDF解決方案,能夠處理建立、操作、完整文字擷取和跨所有.NET應用程式型別的渲染。本指南提供了完整的逐步遷移路徑,消除了平台限制,同時新增了PdfiumViewer從未設計提供的功能。
為何從PdfiumViewer遷移到IronPDF
了解PdfiumViewer
PdfiumViewer(NuGet包PdfiumViewer,repo pvginkel/PdfiumViewer,Apache 2.0)是Google PDFium渲染引擎的.NET包裝器—相同的引擎用於Chrome—為Windows Forms應用程式公開PDF查看和光柵化。
PdfiumViewer是一個查看器和渲染器,而不是生成器。 它不支持PDF建立、編輯或操作,其文字API(PdfDocument.GetPdfText(int page))返回未經排版的頁面原始文字。 上游儲存庫於2019年8月2日被其維護人封存,最後的NuGet發布(2.13.0)於2017年11月6日發行—現有程式碼仍然有效,但不再有任何修補、.NET 6+更新或CVE修正。
PdfiumViewer的關鍵限制
-
僅限查看器/渲染器: 無法從HTML、圖像或程式化生成PDF。 PdfiumViewer的功能僅限於查看和光柵化—它不支持PDF建立、編輯、合併或其他操作功能。
-
僅支持Windows Forms / Windows: 建立在
System.Drawing和WinForms控制上; 不適合其他UI框架,且System.Drawing.Common在.NET 6+上僅限Windows使用。 -
無法操作PDF: 無法合併、分割或修改PDF內容。
-
本機二進位依賴項: 需要透過
PdfiumViewer.Native.x86_64.v8-xfa提供平台特定的PDFium二進位(或無V8 /無XFA變體)。 -
上游已封存: 儲存庫於2019年8月2日封存; 最後的NuGet發布2.13.0(2017年11月6日); 不再有更新。
-
僅支持頁面級別文字擷取:
PdfDocument.GetPdfText(int page)返回未經排版的頁面原始文字—無逐字座標、無排列重建,且無法對僅圖片的PDF進行OCR。 -
無HTML轉PDF: PDFium不解析HTML。 要生成HTML的PDF,您需要一個單獨的生成器(wkhtmltopdf,IronPDF,PuppeteerSharp等),然後可以使用PdfiumViewer載入結果進行顯示或光柵化。
-
無頁眉/頁腳: 無法新增頁碼或重複內容。
-
無浮水印: 無法在文件上加蓋疊加標記。
- 無安全功能: 無法加密或使用密碼保護PDF。
PdfiumViewer vsIronPDF比較
| 方面 | PdfiumViewer | IronPDF |
|---|---|---|
| 主要重點 | WinForms PDF查看器 | 完整的PDF解決方案 |
| 授權 | Apache 2.0 | 商業 |
| PDF建立 | ✗ | ✓ (HTML, URL, 圖像) |
| PDF 操作 | ✗ | ✓ (合併, 分割, 編輯) |
| HTML 到 PDF | ✗ | ✓ (Chromium引擎) |
| 文字提取 | 僅限頁面級別(GetPdfText) |
完整(具有版面,逐頁) |
| 水印 | ✗ | ✓ |
| 頁首/頁尾 | ✗ | ✓ |
| 安全性 | ✗ | ✓ |
| 內建查看器 | ✓ | ✗ (專注於後端) |
| 平台支持 | 僅限Windows / WinForms | 控制台,網頁,桌面,跨平台 |
| 框架支持 | .NET Framework 2.0+ | .NET Framework,Core,5+ |
| 維護 | 2019年8月2日封存(最後發布2017年11月6日) | 活躍 |
針對現代.NET的團隊,IronPDF提供了一個全面、積極維護的基礎,能夠支持所有.NET應用程式型別,消除了Windows Forms的限制和本機二進制的複雜性。
開始之前
前提條件
- .NET環境:.NET Framework 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.x86_64.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.x86_64.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";
' Add at application startup (Program.vb or Startup.vb)
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;
Imports PdfiumViewer
Imports IronPdf
Imports IronPdf.Rendering
Imports IronPdf.Editing
核心類別映射
| PdfiumViewer | IronPDF |
|---|---|
PdfDocument |
PdfDocument |
PdfViewer |
(無等價物) |
PdfRenderer |
ChromePdfRenderer |
| (不可用) | HtmlHeaderFooter |
文件載入映射
| PdfiumViewer | IronPDF |
|---|---|
PdfDocument.Load(path) |
PdfDocument.FromFile(path) |
PdfDocument.Load(stream) |
PdfDocument.FromStream(stream) |
PdfDocument.Load(path, password) |
PdfDocument.FromFile(path, password) |
| (無字節重載—包裝在MemoryStream中) | PdfDocument.FromBinaryData(bytes) |
文件屬性對應
| PdfiumViewer | IronPDF |
|---|---|
document.PageCount |
document.PageCount |
document.PageSizes[i] |
document.Pages[i].Width/Height |
document.GetPdfText(pageIndex) |
pdf.Pages[pageIndex].Text |
頁面渲染映射
| 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) |
new MemoryStream(pdf.BinaryData) |
| (不可用) | byte[]) |
新增或擴展功能與PdfiumViewer
| IronPDF功能 | 說明 |
|---|---|
pdf.ExtractAllText() |
整個文件的文字提取(PdfiumViewer僅提供頁面級別GetPdfText) |
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
// Install-Package PdfiumViewer.Native.x86.v8-xfa
// Install-Package PdfiumViewer.Native.x86_64.v8-xfa
using PdfiumViewer;
using System;
using System.Text;
string pdfPath = "document.pdf";
// PdfiumViewer exposes page-level text extraction via
// PdfDocument.GetPdfText(int page). It returns raw page text only —
// no layout, no per-word coordinates, no OCR for image-only pages.
using (var document = PdfDocument.Load(pdfPath))
{
int pageCount = document.PageCount;
Console.WriteLine($"Total pages: {pageCount}");
var sb = new StringBuilder();
for (int i = 0; i < pageCount; i++)
{
string pageText = document.GetPdfText(i);
sb.AppendLine($"--- Page {i + 1} ---");
sb.AppendLine(pageText);
}
Console.WriteLine(sb.ToString());
}
// NuGet: Install-Package PdfiumViewer
// Install-Package PdfiumViewer.Native.x86.v8-xfa
// Install-Package PdfiumViewer.Native.x86_64.v8-xfa
using PdfiumViewer;
using System;
using System.Text;
string pdfPath = "document.pdf";
// PdfiumViewer exposes page-level text extraction via
// PdfDocument.GetPdfText(int page). It returns raw page text only —
// no layout, no per-word coordinates, no OCR for image-only pages.
using (var document = PdfDocument.Load(pdfPath))
{
int pageCount = document.PageCount;
Console.WriteLine($"Total pages: {pageCount}");
var sb = new StringBuilder();
for (int i = 0; i < pageCount; i++)
{
string pageText = document.GetPdfText(i);
sb.AppendLine($"--- Page {i + 1} ---");
sb.AppendLine(pageText);
}
Console.WriteLine(sb.ToString());
}
Imports PdfiumViewer
Imports System
Imports System.Text
Dim pdfPath As String = "document.pdf"
' PdfiumViewer exposes page-level text extraction via
' PdfDocument.GetPdfText(int page). It returns raw page text only —
' no layout, no per-word coordinates, no OCR for image-only pages.
Using document As PdfDocument = PdfDocument.Load(pdfPath)
Dim pageCount As Integer = document.PageCount
Console.WriteLine($"Total pages: {pageCount}")
Dim sb As New StringBuilder()
For i As Integer = 0 To pageCount - 1
Dim pageText As String = document.GetPdfText(i)
sb.AppendLine($"--- Page {i + 1} ---")
sb.AppendLine(pageText)
Next
Console.WriteLine(sb.ToString())
End Using
之後(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}");
Imports IronPdf
Imports System
Module Program
Sub Main()
Dim pdfPath As String = "document.pdf"
' Open and extract text from PDF
Dim pdf As PdfDocument = PdfDocument.FromFile(pdfPath)
' Extract text from all pages
Dim allText As String = pdf.ExtractAllText()
Console.WriteLine("Extracted Text:")
Console.WriteLine(allText)
' Extract text from specific page
Dim pageText As String = pdf.ExtractTextFromPage(0)
Console.WriteLine(vbCrLf & "First page text: " & pageText)
Console.WriteLine(vbCrLf & "Total pages: " & pdf.PageCount)
End Sub
End Module
PdfiumViewer的文字API是PdfDocument.GetPdfText(int page)—僅限頁面級原始文字,無版面重建,無逐字座標,無針對僅圖像PDF的OCR回退。 任何超出平面文字轉儲的操作,需要自訂的版面啟發或不同的程式庫。
IronPDF透過pdf.Pages[index].Text)提供逐頁提取。 查看文字提取文件以獲取更多選擇。
範例2:HTML到PDF轉換
之前(PdfiumViewer):
// NuGet: Install-Package PdfiumViewer
using PdfiumViewer;
using System;
// PdfiumViewer wraps Google's PDFium — a renderer, not a generator.
// PDFium does not parse HTML, so PdfiumViewer has no HTML-to-PDF path.
// To produce a PDF from HTML you need a separate generator (wkhtmltopdf,
// IronPDF, PuppeteerSharp, etc.), then load the result with PdfiumViewer
// for display or rasterization.
string htmlContent = "<h1>Hello World</h1><p>This is a test document.</p>";
// Pretend "output.pdf" was produced by another tool — load and render it.
string existingPdfPath = "output.pdf";
using (var document = PdfDocument.Load(existingPdfPath))
{
Console.WriteLine($"Loaded PDF with {document.PageCount} page(s).");
// PdfDocument.Render(int page, float dpiX, float dpiY, bool forPrinting)
var image = document.Render(0, 300, 300, true);
Console.WriteLine("Rendered page 1 at 300 DPI.");
}
// NuGet: Install-Package PdfiumViewer
using PdfiumViewer;
using System;
// PdfiumViewer wraps Google's PDFium — a renderer, not a generator.
// PDFium does not parse HTML, so PdfiumViewer has no HTML-to-PDF path.
// To produce a PDF from HTML you need a separate generator (wkhtmltopdf,
// IronPDF, PuppeteerSharp, etc.), then load the result with PdfiumViewer
// for display or rasterization.
string htmlContent = "<h1>Hello World</h1><p>This is a test document.</p>";
// Pretend "output.pdf" was produced by another tool — load and render it.
string existingPdfPath = "output.pdf";
using (var document = PdfDocument.Load(existingPdfPath))
{
Console.WriteLine($"Loaded PDF with {document.PageCount} page(s).");
// PdfDocument.Render(int page, float dpiX, float dpiY, bool forPrinting)
var image = document.Render(0, 300, 300, true);
Console.WriteLine("Rendered page 1 at 300 DPI.");
}
Imports PdfiumViewer
Imports System
' PdfiumViewer wraps Google's PDFium — a renderer, not a generator.
' PDFium does not parse HTML, so PdfiumViewer has no HTML-to-PDF path.
' To produce a PDF from HTML you need a separate generator (wkhtmltopdf,
' IronPDF, PuppeteerSharp, etc.), then load the result with PdfiumViewer
' for display or rasterization.
Dim htmlContent As String = "<h1>Hello World</h1><p>This is a test document.</p>"
' Pretend "output.pdf" was produced by another tool — load and render it.
Dim existingPdfPath As String = "output.pdf"
Using document As PdfDocument = PdfDocument.Load(existingPdfPath)
Console.WriteLine($"Loaded PDF with {document.PageCount} page(s).")
' PdfDocument.Render(int page, float dpiX, float dpiY, bool forPrinting)
Dim image = document.Render(0, 300, 300, True)
Console.WriteLine("Rendered page 1 at 300 DPI.")
End Using
之後(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!");
Imports IronPdf
Imports System
Module Program
Sub Main()
Dim htmlContent As String = "<h1>Hello World</h1><p>This is a test document.</p>"
' Create a PDF from HTML string
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
' Save the PDF
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF created successfully!")
End Sub
End Module
這是最大的功能缺口。PDFium不解析HTML,因此PdfiumViewer沒有HTML到PDF路徑——您需要先使用其他工具生成PDF,然後使用PdfiumViewer進行顯示或光柵化。
IronPDF透過ChromePdfRenderer提供本機HTML到PDF轉換,其內部使用Chromium引擎進行HTML、CSS和JavaScript的渲染。 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);
}
}
}
Imports PdfiumViewer
Imports System
Imports System.Drawing
Imports System.Drawing.Imaging
Module Module1
Sub Main()
Dim pdfPath As String = "document.pdf"
Dim outputImage As String = "page1.png"
' PDFiumViewer excels at rendering PDFs to images
Using document = PdfDocument.Load(pdfPath)
' Render first page at 300 DPI
Dim dpi As Integer = 300
Using image = document.Render(0, dpi, dpi, True)
' Save as PNG
image.Save(outputImage, ImageFormat.Png)
Console.WriteLine($"Page rendered to {outputImage}")
End Using
' Render all pages
For i As Integer = 0 To document.PageCount - 1
Using pageImage = document.Render(i, 150, 150, True)
pageImage.Save($"page_{i + 1}.png", ImageFormat.Png)
End Using
Next
End Using
End Sub
End Module
之後(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}");
Imports IronPdf
Imports System
Imports System.Linq
Module Module1
Sub Main()
Dim pdfPath As String = "document.pdf"
Dim outputImage As String = "page1.png"
' Open PDF and convert to images
Dim pdf As PdfDocument = PdfDocument.FromFile(pdfPath)
' Convert first page to image
Dim firstPageImage = pdf.ToBitmap(0)
firstPageImage(0).Save(outputImage)
Console.WriteLine($"Page rendered to {outputImage}")
' Convert all pages to images
Dim allPageImages = pdf.ToBitmap()
For i As Integer = 0 To allPageImages.Length - 1
allPageImages(i).Save($"page_{i + 1}.png")
Console.WriteLine($"Saved page {i + 1}")
Next
Console.WriteLine($"Total pages converted: {pdf.PageCount}")
End Sub
End Module
這是PdfiumViewer擅長的一個區域—PDF到圖像的渲染是其主要強項。 兩個程式庫都有效地處理此任務,但模式不同。
PdfiumViewer使用using語句進行適當的釋放。 您需要匯入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 });
' PdfiumViewer: Built-in viewer control
pdfViewer.Document = document
' IronPDF: Use external viewer or web-based approach
pdf.SaveAs(tempPath)
Process.Start(New ProcessStartInfo(tempPath) With {.UseShellExecute = True})
對於查看需求,考慮使用Process.Start()在預設的PDF查看器中打開,WebBrowser控制帶有PDF路徑或第三方查看器控制,例如Syncfusion、DevExpress或Telerik。
文件載入方法更改
// PdfiumViewer
PdfDocument.Load(path)
// IronPDF
PdfDocument.FromFile(path)
// 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");
Imports System.Drawing.Imaging
' PdfiumViewer: Returns image with nested using
Using image = document.Render(0, 150, 150, True)
image.Save("page.png", ImageFormat.Png)
End Using
' IronPDF: Returns bitmap array
Dim 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
Dim size = document.PageSizes(index)
Console.WriteLine($"{size.Width} x {size.Height}")
' IronPDF
Dim page = pdf.Pages(index)
Console.WriteLine($"{page.Width} x {page.Height}")
功能比較總結
| 功能 | PdfiumViewer | IronPDF |
|---|---|---|
| 載入PDF | ✓ | ✓ |
| 渲染到圖像 | ✓ | ✓ |
| 內建查看器 | ✓ | ✗ |
| 列印PDF | ✓ | ✓ |
| 提取文字 | 頁面級(GetPdfText) |
完整(ExtractAllText,逐頁) |
| 從HTML建立 | ✗ | ✓ |
| 從URL建立 | ✗ | ✓ |
| 合併PDF | ✗ | ✓ |
| 拆分PDF | ✗ | ✓ |
| 新增水印 | ✗ | ✓ |
| 頁眉/頁腳 | ✗ | ✓ |
| 表單填寫 | ✗ | ✓ |
| 密碼保護 | ✗ | ✓ |
| WinForms支持 | ✓ | ✓ |
| ASP.NET支持 | ✗ | ✓ |
| .NET Core支持 | 有限(System.Drawing綁定Windows) | ✓ |
| 積極維護 | 2019年8月2日封存 | ✓ |
遷移檢查表
遷移前
- 識別程式碼庫中所有PdfiumViewer的使用
- 列出使用PdfViewer控制的WinForms
- 文件當前渲染DPI設定
- 檢查本機二進位引用
- 識別列印功能的使用
- 計畫查看器控制的替代策略
- 獲得IronPDF授權金鑰
套件變更
- 移除
PdfiumViewerNuGet包 - 移除
PdfiumViewer.Native.x86.v8-xfa包 - 移除
PdfiumViewer.Native.x86_64.v8-xfa包 - 從x86/和x64/文件夾刪除本機pdfium.dll二進位
- 安裝
dotnet add package IronPdf
程式碼變更
- 在啟動時加入授權金鑰配置
- 用
PdfDocument.Load() - 用
document.Save() - 用
document.Render() - 用
document.PageSizes[i] - 使用外部查看器或Process.Start()替換PdfViewer控制
- 新增新功能(文字提取,HTML到PDF等)
遷移後
- 測試渲染輸出質量
- 測試列印功能
- 測試目標平台
- 增加新功能(HTML到PDF,合併,浮水印,安全性)
- 更新文件

