跳至页脚内容
迁移指南

如何用 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对比

特征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 软件包变更

# 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
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";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

确定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" .
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;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

核心类映射

pdforgeIronPDF备注
<代码>HtmlToPdfConverter</代码<代码>ChromePdfRenderer</代码主要 PDF 生成器
<代码>PDFClient</代码<代码>ChromePdfRenderer</代码相当于 API 客户端
<代码>页面大小.A4</代码<代码>PdfPaperSize.A4</代码纸张尺寸枚举
<代码>PageOrientation.Landscape</代码<代码>PdfPaperOrientation.Landscape</代码方向枚举
返回类型:<代码>字节[]</代码<代码>PDF 文档</代码结果目标

方法映射

pdforgeIronPDF备注
<代码>converter.ConvertHtmlString(html)</代码<代码>renderer.RenderHtmlAsPdf(html)</代码HTML 字符串到 PDF
<代码>converter.ConvertUrl(url)</代码<代码>renderer.RenderUrlAsPdf(url)</代码URL 至 PDF
<代码>File.WriteAllBytes(path,字节)</代码<代码>pdf.SaveAs(路径)</代码保存到磁盘
返回类型:<代码>字节[]</代码<代码>pdf.BinaryData</代码获取原始字节

配置映射

pdforgeIronPdf (渲染选项)备注
<代码>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.com
$vbLabelText   $csharpLabel

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

这里的根本区别在于处理模型和返回类型。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.com
$vbLabelText   $csharpLabel

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

pdforge 在<代码>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.com
$vbLabelText   $csharpLabel

After (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
$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 命名空间以获得纸张尺寸和方向枚举。 更多配置示例请参见 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 needed
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

方法名称更改

//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
$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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

页眉/页脚占位符语法

如果在页眉或页脚中使用页码,占位符的语法会有所不同:

//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-pages
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

文本提取

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

水印

pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

密码保护

pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

功能对比摘要

特征pdforgeIronPDF
HTML 至 PDF
URL 至 PDF
页面设置
离线能力
本地处理
合并 PDF
拆分 PDF
提取文本
水印
表格填写
数字签名
密码保护
无费率限制
一次性许可

迁移清单

迁移前

  • [清点代码库中的所有pdforgeAPI 调用
  • [ ] 记录当前使用的配置选项(页面大小、方向)
  • [ ] 确定要更新的页眉/页脚占位符({totalPages}{total-pages})
  • [ ] 计划 IronPdf 许可证密钥存储(建议使用环境变量)
  • [ ] 先使用 IronPdf 试用版许可证进行测试

软件包变更

  • [ ] 删除 pdforge NuGet 软件包
  • [ ] 删除 PdfForge NuGet 软件包
  • [ ] 安装 IronPDF NuGet 软件包:<代码>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.LandscapePdfPaperOrientation.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.A4renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 7.方向converter.Orientation = PageOrientation.Landscaperenderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape 8.新功能:PDF 合并、文本提取、水印、数字签名等功能

在pdforge和IronPDF之间做出选择主要取决于具体的项目要求,特别是定制需求、预算和安全方面的考虑。IronPDF为能够管理本地部署的开发人员提供了一套更全面的工具,具有强大的安全优势。 通过本地处理,IronPDF 规避了与基于云的模式相关的隐私问题,并为应用程序开发人员提供了更具成本效益、可扩展的解决方案。

探索完整的IronPDF文档教程API参考,加速您的pdforge迁移。

Curtis Chau
技术作家

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

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