跳至頁尾內容
移民指南

如何在 C# 中將 pdforge 遷移到 IronPDF

為什麼要從pdforge遷移到IronPDF

了解 pdforge

pdforge 是一個基於雲端的 PDF 生成 API,它提供了一種透過 API 呼叫與您的應用程式整合來產生 PDF 文件的簡單方法。 透過將 PDF 創建任務外包給外部 API,開發人員可以簡化開發流程。 然而,pdforge 也存在一些缺點,例如外部依賴項、有限的自訂選項以及持續的訂閱費用,開發者應該注意這些。

雲端 API 依賴問題

pdforge 在外部雲端伺服器上處理所有文件。 這種架構會為生產應用帶來重大問題:

1.外部伺服器處理:您產生的每個 PDF 都需要將您的 HTML/資料傳送到 pdforge 的伺服器-您的文件將離開您的基礎架構。

2.隱私和合規風險:敏感資料透過網路傳輸到第三方伺服器。 使用 pdforge 時,開發人員需要考慮與向外部 API 發送資料相關的安全性問題。 如果PDF內容包含敏感資訊,這可能是需要重點考慮的問題。

3.持續訂閱成本:每月費用無限期累積,且不涉及資產所有權。 pdforge 的 SaaS 模式引入了持續的營運支出,這些支出會隨著時間的推移而累積。

4.網路依賴性:網路不可用時無法產生 PDF 檔案。

5.速率限制: API 使用上限可能會限制高流量應用程式。

6.網路延遲:往返時間會使每次 PDF 產生增加幾秒鐘。

pdforge 與 IronPDF 對比

特徵pdforgeIronPDF
部署類型基於雲端的 API本地圖書館
依賴關係需要互聯網和 API 身份驗證無外部依賴
客製化對 PDF 產生的控制有限完全掌控自訂功能
成本結構持續訂閱一次性購買選項
安全透過網路傳輸的資料可能有問題資料處理完全在本地環境中進行
設定複雜度由於外部操作,初始設定更加簡便。需要更多初始設定和配置

IronPDF 的獨特之處在於它提供了一個完全本地化的程式庫,使開發人員能夠完全控制 PDF 創建過程。 對於偏好內部文件處理的應用,或外部 API 呼叫會引入安全性問題的應用來說,這尤其有利。 IronPDF 在本地處理所有數據,最大限度地降低此類風險。

對於計劃在 2025 年和 2026 年採用 .NET 10 和 C# 14 的團隊,IronPDF 提供了一個本地處理基礎,消除了對雲端的依賴,同時增加了全面的 PDF 操作功能。


開始之前

先決條件

  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 pdforge packages
dotnet remove package pdforge
dotnet remove package PdfForge

# Install IronPDF
dotnet add package IronPdf
# Remove pdforge packages
dotnet remove package pdforge
dotnet remove package PdfForge

# 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

識別 pdforge 使用情況

# Find pdforge usage
grep -r "PdForge\|PdfClient\|HtmlToPdfRequest\|HtmlToPdfConverter" --include="*.cs" .

# Find placeholder patterns to migrate
grep -r "{totalPages}" --include="*.cs" .
# Find pdforge usage
grep -r "PdForge\|PdfClient\|HtmlToPdfRequest\|HtmlToPdfConverter" --include="*.cs" .

# Find placeholder patterns to migrate
grep -r "{totalPages}" --include="*.cs" .
SHELL

完整 API 參考

命名空間變更

// Before: pdforge
using PdfForge;
using System.IO;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: pdforge
using PdfForge;
using System.IO;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
$vbLabelText   $csharpLabel

核心類別映射

pdforgeIronPDF筆記
HtmlToPdfConverterChromePdfRenderer主 PDF 產生器
PdfClientChromePdfRendererAPI 用戶端等效項
PageSize.A4PdfPaperSize.A4紙張尺寸編號
PageOrientation.LandscapePdfPaperOrientation.Landscape方向枚舉
傳回類型: byte[]PdfDocument結果對象

方法映射

pdforgeIronPDF筆記
converter.ConvertHtmlString(html)renderer.RenderHtmlAsPdf(html)將 HTML 字串轉換為 PDF
converter.ConvertUrl(url)renderer.RenderUrlAsPdf(url)PDF檔案的URL
File.WriteAllBytes(path, bytes)pdf.SaveAs(path)儲存到磁碟
傳回類型: byte[]pdf.BinaryData取得原始位元組

配置映射

pdforgeIronPDF(渲染選項)筆記
converter.PageSize = PageSize.A4renderer.RenderingOptions.PaperSize = PdfPaperSize.A4紙張尺寸
converter.Orientation = PageOrientation.Landscaperenderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape方向
Footer = "Page {page} of {totalPages}"TextFooter = new TextHeaderFooter { CenterText = "Page {page} of {total-pages}" }頁腳(注意佔位符已更改)

pdforge 中暫無新功能

IronPDF 功能描述
PdfDocument.Merge()合併多個PDF文件
pdf.ExtractAllText()從PDF中提取文本
pdf.ApplyWatermark()添加浮水印
pdf.SecuritySettings密碼保護
pdf.Form表格填寫
pdf.SignWithDigitalSignature()數位簽名

程式碼遷移範例

範例 1:HTML 字串到 PDF 的轉換

之前(pdforge):

// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = converter.ConvertHtmlString(html);
        File.WriteAllBytes("output.pdf", pdf);
    }
}
// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = converter.ConvertHtmlString(html);
        File.WriteAllBytes("output.pdf", pdf);
    }
}
$vbLabelText   $csharpLabel

(IronPDF 之後):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
$vbLabelText   $csharpLabel

根本區別在於處理模型和返回類型。 pdforge 使用HtmlToPdfConverterConvertHtmlString()函數,該函數傳回一個byte[]陣列-然後您必須使用File.WriteAllBytes()函數儲存結果。

IronPDF 使用ChromePdfRendererRenderHtmlAsPdf()函數,該函數傳回一個PdfDocument物件。 可以使用SaveAs()直接儲存此對象,或者如果您需要原始字節,可以存取pdf.BinaryDataPdfDocument還允許在儲存之前進行操作(添加浮水印、與其他 PDF 合併、添加安全措施)。 請參閱HTML 轉 PDF 文件以取得完整範例。

範例 2:URL 轉 PDF

之前(pdforge):

// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var pdf = converter.ConvertUrl("https://example.com");
        File.WriteAllBytes("webpage.pdf", pdf);
    }
}
// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var pdf = converter.ConvertUrl("https://example.com");
        File.WriteAllBytes("webpage.pdf", pdf);
    }
}
$vbLabelText   $csharpLabel

(IronPDF 之後):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
$vbLabelText   $csharpLabel

pdforge 使用HtmlToPdfConverter類別的ConvertUrl() ,傳回使用File.WriteAllBytes()方法寫入的位元組。 IronPDF 在ChromePdfRenderer上使用RenderUrlAsPdf() ,傳回一個內建SaveAs()方法的PdfDocument

IronPDF 的主要優勢在於,它使用 Chromium 引擎在本地獲取和渲染 URL,而不會將任何資料發送到外部伺服器。 IronPDF 作為本機庫,由於無需像 Web 請求那樣進行往返,因此可能提供更好的效能。 了解更多關於URL轉PDF的資訊

範例 3:使用自訂設定將 HTML 檔案轉換為 PDF

之前(pdforge):

// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        converter.PageSize = PageSize.A4;
        converter.Orientation = PageOrientation.Landscape;
        var htmlContent = File.ReadAllText("input.html");
        var pdf = converter.ConvertHtmlString(htmlContent);
        File.WriteAllBytes("output.pdf", pdf);
    }
}
// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        converter.PageSize = PageSize.A4;
        converter.Orientation = PageOrientation.Landscape;
        var htmlContent = File.ReadAllText("input.html");
        var pdf = converter.ConvertHtmlString(htmlContent);
        File.WriteAllBytes("output.pdf", pdf);
    }
}
$vbLabelText   $csharpLabel

(IronPDF 之後):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        var htmlContent = System.IO.File.ReadAllText("input.html");
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        var htmlContent = System.IO.File.ReadAllText("input.html");
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
    }
}
$vbLabelText   $csharpLabel

此範例展示了配置模式的差異。 pdforge 直接在轉換器物件上設定屬性( converter.PageSize = PageSize.A4converter.Orientation = PageOrientation.Landscape )。

IronPDF 使用具有強類型枚舉的RenderingOptions屬性: renderer.RenderingOptions.PaperSize = PdfPaperSize.A4renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape 。 這提供了 IntelliSense 支援和編譯時類型安全性。 請注意,IronPDF 需要匯入IronPdf.Rendering命名空間才能取得紙張尺寸和方向枚舉。 請參閱教學課程以取得更多配置範例。


關鍵遷移說明

返回類型變更

pdforge 返回byte[] ; IronPDF 返回PdfDocument

// pdforge: Returns byte[]
byte[] pdfBytes = converter.ConvertHtmlString(html);
File.WriteAllBytes("output.pdf", pdfBytes);

// IronPDF: Returns PdfDocument
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");           // Direct save
byte[] bytes = pdf.BinaryData;      // Get bytes if needed
// pdforge: Returns byte[]
byte[] pdfBytes = converter.ConvertHtmlString(html);
File.WriteAllBytes("output.pdf", pdfBytes);

// IronPDF: Returns PdfDocument
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");           // Direct save
byte[] bytes = pdf.BinaryData;      // Get bytes if needed
$vbLabelText   $csharpLabel

轉換器類別更改

// pdforge: HtmlToPdfConverter
var converter = new HtmlToPdfConverter();

// IronPDF: ChromePdfRenderer
var renderer = new ChromePdfRenderer();
// pdforge: HtmlToPdfConverter
var converter = new HtmlToPdfConverter();

// IronPDF: ChromePdfRenderer
var renderer = new ChromePdfRenderer();
$vbLabelText   $csharpLabel

方法名稱變更

// pdforge methods
converter.ConvertHtmlString(html)
converter.ConvertUrl(url)

// IronPDF methods
renderer.RenderHtmlAsPdf(html)
renderer.RenderUrlAsPdf(url)
// pdforge methods
converter.ConvertHtmlString(html)
converter.ConvertUrl(url)

// IronPDF methods
renderer.RenderHtmlAsPdf(html)
renderer.RenderUrlAsPdf(url)
$vbLabelText   $csharpLabel

儲存方法更改

// pdforge: Manual file write
File.WriteAllBytes("output.pdf", pdfBytes);

// IronPDF: Built-in save method
pdf.SaveAs("output.pdf");
// pdforge: Manual file write
File.WriteAllBytes("output.pdf", pdfBytes);

// IronPDF: Built-in save method
pdf.SaveAs("output.pdf");
$vbLabelText   $csharpLabel

配置位置更改

pdforge 使用轉換器的屬性; IronPDF 使用 RenderingOptions:

// pdforge: Properties on converter
converter.PageSize = PageSize.A4;
converter.Orientation = PageOrientation.Landscape;

// IronPDF: Properties on RenderingOptions
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
// pdforge: Properties on converter
converter.PageSize = PageSize.A4;
converter.Orientation = PageOrientation.Landscape;

// IronPDF: Properties on RenderingOptions
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
$vbLabelText   $csharpLabel

頁首/頁尾佔位符語法

如果在頁首或頁尾中使用頁碼,佔位符語法有所不同:

// pdforge placeholders
"Page {page} of {totalPages}"

// IronPDF placeholders
"Page {page} of {total-pages}"  // Note: hyphen in total-pages
// pdforge placeholders
"Page {page} of {totalPages}"

// IronPDF placeholders
"Page {page} of {total-pages}"  // Note: hyphen in total-pages
$vbLabelText   $csharpLabel

遷移後的新功能

遷移到 IronPDF 後,您將獲得 pdforge 無法提供的功能:

PDF合併

var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
$vbLabelText   $csharpLabel

文字擷取

var pdf = PdfDocument.FromFile("document.pdf");
string allText = pdf.ExtractAllText();
var pdf = PdfDocument.FromFile("document.pdf");
string allText = pdf.ExtractAllText();
$vbLabelText   $csharpLabel

水印

pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
$vbLabelText   $csharpLabel

密碼保護

pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
$vbLabelText   $csharpLabel

功能對比總結

特徵pdforgeIronPDF
HTML 轉 PDF
PDF檔案的URL
頁面設定
可離線使用
本地處理
合併PDF
拆分PDF
提取文字
水印
表格填寫
數位簽名
密碼保護
無速率限制
一次許可證

遷移清單

遷移前

  • 清點程式碼庫中所有 pdforge API 呼叫
  • 記錄目前使用的設定選項(頁面大小、方向)
  • 確定要更新的頁首/頁尾佔位符( {totalPages}{total-pages}
  • 規劃 IronPDF 許可證密鑰儲存(建議使用環境變數)
  • 先使用 IronPDF 試用許可證進行測試

軟體包變更

  • 刪除pdforge NuGet 套件
  • 移除PdfForge NuGet 套件 安裝IronPdf NuGet 套件: dotnet add package IronPdf

程式碼更改

  • 更新所有命名空間導入( using PdfForge;using IronPdf;
  • 增加using IronPdf.Rendering;用於紙張尺寸和方向枚舉
  • HtmlToPdfConverter替換為ChromePdfRenderer
  • ConvertHtmlString()替換為RenderHtmlAsPdf()
  • ConvertUrl()替換為RenderUrlAsPdf()
  • File.WriteAllBytes()替換為pdf.SaveAs()
  • PageSize屬性移至RenderingOptions.PaperSize
  • Orientation屬性移至RenderingOptions.PaperOrientation
  • 更新枚舉名稱( PageSize.A4PdfPaperSize.A4
  • 更新枚舉名稱( PageOrientation.LandscapePdfPaperOrientation.Landscape
  • 更新頁首/頁尾中的佔位符語法

移民後

  • 測試 PDF 輸出品質符合預期
  • 驗證離線操作是否正常
  • 從設定中移除 API 憑證
  • 根據需要新增功能(合併、浮水印、安全)。

柯蒂斯·週
技術撰稿人

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

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