如何用 C# 从 pdforge 迁移到 IronPDF
从pdforge迁移到 IronPdf:完整的 C# 迁移指南。
从pdforge迁移到IronPDF将您的 PDF 生成工作流程从基于云的 API(在外部服务器上处理文档)迁移到一个综合的 .NET 库,该库可在您的应用程序中本地处理所有事务。 本指南提供了一个完整的、循序渐进的迁移路径,可消除外部依赖性、免除持续订阅成本,并让您完全控制文档处理管道。
为什么要从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 操作功能。
开始之前
前提条件
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 软件包变更
# Removepdforgepackages
dotnet remove package pdforge
dotnet remove package PdfForge
# Install IronPDF
dotnet add package IronPdf# Removepdforgepackages
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";IRON VB CONVERTER ERROR developers@ironsoftware.com确定pdforge的用法
# Findpdforgeusage
grep -r "PdForge\|PdfClient\|HtmlToPdfRequest\|HtmlToPdfConverter" --include="*.cs" .
# Find placeholder patterns to migrate
grep -r "{totalPages}" --include="*.cs" .# Findpdforgeusage
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;IRON VB CONVERTER ERROR developers@ironsoftware.com核心类映射
| pdforge | IronPDF | 备注 |
|---|---|---|
| <代码>HtmlToPdfConverter</代码 | <代码>ChromePdfRenderer</代码 | 主要 PDF 生成器 |
| <代码>PDFClient</代码 | <代码>ChromePdfRenderer</代码 | 相当于 API 客户端 |
| <代码>页面大小.A4</代码 | <代码>PdfPaperSize.A4</代码 | 纸张尺寸枚举 |
| <代码>PageOrientation.Landscape</代码 | <代码>PdfPaperOrientation.Landscape</代码 | 方向枚举 |
| 返回类型:<代码>字节[]</代码 | <代码>PDF 文档</代码 | 结果目标 |
方法映射
| pdforge | IronPDF | 备注 |
|---|---|---|
| <代码>converter.ConvertHtmlString(html)</代码 | <代码>renderer.RenderHtmlAsPdf(html)</代码 | HTML 字符串到 PDF |
| <代码>converter.ConvertUrl(url)</代码 | <代码>renderer.RenderUrlAsPdf(url)</代码 | URL 至 PDF |
| <代码>File.WriteAllBytes(path,字节)</代码 | <代码>pdf.SaveAs(路径)</代码 | 保存到磁盘 |
| 返回类型:<代码>字节[]</代码 | <代码>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}" }TextFooter = 新的 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);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com这里的根本区别在于处理模型和返回类型。pdforge使用<代码>HtmlToPdfConverter</代码和 ConvertHtmlString() 返回一个 byte[] 数组,然后您必须使用 File.WriteAllBytes() 保存结果。
IronPDF 使用<代码>ChromePdfRenderer</代码和 RenderHtmlAsPdf() 返回<代码>PDF 文档</代码对象。 该对象可以直接使用 SaveAs() 保存,如果您需要原始字节,也可以访问<代码>pdf.BinaryData</代码。<代码>PDF 文档</代码还允许在保存前进行操作(添加水印、与其他 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);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.compdforge 在<代码>HtmlToPdfConverter</代码类上使用 ConvertUrl() 返回您使用 File.WriteAllBytes() 写入的字节。IronPDF在ChromePdfRenderer上使用RenderUrlAsPdf(),通过内置的SaveAs()方法返回一个PdfDocument。
IronPdf 的主要优势在于使用 Chromium 引擎在本地获取和渲染 URL,而不会将数据发送到外部服务器。IronPDF作为一个本地库,可能会提供更好的性能,因为网络请求不涉及往返时间。 了解有关 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);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com本例显示了配置模式的差异。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 命名空间以获得纸张尺寸和方向枚举。 更多配置示例请参见 tutorials 。
关键迁移说明
返回类型更改
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 neededIRON VB CONVERTER ERROR developers@ironsoftware.com转换器类更改
// pdforge: HtmlToPdfConverter
var converter = new HtmlToPdfConverter();
// IronPDF: ChromePdfRenderer
var renderer = new ChromePdfRenderer();// pdforge: HtmlToPdfConverter
var converter = new HtmlToPdfConverter();
// IronPDF: ChromePdfRenderer
var renderer = new ChromePdfRenderer();IRON VB CONVERTER ERROR developers@ironsoftware.com方法名称更改
//pdforgemethods
converter.ConvertHtmlString(html)
converter.ConvertUrl(url)
//IronPDFmethods
renderer.RenderHtmlAsPdf(html)
renderer.RenderUrlAsPdf(url)//pdforgemethods
converter.ConvertHtmlString(html)
converter.ConvertUrl(url)
//IronPDFmethods
renderer.RenderHtmlAsPdf(html)
renderer.RenderUrlAsPdf(url)IRON VB CONVERTER ERROR developers@ironsoftware.com保存方法更改
// 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");IRON VB CONVERTER ERROR developers@ironsoftware.com配置位置更改
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;IRON VB CONVERTER ERROR developers@ironsoftware.com页眉/页脚占位符语法
如果在页眉或页脚中使用页码,占位符的语法会有所不同:
//pdforgeplaceholders
"Page {page} of {totalPages}"
//IronPDFplaceholders
"Page {page} of {total-pages}" // Note: hyphen in total-pages//pdforgeplaceholders
"Page {page} of {totalPages}"
//IronPDFplaceholders
"Page {page} of {total-pages}" // Note: hyphen in total-pagesIRON VB CONVERTER ERROR developers@ironsoftware.com迁移后的新功能
迁移到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");IRON VB CONVERTER ERROR developers@ironsoftware.com文本提取
var pdf = PdfDocument.FromFile("document.pdf");
string allText = pdf.ExtractAllText();var pdf = PdfDocument.FromFile("document.pdf");
string allText = pdf.ExtractAllText();IRON VB CONVERTER ERROR developers@ironsoftware.com水印
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");IRON VB CONVERTER ERROR developers@ironsoftware.com密码保护
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";IRON VB CONVERTER ERROR developers@ironsoftware.com功能对比摘要
| 特征 | pdforge | IronPDF |
|---|---|---|
| HTML 至 PDF | ✓ | ✓ |
| URL 至 PDF | ✓ | ✓ |
| 页面设置 | ✓ | ✓ |
| 离线能力 | ✗ | ✓ |
| 本地处理 | ✗ | ✓ |
| 合并 PDF | ✗ | ✓ |
| 拆分 PDF | ✗ | ✓ |
| 提取文本 | ✗ | ✓ |
| 水印 | ✗ | ✓ |
| 表格填写 | ✗ | ✓ |
| 数字签名 | ✗ | ✓ |
| 密码保护 | ✗ | ✓ |
| 无费率限制 | ✗ | ✓ |
| 一次性许可 | ✗ | ✓ |
迁移清单
迁移前
- [清点代码库中的所有pdforgeAPI 调用
- [ ] 记录当前使用的配置选项(页面大小、方向)
- [ ] 确定要更新的页眉/页脚占位符(
{totalPages}→{total-pages}) - [ ] 计划 IronPdf 许可证密钥存储(建议使用环境变量)
- [ ] 先使用 IronPdf 试用版许可证进行测试
软件包变更
- [ ] 删除
pdforgeNuGet 软件包 - [ ] 删除
PdfForgeNuGet 软件包 - [ ] 安装
IronPDFNuGet 软件包:<代码>dotnet 添加软件包 IronPdf
代码更改
- [ ] 更新所有命名空间导入(<代码>使用 PdfForge; → <代码>使用 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 凭据
- [ ] 根据需要添加新功能(合并、水印、安全)。
结论
从pdforge迁移到IronPDF可将您的 PDF 工作流程从依赖云的 API 服务转变为本地处理、功能齐全的 PDF 库。 这种迁移可以消除持续的订阅成本,消除对互联网的依赖,并通过在您的服务器上保留所有文档处理过程来提供完全的数据隐私。
本次迁移的主要变化有 1.主类:<代码>HtmlToPdfConverter</代码> → <代码>ChromePdfRenderer</代码 2.HTML 方法:<代码>ConvertHtmlString()</代码> → <代码>RenderHtmlAsPdf()</代码 3.URL 方法:<代码>ConvertUrl()</代码> → <代码>RenderUrlAsPdf()</代码 4.返回类型:byte[] → PdfDocument 5.保存方法:<代码>File.WriteAllBytes()</代码> → <代码>pdf.SaveAs()</代码 6.页面大小:converter.PageSize = PageSize.A4 → renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 7.方向:converter.Orientation = PageOrientation.Landscape → renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape 8.新功能:PDF 合并、文本提取、水印、数字签名等功能
在pdforge和IronPDF之间做出选择主要取决于具体的项目要求,特别是定制需求、预算和安全方面的考虑。IronPDF为能够管理本地部署的开发人员提供了一套更全面的工具,具有强大的安全优势。 通过本地处理,IronPDF 规避了与基于云的模式相关的隐私问题,并为应用程序开发人员提供了更具成本效益、可扩展的解决方案。






