跳至页脚内容
视频

如何在 PDF 式中设置字体 C#

从PdfiumViewer迁移到 IronPDF,将您的 .NET PDF 工作流从围绕 Google's PDFium 的 Windows Forms 查看器/渲染器包装器转变为能够创建、操作、完整文本提取和渲染的综合 PDF 解决方案,适用于所有 .NET 应用程序类型。这一指南提供了一个完整的、逐步的迁移路径,消除了平台的限制,同时增加了PdfiumViewer从未设计提供的功能。

为什么从IronPDF迁移到 IronPDF?

了解 PdfiumViewer

PdfiumViewer(NuGet包PdfiumViewerpvginkel/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的关键限制

  1. 仅限查看器 / 渲染器: 无法从HTML、图像或编程方式创建PDF。PdfiumViewer的能力仅限于查看和光栅化—它不支持PDF创建、编辑、合并或其他操作功能。

  2. 仅限Windows Forms / Windows: 基于System.Drawing和WinForms控件构建; 不适用于其他UI框架,且System.Drawing.Common在.NET 6+上仅限于Windows。

  3. 无 PDF 操作: 无法合并、拆分或修改 PDF 内容。

  4. 本机二进制依赖项: 通过PdfiumViewer.Native.x86_64.v8-xfa(或无V8/无XFA变体)需要特定平台的PDFium二进制文件。

  5. 上游已封存: 代码库在2019-08-02封存; 最后的NuGet 版本2.13.0(2017-11-06); 没有进一步的更新。

  6. 仅支持页面级文本提取: PdfDocument.GetPdfText(int page)返回原始页面文本,没有逐词坐标,没有布局重建,且对仅有图像的PDF不提供OCR。

  7. 无 HTML 转 PDF: PDFium 不解析HTML。 要从HTML生成PDF,需要一个单独的生成器(wkhtmltopdf,IronPDF,PuppeteerSharp 等),然后可以用PdfiumViewer加载结果进行显示或光栅化。

  8. 无 页眉/页脚: 无法添加页码或重复内容。

  9. 无水印: 无法用覆盖物印章文件。

  10. 无安全功能: 无法加密或密码保护 PDF。

PdfiumViewer与IronPDF对比

方面 PdfiumViewer IronPDF
主要关注点 WinForms PDF 查看器 完整的 PDF 解决方案
许可 阿帕奇 2.0 商业翻译
PDF 创建 ✓ (HTML、URL、图片)
PDF 操作 ✓(合并、拆分、编辑)
HTML 到 PDF ✓(Chromium 引擎)
文本提取 仅页面级(GetPdfText 完整(包含布局,每页)
水印
页眉/页脚
安全性
内置浏览器 ✗(侧重于后端)
平台支持 仅限 Windows / WinForms 控制台、网页、桌面、跨平台
框架支持 .NET Framework 2.0+ .NET Framework, Core, 5+
维护 已归档 2019-08-02 (最后发布 2017-11-06) 活跃

对于目标现代 .NET 的团队,IronPDF 提供了一个综合的,积极维护的基础,适用于所有 .NET 应用程序类型,消除了 Windows Forms 限制和本地二进制复杂性。


开始之前

前提条件

  1. .NET 环境: .NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet 访问权限:能够安装 NuGet 包
  3. IronPDF 许可证:请从ironpdf.com获取您的许可证密钥。

NuGet 软件包变更

# RemovePdfiumViewerpackages
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
# RemovePdfiumViewerpackages
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
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";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

确定PdfiumViewer的用法

# FindPdfiumViewerusage
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" .
# FindPdfiumViewerusage
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;
Imports PdfiumViewer

Imports IronPdf
Imports IronPdf.Rendering
Imports IronPdf.Editing
$vbLabelText   $csharpLabel

核心类映射

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";

//PdfiumViewerexposes 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";

//PdfiumViewerexposes 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(Integer 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
$vbLabelText   $csharpLabel

After (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
$vbLabelText   $csharpLabel

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;

//PdfiumViewerwraps Google's PDFium — a renderer, not a generator.
// PDFium does not parse HTML, soPdfiumViewerhas 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;

//PdfiumViewerwraps Google's PDFium — a renderer, not a generator.
// PDFium does not parse HTML, soPdfiumViewerhas 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
$vbLabelText   $csharpLabel

After (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
$vbLabelText   $csharpLabel

这是最大的能力缺口。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
$vbLabelText   $csharpLabel

After (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
$vbLabelText   $csharpLabel

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

功能对比摘要

特征 PdfiumViewer IronPDF
加载 PDF
渲染为图像
内置浏览器
打印 PDF
提取文本 页面级(GetPdfText 完整(ExtractAllText,逐页)
从 HTML 创建
从 URL 创建
合并 PDF
拆分 PDF
添加水印
页眉/页脚
表格填写
密码保护
支持 WinForms
ASP.NET 支持
支持 .NET Core 有限(System.Drawing依赖于Windows)
主动维护 归档于2019-08-02

迁移清单

迁移前

  • 识别代码库中所有PdfiumViewer的使用情况
  • 使用 PdfViewer 控件列出 WinForms
  • 记录当前渲染 DPI 设置
  • 检查本地二进制引用
  • 确定打印功能使用情况
  • 计划查看器控件替换策略
  • 获取IronPDF许可证密钥

软件包变更

  • 删除PdfiumViewer NuGet包
  • 删除PdfiumViewer.Native.x86.v8-xfa
  • 删除PdfiumViewer.Native.x86_64.v8-xfa
  • 从 x86/ 和 x64/ 文件夹中删除原生 pdfium.dll 二进制文件
  • 安装IronPdf NuGet包:dotnet add package IronPdf

代码更改

  • 在启动时添加许可证密钥配置
  • PdfDocument.Load()
  • document.Save()
  • document.Render()
  • document.PageSizes[i]
  • 将 PdfViewer 控件替换为外部查看器或 Process.Start()
  • 添加新功能(文本提取、HTML 转 PDF 等)

后迁移

  • 测试渲染输出质量
  • 测试打印功能
  • 在目标平台上进行测试
  • 添加新功能(HTML 转 PDF、合并、水印、安全功能)
  • 更新文档

请注意PdfiumViewer, PDFium, Chromium, DevExpress, Syncfusion, Telerik 和 wkhtmltopdf 是各自所有者的商标。 本网站与Pieter van Ginkel, Chromium Project, Google, DevExpress, Syncfusion, Progress Software或wkhtmltopdf项目没有关联、认可或赞助。 所有产品名称、徽标和品牌均为各自所有者的财产。 比较仅供参考,反映撰写时公开可用的信息。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我