如何在 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 對比
| 特徵 | pdforge | IronPDF |
|---|---|---|
| 部署類型 | 基於雲端的 API | 本地圖書館 |
| 依賴關係 | 需要互聯網和 API 身份驗證 | 無外部依賴 |
| 客製化 | 對 PDF 產生的控制有限 | 完全掌控自訂功能 |
| 成本結構 | 持續訂閱 | 一次性購買選項 |
| 安全 | 透過網路傳輸的資料可能有問題 | 資料處理完全在本地環境中進行 |
| 設定複雜度 | 由於外部操作,初始設定更加簡便。 | 需要更多初始設定和配置 |
IronPDF 的獨特之處在於它提供了一個完全本地化的程式庫,使開發人員能夠完全控制 PDF 創建過程。 對於偏好內部文件處理的應用,或外部 API 呼叫會引入安全性問題的應用來說,這尤其有利。 IronPDF 在本地處理所有數據,最大限度地降低此類風險。
對於計劃在 2025 年和 2026 年採用 .NET 10 和 C# 14 的團隊,IronPDF 提供了一個本地處理基礎,消除了對雲端的依賴,同時增加了全面的 PDF 操作功能。
開始之前
先決條件
- .NET 環境: .NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet 存取權限:能夠安裝 NuGet 套件
- 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許可證配置
// 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";識別 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" .完整 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;核心類別映射
| pdforge | IronPDF | 筆記 |
|---|---|---|
HtmlToPdfConverter | ChromePdfRenderer | 主 PDF 產生器 |
PdfClient | ChromePdfRenderer | API 用戶端等效項 |
PageSize.A4 | PdfPaperSize.A4 | 紙張尺寸編號 |
PageOrientation.Landscape | PdfPaperOrientation.Landscape | 方向枚舉 |
傳回類型: byte[] | PdfDocument | 結果對象 |
方法映射
| pdforge | IronPDF | 筆記 |
|---|---|---|
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 | 取得原始位元組 |
配置映射
| pdforge | IronPDF(渲染選項) | 筆記 |
|---|---|---|
converter.PageSize = PageSize.A4 | renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 | 紙張尺寸 |
converter.Orientation = PageOrientation.Landscape | renderer.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);
}
}(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");
}
}根本區別在於處理模型和返回類型。 pdforge 使用HtmlToPdfConverter的ConvertHtmlString()函數,該函數傳回一個byte[]陣列-然後您必須使用File.WriteAllBytes()函數儲存結果。
IronPDF 使用ChromePdfRenderer的RenderHtmlAsPdf()函數,該函數傳回一個PdfDocument物件。 可以使用SaveAs()直接儲存此對象,或者如果您需要原始字節,可以存取pdf.BinaryData 。 PdfDocument還允許在儲存之前進行操作(添加浮水印、與其他 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);
}
}(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");
}
}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);
}
}(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");
}
}此範例展示了配置模式的差異。 pdforge 直接在轉換器物件上設定屬性( converter.PageSize = PageSize.A4 , converter.Orientation = PageOrientation.Landscape )。
IronPDF 使用具有強類型枚舉的RenderingOptions屬性: renderer.RenderingOptions.PaperSize = PdfPaperSize.A4和renderer.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轉換器類別更改
// pdforge: HtmlToPdfConverter
var converter = new HtmlToPdfConverter();
// IronPDF: ChromePdfRenderer
var renderer = new ChromePdfRenderer();// pdforge: HtmlToPdfConverter
var converter = new HtmlToPdfConverter();
// IronPDF: ChromePdfRenderer
var renderer = new ChromePdfRenderer();方法名稱變更
// 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)儲存方法更改
// 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");配置位置更改
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;頁首/頁尾佔位符語法
如果在頁首或頁尾中使用頁碼,佔位符語法有所不同:
// 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遷移後的新功能
遷移到 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");文字擷取
var pdf = PdfDocument.FromFile("document.pdf");
string allText = pdf.ExtractAllText();var pdf = PdfDocument.FromFile("document.pdf");
string allText = pdf.ExtractAllText();水印
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");密碼保護
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";功能對比總結
| 特徵 | pdforge | IronPDF |
|---|---|---|
| HTML 轉 PDF | ✓ | ✓ |
| PDF檔案的URL | ✓ | ✓ |
| 頁面設定 | ✓ | ✓ |
| 可離線使用 | ✗ | ✓ |
| 本地處理 | ✗ | ✓ |
| 合併PDF | ✗ | ✓ |
| 拆分PDF | ✗ | ✓ |
| 提取文字 | ✗ | ✓ |
| 水印 | ✗ | ✓ |
| 表格填寫 | ✗ | ✓ |
| 數位簽名 | ✗ | ✓ |
| 密碼保護 | ✗ | ✓ |
| 無速率限制 | ✗ | ✓ |
| 一次許可證 | ✗ | ✓ |
遷移清單
遷移前
- 清點程式碼庫中所有 pdforge API 呼叫
- 記錄目前使用的設定選項(頁面大小、方向)
- 確定要更新的頁首/頁尾佔位符(
{totalPages}→{total-pages}) - 規劃 IronPDF 許可證密鑰儲存(建議使用環境變數)
- 先使用 IronPDF 試用許可證進行測試
軟體包變更
- 刪除
pdforgeNuGet 套件 - 移除
PdfForgeNuGet 套件 安裝IronPdfNuGet 套件: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.A4→PdfPaperSize.A4) - 更新枚舉名稱(
PageOrientation.Landscape→PdfPaperOrientation.Landscape) - 更新頁首/頁尾中的佔位符語法
移民後
- 測試 PDF 輸出品質符合預期
- 驗證離線操作是否正常
- 從設定中移除 API 憑證
- 根據需要新增功能(合併、浮水印、安全)。






