IRONSOFTWAREHOME
影片

如何在 C# 中設置 PDF 字體

Curtis Chau
Curtis Chau
Updated: 2026年7月19日

從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的關鍵限制

  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提供平台特定的PDFium二進位(或無V8 /無XFA變體)。

  5. 上游已封存: 儲存庫於2019年8月2日封存; 最後的NuGet發布2.13.0(2017年11月6日); 不再有更新。

  6. 僅支持頁面級別文字擷取: PdfDocument.GetPdfText(int page)返回未經排版的頁面原始文字—無逐字座標、無排列重建,且無法對僅圖片的PDF進行OCR。

  7. 無HTML轉PDF: PDFium不解析HTML。 要生成HTML的PDF,您需要一個單獨的生成器(wkhtmltopdf,IronPDF,PuppeteerSharp等),然後可以使用PdfiumViewer載入結果進行顯示或光柵化。

  8. 無頁眉/頁腳: 無法新增頁碼或重複內容。

  9. 無浮水印: 無法在文件上加蓋疊加標記。

  10. 無安全功能: 無法加密或使用密碼保護PDF。

PdfiumViewer vsIronPDF比較

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


開始之前

前提條件

  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包變更

# 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
SHELL

授權配置

// 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" .
SHELL

完整API參考

名稱空間變更

// PdfiumViewer
using PdfiumViewer;

// IronPDF
using IronPdf;
using IronPdf.Rendering;
using IronPdf.Editing;

核心類別映射

PdfiumViewerIronPDF
PdfDocumentPdfDocument
PdfViewer(無等價物)
PdfRendererChromePdfRenderer
(不可用)HtmlHeaderFooter

文件載入映射

PdfiumViewerIronPDF
PdfDocument.Load(path)PdfDocument.FromFile(path)
PdfDocument.Load(stream)PdfDocument.FromStream(stream)
PdfDocument.Load(path, password)PdfDocument.FromFile(path, password)
(無字節重載—包裝在MemoryStream中)PdfDocument.FromBinaryData(bytes)

文件屬性對應

PdfiumViewerIronPDF
document.PageCountdocument.PageCount
document.PageSizes[i]document.Pages[i].Width/Height
document.GetPdfText(pageIndex)pdf.Pages[pageIndex].Text

頁面渲染映射

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)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());
}

之後(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}");

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.");
}

之後(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!");

這是最大的功能缺口。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);
        }
    }
}

之後(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}");

這是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
Text

之後(IronPDF)- 清晰的部署

MyApp/
├── bin/
│   ├── MyApp.dll
│   └── IronPdf.dll  # 包含所有內容
Text

取消本機二進制引用

# 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 });

對於查看需求,考慮使用Process.Start()在預設的PDF查看器中打開,WebBrowser控制帶有PDF路徑或第三方查看器控制,例如Syncfusion、DevExpress或Telerik。

文件載入方法更改

// PdfiumViewer
PdfDocument.Load(path)

// IronPDF
PdfDocument.FromFile(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
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}");

功能比較總結

功能PdfiumViewerIronPDF
載入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,合併,浮水印,安全性)
  • 更新文件

請注意: PdfiumViewer、PDFium、Chromium、DevExpress、Syncfusion、Telerik和wkhtmltopdf是各自所有者的商標。 本網站與Pieter van Ginkel,Chromium Project,Google,DevExpress,Syncfusion,Progress Software或wkhtmltopdf專案沒有關聯、認可或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供參考,反映撰寫時公開可用的資訊。
Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

...
閱讀更多

相關文章

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
預訂您的免費現場演示
Booking Badge

受到全球數百萬工程師的信任

Iron Software的客戶標誌
獲取您的無義務諮詢
填寫以下表格或電子郵件sales@ironsoftware.com
您的詳細資訊將始終保密
受到全球數百萬工程師的信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立